{"version":3,"file":"bundle.ce4f51d5.js","sources":["../modules/ui/src/env-setup.js","../node_modules/ramda/es/F.js","../node_modules/ramda/es/T.js","../node_modules/ramda/es/__.js","../node_modules/ramda/es/internal/_isPlaceholder.js","../node_modules/ramda/es/internal/_curry1.js","../node_modules/ramda/es/internal/_curry2.js","../node_modules/ramda/es/add.js","../node_modules/ramda/es/internal/_concat.js","../node_modules/ramda/es/internal/_arity.js","../node_modules/ramda/es/internal/_curryN.js","../node_modules/ramda/es/curryN.js","../node_modules/ramda/es/addIndex.js","../node_modules/ramda/es/internal/_curry3.js","../node_modules/ramda/es/adjust.js","../node_modules/ramda/es/internal/_isArray.js","../node_modules/ramda/es/internal/_isTransformer.js","../node_modules/ramda/es/internal/_dispatchable.js","../node_modules/ramda/es/internal/_reduced.js","../node_modules/ramda/es/internal/_xfBase.js","../node_modules/ramda/es/internal/_xall.js","../node_modules/ramda/es/all.js","../node_modules/ramda/es/max.js","../node_modules/ramda/es/internal/_map.js","../node_modules/ramda/es/internal/_isString.js","../node_modules/ramda/es/internal/_isArrayLike.js","../node_modules/ramda/es/internal/_xwrap.js","../node_modules/ramda/es/bind.js","../node_modules/ramda/es/internal/_reduce.js","../node_modules/ramda/es/internal/_xmap.js","../node_modules/ramda/es/internal/_has.js","../node_modules/ramda/es/internal/_isArguments.js","../node_modules/ramda/es/keys.js","../node_modules/ramda/es/map.js","../node_modules/ramda/es/internal/_isInteger.js","../node_modules/ramda/es/nth.js","../node_modules/ramda/es/paths.js","../node_modules/ramda/es/path.js","../node_modules/ramda/es/prop.js","../node_modules/ramda/es/pluck.js","../node_modules/ramda/es/reduce.js","../node_modules/ramda/es/allPass.js","../node_modules/ramda/es/always.js","../node_modules/ramda/es/and.js","../node_modules/ramda/es/internal/_xany.js","../node_modules/ramda/es/any.js","../node_modules/ramda/es/anyPass.js","../node_modules/ramda/es/ap.js","../node_modules/ramda/es/internal/_aperture.js","../node_modules/ramda/es/internal/_xaperture.js","../node_modules/ramda/es/aperture.js","../node_modules/ramda/es/append.js","../node_modules/ramda/es/apply.js","../node_modules/ramda/es/values.js","../node_modules/ramda/es/applySpec.js","../node_modules/ramda/es/applyTo.js","../node_modules/ramda/es/ascend.js","../node_modules/ramda/es/assoc.js","../node_modules/ramda/es/isNil.js","../node_modules/ramda/es/assocPath.js","../node_modules/ramda/es/nAry.js","../node_modules/ramda/es/binary.js","../node_modules/ramda/es/internal/_isFunction.js","../node_modules/ramda/es/liftN.js","../node_modules/ramda/es/lift.js","../node_modules/ramda/es/both.js","../node_modules/ramda/es/curry.js","../node_modules/ramda/es/call.js","../node_modules/ramda/es/internal/_makeFlat.js","../node_modules/ramda/es/internal/_flatCat.js","../node_modules/ramda/es/internal/_forceReduced.js","../node_modules/ramda/es/internal/_xchain.js","../node_modules/ramda/es/chain.js","../node_modules/ramda/es/clamp.js","../node_modules/ramda/es/internal/_cloneRegExp.js","../node_modules/ramda/es/type.js","../node_modules/ramda/es/internal/_clone.js","../node_modules/ramda/es/clone.js","../node_modules/ramda/es/comparator.js","../node_modules/ramda/es/not.js","../node_modules/ramda/es/complement.js","../node_modules/ramda/es/internal/_pipe.js","../node_modules/ramda/es/internal/_checkForMethod.js","../node_modules/ramda/es/slice.js","../node_modules/ramda/es/tail.js","../node_modules/ramda/es/pipe.js","../node_modules/ramda/es/reverse.js","../node_modules/ramda/es/compose.js","../node_modules/ramda/es/composeK.js","../node_modules/ramda/es/internal/_pipeP.js","../node_modules/ramda/es/pipeP.js","../node_modules/ramda/es/head.js","../node_modules/ramda/es/internal/_identity.js","../node_modules/ramda/es/identity.js","../node_modules/ramda/es/pipeWith.js","../node_modules/ramda/es/composeWith.js","../node_modules/ramda/es/internal/_arrayFromIterator.js","../node_modules/ramda/es/internal/_includesWith.js","../node_modules/ramda/es/internal/_objectIs.js","../node_modules/ramda/es/internal/_equals.js","../node_modules/ramda/es/internal/_functionName.js","../node_modules/ramda/es/equals.js","../node_modules/ramda/es/internal/_indexOf.js","../node_modules/ramda/es/internal/_includes.js","../node_modules/ramda/es/internal/_quote.js","../node_modules/ramda/es/internal/_toISOString.js","../node_modules/ramda/es/internal/_complement.js","../node_modules/ramda/es/internal/_filter.js","../node_modules/ramda/es/internal/_isObject.js","../node_modules/ramda/es/internal/_xfilter.js","../node_modules/ramda/es/filter.js","../node_modules/ramda/es/reject.js","../node_modules/ramda/es/internal/_toString.js","../node_modules/ramda/es/toString.js","../node_modules/ramda/es/concat.js","../node_modules/ramda/es/cond.js","../node_modules/ramda/es/constructN.js","../node_modules/ramda/es/construct.js","../node_modules/ramda/es/contains.js","../node_modules/ramda/es/converge.js","../node_modules/ramda/es/internal/_xreduceBy.js","../node_modules/ramda/es/reduceBy.js","../node_modules/ramda/es/countBy.js","../node_modules/ramda/es/dec.js","../node_modules/ramda/es/defaultTo.js","../node_modules/ramda/es/descend.js","../node_modules/ramda/es/internal/_Set.js","../node_modules/ramda/es/difference.js","../node_modules/ramda/es/differenceWith.js","../node_modules/ramda/es/dissoc.js","../node_modules/ramda/es/remove.js","../node_modules/ramda/es/update.js","../node_modules/ramda/es/dissocPath.js","../node_modules/ramda/es/divide.js","../node_modules/ramda/es/internal/_xdrop.js","../node_modules/ramda/es/drop.js","../node_modules/ramda/es/internal/_xtake.js","../node_modules/ramda/es/take.js","../node_modules/ramda/es/internal/_dropLast.js","../node_modules/ramda/es/internal/_xdropLast.js","../node_modules/ramda/es/dropLast.js","../node_modules/ramda/es/internal/_dropLastWhile.js","../node_modules/ramda/es/internal/_xdropLastWhile.js","../node_modules/ramda/es/dropLastWhile.js","../node_modules/ramda/es/internal/_xdropRepeatsWith.js","../node_modules/ramda/es/last.js","../node_modules/ramda/es/dropRepeatsWith.js","../node_modules/ramda/es/dropRepeats.js","../node_modules/ramda/es/internal/_xdropWhile.js","../node_modules/ramda/es/dropWhile.js","../node_modules/ramda/es/or.js","../node_modules/ramda/es/either.js","../node_modules/ramda/es/empty.js","../node_modules/ramda/es/takeLast.js","../node_modules/ramda/es/endsWith.js","../node_modules/ramda/es/eqBy.js","../node_modules/ramda/es/eqProps.js","../node_modules/ramda/es/evolve.js","../node_modules/ramda/es/internal/_xfind.js","../node_modules/ramda/es/find.js","../node_modules/ramda/es/internal/_xfindIndex.js","../node_modules/ramda/es/findIndex.js","../node_modules/ramda/es/internal/_xfindLast.js","../node_modules/ramda/es/findLast.js","../node_modules/ramda/es/internal/_xfindLastIndex.js","../node_modules/ramda/es/findLastIndex.js","../node_modules/ramda/es/flatten.js","../node_modules/ramda/es/flip.js","../node_modules/ramda/es/forEach.js","../node_modules/ramda/es/forEachObjIndexed.js","../node_modules/ramda/es/fromPairs.js","../node_modules/ramda/es/groupBy.js","../node_modules/ramda/es/groupWith.js","../node_modules/ramda/es/gt.js","../node_modules/ramda/es/gte.js","../node_modules/ramda/es/hasPath.js","../node_modules/ramda/es/has.js","../node_modules/ramda/es/hasIn.js","../node_modules/ramda/es/identical.js","../node_modules/ramda/es/ifElse.js","../node_modules/ramda/es/inc.js","../node_modules/ramda/es/includes.js","../node_modules/ramda/es/indexBy.js","../node_modules/ramda/es/indexOf.js","../node_modules/ramda/es/init.js","../node_modules/ramda/es/innerJoin.js","../node_modules/ramda/es/insert.js","../node_modules/ramda/es/insertAll.js","../node_modules/ramda/es/uniqBy.js","../node_modules/ramda/es/uniq.js","../node_modules/ramda/es/intersection.js","../node_modules/ramda/es/intersperse.js","../node_modules/ramda/es/internal/_objectAssign.js","../node_modules/ramda/es/objOf.js","../node_modules/ramda/es/internal/_stepCat.js","../node_modules/ramda/es/into.js","../node_modules/ramda/es/invert.js","../node_modules/ramda/es/invertObj.js","../node_modules/ramda/es/invoker.js","../node_modules/ramda/es/is.js","../node_modules/ramda/es/isEmpty.js","../node_modules/ramda/es/join.js","../node_modules/ramda/es/juxt.js","../node_modules/ramda/es/keysIn.js","../node_modules/ramda/es/lastIndexOf.js","../node_modules/ramda/es/internal/_isNumber.js","../node_modules/ramda/es/length.js","../node_modules/ramda/es/lens.js","../node_modules/ramda/es/lensIndex.js","../node_modules/ramda/es/lensPath.js","../node_modules/ramda/es/lensProp.js","../node_modules/ramda/es/lt.js","../node_modules/ramda/es/lte.js","../node_modules/ramda/es/mapAccum.js","../node_modules/ramda/es/mapAccumRight.js","../node_modules/ramda/es/mapObjIndexed.js","../node_modules/ramda/es/match.js","../node_modules/ramda/es/mathMod.js","../node_modules/ramda/es/maxBy.js","../node_modules/ramda/es/sum.js","../node_modules/ramda/es/mean.js","../node_modules/ramda/es/median.js","../node_modules/ramda/es/memoizeWith.js","../node_modules/ramda/es/merge.js","../node_modules/ramda/es/mergeAll.js","../node_modules/ramda/es/mergeWithKey.js","../node_modules/ramda/es/mergeDeepWithKey.js","../node_modules/ramda/es/mergeDeepLeft.js","../node_modules/ramda/es/mergeDeepRight.js","../node_modules/ramda/es/mergeDeepWith.js","../node_modules/ramda/es/mergeLeft.js","../node_modules/ramda/es/mergeRight.js","../node_modules/ramda/es/mergeWith.js","../node_modules/ramda/es/min.js","../node_modules/ramda/es/minBy.js","../node_modules/ramda/es/modulo.js","../node_modules/ramda/es/move.js","../node_modules/ramda/es/multiply.js","../node_modules/ramda/es/negate.js","../node_modules/ramda/es/none.js","../node_modules/ramda/es/nthArg.js","../node_modules/ramda/es/o.js","../node_modules/ramda/es/internal/_of.js","../node_modules/ramda/es/of.js","../node_modules/ramda/es/omit.js","../node_modules/ramda/es/once.js","../node_modules/ramda/es/internal/_assertPromise.js","../node_modules/ramda/es/otherwise.js","../node_modules/ramda/es/over.js","../node_modules/ramda/es/pair.js","../node_modules/ramda/es/internal/_createPartialApplicator.js","../node_modules/ramda/es/partial.js","../node_modules/ramda/es/partialRight.js","../node_modules/ramda/es/partition.js","../node_modules/ramda/es/pathEq.js","../node_modules/ramda/es/pathOr.js","../node_modules/ramda/es/pathSatisfies.js","../node_modules/ramda/es/pick.js","../node_modules/ramda/es/pickAll.js","../node_modules/ramda/es/pickBy.js","../node_modules/ramda/es/prepend.js","../node_modules/ramda/es/product.js","../node_modules/ramda/es/useWith.js","../node_modules/ramda/es/project.js","../node_modules/ramda/es/propEq.js","../node_modules/ramda/es/propIs.js","../node_modules/ramda/es/propOr.js","../node_modules/ramda/es/propSatisfies.js","../node_modules/ramda/es/props.js","../node_modules/ramda/es/range.js","../node_modules/ramda/es/reduceRight.js","../node_modules/ramda/es/reduceWhile.js","../node_modules/ramda/es/reduced.js","../node_modules/ramda/es/times.js","../node_modules/ramda/es/repeat.js","../node_modules/ramda/es/replace.js","../node_modules/ramda/es/scan.js","../node_modules/ramda/es/sequence.js","../node_modules/ramda/es/set.js","../node_modules/ramda/es/sort.js","../node_modules/ramda/es/sortBy.js","../node_modules/ramda/es/sortWith.js","../node_modules/ramda/es/split.js","../node_modules/ramda/es/splitAt.js","../node_modules/ramda/es/splitEvery.js","../node_modules/ramda/es/splitWhen.js","../node_modules/ramda/es/startsWith.js","../node_modules/ramda/es/subtract.js","../node_modules/ramda/es/symmetricDifference.js","../node_modules/ramda/es/symmetricDifferenceWith.js","../node_modules/ramda/es/takeLastWhile.js","../node_modules/ramda/es/internal/_xtakeWhile.js","../node_modules/ramda/es/takeWhile.js","../node_modules/ramda/es/internal/_xtap.js","../node_modules/ramda/es/tap.js","../node_modules/ramda/es/test.js","../node_modules/ramda/es/internal/_isRegExp.js","../node_modules/ramda/es/andThen.js","../node_modules/ramda/es/toLower.js","../node_modules/ramda/es/toPairs.js","../node_modules/ramda/es/toPairsIn.js","../node_modules/ramda/es/toUpper.js","../node_modules/ramda/es/transduce.js","../node_modules/ramda/es/transpose.js","../node_modules/ramda/es/traverse.js","../node_modules/ramda/es/trim.js","../node_modules/ramda/es/tryCatch.js","../node_modules/ramda/es/unapply.js","../node_modules/ramda/es/unary.js","../node_modules/ramda/es/uncurryN.js","../node_modules/ramda/es/unfold.js","../node_modules/ramda/es/union.js","../node_modules/ramda/es/uniqWith.js","../node_modules/ramda/es/unionWith.js","../node_modules/ramda/es/unless.js","../node_modules/ramda/es/unnest.js","../node_modules/ramda/es/until.js","../node_modules/ramda/es/valuesIn.js","../node_modules/ramda/es/view.js","../node_modules/ramda/es/when.js","../node_modules/ramda/es/where.js","../node_modules/ramda/es/whereEq.js","../node_modules/ramda/es/without.js","../node_modules/ramda/es/xor.js","../node_modules/ramda/es/xprod.js","../node_modules/ramda/es/zip.js","../node_modules/ramda/es/zipObj.js","../node_modules/ramda/es/zipWith.js","../node_modules/ramda/es/thunkify.js","../node_modules/ramda/es/composeP.js","../node_modules/ramda/es/pipeK.js","../modules/ui/src/polyfills.js","../node_modules/mithril/render/vnode.js","../node_modules/mithril/render/hyperscriptVnode.js","../node_modules/mithril/util/hasOwn.js","../node_modules/mithril/render/hyperscript.js","../node_modules/mithril/render/trust.js","../node_modules/mithril/render/fragment.js","../node_modules/mithril/hyperscript.js","../node_modules/mithril/promise/polyfill.js","../node_modules/mithril/promise/promise.js","../node_modules/mithril/render/render.js","../node_modules/mithril/render.js","../node_modules/mithril/api/mount-redraw.js","../node_modules/mithril/mount-redraw.js","../node_modules/mithril/querystring/build.js","../node_modules/mithril/util/assign.js","../node_modules/mithril/pathname/build.js","../node_modules/mithril/request/request.js","../node_modules/mithril/request.js","../node_modules/mithril/querystring/parse.js","../node_modules/mithril/pathname/parse.js","../node_modules/mithril/pathname/compileTemplate.js","../node_modules/mithril/util/censor.js","../node_modules/mithril/index.js","../node_modules/mithril/route.js","../node_modules/mithril/api/router.js","../node_modules/bacta/dist/bacta.esm.js","../modules/stream/index.js","../modules/ui/src/mithril-compat.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v35.js","../node_modules/uuid/dist/esm-browser/parse.js","../node_modules/uuid/dist/esm-browser/md5.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/uuid/dist/esm-browser/sha1.js","../node_modules/uuid/dist/esm-browser/v3.js","../node_modules/uuid/dist/esm-browser/v5.js","../modules/how/css/index.js","../modules/how/localStorage.js","../modules/how/hyperscript.js","../modules/how/z/index.js","../node_modules/sum-type/lib/core.js","../node_modules/sum-type/lib/bifunctor.js","../node_modules/sum-type/lib/decorate.js","../node_modules/sum-type/lib/index.js","../node_modules/sum-type/lib/functor.js","../node_modules/sum-type/lib/monad.js","../modules/how/superouter.js","../modules/how/router.js","../modules/how/start.js","../modules/how/index.js","../modules/how/sql.js","../node_modules/bss/bss.esm.js","../node_modules/moment/moment.js","../node_modules/traverse/index.js","../modules/ui/src/request.js","../modules/ui/src/modules/api.js","../node_modules/sanctuary-def/node_modules/sanctuary-type-identifiers/index.js","../node_modules/sanctuary-def/node_modules/sanctuary-type-classes/index.js","../node_modules/sanctuary-def/index.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isPlaceholder.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_curry1.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_curry2.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_has.js","../node_modules/sum-type-legacy/node_modules/ramda/src/identical.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isArguments.js","../node_modules/sum-type-legacy/node_modules/ramda/src/keys.js","../node_modules/sum-type-legacy/node_modules/ramda/src/type.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_equals.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_arrayFromIterator.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_functionName.js","../node_modules/sum-type-legacy/node_modules/ramda/src/equals.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_indexOf.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_contains.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_map.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_toISOString.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isArray.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_dispatchable.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isTransformer.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_slice.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_xwrap.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_arity.js","../node_modules/sum-type-legacy/node_modules/ramda/src/bind.js","../node_modules/sum-type-legacy/node_modules/ramda/src/isArrayLike.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isString.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_reduce.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_xfBase.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_xfilter.js","../node_modules/sum-type-legacy/node_modules/ramda/src/filter.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_filter.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_isObject.js","../node_modules/sum-type-legacy/node_modules/ramda/src/reject.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_complement.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_toString.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_quote.js","../node_modules/sum-type-legacy/node_modules/ramda/src/toString.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_xmap.js","../node_modules/sum-type-legacy/node_modules/ramda/src/internal/_curryN.js","../node_modules/sum-type-legacy/node_modules/ramda/src/curryN.js","../node_modules/sum-type-legacy/node_modules/ramda/src/map.js","../node_modules/sum-type-legacy/lib/index.js","../modules/types/uuid.js","../modules/types/auth_permissions.js","../modules/ui/src/modules/auth.js","../node_modules/never-never/index.js","../modules/ui/src/utils/state-router.js","../modules/safe/index.js","../modules/types/loadable.js","../modules/ui/src/modules/tasks/types.js","../modules/ui/src/modules/tasks/index.js","../modules/ui/src/modules/tasks/progress.js","../node_modules/bluebird/js/browser/bluebird.js","../modules/ui/src/components/notification.js","../modules/ui/src/modules/tasks/ui.js","../node_modules/flagon/index.js","../modules/ui/src/models/permissions.js","../modules/ui/src/models/schedules/update.js","../modules/ui/src/models/schedules/index.js","../modules/ui/src/utils/byProp.js","../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.DUT32TWM.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.HP6S5QOV.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.572XDSW6.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.BCEYT3RT.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.UP75L23G.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.OXFFPZHD.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.LKA3TPUC.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.M265FVHA.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.3IYPB6RR.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.V47DPYLL.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.ORW72H2K.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.VQ3XOPCT.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.Z5VD5WTS.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.MBACOZNR.js","../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.ZNRFAEMI.js","../modules/ui/src/utils/render-stream.js","../modules/ui/src/utils/modal-stream.js","../modules/ui/src/components/context-bar.js","../modules/ui/src/components/responsive.js","../modules/ui/src/components/elements.js","../modules/ui/src/utils/regExes.js","../modules/ui/src/utils/financialsUtils.js","../modules/ui/src/models/contracts.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/eq.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/identity.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/constant.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/keys.js","../node_modules/lodash/assign.js","../modules/ui/src/models/features.js","../modules/ui/src/components/detailspane2.js","../modules/ui/src/components/topnav.js","../modules/ui/src/components/modal.js","../node_modules/@motionone/utils/dist/clamp.es.js","../node_modules/@motionone/utils/dist/defaults.es.js","../node_modules/@motionone/utils/dist/is-number.es.js","../node_modules/@motionone/utils/dist/is-easing-list.es.js","../node_modules/@motionone/utils/dist/mix.es.js","../node_modules/@motionone/utils/dist/noop.es.js","../node_modules/@motionone/utils/dist/progress.es.js","../node_modules/@motionone/utils/dist/offset.es.js","../node_modules/@motionone/utils/dist/interpolate.es.js","../node_modules/@motionone/utils/dist/easing.es.js","../node_modules/@motionone/utils/dist/wrap.es.js","../node_modules/@motionone/utils/dist/is-cubic-bezier.es.js","../node_modules/@motionone/utils/dist/is-easing-generator.es.js","../node_modules/@motionone/utils/dist/is-function.es.js","../node_modules/@motionone/utils/dist/time.es.js","../node_modules/@motionone/easing/dist/cubic-bezier.es.js","../node_modules/@motionone/easing/dist/steps.es.js","../node_modules/@motionone/animation/dist/utils/easing.es.js","../node_modules/@motionone/animation/dist/Animation.es.js","../node_modules/@motionone/types/dist/MotionValue.es.js","../node_modules/@motionone/dom/dist/animate/data.es.js","../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js","../node_modules/@motionone/dom/dist/animate/utils/css-var.es.js","../node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js","../node_modules/@motionone/dom/dist/animate/utils/easing.es.js","../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js","../node_modules/@motionone/dom/dist/animate/style.es.js","../node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js","../node_modules/@motionone/dom/dist/animate/animate-style.es.js","../node_modules/@motionone/utils/dist/array.es.js","../node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js","../node_modules/@motionone/dom/dist/animate/utils/get-unit.es.js","../node_modules/@motionone/utils/dist/is-string.es.js","../node_modules/@motionone/dom/dist/animate/utils/options.es.js","../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js","../node_modules/@motionone/dom/dist/animate/utils/controls.es.js","../node_modules/@motionone/dom/dist/utils/stagger.es.js","../node_modules/@motionone/dom/dist/animate/index.es.js","../node_modules/@motionone/dom/dist/animate/create-animate.es.js","../node_modules/hey-listen/dist/hey-listen.es.js","../node_modules/@motionone/dom/dist/gestures/in-view.es.js","../node_modules/@motionone/dom/dist/state/utils/events.es.js","../node_modules/@motionone/dom/dist/state/gestures/in-view.es.js","../node_modules/tslib/tslib.es6.js","../node_modules/@motionone/dom/dist/state/gestures/hover.es.js","../node_modules/@motionone/dom/dist/state/index.es.js","../node_modules/@motionone/dom/dist/state/gestures/press.es.js","../node_modules/motion/dist/animate.es.js","../modules/ui/src/components/modal-stack.js","../modules/ui/src/services/consents.js","../modules/ui/src/services/on-first-auth-success.js","../modules/ui/src/components/number.js","../modules/ui/src/utils/human_list.js","../modules/ui/src/utils/prettyKey.js","../modules/ui/src/components/filter.js","../modules/ui/src/components/uppy.js","../modules/ui/src/components/harth-uppy.js","../modules/ui/src/components/pencil.js","../modules/ui/src/utils/harth-identical.js","../modules/ui/src/components/scrollableTable.js","../modules/manuel/index.js","../modules/ui/src/modules/autocomplete.js","../modules/ui/src/modules/contractors.js","../modules/ui/src/components/buttonDropdown.js","../modules/ui/src/components/number2.js","../modules/ui/src/utils/traverse2.js","../modules/ui/src/components/form.js","../modules/ui/src/modules/projects-initial.js","../modules/ui/src/models/project_documents.js","../node_modules/chartist/dist/chartist.js","../modules/ui/src/components/harth-chartist.js","../modules/ui/src/components/oauthConnector.js","../modules/ui/src/modules/projects.js","../modules/ui/src/modules/flows.js","../modules/ui/src/modules/interruptions.js","../modules/ui/src/modules/warehouses.js","../modules/ui/src/modules/tools.js","../modules/ui/src/modules/updates.js","../modules/ui/src/modules/exports.js","../modules/ui/src/modules/payments.js","../modules/ui/src/modules/organizations2.js","../modules/ui/src/modules/files.js","../modules/ui/src/utils/css.js","../node_modules/flyd/node_modules/ramda/src/internal/_arity.js","../node_modules/flyd/node_modules/ramda/src/internal/_isPlaceholder.js","../node_modules/flyd/node_modules/ramda/src/internal/_curry1.js","../node_modules/flyd/node_modules/ramda/src/internal/_curry2.js","../node_modules/flyd/node_modules/ramda/src/internal/_curryN.js","../node_modules/flyd/node_modules/ramda/src/curryN.js","../node_modules/flyd/lib/index.js","../node_modules/pointer-stream/lib/index.js","../node_modules/pointer-stream/index.js","../modules/ui/src/utils/disable_event.js","../modules/ui/src/utils/colors.js","../modules/ui/src/modules/gantt/dates.js","../modules/ui/src/modules/gantt/aabb.js","../modules/ui/src/modules/gantt/detailspane.js","../modules/ui/src/utils/svg.js","../node_modules/chroma-js/chroma.js","../modules/ui/src/modules/gantt/gantt.js","../modules/ui/src/modules/gantt/index.js","../modules/ui/src/modules/dashboard.js","../modules/ui/src/modules/schedule.js","../modules/ui/src/modules/contracts.js","../modules/ui/src/modules/access2.js","../modules/ui/src/index.js","../modules/ui/src/models/organizations.js","../modules/ui/src/modules/auth_permissions.js","../modules/ui/src/modules/sql.js","../modules/ui/src/services/auth-expiry.js"],"sourcesContent":["/* globals window */\nimport * as ENV from '/env.js'\n\nwindow.process = { env: { ...ENV }}","/**\n * A function that always returns `false`. Any passed in parameters are ignored.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig * -> Boolean\n * @param {*}\n * @return {Boolean}\n * @see R.T\n * @example\n *\n * R.F(); //=> false\n */\nvar F = function () {\n return false;\n};\n\nexport default F;","/**\n * A function that always returns `true`. Any passed in parameters are ignored.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig * -> Boolean\n * @param {*}\n * @return {Boolean}\n * @see R.F\n * @example\n *\n * R.T(); //=> true\n */\nvar T = function () {\n return true;\n};\n\nexport default T;","/**\n * A special placeholder value used to specify \"gaps\" within curried functions,\n * allowing partial application of any combination of arguments, regardless of\n * their positions.\n *\n * If `g` is a curried ternary function and `_` is `R.__`, the following are\n * equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2, _)(1, 3)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @name __\n * @constant\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @example\n *\n * const greet = R.replace('{name}', R.__, 'Hello, {name}!');\n * greet('Alice'); //=> 'Hello, Alice!'\n */\nexport default {\n '@@functional/placeholder': true\n};","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Adds two values.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a\n * @param {Number} b\n * @return {Number}\n * @see R.subtract\n * @example\n *\n * R.add(2, 3); //=> 5\n * R.add(7)(10); //=> 17\n */\n\nvar add =\n/*#__PURE__*/\n_curry2(function add(a, b) {\n return Number(a) + Number(b);\n});\n\nexport default add;","/**\n * Private `concat` function to merge two array-like objects.\n *\n * @private\n * @param {Array|Arguments} [set1=[]] An array-like object.\n * @param {Array|Arguments} [set2=[]] An array-like object.\n * @return {Array} A new, merged array.\n * @example\n *\n * _concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]\n */\nexport default function _concat(set1, set2) {\n set1 = set1 || [];\n set2 = set2 || [];\n var idx;\n var len1 = set1.length;\n var len2 = set2.length;\n var result = [];\n idx = 0;\n\n while (idx < len1) {\n result[result.length] = set1[idx];\n idx += 1;\n }\n\n idx = 0;\n\n while (idx < len2) {\n result[result.length] = set2[idx];\n idx += 1;\n }\n\n return result;\n}","export default function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0:\n return function () {\n return fn.apply(this, arguments);\n };\n\n case 1:\n return function (a0) {\n return fn.apply(this, arguments);\n };\n\n case 2:\n return function (a0, a1) {\n return fn.apply(this, arguments);\n };\n\n case 3:\n return function (a0, a1, a2) {\n return fn.apply(this, arguments);\n };\n\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.apply(this, arguments);\n };\n\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.apply(this, arguments);\n };\n\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.apply(this, arguments);\n };\n\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.apply(this, arguments);\n };\n\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.apply(this, arguments);\n };\n\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.apply(this, arguments);\n };\n\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.apply(this, arguments);\n };\n\n default:\n throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n}","import _arity from \"./_arity.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curryN(length, received, fn) {\n return function () {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n\n if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n\n combined[combinedIdx] = result;\n\n if (!_isPlaceholder(result)) {\n left -= 1;\n }\n\n combinedIdx += 1;\n }\n\n return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn));\n };\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _curryN from \"./internal/_curryN.js\";\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * const sumArgs = (...args) => R.sum(args);\n *\n * const curriedAddFourNumbers = R.curryN(4, sumArgs);\n * const f = curriedAddFourNumbers(1, 2);\n * const g = f(3);\n * g(4); //=> 10\n */\n\nvar curryN =\n/*#__PURE__*/\n_curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n\n return _arity(length, _curryN(length, [], fn));\n});\n\nexport default curryN;","import _concat from \"./internal/_concat.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Creates a new list iteration function from an existing one by adding two new\n * parameters to its callback function: the current index, and the entire list.\n *\n * This would turn, for instance, [`R.map`](#map) function into one that\n * more closely resembles `Array.prototype.map`. Note that this will only work\n * for functions in which the iteration callback function is the first\n * parameter, and where the list is the last parameter. (This latter might be\n * unimportant if the list parameter is not used.)\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Function\n * @category List\n * @sig ((a ... -> b) ... -> [a] -> *) -> ((a ..., Int, [a] -> b) ... -> [a] -> *)\n * @param {Function} fn A list iteration function that does not pass index or list to its callback\n * @return {Function} An altered list iteration function that passes (item, index, list) to its callback\n * @example\n *\n * const mapIndexed = R.addIndex(R.map);\n * mapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']);\n * //=> ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r']\n */\n\nvar addIndex =\n/*#__PURE__*/\n_curry1(function addIndex(fn) {\n return curryN(fn.length, function () {\n var idx = 0;\n var origFn = arguments[0];\n var list = arguments[arguments.length - 1];\n var args = Array.prototype.slice.call(arguments, 0);\n\n args[0] = function () {\n var result = origFn.apply(this, _concat(arguments, [idx, list]));\n idx += 1;\n return result;\n };\n\n return fn.apply(this, args);\n });\n});\n\nexport default addIndex;","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","import _concat from \"./internal/_concat.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n/**\n * Applies a function to the value at the given index of an array, returning a\n * new copy of the array with the element at the given index replaced with the\n * result of the function application.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category List\n * @sig Number -> (a -> a) -> [a] -> [a]\n * @param {Number} idx The index.\n * @param {Function} fn The function to apply.\n * @param {Array|Arguments} list An array-like object whose value\n * at the supplied index will be replaced.\n * @return {Array} A copy of the supplied array-like object with\n * the element at index `idx` replaced with the value\n * returned by applying `fn` to the existing element.\n * @see R.update\n * @example\n *\n * R.adjust(1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'B', 'c', 'd']\n * R.adjust(-1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'D']\n * @symb R.adjust(-1, f, [a, b]) = [a, f(b)]\n * @symb R.adjust(0, f, [a, b]) = [f(a), b]\n */\n\nvar adjust =\n/*#__PURE__*/\n_curry3(function adjust(idx, fn, list) {\n if (idx >= list.length || idx < -list.length) {\n return list;\n }\n\n var start = idx < 0 ? list.length : 0;\n\n var _idx = start + idx;\n\n var _list = _concat(list);\n\n _list[_idx] = fn(list[_idx]);\n return _list;\n});\n\nexport default adjust;","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from \"./_isArray.js\";\nimport _isTransformer from \"./_isTransformer.js\";\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\n\nexport default function _dispatchable(methodNames, xf, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n\n var args = Array.prototype.slice.call(arguments, 0);\n var obj = args.pop();\n\n if (!_isArray(obj)) {\n var idx = 0;\n\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, args);\n }\n\n idx += 1;\n }\n\n if (_isTransformer(obj)) {\n var transducer = xf.apply(null, args);\n return transducer(obj);\n }\n }\n\n return fn.apply(this, arguments);\n };\n}","export default function _reduced(x) {\n return x && x['@@transducer/reduced'] ? x : {\n '@@transducer/value': x,\n '@@transducer/reduced': true\n };\n}","export default {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XAll =\n/*#__PURE__*/\nfunction () {\n function XAll(f, xf) {\n this.xf = xf;\n this.f = f;\n this.all = true;\n }\n\n XAll.prototype['@@transducer/init'] = _xfBase.init;\n\n XAll.prototype['@@transducer/result'] = function (result) {\n if (this.all) {\n result = this.xf['@@transducer/step'](result, true);\n }\n\n return this.xf['@@transducer/result'](result);\n };\n\n XAll.prototype['@@transducer/step'] = function (result, input) {\n if (!this.f(input)) {\n this.all = false;\n result = _reduced(this.xf['@@transducer/step'](result, false));\n }\n\n return result;\n };\n\n return XAll;\n}();\n\nvar _xall =\n/*#__PURE__*/\n_curry2(function _xall(f, xf) {\n return new XAll(f, xf);\n});\n\nexport default _xall;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xall from \"./internal/_xall.js\";\n/**\n * Returns `true` if all elements of the list match the predicate, `false` if\n * there are any that don't.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by every element, `false`\n * otherwise.\n * @see R.any, R.none, R.transduce\n * @example\n *\n * const equals3 = R.equals(3);\n * R.all(equals3)([3, 3, 3, 3]); //=> true\n * R.all(equals3)([3, 3, 1, 3]); //=> false\n */\n\nvar all =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['all'], _xall, function all(fn, list) {\n var idx = 0;\n\n while (idx < list.length) {\n if (!fn(list[idx])) {\n return false;\n }\n\n idx += 1;\n }\n\n return true;\n}));\n\nexport default all;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns the larger of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.maxBy, R.min\n * @example\n *\n * R.max(789, 123); //=> 789\n * R.max('a', 'b'); //=> 'b'\n */\n\nvar max =\n/*#__PURE__*/\n_curry2(function max(a, b) {\n return b > a ? b : a;\n});\n\nexport default max;","export default function _map(fn, functor) {\n var idx = 0;\n var len = functor.length;\n var result = Array(len);\n\n while (idx < len) {\n result[idx] = fn(functor[idx]);\n idx += 1;\n }\n\n return result;\n}","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","import _curry1 from \"./_curry1.js\";\nimport _isArray from \"./_isArray.js\";\nimport _isString from \"./_isString.js\";\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n * _isArrayLike([]); //=> true\n * _isArrayLike(true); //=> false\n * _isArrayLike({}); //=> false\n * _isArrayLike({length: 10}); //=> false\n * _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n */\n\nvar _isArrayLike =\n/*#__PURE__*/\n_curry1(function isArrayLike(x) {\n if (_isArray(x)) {\n return true;\n }\n\n if (!x) {\n return false;\n }\n\n if (typeof x !== 'object') {\n return false;\n }\n\n if (_isString(x)) {\n return false;\n }\n\n if (x.nodeType === 1) {\n return !!x.length;\n }\n\n if (x.length === 0) {\n return true;\n }\n\n if (x.length > 0) {\n return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n }\n\n return false;\n});\n\nexport default _isArrayLike;","var XWrap =\n/*#__PURE__*/\nfunction () {\n function XWrap(fn) {\n this.f = fn;\n }\n\n XWrap.prototype['@@transducer/init'] = function () {\n throw new Error('init not implemented on XWrap');\n };\n\n XWrap.prototype['@@transducer/result'] = function (acc) {\n return acc;\n };\n\n XWrap.prototype['@@transducer/step'] = function (acc, x) {\n return this.f(acc, x);\n };\n\n return XWrap;\n}();\n\nexport default function _xwrap(fn) {\n return new XWrap(fn);\n}","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n * const log = R.bind(console.log, console);\n * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n * // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\n\nvar bind =\n/*#__PURE__*/\n_curry2(function bind(fn, thisObj) {\n return _arity(fn.length, function () {\n return fn.apply(thisObj, arguments);\n });\n});\n\nexport default bind;","import _isArrayLike from \"./_isArrayLike.js\";\nimport _xwrap from \"./_xwrap.js\";\nimport bind from \"../bind.js\";\n\nfunction _arrayReduce(xf, acc, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n acc = xf['@@transducer/step'](acc, list[idx]);\n\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n\n idx += 1;\n }\n\n return xf['@@transducer/result'](acc);\n}\n\nfunction _iterableReduce(xf, acc, iter) {\n var step = iter.next();\n\n while (!step.done) {\n acc = xf['@@transducer/step'](acc, step.value);\n\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n\n step = iter.next();\n }\n\n return xf['@@transducer/result'](acc);\n}\n\nfunction _methodReduce(xf, acc, obj, methodName) {\n return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n}\n\nvar symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';\nexport default function _reduce(fn, acc, list) {\n if (typeof fn === 'function') {\n fn = _xwrap(fn);\n }\n\n if (_isArrayLike(list)) {\n return _arrayReduce(fn, acc, list);\n }\n\n if (typeof list['fantasy-land/reduce'] === 'function') {\n return _methodReduce(fn, acc, list, 'fantasy-land/reduce');\n }\n\n if (list[symIterator] != null) {\n return _iterableReduce(fn, acc, list[symIterator]());\n }\n\n if (typeof list.next === 'function') {\n return _iterableReduce(fn, acc, list);\n }\n\n if (typeof list.reduce === 'function') {\n return _methodReduce(fn, acc, list, 'reduce');\n }\n\n throw new TypeError('reduce: list must be array or iterable');\n}","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XMap =\n/*#__PURE__*/\nfunction () {\n function XMap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XMap.prototype['@@transducer/init'] = _xfBase.init;\n XMap.prototype['@@transducer/result'] = _xfBase.result;\n\n XMap.prototype['@@transducer/step'] = function (result, input) {\n return this.xf['@@transducer/step'](result, this.f(input));\n };\n\n return XMap;\n}();\n\nvar _xmap =\n/*#__PURE__*/\n_curry2(function _xmap(f, xf) {\n return new XMap(f, xf);\n});\n\nexport default _xmap;","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _has from \"./_has.js\";\nvar toString = Object.prototype.toString;\n\nvar _isArguments =\n/*#__PURE__*/\nfunction () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\n\nexport default _isArguments;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\nimport _isArguments from \"./internal/_isArguments.js\"; // cover IE < 9 keys issues\n\nvar hasEnumBug = !\n/*#__PURE__*/\n{\n toString: null\n}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; // Safari bug\n\nvar hasArgsEnumBug =\n/*#__PURE__*/\nfunction () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\n\nvar contains = function contains(list, item) {\n var idx = 0;\n\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n};\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\n\n\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ?\n/*#__PURE__*/\n_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) :\n/*#__PURE__*/\n_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n\n var prop, nIdx;\n var ks = [];\n\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n\n nIdx -= 1;\n }\n }\n\n return ks;\n});\nexport default keys;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _map from \"./internal/_map.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport _xmap from \"./internal/_xmap.js\";\nimport curryN from \"./curryN.js\";\nimport keys from \"./keys.js\";\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex\n * @example\n *\n * const double = x => x * 2;\n *\n * R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\n\nvar map =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n switch (Object.prototype.toString.call(functor)) {\n case '[object Function]':\n return curryN(functor.length, function () {\n return fn.call(this, functor.apply(this, arguments));\n });\n\n case '[object Object]':\n return _reduce(function (acc, key) {\n acc[key] = fn(functor[key]);\n return acc;\n }, {}, keys(functor));\n\n default:\n return _map(fn, functor);\n }\n}));\n\nexport default map;","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _curry2 from \"./internal/_curry2.js\";\nimport _isString from \"./internal/_isString.js\";\n/**\n * Returns the nth element of the given list or string. If n is negative the\n * element at index length + n is returned.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> [a] -> a | Undefined\n * @sig Number -> String -> String\n * @param {Number} offset\n * @param {*} list\n * @return {*}\n * @example\n *\n * const list = ['foo', 'bar', 'baz', 'quux'];\n * R.nth(1, list); //=> 'bar'\n * R.nth(-1, list); //=> 'quux'\n * R.nth(-99, list); //=> undefined\n *\n * R.nth(2, 'abc'); //=> 'c'\n * R.nth(3, 'abc'); //=> ''\n * @symb R.nth(-1, [a, b, c]) = c\n * @symb R.nth(0, [a, b, c]) = a\n * @symb R.nth(1, [a, b, c]) = b\n */\n\nvar nth =\n/*#__PURE__*/\n_curry2(function nth(offset, list) {\n var idx = offset < 0 ? list.length + offset : offset;\n return _isString(list) ? list.charAt(idx) : list[idx];\n});\n\nexport default nth;","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport nth from \"./nth.js\";\n/**\n * Retrieves the values at given paths of an object.\n *\n * @func\n * @memberOf R\n * @since v0.27.1\n * @category Object\n * @typedefn Idx = [String | Int]\n * @sig [Idx] -> {a} -> [a | Undefined]\n * @param {Array} pathsArray The array of paths to be fetched.\n * @param {Object} obj The object to retrieve the nested properties from.\n * @return {Array} A list consisting of values at paths specified by \"pathsArray\".\n * @see R.path\n * @example\n *\n * R.paths([['a', 'b'], ['p', 0, 'q']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, 3]\n * R.paths([['a', 'b'], ['p', 'r']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, undefined]\n */\n\nvar paths =\n/*#__PURE__*/\n_curry2(function paths(pathsArray, obj) {\n return pathsArray.map(function (paths) {\n var val = obj;\n var idx = 0;\n var p;\n\n while (idx < paths.length) {\n if (val == null) {\n return;\n }\n\n p = paths[idx];\n val = _isInteger(p) ? nth(p, val) : val[p];\n idx += 1;\n }\n\n return val;\n });\n});\n\nexport default paths;","import _curry2 from \"./internal/_curry2.js\";\nimport paths from \"./paths.js\";\n/**\n * Retrieve the value at a given path.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> {a} -> a | Undefined\n * @param {Array} path The path to use.\n * @param {Object} obj The object to retrieve the nested property from.\n * @return {*} The data at `path`.\n * @see R.prop, R.nth\n * @example\n *\n * R.path(['a', 'b'], {a: {b: 2}}); //=> 2\n * R.path(['a', 'b'], {c: {b: 2}}); //=> undefined\n * R.path(['a', 'b', 0], {a: {b: [1, 2, 3]}}); //=> 1\n * R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2\n */\n\nvar path =\n/*#__PURE__*/\n_curry2(function path(pathAr, obj) {\n return paths([pathAr], obj)[0];\n});\n\nexport default path;","import _curry2 from \"./internal/_curry2.js\";\nimport path from \"./path.js\";\n/**\n * Returns a function that when supplied an object returns the indicated\n * property of that object, if it exists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig Idx -> {s: a} -> a | Undefined\n * @param {String|Number} p The property name or array index\n * @param {Object} obj The object to query\n * @return {*} The value at `obj.p`.\n * @see R.path, R.nth\n * @example\n *\n * R.prop('x', {x: 100}); //=> 100\n * R.prop('x', {}); //=> undefined\n * R.prop(0, [100]); //=> 100\n * R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4\n */\n\nvar prop =\n/*#__PURE__*/\n_curry2(function prop(p, obj) {\n return path([p], obj);\n});\n\nexport default prop;","import _curry2 from \"./internal/_curry2.js\";\nimport map from \"./map.js\";\nimport prop from \"./prop.js\";\n/**\n * Returns a new list by plucking the same named property off all objects in\n * the list supplied.\n *\n * `pluck` will work on\n * any [functor](https://github.com/fantasyland/fantasy-land#functor) in\n * addition to arrays, as it is equivalent to `R.map(R.prop(k), f)`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => k -> f {k: v} -> f v\n * @param {Number|String} key The key name to pluck off of each object.\n * @param {Array} f The array or functor to consider.\n * @return {Array} The list of values for the given key.\n * @see R.props\n * @example\n *\n * var getAges = R.pluck('age');\n * getAges([{name: 'fred', age: 29}, {name: 'wilma', age: 27}]); //=> [29, 27]\n *\n * R.pluck(0, [[1, 2], [3, 4]]); //=> [1, 3]\n * R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5}\n * @symb R.pluck('x', [{x: 1, y: 2}, {x: 3, y: 4}, {x: 5, y: 6}]) = [1, 3, 5]\n * @symb R.pluck(0, [[1, 2], [3, 4], [5, 6]]) = [1, 3, 5]\n */\n\nvar pluck =\n/*#__PURE__*/\n_curry2(function pluck(p, list) {\n return map(prop(p), list);\n});\n\nexport default pluck;","import _curry3 from \"./internal/_curry3.js\";\nimport _reduce from \"./internal/_reduce.js\";\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n * current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n * R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n * // - -10\n * // / \\ / \\\n * // - 4 -6 4\n * // / \\ / \\\n * // - 3 ==> -3 3\n * // / \\ / \\\n * // - 2 -1 2\n * // / \\ / \\\n * // 0 1 0 1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\n\nvar reduce =\n/*#__PURE__*/\n_curry3(_reduce);\n\nexport default reduce;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if every one of the provided predicates is satisfied\n * by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.anyPass\n * @example\n *\n * const isQueen = R.propEq('rank', 'Q');\n * const isSpade = R.propEq('suit', '♠︎');\n * const isQueenOfSpades = R.allPass([isQueen, isSpade]);\n *\n * isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false\n * isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true\n */\n\nvar allPass =\n/*#__PURE__*/\n_curry1(function allPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n\n while (idx < len) {\n if (!preds[idx].apply(this, arguments)) {\n return false;\n }\n\n idx += 1;\n }\n\n return true;\n });\n});\n\nexport default allPass;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Returns a function that always returns the given value. Note that for\n * non-primitives the value returned is a reference to the original value.\n *\n * This function is known as `const`, `constant`, or `K` (for K combinator) in\n * other languages and libraries.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> (* -> a)\n * @param {*} val The value to wrap in a function\n * @return {Function} A Function :: * -> val.\n * @example\n *\n * const t = R.always('Tee');\n * t(); //=> 'Tee'\n */\n\nvar always =\n/*#__PURE__*/\n_curry1(function always(val) {\n return function () {\n return val;\n };\n});\n\nexport default always;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if both arguments are `true`; `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig a -> b -> a | b\n * @param {Any} a\n * @param {Any} b\n * @return {Any} the first argument if it is falsy, otherwise the second argument.\n * @see R.both, R.xor\n * @example\n *\n * R.and(true, true); //=> true\n * R.and(true, false); //=> false\n * R.and(false, true); //=> false\n * R.and(false, false); //=> false\n */\n\nvar and =\n/*#__PURE__*/\n_curry2(function and(a, b) {\n return a && b;\n});\n\nexport default and;","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XAny =\n/*#__PURE__*/\nfunction () {\n function XAny(f, xf) {\n this.xf = xf;\n this.f = f;\n this.any = false;\n }\n\n XAny.prototype['@@transducer/init'] = _xfBase.init;\n\n XAny.prototype['@@transducer/result'] = function (result) {\n if (!this.any) {\n result = this.xf['@@transducer/step'](result, false);\n }\n\n return this.xf['@@transducer/result'](result);\n };\n\n XAny.prototype['@@transducer/step'] = function (result, input) {\n if (this.f(input)) {\n this.any = true;\n result = _reduced(this.xf['@@transducer/step'](result, true));\n }\n\n return result;\n };\n\n return XAny;\n}();\n\nvar _xany =\n/*#__PURE__*/\n_curry2(function _xany(f, xf) {\n return new XAny(f, xf);\n});\n\nexport default _xany;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xany from \"./internal/_xany.js\";\n/**\n * Returns `true` if at least one of the elements of the list match the predicate,\n * `false` otherwise.\n *\n * Dispatches to the `any` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by at least one element, `false`\n * otherwise.\n * @see R.all, R.none, R.transduce\n * @example\n *\n * const lessThan0 = R.flip(R.lt)(0);\n * const lessThan2 = R.flip(R.lt)(2);\n * R.any(lessThan0)([1, 2]); //=> false\n * R.any(lessThan2)([1, 2]); //=> true\n */\n\nvar any =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['any'], _xany, function any(fn, list) {\n var idx = 0;\n\n while (idx < list.length) {\n if (fn(list[idx])) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n}));\n\nexport default any;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if at least one of the provided predicates is\n * satisfied by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.allPass\n * @example\n *\n * const isClub = R.propEq('suit', '♣');\n * const isSpade = R.propEq('suit', '♠');\n * const isBlackCard = R.anyPass([isClub, isSpade]);\n *\n * isBlackCard({rank: '10', suit: '♣'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♠'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♦'}); //=> false\n */\n\nvar anyPass =\n/*#__PURE__*/\n_curry1(function anyPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n\n while (idx < len) {\n if (preds[idx].apply(this, arguments)) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n });\n});\n\nexport default anyPass;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport map from \"./map.js\";\n/**\n * ap applies a list of functions to a list of values.\n *\n * Dispatches to the `ap` method of the second argument, if present. Also\n * treats curried functions as applicatives.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig [a -> b] -> [a] -> [b]\n * @sig Apply f => f (a -> b) -> f a -> f b\n * @sig (r -> a -> b) -> (r -> a) -> (r -> b)\n * @param {*} applyF\n * @param {*} applyX\n * @return {*}\n * @example\n *\n * R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]\n * R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> [\"tasty pizza\", \"tasty salad\", \"PIZZA\", \"SALAD\"]\n *\n * // R.ap can also be used as S combinator\n * // when only two functions are passed\n * R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'\n * @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]\n */\n\nvar ap =\n/*#__PURE__*/\n_curry2(function ap(applyF, applyX) {\n return typeof applyX['fantasy-land/ap'] === 'function' ? applyX['fantasy-land/ap'](applyF) : typeof applyF.ap === 'function' ? applyF.ap(applyX) : typeof applyF === 'function' ? function (x) {\n return applyF(x)(applyX(x));\n } : _reduce(function (acc, f) {\n return _concat(acc, map(f, applyX));\n }, [], applyF);\n});\n\nexport default ap;","export default function _aperture(n, list) {\n var idx = 0;\n var limit = list.length - (n - 1);\n var acc = new Array(limit >= 0 ? limit : 0);\n\n while (idx < limit) {\n acc[idx] = Array.prototype.slice.call(list, idx, idx + n);\n idx += 1;\n }\n\n return acc;\n}","import _concat from \"./_concat.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XAperture =\n/*#__PURE__*/\nfunction () {\n function XAperture(n, xf) {\n this.xf = xf;\n this.pos = 0;\n this.full = false;\n this.acc = new Array(n);\n }\n\n XAperture.prototype['@@transducer/init'] = _xfBase.init;\n\n XAperture.prototype['@@transducer/result'] = function (result) {\n this.acc = null;\n return this.xf['@@transducer/result'](result);\n };\n\n XAperture.prototype['@@transducer/step'] = function (result, input) {\n this.store(input);\n return this.full ? this.xf['@@transducer/step'](result, this.getCopy()) : result;\n };\n\n XAperture.prototype.store = function (input) {\n this.acc[this.pos] = input;\n this.pos += 1;\n\n if (this.pos === this.acc.length) {\n this.pos = 0;\n this.full = true;\n }\n };\n\n XAperture.prototype.getCopy = function () {\n return _concat(Array.prototype.slice.call(this.acc, this.pos), Array.prototype.slice.call(this.acc, 0, this.pos));\n };\n\n return XAperture;\n}();\n\nvar _xaperture =\n/*#__PURE__*/\n_curry2(function _xaperture(n, xf) {\n return new XAperture(n, xf);\n});\n\nexport default _xaperture;","import _aperture from \"./internal/_aperture.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xaperture from \"./internal/_xaperture.js\";\n/**\n * Returns a new list, composed of n-tuples of consecutive elements. If `n` is\n * greater than the length of the list, an empty list is returned.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig Number -> [a] -> [[a]]\n * @param {Number} n The size of the tuples to create\n * @param {Array} list The list to split into `n`-length tuples\n * @return {Array} The resulting list of `n`-length tuples\n * @see R.transduce\n * @example\n *\n * R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]]\n * R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * R.aperture(7, [1, 2, 3, 4, 5]); //=> []\n */\n\nvar aperture =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xaperture, _aperture));\n\nexport default aperture;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a new list containing the contents of the given list, followed by\n * the given element.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig a -> [a] -> [a]\n * @param {*} el The element to add to the end of the new list.\n * @param {Array} list The list of elements to add a new item to.\n * list.\n * @return {Array} A new list containing the elements of the old list followed by `el`.\n * @see R.prepend\n * @example\n *\n * R.append('tests', ['write', 'more']); //=> ['write', 'more', 'tests']\n * R.append('tests', []); //=> ['tests']\n * R.append(['tests'], ['write', 'more']); //=> ['write', 'more', ['tests']]\n */\n\nvar append =\n/*#__PURE__*/\n_curry2(function append(el, list) {\n return _concat(list, [el]);\n});\n\nexport default append;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Applies function `fn` to the argument list `args`. This is useful for\n * creating a fixed-arity function from a variadic function. `fn` should be a\n * bound function if context is significant.\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig (*... -> a) -> [*] -> a\n * @param {Function} fn The function which will be called with `args`\n * @param {Array} args The arguments to call `fn` with\n * @return {*} result The result, equivalent to `fn(...args)`\n * @see R.call, R.unapply\n * @example\n *\n * const nums = [1, 2, 3, -99, 42, 6, 7];\n * R.apply(Math.max, nums); //=> 42\n * @symb R.apply(f, [a, b, c]) = f(a, b, c)\n */\n\nvar apply =\n/*#__PURE__*/\n_curry2(function apply(fn, args) {\n return fn.apply(this, args);\n});\n\nexport default apply;","import _curry1 from \"./internal/_curry1.js\";\nimport keys from \"./keys.js\";\n/**\n * Returns a list of all the enumerable own properties of the supplied object.\n * Note that the order of the output array is not guaranteed across different\n * JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [v]\n * @param {Object} obj The object to extract values from\n * @return {Array} An array of the values of the object's own properties.\n * @see R.valuesIn, R.keys\n * @example\n *\n * R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]\n */\n\nvar values =\n/*#__PURE__*/\n_curry1(function values(obj) {\n var props = keys(obj);\n var len = props.length;\n var vals = [];\n var idx = 0;\n\n while (idx < len) {\n vals[idx] = obj[props[idx]];\n idx += 1;\n }\n\n return vals;\n});\n\nexport default values;","import _curry1 from \"./internal/_curry1.js\";\nimport apply from \"./apply.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\nimport keys from \"./keys.js\";\nimport values from \"./values.js\"; // Use custom mapValues function to avoid issues with specs that include a \"map\" key and R.map\n// delegating calls to .map\n\nfunction mapValues(fn, obj) {\n return keys(obj).reduce(function (acc, key) {\n acc[key] = fn(obj[key]);\n return acc;\n }, {});\n}\n/**\n * Given a spec object recursively mapping properties to functions, creates a\n * function producing an object of the same structure, by mapping each property\n * to the result of calling its associated function with the supplied arguments.\n *\n * @func\n * @memberOf R\n * @since v0.20.0\n * @category Function\n * @sig {k: ((a, b, ..., m) -> v)} -> ((a, b, ..., m) -> {k: v})\n * @param {Object} spec an object recursively mapping properties to functions for\n * producing the values for these properties.\n * @return {Function} A function that returns an object of the same structure\n * as `spec', with each property set to the value returned by calling its\n * associated function with the supplied arguments.\n * @see R.converge, R.juxt\n * @example\n *\n * const getMetrics = R.applySpec({\n * sum: R.add,\n * nested: { mul: R.multiply }\n * });\n * getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } }\n * @symb R.applySpec({ x: f, y: { z: g } })(a, b) = { x: f(a, b), y: { z: g(a, b) } }\n */\n\n\nvar applySpec =\n/*#__PURE__*/\n_curry1(function applySpec(spec) {\n spec = mapValues(function (v) {\n return typeof v == 'function' ? v : applySpec(v);\n }, spec);\n return curryN(reduce(max, 0, pluck('length', values(spec))), function () {\n var args = arguments;\n return mapValues(function (f) {\n return apply(f, args);\n }, spec);\n });\n});\n\nexport default applySpec;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Takes a value and applies a function to it.\n *\n * This function is also known as the `thrush` combinator.\n *\n * @func\n * @memberOf R\n * @since v0.25.0\n * @category Function\n * @sig a -> (a -> b) -> b\n * @param {*} x The value\n * @param {Function} f The function to apply\n * @return {*} The result of applying `f` to `x`\n * @example\n *\n * const t42 = R.applyTo(42);\n * t42(R.identity); //=> 42\n * t42(R.add(1)); //=> 43\n */\n\nvar applyTo =\n/*#__PURE__*/\n_curry2(function applyTo(x, f) {\n return f(x);\n});\n\nexport default applyTo;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Makes an ascending comparator function out of a function that returns a value\n * that can be compared with `<` and `>`.\n *\n * @func\n * @memberOf R\n * @since v0.23.0\n * @category Function\n * @sig Ord b => (a -> b) -> a -> a -> Number\n * @param {Function} fn A function of arity one that returns a value that can be compared\n * @param {*} a The first item to be compared.\n * @param {*} b The second item to be compared.\n * @return {Number} `-1` if fn(a) < fn(b), `1` if fn(b) < fn(a), otherwise `0`\n * @see R.descend\n * @example\n *\n * const byAge = R.ascend(R.prop('age'));\n * const people = [\n * { name: 'Emma', age: 70 },\n * { name: 'Peter', age: 78 },\n * { name: 'Mikhail', age: 62 },\n * ];\n * const peopleByYoungestFirst = R.sort(byAge, people);\n * //=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }]\n */\n\nvar ascend =\n/*#__PURE__*/\n_curry3(function ascend(fn, a, b) {\n var aa = fn(a);\n var bb = fn(b);\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n});\n\nexport default ascend;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @sig String -> a -> {k: v} -> {k: v}\n * @param {String} prop The property name to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except for the changed property.\n * @see R.dissoc, R.pick\n * @example\n *\n * R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}\n */\n\nvar assoc =\n/*#__PURE__*/\n_curry3(function assoc(prop, val, obj) {\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n});\n\nexport default assoc;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\n\nvar isNil =\n/*#__PURE__*/\n_curry1(function isNil(x) {\n return x == null;\n});\n\nexport default isNil;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport assoc from \"./assoc.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the nodes required\n * to create the given path, and placing the specific value at the tail end of\n * that path. Note that this copies and flattens prototype properties onto the\n * new object as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> a -> {a} -> {a}\n * @param {Array} path the path to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except along the specified path.\n * @see R.dissocPath\n * @example\n *\n * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}\n *\n * // Any missing or non-object keys in path will be overridden\n * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}\n */\n\nvar assocPath =\n/*#__PURE__*/\n_curry3(function assocPath(path, val, obj) {\n if (path.length === 0) {\n return val;\n }\n\n var idx = path[0];\n\n if (path.length > 1) {\n var nextObj = !isNil(obj) && _has(idx, obj) ? obj[idx] : _isInteger(path[1]) ? [] : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n\n if (_isInteger(idx) && _isArray(obj)) {\n var arr = [].concat(obj);\n arr[idx] = val;\n return arr;\n } else {\n return assoc(idx, val, obj);\n }\n});\n\nexport default assocPath;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Wraps a function of any arity (including nullary) in a function that accepts\n * exactly `n` parameters. Any extraneous parameters will not be passed to the\n * supplied function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} n The desired arity of the new function.\n * @param {Function} fn The function to wrap.\n * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of\n * arity `n`.\n * @see R.binary, R.unary\n * @example\n *\n * const takesTwoArgs = (a, b) => [a, b];\n *\n * takesTwoArgs.length; //=> 2\n * takesTwoArgs(1, 2); //=> [1, 2]\n *\n * const takesOneArg = R.nAry(1, takesTwoArgs);\n * takesOneArg.length; //=> 1\n * // Only `n` arguments are passed to the wrapped function\n * takesOneArg(1, 2); //=> [1, undefined]\n * @symb R.nAry(0, f)(a, b) = f()\n * @symb R.nAry(1, f)(a, b) = f(a)\n * @symb R.nAry(2, f)(a, b) = f(a, b)\n */\n\nvar nAry =\n/*#__PURE__*/\n_curry2(function nAry(n, fn) {\n switch (n) {\n case 0:\n return function () {\n return fn.call(this);\n };\n\n case 1:\n return function (a0) {\n return fn.call(this, a0);\n };\n\n case 2:\n return function (a0, a1) {\n return fn.call(this, a0, a1);\n };\n\n case 3:\n return function (a0, a1, a2) {\n return fn.call(this, a0, a1, a2);\n };\n\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.call(this, a0, a1, a2, a3);\n };\n\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.call(this, a0, a1, a2, a3, a4);\n };\n\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.call(this, a0, a1, a2, a3, a4, a5);\n };\n\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.call(this, a0, a1, a2, a3, a4, a5, a6);\n };\n\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7);\n };\n\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8);\n };\n\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n };\n\n default:\n throw new Error('First argument to nAry must be a non-negative integer no greater than ten');\n }\n});\n\nexport default nAry;","import _curry1 from \"./internal/_curry1.js\";\nimport nAry from \"./nAry.js\";\n/**\n * Wraps a function of any arity (including nullary) in a function that accepts\n * exactly 2 parameters. Any extraneous parameters will not be passed to the\n * supplied function.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Function\n * @sig (* -> c) -> (a, b -> c)\n * @param {Function} fn The function to wrap.\n * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of\n * arity 2.\n * @see R.nAry, R.unary\n * @example\n *\n * const takesThreeArgs = function(a, b, c) {\n * return [a, b, c];\n * };\n * takesThreeArgs.length; //=> 3\n * takesThreeArgs(1, 2, 3); //=> [1, 2, 3]\n *\n * const takesTwoArgs = R.binary(takesThreeArgs);\n * takesTwoArgs.length; //=> 2\n * // Only 2 arguments are passed to the wrapped function\n * takesTwoArgs(1, 2, 3); //=> [1, 2, undefined]\n * @symb R.binary(f)(a, b, c) = f(a, b)\n */\n\nvar binary =\n/*#__PURE__*/\n_curry1(function binary(fn) {\n return nAry(2, fn);\n});\n\nexport default binary;","export default function _isFunction(x) {\n var type = Object.prototype.toString.call(x);\n return type === '[object Function]' || type === '[object AsyncFunction]' || type === '[object GeneratorFunction]' || type === '[object AsyncGeneratorFunction]';\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport ap from \"./ap.js\";\nimport curryN from \"./curryN.js\";\nimport map from \"./map.js\";\n/**\n * \"lifts\" a function to be the specified arity, so that it may \"map over\" that\n * many lists, Functions or other objects that satisfy the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig Number -> (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.lift, R.ap\n * @example\n *\n * const madd3 = R.liftN(3, (...args) => R.sum(args));\n * madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]\n */\n\nvar liftN =\n/*#__PURE__*/\n_curry2(function liftN(arity, fn) {\n var lifted = curryN(arity, fn);\n return curryN(arity, function () {\n return _reduce(ap, map(lifted, arguments[0]), Array.prototype.slice.call(arguments, 1));\n });\n});\n\nexport default liftN;","import _curry1 from \"./internal/_curry1.js\";\nimport liftN from \"./liftN.js\";\n/**\n * \"lifts\" a function of arity > 1 so that it may \"map over\" a list, Function or other\n * object that satisfies the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.liftN\n * @example\n *\n * const madd3 = R.lift((a, b, c) => a + b + c);\n *\n * madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]\n *\n * const madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e);\n *\n * madd5([1,2], [3], [4, 5], [6], [7, 8]); //=> [21, 22, 22, 23, 22, 23, 23, 24]\n */\n\nvar lift =\n/*#__PURE__*/\n_curry1(function lift(fn) {\n return liftN(fn.length, fn);\n});\n\nexport default lift;","import _curry2 from \"./internal/_curry2.js\";\nimport _isFunction from \"./internal/_isFunction.js\";\nimport and from \"./and.js\";\nimport lift from \"./lift.js\";\n/**\n * A function which calls the two provided functions and returns the `&&`\n * of the results.\n * It returns the result of the first function if it is false-y and the result\n * of the second function otherwise. Note that this is short-circuited,\n * meaning that the second function will not be invoked if the first returns a\n * false-y value.\n *\n * In addition to functions, `R.both` also accepts any fantasy-land compatible\n * applicative functor.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)\n * @param {Function} f A predicate\n * @param {Function} g Another predicate\n * @return {Function} a function that applies its arguments to `f` and `g` and `&&`s their outputs together.\n * @see R.and\n * @example\n *\n * const gt10 = R.gt(R.__, 10)\n * const lt20 = R.lt(R.__, 20)\n * const f = R.both(gt10, lt20);\n * f(15); //=> true\n * f(30); //=> false\n *\n * R.both(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(false)\n * R.both([false, false, 'a'], [11]); //=> [false, false, 11]\n */\n\nvar both =\n/*#__PURE__*/\n_curry2(function both(f, g) {\n return _isFunction(f) ? function _both() {\n return f.apply(this, arguments) && g.apply(this, arguments);\n } : lift(and)(f, g);\n});\n\nexport default both;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Returns a curried equivalent of the provided function. The curried function\n * has two unusual capabilities. First, its arguments needn't be provided one\n * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> a) -> (* -> a)\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curryN, R.partial\n * @example\n *\n * const addFourNumbers = (a, b, c, d) => a + b + c + d;\n *\n * const curriedAddFourNumbers = R.curry(addFourNumbers);\n * const f = curriedAddFourNumbers(1, 2);\n * const g = f(3);\n * g(4); //=> 10\n */\n\nvar curry =\n/*#__PURE__*/\n_curry1(function curry(fn) {\n return curryN(fn.length, fn);\n});\n\nexport default curry;","import curry from \"./curry.js\";\n/**\n * Returns the result of calling its first argument with the remaining\n * arguments. This is occasionally useful as a converging function for\n * [`R.converge`](#converge): the first branch can produce a function while the\n * remaining branches produce values to be passed to that function as its\n * arguments.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig (*... -> a),*... -> a\n * @param {Function} fn The function to apply to the remaining arguments.\n * @param {...*} args Any number of positional arguments.\n * @return {*}\n * @see R.apply\n * @example\n *\n * R.call(R.add, 1, 2); //=> 3\n *\n * const indentN = R.pipe(R.repeat(' '),\n * R.join(''),\n * R.replace(/^(?!$)/gm));\n *\n * const format = R.converge(R.call, [\n * R.pipe(R.prop('indent'), indentN),\n * R.prop('value')\n * ]);\n *\n * format({indent: 2, value: 'foo\\nbar\\nbaz\\n'}); //=> ' foo\\n bar\\n baz\\n'\n * @symb R.call(f, a, b) = f(a, b)\n */\n\nvar call =\n/*#__PURE__*/\ncurry(function call(fn) {\n return fn.apply(this, Array.prototype.slice.call(arguments, 1));\n});\nexport default call;","import _isArrayLike from \"./_isArrayLike.js\";\n/**\n * `_makeFlat` is a helper function that returns a one-level or fully recursive\n * function based on the flag passed in.\n *\n * @private\n */\n\nexport default function _makeFlat(recursive) {\n return function flatt(list) {\n var value, jlen, j;\n var result = [];\n var idx = 0;\n var ilen = list.length;\n\n while (idx < ilen) {\n if (_isArrayLike(list[idx])) {\n value = recursive ? flatt(list[idx]) : list[idx];\n j = 0;\n jlen = value.length;\n\n while (j < jlen) {\n result[result.length] = value[j];\n j += 1;\n }\n } else {\n result[result.length] = list[idx];\n }\n\n idx += 1;\n }\n\n return result;\n };\n}","import _forceReduced from \"./_forceReduced.js\";\nimport _isArrayLike from \"./_isArrayLike.js\";\nimport _reduce from \"./_reduce.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar preservingReduced = function (xf) {\n return {\n '@@transducer/init': _xfBase.init,\n '@@transducer/result': function (result) {\n return xf['@@transducer/result'](result);\n },\n '@@transducer/step': function (result, input) {\n var ret = xf['@@transducer/step'](result, input);\n return ret['@@transducer/reduced'] ? _forceReduced(ret) : ret;\n }\n };\n};\n\nvar _flatCat = function _xcat(xf) {\n var rxf = preservingReduced(xf);\n return {\n '@@transducer/init': _xfBase.init,\n '@@transducer/result': function (result) {\n return rxf['@@transducer/result'](result);\n },\n '@@transducer/step': function (result, input) {\n return !_isArrayLike(input) ? _reduce(rxf, result, [input]) : _reduce(rxf, result, input);\n }\n };\n};\n\nexport default _flatCat;","export default function _forceReduced(x) {\n return {\n '@@transducer/value': x,\n '@@transducer/reduced': true\n };\n}","import _curry2 from \"./_curry2.js\";\nimport _flatCat from \"./_flatCat.js\";\nimport map from \"../map.js\";\n\nvar _xchain =\n/*#__PURE__*/\n_curry2(function _xchain(f, xf) {\n return map(f, _flatCat(xf));\n});\n\nexport default _xchain;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _makeFlat from \"./internal/_makeFlat.js\";\nimport _xchain from \"./internal/_xchain.js\";\nimport map from \"./map.js\";\n/**\n * `chain` maps a function over a list and concatenates the results. `chain`\n * is also known as `flatMap` in some libraries.\n *\n * Dispatches to the `chain` method of the second argument, if present,\n * according to the [FantasyLand Chain spec](https://github.com/fantasyland/fantasy-land#chain).\n *\n * If second argument is a function, `chain(f, g)(x)` is equivalent to `f(g(x), x)`.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category List\n * @sig Chain m => (a -> m b) -> m a -> m b\n * @param {Function} fn The function to map with\n * @param {Array} list The list to map over\n * @return {Array} The result of flat-mapping `list` with `fn`\n * @example\n *\n * const duplicate = n => [n, n];\n * R.chain(duplicate, [1, 2, 3]); //=> [1, 1, 2, 2, 3, 3]\n *\n * R.chain(R.append, R.head)([1, 2, 3]); //=> [1, 2, 3, 1]\n */\n\nvar chain =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['fantasy-land/chain', 'chain'], _xchain, function chain(fn, monad) {\n if (typeof monad === 'function') {\n return function (x) {\n return fn(monad(x))(x);\n };\n }\n\n return _makeFlat(false)(map(fn, monad));\n}));\n\nexport default chain;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Restricts a number to be within a range.\n *\n * Also works for other ordered types such as Strings and Dates.\n *\n * @func\n * @memberOf R\n * @since v0.20.0\n * @category Relation\n * @sig Ord a => a -> a -> a -> a\n * @param {Number} minimum The lower limit of the clamp (inclusive)\n * @param {Number} maximum The upper limit of the clamp (inclusive)\n * @param {Number} value Value to be clamped\n * @return {Number} Returns `minimum` when `val < minimum`, `maximum` when `val > maximum`, returns `val` otherwise\n * @example\n *\n * R.clamp(1, 10, -5) // => 1\n * R.clamp(1, 10, 15) // => 10\n * R.clamp(1, 10, 4) // => 4\n */\n\nvar clamp =\n/*#__PURE__*/\n_curry3(function clamp(min, max, value) {\n if (min > max) {\n throw new Error('min must not be greater than max in clamp(min, max, value)');\n }\n\n return value < min ? min : value > max ? max : value;\n});\n\nexport default clamp;","export default function _cloneRegExp(pattern) {\n return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : ''));\n}","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(undefined); //=> \"Undefined\"\n */\n\nvar type =\n/*#__PURE__*/\n_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\n\nexport default type;","import _cloneRegExp from \"./_cloneRegExp.js\";\nimport type from \"../type.js\";\n/**\n * Copies an object.\n *\n * @private\n * @param {*} value The value to be copied\n * @param {Array} refFrom Array containing the source references\n * @param {Array} refTo Array containing the copied source references\n * @param {Boolean} deep Whether or not to perform deep cloning.\n * @return {*} The copied value.\n */\n\nexport default function _clone(value, refFrom, refTo, deep) {\n var copy = function copy(copiedValue) {\n var len = refFrom.length;\n var idx = 0;\n\n while (idx < len) {\n if (value === refFrom[idx]) {\n return refTo[idx];\n }\n\n idx += 1;\n }\n\n refFrom[idx + 1] = value;\n refTo[idx + 1] = copiedValue;\n\n for (var key in value) {\n copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key];\n }\n\n return copiedValue;\n };\n\n switch (type(value)) {\n case 'Object':\n return copy({});\n\n case 'Array':\n return copy([]);\n\n case 'Date':\n return new Date(value.valueOf());\n\n case 'RegExp':\n return _cloneRegExp(value);\n\n default:\n return value;\n }\n}","import _clone from \"./internal/_clone.js\";\nimport _curry1 from \"./internal/_curry1.js\";\n/**\n * Creates a deep copy of the value which may contain (nested) `Array`s and\n * `Object`s, `Number`s, `String`s, `Boolean`s and `Date`s. `Function`s are\n * assigned by reference rather than copied\n *\n * Dispatches to a `clone` method if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {*} -> {*}\n * @param {*} value The object or array to clone\n * @return {*} A deeply cloned copy of `val`\n * @example\n *\n * const objects = [{}, {}, {}];\n * const objectsClone = R.clone(objects);\n * objects === objectsClone; //=> false\n * objects[0] === objectsClone[0]; //=> false\n */\n\nvar clone =\n/*#__PURE__*/\n_curry1(function clone(value) {\n return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, [], [], true);\n});\n\nexport default clone;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Makes a comparator function out of a function that reports whether the first\n * element is less than the second.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig ((a, b) -> Boolean) -> ((a, b) -> Number)\n * @param {Function} pred A predicate function of arity two which will return `true` if the first argument\n * is less than the second, `false` otherwise\n * @return {Function} A Function :: a -> b -> Int that returns `-1` if a < b, `1` if b < a, otherwise `0`\n * @example\n *\n * const byAge = R.comparator((a, b) => a.age < b.age);\n * const people = [\n * { name: 'Emma', age: 70 },\n * { name: 'Peter', age: 78 },\n * { name: 'Mikhail', age: 62 },\n * ];\n * const peopleByIncreasingAge = R.sort(byAge, people);\n * //=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }]\n */\n\nvar comparator =\n/*#__PURE__*/\n_curry1(function comparator(pred) {\n return function (a, b) {\n return pred(a, b) ? -1 : pred(b, a) ? 1 : 0;\n };\n});\n\nexport default comparator;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * A function that returns the `!` of its argument. It will return `true` when\n * passed false-y value, and `false` when passed a truth-y one.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig * -> Boolean\n * @param {*} a any value\n * @return {Boolean} the logical inverse of passed argument.\n * @see R.complement\n * @example\n *\n * R.not(true); //=> false\n * R.not(false); //=> true\n * R.not(0); //=> true\n * R.not(1); //=> false\n */\n\nvar not =\n/*#__PURE__*/\n_curry1(function not(a) {\n return !a;\n});\n\nexport default not;","import lift from \"./lift.js\";\nimport not from \"./not.js\";\n/**\n * Takes a function `f` and returns a function `g` such that if called with the same arguments\n * when `f` returns a \"truthy\" value, `g` returns `false` and when `f` returns a \"falsy\" value `g` returns `true`.\n *\n * `R.complement` may be applied to any functor\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category Logic\n * @sig (*... -> *) -> (*... -> Boolean)\n * @param {Function} f\n * @return {Function}\n * @see R.not\n * @example\n *\n * const isNotNil = R.complement(R.isNil);\n * isNil(null); //=> true\n * isNotNil(null); //=> false\n * isNil(7); //=> false\n * isNotNil(7); //=> true\n */\n\nvar complement =\n/*#__PURE__*/\nlift(not);\nexport default complement;","export default function _pipe(f, g) {\n return function () {\n return g.call(this, f.apply(this, arguments));\n };\n}","import _isArray from \"./_isArray.js\";\n/**\n * This checks whether a function has a [methodname] function. If it isn't an\n * array it will execute that function otherwise it will default to the ramda\n * implementation.\n *\n * @private\n * @param {Function} fn ramda implemtation\n * @param {String} methodname property to check for a custom implementation\n * @return {Object} Whatever the return value of the method is.\n */\n\nexport default function _checkForMethod(methodname, fn) {\n return function () {\n var length = arguments.length;\n\n if (length === 0) {\n return fn();\n }\n\n var obj = arguments[length - 1];\n return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1));\n };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n/**\n * Returns the elements of the given list or string (or object with a `slice`\n * method) from `fromIndex` (inclusive) to `toIndex` (exclusive).\n *\n * Dispatches to the `slice` method of the third argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @sig Number -> Number -> String -> String\n * @param {Number} fromIndex The start index (inclusive).\n * @param {Number} toIndex The end index (exclusive).\n * @param {*} list\n * @return {*}\n * @example\n *\n * R.slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']\n * R.slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c']\n * R.slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(0, 3, 'ramda'); //=> 'ram'\n */\n\nvar slice =\n/*#__PURE__*/\n_curry3(\n/*#__PURE__*/\n_checkForMethod('slice', function slice(fromIndex, toIndex, list) {\n return Array.prototype.slice.call(list, fromIndex, toIndex);\n}));\n\nexport default slice;","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns all but the first element of the given list or string (or object\n * with a `tail` method).\n *\n * Dispatches to the `slice` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.head, R.init, R.last\n * @example\n *\n * R.tail([1, 2, 3]); //=> [2, 3]\n * R.tail([1, 2]); //=> [2]\n * R.tail([1]); //=> []\n * R.tail([]); //=> []\n *\n * R.tail('abc'); //=> 'bc'\n * R.tail('ab'); //=> 'b'\n * R.tail('a'); //=> ''\n * R.tail(''); //=> ''\n */\n\nvar tail =\n/*#__PURE__*/\n_curry1(\n/*#__PURE__*/\n_checkForMethod('tail',\n/*#__PURE__*/\nslice(1, Infinity)));\n\nexport default tail;","import _arity from \"./internal/_arity.js\";\nimport _pipe from \"./internal/_pipe.js\";\nimport reduce from \"./reduce.js\";\nimport tail from \"./tail.js\";\n/**\n * Performs left-to-right function composition. The first argument may have\n * any arity; the remaining arguments must be unary.\n *\n * In some libraries this function is named `sequence`.\n *\n * **Note:** The result of pipe is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.compose\n * @example\n *\n * const f = R.pipe(Math.pow, R.negate, R.inc);\n *\n * f(3, 4); // -(3^4) + 1\n * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b)))\n */\n\nexport default function pipe() {\n if (arguments.length === 0) {\n throw new Error('pipe requires at least one argument');\n }\n\n return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments)));\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _isString from \"./internal/_isString.js\";\n/**\n * Returns a new list or string with the elements or characters in reverse\n * order.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {Array|String} list\n * @return {Array|String}\n * @example\n *\n * R.reverse([1, 2, 3]); //=> [3, 2, 1]\n * R.reverse([1, 2]); //=> [2, 1]\n * R.reverse([1]); //=> [1]\n * R.reverse([]); //=> []\n *\n * R.reverse('abc'); //=> 'cba'\n * R.reverse('ab'); //=> 'ba'\n * R.reverse('a'); //=> 'a'\n * R.reverse(''); //=> ''\n */\n\nvar reverse =\n/*#__PURE__*/\n_curry1(function reverse(list) {\n return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse();\n});\n\nexport default reverse;","import pipe from \"./pipe.js\";\nimport reverse from \"./reverse.js\";\n/**\n * Performs right-to-left function composition. The last argument may have\n * any arity; the remaining arguments must be unary.\n *\n * **Note:** The result of compose is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig ((y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)) -> ((a, b, ..., n) -> z)\n * @param {...Function} ...functions The functions to compose\n * @return {Function}\n * @see R.pipe\n * @example\n *\n * const classyGreeting = (firstName, lastName) => \"The name's \" + lastName + \", \" + firstName + \" \" + lastName\n * const yellGreeting = R.compose(R.toUpper, classyGreeting);\n * yellGreeting('James', 'Bond'); //=> \"THE NAME'S BOND, JAMES BOND\"\n *\n * R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7\n *\n * @symb R.compose(f, g, h)(a, b) = f(g(h(a, b)))\n */\n\nexport default function compose() {\n if (arguments.length === 0) {\n throw new Error('compose requires at least one argument');\n }\n\n return pipe.apply(this, reverse(arguments));\n}","import chain from \"./chain.js\";\nimport compose from \"./compose.js\";\nimport map from \"./map.js\";\n/**\n * Returns the right-to-left Kleisli composition of the provided functions,\n * each of which must return a value of a type supported by [`chain`](#chain).\n *\n * `R.composeK(h, g, f)` is equivalent to `R.compose(R.chain(h), R.chain(g), f)`.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Function\n * @sig Chain m => ((y -> m z), (x -> m y), ..., (a -> m b)) -> (a -> m z)\n * @param {...Function} ...functions The functions to compose\n * @return {Function}\n * @see R.pipeK\n * @deprecated since v0.26.0\n * @example\n *\n * // get :: String -> Object -> Maybe *\n * const get = R.curry((propName, obj) => Maybe(obj[propName]))\n *\n * // getStateCode :: Maybe String -> Maybe String\n * const getStateCode = R.composeK(\n * R.compose(Maybe.of, R.toUpper),\n * get('state'),\n * get('address'),\n * get('user'),\n * );\n * getStateCode({\"user\":{\"address\":{\"state\":\"ny\"}}}); //=> Maybe.Just(\"NY\")\n * getStateCode({}); //=> Maybe.Nothing()\n * @symb R.composeK(f, g, h)(a) = R.chain(f, R.chain(g, h(a)))\n */\n\nexport default function composeK() {\n if (arguments.length === 0) {\n throw new Error('composeK requires at least one argument');\n }\n\n var init = Array.prototype.slice.call(arguments);\n var last = init.pop();\n return compose(compose.apply(this, map(chain, init)), last);\n}","export default function _pipeP(f, g) {\n return function () {\n var ctx = this;\n return f.apply(ctx, arguments).then(function (x) {\n return g.call(ctx, x);\n });\n };\n}","import _arity from \"./internal/_arity.js\";\nimport _pipeP from \"./internal/_pipeP.js\";\nimport reduce from \"./reduce.js\";\nimport tail from \"./tail.js\";\n/**\n * Performs left-to-right composition of one or more Promise-returning\n * functions. The first argument may have any arity; the remaining arguments\n * must be unary.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Function\n * @sig ((a -> Promise b), (b -> Promise c), ..., (y -> Promise z)) -> (a -> Promise z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.composeP\n * @deprecated since v0.26.0\n * @example\n *\n * // followersForUser :: String -> Promise [User]\n * const followersForUser = R.pipeP(db.getUserById, db.getFollowers);\n */\n\nexport default function pipeP() {\n if (arguments.length === 0) {\n throw new Error('pipeP requires at least one argument');\n }\n\n return _arity(arguments[0].length, reduce(_pipeP, arguments[0], tail(arguments)));\n}","import nth from \"./nth.js\";\n/**\n * Returns the first element of the given list or string. In some libraries\n * this function is named `first`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String\n * @param {Array|String} list\n * @return {*}\n * @see R.tail, R.init, R.last\n * @example\n *\n * R.head(['fi', 'fo', 'fum']); //=> 'fi'\n * R.head([]); //=> undefined\n *\n * R.head('abc'); //=> 'a'\n * R.head(''); //=> ''\n */\n\nvar head =\n/*#__PURE__*/\nnth(0);\nexport default head;","export default function _identity(x) {\n return x;\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _identity from \"./internal/_identity.js\";\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n * R.identity(1); //=> 1\n *\n * const obj = {};\n * R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\n\nvar identity =\n/*#__PURE__*/\n_curry1(_identity);\n\nexport default identity;","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport head from \"./head.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport tail from \"./tail.js\";\nimport identity from \"./identity.js\";\n/**\n * Performs left-to-right function composition using transforming function. The first argument may have\n * any arity; the remaining arguments must be unary.\n *\n * **Note:** The result of pipeWith is not automatically curried. Transforming function is not used on the\n * first argument.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Function\n * @sig ((* -> *), [((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)]) -> ((a, b, ..., n) -> z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.composeWith, R.pipe\n * @example\n *\n * const pipeWhileNotNil = R.pipeWith((f, res) => R.isNil(res) ? res : f(res));\n * const f = pipeWhileNotNil([Math.pow, R.negate, R.inc])\n *\n * f(3, 4); // -(3^4) + 1\n * @symb R.pipeWith(f)([g, h, i])(...args) = f(i, f(h, g(...args)))\n */\n\nvar pipeWith =\n/*#__PURE__*/\n_curry2(function pipeWith(xf, list) {\n if (list.length <= 0) {\n return identity;\n }\n\n var headList = head(list);\n var tailList = tail(list);\n return _arity(headList.length, function () {\n return _reduce(function (result, f) {\n return xf.call(this, f, result);\n }, headList.apply(this, arguments), tailList);\n });\n});\n\nexport default pipeWith;","import _curry2 from \"./internal/_curry2.js\";\nimport pipeWith from \"./pipeWith.js\";\nimport reverse from \"./reverse.js\";\n/**\n * Performs right-to-left function composition using transforming function. The last argument may have\n * any arity; the remaining arguments must be unary.\n *\n * **Note:** The result of compose is not automatically curried. Transforming function is not used on the\n * last argument.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Function\n * @sig ((* -> *), [(y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)]) -> ((a, b, ..., n) -> z)\n * @param {...Function} ...functions The functions to compose\n * @return {Function}\n * @see R.compose, R.pipeWith\n * @example\n *\n * const composeWhileNotNil = R.composeWith((f, res) => R.isNil(res) ? res : f(res));\n *\n * composeWhileNotNil([R.inc, R.prop('age')])({age: 1}) //=> 2\n * composeWhileNotNil([R.inc, R.prop('age')])({}) //=> undefined\n *\n * @symb R.composeWith(f)([g, h, i])(...args) = f(g, f(h, i(...args)))\n */\n\nvar composeWith =\n/*#__PURE__*/\n_curry2(function composeWith(xf, list) {\n return pipeWith.apply(this, [xf, reverse(list)]);\n});\n\nexport default composeWith;","export default function _arrayFromIterator(iter) {\n var list = [];\n var next;\n\n while (!(next = iter.next()).done) {\n list.push(next.value);\n }\n\n return list;\n}","export default function _includesWith(pred, x, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n if (pred(x, list[idx])) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n}","// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction _objectIs(a, b) {\n // SameValue algorithm\n if (a === b) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return a !== 0 || 1 / a === 1 / b;\n } else {\n // Step 6.a: NaN == NaN\n return a !== a && b !== b;\n }\n}\n\nexport default typeof Object.is === 'function' ? Object.is : _objectIs;","import _arrayFromIterator from \"./_arrayFromIterator.js\";\nimport _includesWith from \"./_includesWith.js\";\nimport _functionName from \"./_functionName.js\";\nimport _has from \"./_has.js\";\nimport _objectIs from \"./_objectIs.js\";\nimport keys from \"../keys.js\";\nimport type from \"../type.js\";\n/**\n * private _uniqContentEquals function.\n * That function is checking equality of 2 iterator contents with 2 assumptions\n * - iterators lengths are the same\n * - iterators values are unique\n *\n * false-positive result will be returned for comparision of, e.g.\n * - [1,2,3] and [1,2,3,4]\n * - [1,1,1] and [1,2,3]\n * */\n\nfunction _uniqContentEquals(aIterator, bIterator, stackA, stackB) {\n var a = _arrayFromIterator(aIterator);\n\n var b = _arrayFromIterator(bIterator);\n\n function eq(_a, _b) {\n return _equals(_a, _b, stackA.slice(), stackB.slice());\n } // if *a* array contains any element that is not included in *b*\n\n\n return !_includesWith(function (b, aItem) {\n return !_includesWith(eq, aItem, b);\n }, b, a);\n}\n\nexport default function _equals(a, b, stackA, stackB) {\n if (_objectIs(a, b)) {\n return true;\n }\n\n var typeA = type(a);\n\n if (typeA !== type(b)) {\n return false;\n }\n\n if (a == null || b == null) {\n return false;\n }\n\n if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n }\n\n if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);\n }\n\n switch (typeA) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {\n return a === b;\n }\n\n break;\n\n case 'Boolean':\n case 'Number':\n case 'String':\n if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) {\n return false;\n }\n\n break;\n\n case 'Date':\n if (!_objectIs(a.valueOf(), b.valueOf())) {\n return false;\n }\n\n break;\n\n case 'Error':\n return a.name === b.name && a.message === b.message;\n\n case 'RegExp':\n if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {\n return false;\n }\n\n break;\n }\n\n var idx = stackA.length - 1;\n\n while (idx >= 0) {\n if (stackA[idx] === a) {\n return stackB[idx] === b;\n }\n\n idx -= 1;\n }\n\n switch (typeA) {\n case 'Map':\n if (a.size !== b.size) {\n return false;\n }\n\n return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));\n\n case 'Set':\n if (a.size !== b.size) {\n return false;\n }\n\n return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));\n\n case 'Arguments':\n case 'Array':\n case 'Object':\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'Error':\n case 'RegExp':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'ArrayBuffer':\n break;\n\n default:\n // Values of other types are only equal if identical.\n return false;\n }\n\n var keysA = keys(a);\n\n if (keysA.length !== keys(b).length) {\n return false;\n }\n\n var extendedStackA = stackA.concat([a]);\n var extendedStackB = stackB.concat([b]);\n idx = keysA.length - 1;\n\n while (idx >= 0) {\n var key = keysA[idx];\n\n if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {\n return false;\n }\n\n idx -= 1;\n }\n\n return true;\n}","export default function _functionName(f) {\n // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n var match = String(f).match(/^function (\\w*)/);\n return match == null ? '' : match[1];\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _equals from \"./internal/_equals.js\";\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * R.equals(1, 1); //=> true\n * R.equals(1, '1'); //=> false\n * R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n * const a = {}; a.v = a;\n * const b = {}; b.v = b;\n * R.equals(a, b); //=> true\n */\n\nvar equals =\n/*#__PURE__*/\n_curry2(function equals(a, b) {\n return _equals(a, b, [], []);\n});\n\nexport default equals;","import equals from \"../equals.js\";\nexport default function _indexOf(list, a, idx) {\n var inf, item; // Array.prototype.indexOf doesn't exist below IE9\n\n if (typeof list.indexOf === 'function') {\n switch (typeof a) {\n case 'number':\n if (a === 0) {\n // manually crawl the list to distinguish between +0 and -0\n inf = 1 / a;\n\n while (idx < list.length) {\n item = list[idx];\n\n if (item === 0 && 1 / item === inf) {\n return idx;\n }\n\n idx += 1;\n }\n\n return -1;\n } else if (a !== a) {\n // NaN\n while (idx < list.length) {\n item = list[idx];\n\n if (typeof item === 'number' && item !== item) {\n return idx;\n }\n\n idx += 1;\n }\n\n return -1;\n } // non-zero numbers can utilise Set\n\n\n return list.indexOf(a, idx);\n // all these types can utilise Set\n\n case 'string':\n case 'boolean':\n case 'function':\n case 'undefined':\n return list.indexOf(a, idx);\n\n case 'object':\n if (a === null) {\n // null can utilise Set\n return list.indexOf(a, idx);\n }\n\n }\n } // anything else not covered above, defer to R.equals\n\n\n while (idx < list.length) {\n if (equals(list[idx], a)) {\n return idx;\n }\n\n idx += 1;\n }\n\n return -1;\n}","import _indexOf from \"./_indexOf.js\";\nexport default function _includes(a, list) {\n return _indexOf(list, a, 0) >= 0;\n}","export default function _quote(s) {\n var escaped = s.replace(/\\\\/g, '\\\\\\\\').replace(/[\\b]/g, '\\\\b') // \\b matches word boundary; [\\b] matches backspace\n .replace(/\\f/g, '\\\\f').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t').replace(/\\v/g, '\\\\v').replace(/\\0/g, '\\\\0');\n return '\"' + escaped.replace(/\"/g, '\\\\\"') + '\"';\n}","/**\n * Polyfill from .\n */\nvar pad = function pad(n) {\n return (n < 10 ? '0' : '') + n;\n};\n\nvar _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) {\n return d.toISOString();\n} : function _toISOString(d) {\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';\n};\n\nexport default _toISOString;","export default function _complement(f) {\n return function () {\n return !f.apply(this, arguments);\n };\n}","export default function _filter(fn, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n\n while (idx < len) {\n if (fn(list[idx])) {\n result[result.length] = list[idx];\n }\n\n idx += 1;\n }\n\n return result;\n}","export default function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n}","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XFilter =\n/*#__PURE__*/\nfunction () {\n function XFilter(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XFilter.prototype['@@transducer/init'] = _xfBase.init;\n XFilter.prototype['@@transducer/result'] = _xfBase.result;\n\n XFilter.prototype['@@transducer/step'] = function (result, input) {\n return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n };\n\n return XFilter;\n}();\n\nvar _xfilter =\n/*#__PURE__*/\n_curry2(function _xfilter(f, xf) {\n return new XFilter(f, xf);\n});\n\nexport default _xfilter;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _filter from \"./internal/_filter.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport _xfilter from \"./internal/_xfilter.js\";\nimport keys from \"./keys.js\";\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n * const isEven = n => n % 2 === 0;\n *\n * R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\n\nvar filter =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['filter'], _xfilter, function (pred, filterable) {\n return _isObject(filterable) ? _reduce(function (acc, key) {\n if (pred(filterable[key])) {\n acc[key] = filterable[key];\n }\n\n return acc;\n }, {}, keys(filterable)) : // else\n _filter(pred, filterable);\n}));\n\nexport default filter;","import _complement from \"./internal/_complement.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport filter from \"./filter.js\";\n/**\n * The complement of [`filter`](#filter).\n *\n * Acts as a transducer if a transformer is given in list position. Filterable\n * objects include plain objects or any object that has a filter method such\n * as `Array`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.filter, R.transduce, R.addIndex\n * @example\n *\n * const isOdd = (n) => n % 2 === 1;\n *\n * R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\n\nvar reject =\n/*#__PURE__*/\n_curry2(function reject(pred, filterable) {\n return filter(_complement(pred), filterable);\n});\n\nexport default reject;","import _includes from \"./_includes.js\";\nimport _map from \"./_map.js\";\nimport _quote from \"./_quote.js\";\nimport _toISOString from \"./_toISOString.js\";\nimport keys from \"../keys.js\";\nimport reject from \"../reject.js\";\nexport default function _toString(x, seen) {\n var recur = function recur(y) {\n var xs = seen.concat([x]);\n return _includes(y, xs) ? '' : _toString(y, xs);\n }; // mapPairs :: (Object, [String]) -> [String]\n\n\n var mapPairs = function (obj, keys) {\n return _map(function (k) {\n return _quote(k) + ': ' + recur(obj[k]);\n }, keys.slice().sort());\n };\n\n switch (Object.prototype.toString.call(x)) {\n case '[object Arguments]':\n return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';\n\n case '[object Array]':\n return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {\n return /^\\d+$/.test(k);\n }, keys(x)))).join(', ') + ']';\n\n case '[object Boolean]':\n return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();\n\n case '[object Date]':\n return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';\n\n case '[object Null]':\n return 'null';\n\n case '[object Number]':\n return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);\n\n case '[object String]':\n return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);\n\n case '[object Undefined]':\n return 'undefined';\n\n default:\n if (typeof x.toString === 'function') {\n var repr = x.toString();\n\n if (repr !== '[object Object]') {\n return repr;\n }\n }\n\n return '{' + mapPairs(x, keys(x)).join(', ') + '}';\n }\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _toString from \"./internal/_toString.js\";\n/**\n * Returns the string representation of the given value. `eval`'ing the output\n * should result in a value equivalent to the input value. Many of the built-in\n * `toString` methods do not satisfy this requirement.\n *\n * If the given value is an `[object Object]` with a `toString` method other\n * than `Object.prototype.toString`, this method is invoked with no arguments\n * to produce the return value. This means user-defined constructor functions\n * can provide a suitable `toString` method. For example:\n *\n * function Point(x, y) {\n * this.x = x;\n * this.y = y;\n * }\n *\n * Point.prototype.toString = function() {\n * return 'new Point(' + this.x + ', ' + this.y + ')';\n * };\n *\n * R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category String\n * @sig * -> String\n * @param {*} val\n * @return {String}\n * @example\n *\n * R.toString(42); //=> '42'\n * R.toString('abc'); //=> '\"abc\"'\n * R.toString([1, 2, 3]); //=> '[1, 2, 3]'\n * R.toString({foo: 1, bar: 2, baz: 3}); //=> '{\"bar\": 2, \"baz\": 3, \"foo\": 1}'\n * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date(\"2001-02-03T04:05:06.000Z\")'\n */\n\nvar toString =\n/*#__PURE__*/\n_curry1(function toString(val) {\n return _toString(val, []);\n});\n\nexport default toString;","import _curry2 from \"./internal/_curry2.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport _isFunction from \"./internal/_isFunction.js\";\nimport _isString from \"./internal/_isString.js\";\nimport toString from \"./toString.js\";\n/**\n * Returns the result of concatenating the given lists or strings.\n *\n * Note: `R.concat` expects both arguments to be of the same type,\n * unlike the native `Array.prototype.concat` method. It will throw\n * an error if you `concat` an Array with a non-Array value.\n *\n * Dispatches to the `concat` method of the first argument, if present.\n * Can also concatenate two members of a [fantasy-land\n * compatible semigroup](https://github.com/fantasyland/fantasy-land#semigroup).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a] -> [a]\n * @sig String -> String -> String\n * @param {Array|String} firstList The first list\n * @param {Array|String} secondList The second list\n * @return {Array|String} A list consisting of the elements of `firstList` followed by the elements of\n * `secondList`.\n *\n * @example\n *\n * R.concat('ABC', 'DEF'); // 'ABCDEF'\n * R.concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]\n * R.concat([], []); //=> []\n */\n\nvar concat =\n/*#__PURE__*/\n_curry2(function concat(a, b) {\n if (_isArray(a)) {\n if (_isArray(b)) {\n return a.concat(b);\n }\n\n throw new TypeError(toString(b) + ' is not an array');\n }\n\n if (_isString(a)) {\n if (_isString(b)) {\n return a + b;\n }\n\n throw new TypeError(toString(b) + ' is not a string');\n }\n\n if (a != null && _isFunction(a['fantasy-land/concat'])) {\n return a['fantasy-land/concat'](b);\n }\n\n if (a != null && _isFunction(a.concat)) {\n return a.concat(b);\n }\n\n throw new TypeError(toString(a) + ' does not have a method named \"concat\" or \"fantasy-land/concat\"');\n});\n\nexport default concat;","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport map from \"./map.js\";\nimport max from \"./max.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic.\n * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments\n * to `fn` are applied to each of the predicates in turn until one returns a\n * \"truthy\" value, at which point `fn` returns the result of applying its\n * arguments to the corresponding transformer. If none of the predicates\n * matches, `fn` returns undefined.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Logic\n * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *)\n * @param {Array} pairs A list of [predicate, transformer]\n * @return {Function}\n * @see R.ifElse, R.unless, R.when\n * @example\n *\n * const fn = R.cond([\n * [R.equals(0), R.always('water freezes at 0°C')],\n * [R.equals(100), R.always('water boils at 100°C')],\n * [R.T, temp => 'nothing special happens at ' + temp + '°C']\n * ]);\n * fn(0); //=> 'water freezes at 0°C'\n * fn(50); //=> 'nothing special happens at 50°C'\n * fn(100); //=> 'water boils at 100°C'\n */\n\nvar cond =\n/*#__PURE__*/\n_curry1(function cond(pairs) {\n var arity = reduce(max, 0, map(function (pair) {\n return pair[0].length;\n }, pairs));\n return _arity(arity, function () {\n var idx = 0;\n\n while (idx < pairs.length) {\n if (pairs[idx][0].apply(this, arguments)) {\n return pairs[idx][1].apply(this, arguments);\n }\n\n idx += 1;\n }\n });\n});\n\nexport default cond;","import _curry2 from \"./internal/_curry2.js\";\nimport curry from \"./curry.js\";\nimport nAry from \"./nAry.js\";\n/**\n * Wraps a constructor function inside a curried function that can be called\n * with the same arguments and returns the same type. The arity of the function\n * returned is specified to allow using variadic constructor functions.\n *\n * @func\n * @memberOf R\n * @since v0.4.0\n * @category Function\n * @sig Number -> (* -> {*}) -> (* -> {*})\n * @param {Number} n The arity of the constructor function.\n * @param {Function} Fn The constructor function to wrap.\n * @return {Function} A wrapped, curried constructor function.\n * @example\n *\n * // Variadic Constructor function\n * function Salad() {\n * this.ingredients = arguments;\n * }\n *\n * Salad.prototype.recipe = function() {\n * const instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients);\n * return R.join('\\n', instructions);\n * };\n *\n * const ThreeLayerSalad = R.constructN(3, Salad);\n *\n * // Notice we no longer need the 'new' keyword, and the constructor is curried for 3 arguments.\n * const salad = ThreeLayerSalad('Mayonnaise')('Potato Chips')('Ketchup');\n *\n * console.log(salad.recipe());\n * // Add a dollop of Mayonnaise\n * // Add a dollop of Potato Chips\n * // Add a dollop of Ketchup\n */\n\nvar constructN =\n/*#__PURE__*/\n_curry2(function constructN(n, Fn) {\n if (n > 10) {\n throw new Error('Constructor with greater than ten arguments');\n }\n\n if (n === 0) {\n return function () {\n return new Fn();\n };\n }\n\n return curry(nAry(n, function ($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {\n switch (arguments.length) {\n case 1:\n return new Fn($0);\n\n case 2:\n return new Fn($0, $1);\n\n case 3:\n return new Fn($0, $1, $2);\n\n case 4:\n return new Fn($0, $1, $2, $3);\n\n case 5:\n return new Fn($0, $1, $2, $3, $4);\n\n case 6:\n return new Fn($0, $1, $2, $3, $4, $5);\n\n case 7:\n return new Fn($0, $1, $2, $3, $4, $5, $6);\n\n case 8:\n return new Fn($0, $1, $2, $3, $4, $5, $6, $7);\n\n case 9:\n return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8);\n\n case 10:\n return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8, $9);\n }\n }));\n});\n\nexport default constructN;","import _curry1 from \"./internal/_curry1.js\";\nimport constructN from \"./constructN.js\";\n/**\n * Wraps a constructor function inside a curried function that can be called\n * with the same arguments and returns the same type.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> {*}) -> (* -> {*})\n * @param {Function} fn The constructor function to wrap.\n * @return {Function} A wrapped, curried constructor function.\n * @see R.invoker\n * @example\n *\n * // Constructor function\n * function Animal(kind) {\n * this.kind = kind;\n * };\n * Animal.prototype.sighting = function() {\n * return \"It's a \" + this.kind + \"!\";\n * }\n *\n * const AnimalConstructor = R.construct(Animal)\n *\n * // Notice we no longer need the 'new' keyword:\n * AnimalConstructor('Pig'); //=> {\"kind\": \"Pig\", \"sighting\": function (){...}};\n *\n * const animalTypes = [\"Lion\", \"Tiger\", \"Bear\"];\n * const animalSighting = R.invoker(0, 'sighting');\n * const sightNewAnimal = R.compose(animalSighting, AnimalConstructor);\n * R.map(sightNewAnimal, animalTypes); //=> [\"It's a Lion!\", \"It's a Tiger!\", \"It's a Bear!\"]\n */\n\nvar construct =\n/*#__PURE__*/\n_curry1(function construct(Fn) {\n return constructN(Fn.length, Fn);\n});\n\nexport default construct;","import _includes from \"./internal/_includes.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the specified value is equal, in [`R.equals`](#equals)\n * terms, to at least one element of the given list; `false` otherwise.\n * Works also with strings.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig a -> [a] -> Boolean\n * @param {Object} a The item to compare against.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if an equivalent item is in the list, `false` otherwise.\n * @see R.includes\n * @deprecated since v0.26.0\n * @example\n *\n * R.contains(3, [1, 2, 3]); //=> true\n * R.contains(4, [1, 2, 3]); //=> false\n * R.contains({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true\n * R.contains([42], [[42]]); //=> true\n * R.contains('ba', 'banana'); //=>true\n */\n\nvar contains =\n/*#__PURE__*/\n_curry2(_includes);\n\nexport default contains;","import _curry2 from \"./internal/_curry2.js\";\nimport _map from \"./internal/_map.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Accepts a converging function and a list of branching functions and returns\n * a new function. The arity of the new function is the same as the arity of\n * the longest branching function. When invoked, this new function is applied\n * to some arguments, and each branching function is applied to those same\n * arguments. The results of each branching function are passed as arguments\n * to the converging function to produce the return value.\n *\n * @func\n * @memberOf R\n * @since v0.4.2\n * @category Function\n * @sig ((x1, x2, ...) -> z) -> [((a, b, ...) -> x1), ((a, b, ...) -> x2), ...] -> (a -> b -> ... -> z)\n * @param {Function} after A function. `after` will be invoked with the return values of\n * `fn1` and `fn2` as its arguments.\n * @param {Array} functions A list of functions.\n * @return {Function} A new function.\n * @see R.useWith\n * @example\n *\n * const average = R.converge(R.divide, [R.sum, R.length])\n * average([1, 2, 3, 4, 5, 6, 7]) //=> 4\n *\n * const strangeConcat = R.converge(R.concat, [R.toUpper, R.toLower])\n * strangeConcat(\"Yodel\") //=> \"YODELyodel\"\n *\n * @symb R.converge(f, [g, h])(a, b) = f(g(a, b), h(a, b))\n */\n\nvar converge =\n/*#__PURE__*/\n_curry2(function converge(after, fns) {\n return curryN(reduce(max, 0, pluck('length', fns)), function () {\n var args = arguments;\n var context = this;\n return after.apply(context, _map(function (fn) {\n return fn.apply(context, args);\n }, fns));\n });\n});\n\nexport default converge;","import _curryN from \"./_curryN.js\";\nimport _has from \"./_has.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XReduceBy =\n/*#__PURE__*/\nfunction () {\n function XReduceBy(valueFn, valueAcc, keyFn, xf) {\n this.valueFn = valueFn;\n this.valueAcc = valueAcc;\n this.keyFn = keyFn;\n this.xf = xf;\n this.inputs = {};\n }\n\n XReduceBy.prototype['@@transducer/init'] = _xfBase.init;\n\n XReduceBy.prototype['@@transducer/result'] = function (result) {\n var key;\n\n for (key in this.inputs) {\n if (_has(key, this.inputs)) {\n result = this.xf['@@transducer/step'](result, this.inputs[key]);\n\n if (result['@@transducer/reduced']) {\n result = result['@@transducer/value'];\n break;\n }\n }\n }\n\n this.inputs = null;\n return this.xf['@@transducer/result'](result);\n };\n\n XReduceBy.prototype['@@transducer/step'] = function (result, input) {\n var key = this.keyFn(input);\n this.inputs[key] = this.inputs[key] || [key, this.valueAcc];\n this.inputs[key][1] = this.valueFn(this.inputs[key][1], input);\n return result;\n };\n\n return XReduceBy;\n}();\n\nvar _xreduceBy =\n/*#__PURE__*/\n_curryN(4, [], function _xreduceBy(valueFn, valueAcc, keyFn, xf) {\n return new XReduceBy(valueFn, valueAcc, keyFn, xf);\n});\n\nexport default _xreduceBy;","import _clone from \"./internal/_clone.js\";\nimport _curryN from \"./internal/_curryN.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _has from \"./internal/_has.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport _xreduceBy from \"./internal/_xreduceBy.js\";\n/**\n * Groups the elements of the list according to the result of calling\n * the String-returning function `keyFn` on each element and reduces the elements\n * of each group to a single value via the reducer function `valueFn`.\n *\n * This function is basically a more general [`groupBy`](#groupBy) function.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.20.0\n * @category List\n * @sig ((a, b) -> a) -> a -> (b -> String) -> [b] -> {String: a}\n * @param {Function} valueFn The function that reduces the elements of each group to a single\n * value. Receives two values, accumulator for a particular group and the current element.\n * @param {*} acc The (initial) accumulator value for each group.\n * @param {Function} keyFn The function that maps the list's element into a key.\n * @param {Array} list The array to group.\n * @return {Object} An object with the output of `keyFn` for keys, mapped to the output of\n * `valueFn` for elements which produced that key when passed to `keyFn`.\n * @see R.groupBy, R.reduce\n * @example\n *\n * const groupNames = (acc, {name}) => acc.concat(name)\n * const toGrade = ({score}) =>\n * score < 65 ? 'F' :\n * score < 70 ? 'D' :\n * score < 80 ? 'C' :\n * score < 90 ? 'B' : 'A'\n *\n * var students = [\n * {name: 'Abby', score: 83},\n * {name: 'Bart', score: 62},\n * {name: 'Curt', score: 88},\n * {name: 'Dora', score: 92},\n * ]\n *\n * reduceBy(groupNames, [], toGrade, students)\n * //=> {\"A\": [\"Dora\"], \"B\": [\"Abby\", \"Curt\"], \"F\": [\"Bart\"]}\n */\n\nvar reduceBy =\n/*#__PURE__*/\n_curryN(4, [],\n/*#__PURE__*/\n_dispatchable([], _xreduceBy, function reduceBy(valueFn, valueAcc, keyFn, list) {\n return _reduce(function (acc, elt) {\n var key = keyFn(elt);\n acc[key] = valueFn(_has(key, acc) ? acc[key] : _clone(valueAcc, [], [], false), elt);\n return acc;\n }, {}, list);\n}));\n\nexport default reduceBy;","import reduceBy from \"./reduceBy.js\";\n/**\n * Counts the elements of a list according to how many match each value of a\n * key generated by the supplied function. Returns an object mapping the keys\n * produced by `fn` to the number of occurrences in the list. Note that all\n * keys are coerced to strings because of how JavaScript objects work.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig (a -> String) -> [a] -> {*}\n * @param {Function} fn The function used to map values to keys.\n * @param {Array} list The list to count elements from.\n * @return {Object} An object mapping keys to number of occurrences in the list.\n * @example\n *\n * const numbers = [1.0, 1.1, 1.2, 2.0, 3.0, 2.2];\n * R.countBy(Math.floor)(numbers); //=> {'1': 3, '2': 2, '3': 1}\n *\n * const letters = ['a', 'b', 'A', 'a', 'B', 'c'];\n * R.countBy(R.toLower)(letters); //=> {'a': 3, 'b': 2, 'c': 1}\n */\n\nvar countBy =\n/*#__PURE__*/\nreduceBy(function (acc, elem) {\n return acc + 1;\n}, 0);\nexport default countBy;","import add from \"./add.js\";\n/**\n * Decrements its argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Math\n * @sig Number -> Number\n * @param {Number} n\n * @return {Number} n - 1\n * @see R.inc\n * @example\n *\n * R.dec(42); //=> 41\n */\n\nvar dec =\n/*#__PURE__*/\nadd(-1);\nexport default dec;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns the second argument if it is not `null`, `undefined` or `NaN`;\n * otherwise the first argument is returned.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Logic\n * @sig a -> b -> a | b\n * @param {a} default The default value.\n * @param {b} val `val` will be returned instead of `default` unless `val` is `null`, `undefined` or `NaN`.\n * @return {*} The second value if it is not `null`, `undefined` or `NaN`, otherwise the default value\n * @example\n *\n * const defaultTo42 = R.defaultTo(42);\n *\n * defaultTo42(null); //=> 42\n * defaultTo42(undefined); //=> 42\n * defaultTo42(false); //=> false\n * defaultTo42('Ramda'); //=> 'Ramda'\n * // parseInt('string') results in NaN\n * defaultTo42(parseInt('string')); //=> 42\n */\n\nvar defaultTo =\n/*#__PURE__*/\n_curry2(function defaultTo(d, v) {\n return v == null || v !== v ? d : v;\n});\n\nexport default defaultTo;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Makes a descending comparator function out of a function that returns a value\n * that can be compared with `<` and `>`.\n *\n * @func\n * @memberOf R\n * @since v0.23.0\n * @category Function\n * @sig Ord b => (a -> b) -> a -> a -> Number\n * @param {Function} fn A function of arity one that returns a value that can be compared\n * @param {*} a The first item to be compared.\n * @param {*} b The second item to be compared.\n * @return {Number} `-1` if fn(a) > fn(b), `1` if fn(b) > fn(a), otherwise `0`\n * @see R.ascend\n * @example\n *\n * const byAge = R.descend(R.prop('age'));\n * const people = [\n * { name: 'Emma', age: 70 },\n * { name: 'Peter', age: 78 },\n * { name: 'Mikhail', age: 62 },\n * ];\n * const peopleByOldestFirst = R.sort(byAge, people);\n * //=> [{ name: 'Peter', age: 78 }, { name: 'Emma', age: 70 }, { name: 'Mikhail', age: 62 }]\n */\n\nvar descend =\n/*#__PURE__*/\n_curry3(function descend(fn, a, b) {\n var aa = fn(a);\n var bb = fn(b);\n return aa > bb ? -1 : aa < bb ? 1 : 0;\n});\n\nexport default descend;","import _includes from \"./_includes.js\";\n\nvar _Set =\n/*#__PURE__*/\nfunction () {\n function _Set() {\n /* globals Set */\n this._nativeSet = typeof Set === 'function' ? new Set() : null;\n this._items = {};\n }\n\n // until we figure out why jsdoc chokes on this\n // @param item The item to add to the Set\n // @returns {boolean} true if the item did not exist prior, otherwise false\n //\n _Set.prototype.add = function (item) {\n return !hasOrAdd(item, true, this);\n }; //\n // @param item The item to check for existence in the Set\n // @returns {boolean} true if the item exists in the Set, otherwise false\n //\n\n\n _Set.prototype.has = function (item) {\n return hasOrAdd(item, false, this);\n }; //\n // Combines the logic for checking whether an item is a member of the set and\n // for adding a new item to the set.\n //\n // @param item The item to check or add to the Set instance.\n // @param shouldAdd If true, the item will be added to the set if it doesn't\n // already exist.\n // @param set The set instance to check or add to.\n // @return {boolean} true if the item already existed, otherwise false.\n //\n\n\n return _Set;\n}();\n\nfunction hasOrAdd(item, shouldAdd, set) {\n var type = typeof item;\n var prevSize, newSize;\n\n switch (type) {\n case 'string':\n case 'number':\n // distinguish between +0 and -0\n if (item === 0 && 1 / item === -Infinity) {\n if (set._items['-0']) {\n return true;\n } else {\n if (shouldAdd) {\n set._items['-0'] = true;\n }\n\n return false;\n }\n } // these types can all utilise the native Set\n\n\n if (set._nativeSet !== null) {\n if (shouldAdd) {\n prevSize = set._nativeSet.size;\n\n set._nativeSet.add(item);\n\n newSize = set._nativeSet.size;\n return newSize === prevSize;\n } else {\n return set._nativeSet.has(item);\n }\n } else {\n if (!(type in set._items)) {\n if (shouldAdd) {\n set._items[type] = {};\n set._items[type][item] = true;\n }\n\n return false;\n } else if (item in set._items[type]) {\n return true;\n } else {\n if (shouldAdd) {\n set._items[type][item] = true;\n }\n\n return false;\n }\n }\n\n case 'boolean':\n // set._items['boolean'] holds a two element array\n // representing [ falseExists, trueExists ]\n if (type in set._items) {\n var bIdx = item ? 1 : 0;\n\n if (set._items[type][bIdx]) {\n return true;\n } else {\n if (shouldAdd) {\n set._items[type][bIdx] = true;\n }\n\n return false;\n }\n } else {\n if (shouldAdd) {\n set._items[type] = item ? [false, true] : [true, false];\n }\n\n return false;\n }\n\n case 'function':\n // compare functions for reference equality\n if (set._nativeSet !== null) {\n if (shouldAdd) {\n prevSize = set._nativeSet.size;\n\n set._nativeSet.add(item);\n\n newSize = set._nativeSet.size;\n return newSize === prevSize;\n } else {\n return set._nativeSet.has(item);\n }\n } else {\n if (!(type in set._items)) {\n if (shouldAdd) {\n set._items[type] = [item];\n }\n\n return false;\n }\n\n if (!_includes(item, set._items[type])) {\n if (shouldAdd) {\n set._items[type].push(item);\n }\n\n return false;\n }\n\n return true;\n }\n\n case 'undefined':\n if (set._items[type]) {\n return true;\n } else {\n if (shouldAdd) {\n set._items[type] = true;\n }\n\n return false;\n }\n\n case 'object':\n if (item === null) {\n if (!set._items['null']) {\n if (shouldAdd) {\n set._items['null'] = true;\n }\n\n return false;\n }\n\n return true;\n }\n\n /* falls through */\n\n default:\n // reduce the search size of heterogeneous sets by creating buckets\n // for each type.\n type = Object.prototype.toString.call(item);\n\n if (!(type in set._items)) {\n if (shouldAdd) {\n set._items[type] = [item];\n }\n\n return false;\n } // scan through all previously applied items\n\n\n if (!_includes(item, set._items[type])) {\n if (shouldAdd) {\n set._items[type].push(item);\n }\n\n return false;\n }\n\n return true;\n }\n} // A simple Set type that honours R.equals semantics\n\n\nexport default _Set;","import _curry2 from \"./internal/_curry2.js\";\nimport _Set from \"./internal/_Set.js\";\n/**\n * Finds the set (i.e. no duplicates) of all elements in the first list not\n * contained in the second list. Objects and Arrays are compared in terms of\n * value equality, not reference equality.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig [*] -> [*] -> [*]\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The elements in `list1` that are not in `list2`.\n * @see R.differenceWith, R.symmetricDifference, R.symmetricDifferenceWith, R.without\n * @example\n *\n * R.difference([1,2,3,4], [7,6,5,4,3]); //=> [1,2]\n * R.difference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5]\n * R.difference([{a: 1}, {b: 2}], [{a: 1}, {c: 3}]) //=> [{b: 2}]\n */\n\nvar difference =\n/*#__PURE__*/\n_curry2(function difference(first, second) {\n var out = [];\n var idx = 0;\n var firstLen = first.length;\n var secondLen = second.length;\n var toFilterOut = new _Set();\n\n for (var i = 0; i < secondLen; i += 1) {\n toFilterOut.add(second[i]);\n }\n\n while (idx < firstLen) {\n if (toFilterOut.add(first[idx])) {\n out[out.length] = first[idx];\n }\n\n idx += 1;\n }\n\n return out;\n});\n\nexport default difference;","import _includesWith from \"./internal/_includesWith.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n/**\n * Finds the set (i.e. no duplicates) of all elements in the first list not\n * contained in the second list. Duplication is determined according to the\n * value returned by applying the supplied predicate to two list elements.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a]\n * @param {Function} pred A predicate used to test whether two items are equal.\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The elements in `list1` that are not in `list2`.\n * @see R.difference, R.symmetricDifference, R.symmetricDifferenceWith\n * @example\n *\n * const cmp = (x, y) => x.a === y.a;\n * const l1 = [{a: 1}, {a: 2}, {a: 3}];\n * const l2 = [{a: 3}, {a: 4}];\n * R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}]\n */\n\nvar differenceWith =\n/*#__PURE__*/\n_curry3(function differenceWith(pred, first, second) {\n var out = [];\n var idx = 0;\n var firstLen = first.length;\n\n while (idx < firstLen) {\n if (!_includesWith(pred, first[idx], second) && !_includesWith(pred, first[idx], out)) {\n out.push(first[idx]);\n }\n\n idx += 1;\n }\n\n return out;\n});\n\nexport default differenceWith;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a new object that does not contain a `prop` property.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Object\n * @sig String -> {k: v} -> {k: v}\n * @param {String} prop The name of the property to dissociate\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original but without the specified property\n * @see R.assoc, R.omit\n * @example\n *\n * R.dissoc('b', {a: 1, b: 2, c: 3}); //=> {a: 1, c: 3}\n */\n\nvar dissoc =\n/*#__PURE__*/\n_curry2(function dissoc(prop, obj) {\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n delete result[prop];\n return result;\n});\n\nexport default dissoc;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Removes the sub-list of `list` starting at index `start` and containing\n * `count` elements. _Note that this is not destructive_: it returns a copy of\n * the list with the changes.\n * No lists have been harmed in the application of this function.\n *\n * @func\n * @memberOf R\n * @since v0.2.2\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @param {Number} start The position to start removing elements\n * @param {Number} count The number of elements to remove\n * @param {Array} list The list to remove from\n * @return {Array} A new Array with `count` elements from `start` removed.\n * @see R.without\n * @example\n *\n * R.remove(2, 3, [1,2,3,4,5,6,7,8]); //=> [1,2,6,7,8]\n */\n\nvar remove =\n/*#__PURE__*/\n_curry3(function remove(start, count, list) {\n var result = Array.prototype.slice.call(list, 0);\n result.splice(start, count);\n return result;\n});\n\nexport default remove;","import _curry3 from \"./internal/_curry3.js\";\nimport adjust from \"./adjust.js\";\nimport always from \"./always.js\";\n/**\n * Returns a new copy of the array with the element at the provided index\n * replaced with the given value.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category List\n * @sig Number -> a -> [a] -> [a]\n * @param {Number} idx The index to update.\n * @param {*} x The value to exist at the given index of the returned array.\n * @param {Array|Arguments} list The source array-like object to be updated.\n * @return {Array} A copy of `list` with the value at index `idx` replaced with `x`.\n * @see R.adjust\n * @example\n *\n * R.update(1, '_', ['a', 'b', 'c']); //=> ['a', '_', 'c']\n * R.update(-1, '_', ['a', 'b', 'c']); //=> ['a', 'b', '_']\n * @symb R.update(-1, a, [b, c]) = [b, a]\n * @symb R.update(0, a, [b, c]) = [a, c]\n * @symb R.update(1, a, [b, c]) = [b, a]\n */\n\nvar update =\n/*#__PURE__*/\n_curry3(function update(idx, x, list) {\n return adjust(idx, always(x), list);\n});\n\nexport default update;","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport assoc from \"./assoc.js\";\nimport dissoc from \"./dissoc.js\";\nimport remove from \"./remove.js\";\nimport update from \"./update.js\";\n/**\n * Makes a shallow clone of an object, omitting the property at the given path.\n * Note that this copies and flattens prototype properties onto the new object\n * as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.11.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> {k: v} -> {k: v}\n * @param {Array} path The path to the value to omit\n * @param {Object} obj The object to clone\n * @return {Object} A new object without the property at path\n * @see R.assocPath\n * @example\n *\n * R.dissocPath(['a', 'b', 'c'], {a: {b: {c: 42}}}); //=> {a: {b: {}}}\n */\n\nvar dissocPath =\n/*#__PURE__*/\n_curry2(function dissocPath(path, obj) {\n switch (path.length) {\n case 0:\n return obj;\n\n case 1:\n return _isInteger(path[0]) && _isArray(obj) ? remove(path[0], 1, obj) : dissoc(path[0], obj);\n\n default:\n var head = path[0];\n var tail = Array.prototype.slice.call(path, 1);\n\n if (obj[head] == null) {\n return obj;\n } else if (_isInteger(head) && _isArray(obj)) {\n return update(head, dissocPath(tail, obj[head]), obj);\n } else {\n return assoc(head, dissocPath(tail, obj[head]), obj);\n }\n\n }\n});\n\nexport default dissocPath;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Divides two numbers. Equivalent to `a / b`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a The first value.\n * @param {Number} b The second value.\n * @return {Number} The result of `a / b`.\n * @see R.multiply\n * @example\n *\n * R.divide(71, 100); //=> 0.71\n *\n * const half = R.divide(R.__, 2);\n * half(42); //=> 21\n *\n * const reciprocal = R.divide(1);\n * reciprocal(4); //=> 0.25\n */\n\nvar divide =\n/*#__PURE__*/\n_curry2(function divide(a, b) {\n return a / b;\n});\n\nexport default divide;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XDrop =\n/*#__PURE__*/\nfunction () {\n function XDrop(n, xf) {\n this.xf = xf;\n this.n = n;\n }\n\n XDrop.prototype['@@transducer/init'] = _xfBase.init;\n XDrop.prototype['@@transducer/result'] = _xfBase.result;\n\n XDrop.prototype['@@transducer/step'] = function (result, input) {\n if (this.n > 0) {\n this.n -= 1;\n return result;\n }\n\n return this.xf['@@transducer/step'](result, input);\n };\n\n return XDrop;\n}();\n\nvar _xdrop =\n/*#__PURE__*/\n_curry2(function _xdrop(n, xf) {\n return new XDrop(n, xf);\n});\n\nexport default _xdrop;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xdrop from \"./internal/_xdrop.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns all but the first `n` elements of the given list, string, or\n * transducer/transformer (or object with a `drop` method).\n *\n * Dispatches to the `drop` method of the second argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> [a] -> [a]\n * @sig Number -> String -> String\n * @param {Number} n\n * @param {*} list\n * @return {*} A copy of list without the first `n` elements\n * @see R.take, R.transduce, R.dropLast, R.dropWhile\n * @example\n *\n * R.drop(1, ['foo', 'bar', 'baz']); //=> ['bar', 'baz']\n * R.drop(2, ['foo', 'bar', 'baz']); //=> ['baz']\n * R.drop(3, ['foo', 'bar', 'baz']); //=> []\n * R.drop(4, ['foo', 'bar', 'baz']); //=> []\n * R.drop(3, 'ramda'); //=> 'da'\n */\n\nvar drop =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['drop'], _xdrop, function drop(n, xs) {\n return slice(Math.max(0, n), Infinity, xs);\n}));\n\nexport default drop;","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XTake =\n/*#__PURE__*/\nfunction () {\n function XTake(n, xf) {\n this.xf = xf;\n this.n = n;\n this.i = 0;\n }\n\n XTake.prototype['@@transducer/init'] = _xfBase.init;\n XTake.prototype['@@transducer/result'] = _xfBase.result;\n\n XTake.prototype['@@transducer/step'] = function (result, input) {\n this.i += 1;\n var ret = this.n === 0 ? result : this.xf['@@transducer/step'](result, input);\n return this.n >= 0 && this.i >= this.n ? _reduced(ret) : ret;\n };\n\n return XTake;\n}();\n\nvar _xtake =\n/*#__PURE__*/\n_curry2(function _xtake(n, xf) {\n return new XTake(n, xf);\n});\n\nexport default _xtake;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xtake from \"./internal/_xtake.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns the first `n` elements of the given list, string, or\n * transducer/transformer (or object with a `take` method).\n *\n * Dispatches to the `take` method of the second argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> [a] -> [a]\n * @sig Number -> String -> String\n * @param {Number} n\n * @param {*} list\n * @return {*}\n * @see R.drop\n * @example\n *\n * R.take(1, ['foo', 'bar', 'baz']); //=> ['foo']\n * R.take(2, ['foo', 'bar', 'baz']); //=> ['foo', 'bar']\n * R.take(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']\n * R.take(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']\n * R.take(3, 'ramda'); //=> 'ram'\n *\n * const personnel = [\n * 'Dave Brubeck',\n * 'Paul Desmond',\n * 'Eugene Wright',\n * 'Joe Morello',\n * 'Gerry Mulligan',\n * 'Bob Bates',\n * 'Joe Dodge',\n * 'Ron Crotty'\n * ];\n *\n * const takeFive = R.take(5);\n * takeFive(personnel);\n * //=> ['Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan']\n * @symb R.take(-1, [a, b]) = [a, b]\n * @symb R.take(0, [a, b]) = []\n * @symb R.take(1, [a, b]) = [a]\n * @symb R.take(2, [a, b]) = [a, b]\n */\n\nvar take =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['take'], _xtake, function take(n, xs) {\n return slice(0, n < 0 ? Infinity : n, xs);\n}));\n\nexport default take;","import take from \"../take.js\";\nexport default function dropLast(n, xs) {\n return take(n < xs.length ? xs.length - n : 0, xs);\n}","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XDropLast =\n/*#__PURE__*/\nfunction () {\n function XDropLast(n, xf) {\n this.xf = xf;\n this.pos = 0;\n this.full = false;\n this.acc = new Array(n);\n }\n\n XDropLast.prototype['@@transducer/init'] = _xfBase.init;\n\n XDropLast.prototype['@@transducer/result'] = function (result) {\n this.acc = null;\n return this.xf['@@transducer/result'](result);\n };\n\n XDropLast.prototype['@@transducer/step'] = function (result, input) {\n if (this.full) {\n result = this.xf['@@transducer/step'](result, this.acc[this.pos]);\n }\n\n this.store(input);\n return result;\n };\n\n XDropLast.prototype.store = function (input) {\n this.acc[this.pos] = input;\n this.pos += 1;\n\n if (this.pos === this.acc.length) {\n this.pos = 0;\n this.full = true;\n }\n };\n\n return XDropLast;\n}();\n\nvar _xdropLast =\n/*#__PURE__*/\n_curry2(function _xdropLast(n, xf) {\n return new XDropLast(n, xf);\n});\n\nexport default _xdropLast;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _dropLast from \"./internal/_dropLast.js\";\nimport _xdropLast from \"./internal/_xdropLast.js\";\n/**\n * Returns a list containing all but the last `n` elements of the given `list`.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig Number -> [a] -> [a]\n * @sig Number -> String -> String\n * @param {Number} n The number of elements of `list` to skip.\n * @param {Array} list The list of elements to consider.\n * @return {Array} A copy of the list with only the first `list.length - n` elements\n * @see R.takeLast, R.drop, R.dropWhile, R.dropLastWhile\n * @example\n *\n * R.dropLast(1, ['foo', 'bar', 'baz']); //=> ['foo', 'bar']\n * R.dropLast(2, ['foo', 'bar', 'baz']); //=> ['foo']\n * R.dropLast(3, ['foo', 'bar', 'baz']); //=> []\n * R.dropLast(4, ['foo', 'bar', 'baz']); //=> []\n * R.dropLast(3, 'ramda'); //=> 'ra'\n */\n\nvar dropLast =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xdropLast, _dropLast));\n\nexport default dropLast;","import slice from \"../slice.js\";\nexport default function dropLastWhile(pred, xs) {\n var idx = xs.length - 1;\n\n while (idx >= 0 && pred(xs[idx])) {\n idx -= 1;\n }\n\n return slice(0, idx + 1, xs);\n}","import _curry2 from \"./_curry2.js\";\nimport _reduce from \"./_reduce.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XDropLastWhile =\n/*#__PURE__*/\nfunction () {\n function XDropLastWhile(fn, xf) {\n this.f = fn;\n this.retained = [];\n this.xf = xf;\n }\n\n XDropLastWhile.prototype['@@transducer/init'] = _xfBase.init;\n\n XDropLastWhile.prototype['@@transducer/result'] = function (result) {\n this.retained = null;\n return this.xf['@@transducer/result'](result);\n };\n\n XDropLastWhile.prototype['@@transducer/step'] = function (result, input) {\n return this.f(input) ? this.retain(result, input) : this.flush(result, input);\n };\n\n XDropLastWhile.prototype.flush = function (result, input) {\n result = _reduce(this.xf['@@transducer/step'], result, this.retained);\n this.retained = [];\n return this.xf['@@transducer/step'](result, input);\n };\n\n XDropLastWhile.prototype.retain = function (result, input) {\n this.retained.push(input);\n return result;\n };\n\n return XDropLastWhile;\n}();\n\nvar _xdropLastWhile =\n/*#__PURE__*/\n_curry2(function _xdropLastWhile(fn, xf) {\n return new XDropLastWhile(fn, xf);\n});\n\nexport default _xdropLastWhile;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _dropLastWhile from \"./internal/_dropLastWhile.js\";\nimport _xdropLastWhile from \"./internal/_xdropLastWhile.js\";\n/**\n * Returns a new list excluding all the tailing elements of a given list which\n * satisfy the supplied predicate function. It passes each value from the right\n * to the supplied predicate function, skipping elements until the predicate\n * function returns a `falsy` value. The predicate function is applied to one argument:\n * *(value)*.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> [a]\n * @sig (a -> Boolean) -> String -> String\n * @param {Function} predicate The function to be called on each element\n * @param {Array} xs The collection to iterate over.\n * @return {Array} A new array without any trailing elements that return `falsy` values from the `predicate`.\n * @see R.takeLastWhile, R.addIndex, R.drop, R.dropWhile\n * @example\n *\n * const lteThree = x => x <= 3;\n *\n * R.dropLastWhile(lteThree, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3, 4]\n *\n * R.dropLastWhile(x => x !== 'd' , 'Ramda'); //=> 'Ramd'\n */\n\nvar dropLastWhile =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xdropLastWhile, _dropLastWhile));\n\nexport default dropLastWhile;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XDropRepeatsWith =\n/*#__PURE__*/\nfunction () {\n function XDropRepeatsWith(pred, xf) {\n this.xf = xf;\n this.pred = pred;\n this.lastValue = undefined;\n this.seenFirstValue = false;\n }\n\n XDropRepeatsWith.prototype['@@transducer/init'] = _xfBase.init;\n XDropRepeatsWith.prototype['@@transducer/result'] = _xfBase.result;\n\n XDropRepeatsWith.prototype['@@transducer/step'] = function (result, input) {\n var sameAsLast = false;\n\n if (!this.seenFirstValue) {\n this.seenFirstValue = true;\n } else if (this.pred(this.lastValue, input)) {\n sameAsLast = true;\n }\n\n this.lastValue = input;\n return sameAsLast ? result : this.xf['@@transducer/step'](result, input);\n };\n\n return XDropRepeatsWith;\n}();\n\nvar _xdropRepeatsWith =\n/*#__PURE__*/\n_curry2(function _xdropRepeatsWith(pred, xf) {\n return new XDropRepeatsWith(pred, xf);\n});\n\nexport default _xdropRepeatsWith;","import nth from \"./nth.js\";\n/**\n * Returns the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.init, R.head, R.tail\n * @example\n *\n * R.last(['fi', 'fo', 'fum']); //=> 'fum'\n * R.last([]); //=> undefined\n *\n * R.last('abc'); //=> 'c'\n * R.last(''); //=> ''\n */\n\nvar last =\n/*#__PURE__*/\nnth(-1);\nexport default last;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xdropRepeatsWith from \"./internal/_xdropRepeatsWith.js\";\nimport last from \"./last.js\";\n/**\n * Returns a new list without any consecutively repeating elements. Equality is\n * determined by applying the supplied predicate to each pair of consecutive elements. The\n * first element in a series of equal elements will be preserved.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category List\n * @sig ((a, a) -> Boolean) -> [a] -> [a]\n * @param {Function} pred A predicate used to test whether two items are equal.\n * @param {Array} list The array to consider.\n * @return {Array} `list` without repeating elements.\n * @see R.transduce\n * @example\n *\n * const l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3];\n * R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3]\n */\n\nvar dropRepeatsWith =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xdropRepeatsWith, function dropRepeatsWith(pred, list) {\n var result = [];\n var idx = 1;\n var len = list.length;\n\n if (len !== 0) {\n result[0] = list[0];\n\n while (idx < len) {\n if (!pred(last(result), list[idx])) {\n result[result.length] = list[idx];\n }\n\n idx += 1;\n }\n }\n\n return result;\n}));\n\nexport default dropRepeatsWith;","import _curry1 from \"./internal/_curry1.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xdropRepeatsWith from \"./internal/_xdropRepeatsWith.js\";\nimport dropRepeatsWith from \"./dropRepeatsWith.js\";\nimport equals from \"./equals.js\";\n/**\n * Returns a new list without any consecutively repeating elements.\n * [`R.equals`](#equals) is used to determine equality.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category List\n * @sig [a] -> [a]\n * @param {Array} list The array to consider.\n * @return {Array} `list` without repeating elements.\n * @see R.transduce\n * @example\n *\n * R.dropRepeats([1, 1, 1, 2, 3, 4, 4, 2, 2]); //=> [1, 2, 3, 4, 2]\n */\n\nvar dropRepeats =\n/*#__PURE__*/\n_curry1(\n/*#__PURE__*/\n_dispatchable([],\n/*#__PURE__*/\n_xdropRepeatsWith(equals),\n/*#__PURE__*/\ndropRepeatsWith(equals)));\n\nexport default dropRepeats;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XDropWhile =\n/*#__PURE__*/\nfunction () {\n function XDropWhile(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XDropWhile.prototype['@@transducer/init'] = _xfBase.init;\n XDropWhile.prototype['@@transducer/result'] = _xfBase.result;\n\n XDropWhile.prototype['@@transducer/step'] = function (result, input) {\n if (this.f) {\n if (this.f(input)) {\n return result;\n }\n\n this.f = null;\n }\n\n return this.xf['@@transducer/step'](result, input);\n };\n\n return XDropWhile;\n}();\n\nvar _xdropWhile =\n/*#__PURE__*/\n_curry2(function _xdropWhile(f, xf) {\n return new XDropWhile(f, xf);\n});\n\nexport default _xdropWhile;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xdropWhile from \"./internal/_xdropWhile.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns a new list excluding the leading elements of a given list which\n * satisfy the supplied predicate function. It passes each value to the supplied\n * predicate function, skipping elements while the predicate function returns\n * `true`. The predicate function is applied to one argument: *(value)*.\n *\n * Dispatches to the `dropWhile` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> [a]\n * @sig (a -> Boolean) -> String -> String\n * @param {Function} fn The function called per iteration.\n * @param {Array} xs The collection to iterate over.\n * @return {Array} A new array.\n * @see R.takeWhile, R.transduce, R.addIndex\n * @example\n *\n * const lteTwo = x => x <= 2;\n *\n * R.dropWhile(lteTwo, [1, 2, 3, 4, 3, 2, 1]); //=> [3, 4, 3, 2, 1]\n *\n * R.dropWhile(x => x !== 'd' , 'Ramda'); //=> 'da'\n */\n\nvar dropWhile =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['dropWhile'], _xdropWhile, function dropWhile(pred, xs) {\n var idx = 0;\n var len = xs.length;\n\n while (idx < len && pred(xs[idx])) {\n idx += 1;\n }\n\n return slice(idx, Infinity, xs);\n}));\n\nexport default dropWhile;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if one or both of its arguments are `true`. Returns `false`\n * if both arguments are `false`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig a -> b -> a | b\n * @param {Any} a\n * @param {Any} b\n * @return {Any} the first argument if truthy, otherwise the second argument.\n * @see R.either, R.xor\n * @example\n *\n * R.or(true, true); //=> true\n * R.or(true, false); //=> true\n * R.or(false, true); //=> true\n * R.or(false, false); //=> false\n */\n\nvar or =\n/*#__PURE__*/\n_curry2(function or(a, b) {\n return a || b;\n});\n\nexport default or;","import _curry2 from \"./internal/_curry2.js\";\nimport _isFunction from \"./internal/_isFunction.js\";\nimport lift from \"./lift.js\";\nimport or from \"./or.js\";\n/**\n * A function wrapping calls to the two functions in an `||` operation,\n * returning the result of the first function if it is truth-y and the result\n * of the second function otherwise. Note that this is short-circuited,\n * meaning that the second function will not be invoked if the first returns a\n * truth-y value.\n *\n * In addition to functions, `R.either` also accepts any fantasy-land compatible\n * applicative functor.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean)\n * @param {Function} f a predicate\n * @param {Function} g another predicate\n * @return {Function} a function that applies its arguments to `f` and `g` and `||`s their outputs together.\n * @see R.or\n * @example\n *\n * const gt10 = x => x > 10;\n * const even = x => x % 2 === 0;\n * const f = R.either(gt10, even);\n * f(101); //=> true\n * f(8); //=> true\n *\n * R.either(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(55)\n * R.either([false, false, 'a'], [11]) // => [11, 11, \"a\"]\n */\n\nvar either =\n/*#__PURE__*/\n_curry2(function either(f, g) {\n return _isFunction(f) ? function _either() {\n return f.apply(this, arguments) || g.apply(this, arguments);\n } : lift(or)(f, g);\n});\n\nexport default either;","import _curry1 from \"./internal/_curry1.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _isString from \"./internal/_isString.js\";\n/**\n * Returns the empty value of its argument's type. Ramda defines the empty\n * value of Array (`[]`), Object (`{}`), String (`''`), and Arguments. Other\n * types are supported if they define `.empty`,\n * `.prototype.empty` or implement the\n * [FantasyLand Monoid spec](https://github.com/fantasyland/fantasy-land#monoid).\n *\n * Dispatches to the `empty` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig a -> a\n * @param {*} x\n * @return {*}\n * @example\n *\n * R.empty(Just(42)); //=> Nothing()\n * R.empty([1, 2, 3]); //=> []\n * R.empty('unicorns'); //=> ''\n * R.empty({x: 1, y: 2}); //=> {}\n */\n\nvar empty =\n/*#__PURE__*/\n_curry1(function empty(x) {\n return x != null && typeof x['fantasy-land/empty'] === 'function' ? x['fantasy-land/empty']() : x != null && x.constructor != null && typeof x.constructor['fantasy-land/empty'] === 'function' ? x.constructor['fantasy-land/empty']() : x != null && typeof x.empty === 'function' ? x.empty() : x != null && x.constructor != null && typeof x.constructor.empty === 'function' ? x.constructor.empty() : _isArray(x) ? [] : _isString(x) ? '' : _isObject(x) ? {} : _isArguments(x) ? function () {\n return arguments;\n }() : void 0 // else\n ;\n});\n\nexport default empty;","import _curry2 from \"./internal/_curry2.js\";\nimport drop from \"./drop.js\";\n/**\n * Returns a new list containing the last `n` elements of the given list.\n * If `n > list.length`, returns a list of `list.length` elements.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig Number -> [a] -> [a]\n * @sig Number -> String -> String\n * @param {Number} n The number of elements to return.\n * @param {Array} xs The collection to consider.\n * @return {Array}\n * @see R.dropLast\n * @example\n *\n * R.takeLast(1, ['foo', 'bar', 'baz']); //=> ['baz']\n * R.takeLast(2, ['foo', 'bar', 'baz']); //=> ['bar', 'baz']\n * R.takeLast(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']\n * R.takeLast(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']\n * R.takeLast(3, 'ramda'); //=> 'mda'\n */\n\nvar takeLast =\n/*#__PURE__*/\n_curry2(function takeLast(n, xs) {\n return drop(n >= 0 ? xs.length - n : 0, xs);\n});\n\nexport default takeLast;","import _curry2 from \"./internal/_curry2.js\";\nimport equals from \"./equals.js\";\nimport takeLast from \"./takeLast.js\";\n/**\n * Checks if a list ends with the provided sublist.\n *\n * Similarly, checks if a string ends with the provided substring.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category List\n * @sig [a] -> [a] -> Boolean\n * @sig String -> String -> Boolean\n * @param {*} suffix\n * @param {*} list\n * @return {Boolean}\n * @see R.startsWith\n * @example\n *\n * R.endsWith('c', 'abc') //=> true\n * R.endsWith('b', 'abc') //=> false\n * R.endsWith(['c'], ['a', 'b', 'c']) //=> true\n * R.endsWith(['b'], ['a', 'b', 'c']) //=> false\n */\n\nvar endsWith =\n/*#__PURE__*/\n_curry2(function (suffix, list) {\n return equals(takeLast(suffix.length, list), suffix);\n});\n\nexport default endsWith;","import _curry3 from \"./internal/_curry3.js\";\nimport equals from \"./equals.js\";\n/**\n * Takes a function and two values in its domain and returns `true` if the\n * values map to the same value in the codomain; `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category Relation\n * @sig (a -> b) -> a -> a -> Boolean\n * @param {Function} f\n * @param {*} x\n * @param {*} y\n * @return {Boolean}\n * @example\n *\n * R.eqBy(Math.abs, 5, -5); //=> true\n */\n\nvar eqBy =\n/*#__PURE__*/\n_curry3(function eqBy(f, x, y) {\n return equals(f(x), f(y));\n});\n\nexport default eqBy;","import _curry3 from \"./internal/_curry3.js\";\nimport equals from \"./equals.js\";\n/**\n * Reports whether two objects have the same value, in [`R.equals`](#equals)\n * terms, for the specified property. Useful as a curried predicate.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig k -> {k: v} -> {k: v} -> Boolean\n * @param {String} prop The name of the property to compare\n * @param {Object} obj1\n * @param {Object} obj2\n * @return {Boolean}\n *\n * @example\n *\n * const o1 = { a: 1, b: 2, c: 3, d: 4 };\n * const o2 = { a: 10, b: 20, c: 3, d: 40 };\n * R.eqProps('a', o1, o2); //=> false\n * R.eqProps('c', o1, o2); //=> true\n */\n\nvar eqProps =\n/*#__PURE__*/\n_curry3(function eqProps(prop, obj1, obj2) {\n return equals(obj1[prop], obj2[prop]);\n});\n\nexport default eqProps;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a new object by recursively evolving a shallow copy of `object`,\n * according to the `transformation` functions. All non-primitive properties\n * are copied by reference.\n *\n * A `transformation` function will not be invoked if its corresponding key\n * does not exist in the evolved object.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Object\n * @sig {k: (v -> v)} -> {k: v} -> {k: v}\n * @param {Object} transformations The object specifying transformation functions to apply\n * to the object.\n * @param {Object} object The object to be transformed.\n * @return {Object} The transformed object.\n * @example\n *\n * const tomato = {firstName: ' Tomato ', data: {elapsed: 100, remaining: 1400}, id:123};\n * const transformations = {\n * firstName: R.trim,\n * lastName: R.trim, // Will not get invoked.\n * data: {elapsed: R.add(1), remaining: R.add(-1)}\n * };\n * R.evolve(transformations, tomato); //=> {firstName: 'Tomato', data: {elapsed: 101, remaining: 1399}, id:123}\n */\n\nvar evolve =\n/*#__PURE__*/\n_curry2(function evolve(transformations, object) {\n var result = object instanceof Array ? [] : {};\n var transformation, key, type;\n\n for (key in object) {\n transformation = transformations[key];\n type = typeof transformation;\n result[key] = type === 'function' ? transformation(object[key]) : transformation && type === 'object' ? evolve(transformation, object[key]) : object[key];\n }\n\n return result;\n});\n\nexport default evolve;","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XFind =\n/*#__PURE__*/\nfunction () {\n function XFind(f, xf) {\n this.xf = xf;\n this.f = f;\n this.found = false;\n }\n\n XFind.prototype['@@transducer/init'] = _xfBase.init;\n\n XFind.prototype['@@transducer/result'] = function (result) {\n if (!this.found) {\n result = this.xf['@@transducer/step'](result, void 0);\n }\n\n return this.xf['@@transducer/result'](result);\n };\n\n XFind.prototype['@@transducer/step'] = function (result, input) {\n if (this.f(input)) {\n this.found = true;\n result = _reduced(this.xf['@@transducer/step'](result, input));\n }\n\n return result;\n };\n\n return XFind;\n}();\n\nvar _xfind =\n/*#__PURE__*/\n_curry2(function _xfind(f, xf) {\n return new XFind(f, xf);\n});\n\nexport default _xfind;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfind from \"./internal/_xfind.js\";\n/**\n * Returns the first element of the list which matches the predicate, or\n * `undefined` if no element matches.\n *\n * Dispatches to the `find` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> a | undefined\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Object} The element found, or `undefined`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1}, {a: 2}, {a: 3}];\n * R.find(R.propEq('a', 2))(xs); //=> {a: 2}\n * R.find(R.propEq('a', 4))(xs); //=> undefined\n */\n\nvar find =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['find'], _xfind, function find(fn, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n if (fn(list[idx])) {\n return list[idx];\n }\n\n idx += 1;\n }\n}));\n\nexport default find;","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XFindIndex =\n/*#__PURE__*/\nfunction () {\n function XFindIndex(f, xf) {\n this.xf = xf;\n this.f = f;\n this.idx = -1;\n this.found = false;\n }\n\n XFindIndex.prototype['@@transducer/init'] = _xfBase.init;\n\n XFindIndex.prototype['@@transducer/result'] = function (result) {\n if (!this.found) {\n result = this.xf['@@transducer/step'](result, -1);\n }\n\n return this.xf['@@transducer/result'](result);\n };\n\n XFindIndex.prototype['@@transducer/step'] = function (result, input) {\n this.idx += 1;\n\n if (this.f(input)) {\n this.found = true;\n result = _reduced(this.xf['@@transducer/step'](result, this.idx));\n }\n\n return result;\n };\n\n return XFindIndex;\n}();\n\nvar _xfindIndex =\n/*#__PURE__*/\n_curry2(function _xfindIndex(f, xf) {\n return new XFindIndex(f, xf);\n});\n\nexport default _xfindIndex;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfindIndex from \"./internal/_xfindIndex.js\";\n/**\n * Returns the index of the first element of the list which matches the\n * predicate, or `-1` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> Number\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Number} The index of the element found, or `-1`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1}, {a: 2}, {a: 3}];\n * R.findIndex(R.propEq('a', 2))(xs); //=> 1\n * R.findIndex(R.propEq('a', 4))(xs); //=> -1\n */\n\nvar findIndex =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xfindIndex, function findIndex(fn, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n if (fn(list[idx])) {\n return idx;\n }\n\n idx += 1;\n }\n\n return -1;\n}));\n\nexport default findIndex;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XFindLast =\n/*#__PURE__*/\nfunction () {\n function XFindLast(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XFindLast.prototype['@@transducer/init'] = _xfBase.init;\n\n XFindLast.prototype['@@transducer/result'] = function (result) {\n return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.last));\n };\n\n XFindLast.prototype['@@transducer/step'] = function (result, input) {\n if (this.f(input)) {\n this.last = input;\n }\n\n return result;\n };\n\n return XFindLast;\n}();\n\nvar _xfindLast =\n/*#__PURE__*/\n_curry2(function _xfindLast(f, xf) {\n return new XFindLast(f, xf);\n});\n\nexport default _xfindLast;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfindLast from \"./internal/_xfindLast.js\";\n/**\n * Returns the last element of the list which matches the predicate, or\n * `undefined` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> a | undefined\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Object} The element found, or `undefined`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1, b: 0}, {a:1, b: 1}];\n * R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1}\n * R.findLast(R.propEq('a', 4))(xs); //=> undefined\n */\n\nvar findLast =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xfindLast, function findLast(fn, list) {\n var idx = list.length - 1;\n\n while (idx >= 0) {\n if (fn(list[idx])) {\n return list[idx];\n }\n\n idx -= 1;\n }\n}));\n\nexport default findLast;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XFindLastIndex =\n/*#__PURE__*/\nfunction () {\n function XFindLastIndex(f, xf) {\n this.xf = xf;\n this.f = f;\n this.idx = -1;\n this.lastIdx = -1;\n }\n\n XFindLastIndex.prototype['@@transducer/init'] = _xfBase.init;\n\n XFindLastIndex.prototype['@@transducer/result'] = function (result) {\n return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.lastIdx));\n };\n\n XFindLastIndex.prototype['@@transducer/step'] = function (result, input) {\n this.idx += 1;\n\n if (this.f(input)) {\n this.lastIdx = this.idx;\n }\n\n return result;\n };\n\n return XFindLastIndex;\n}();\n\nvar _xfindLastIndex =\n/*#__PURE__*/\n_curry2(function _xfindLastIndex(f, xf) {\n return new XFindLastIndex(f, xf);\n});\n\nexport default _xfindLastIndex;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfindLastIndex from \"./internal/_xfindLastIndex.js\";\n/**\n * Returns the index of the last element of the list which matches the\n * predicate, or `-1` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> Number\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Number} The index of the element found, or `-1`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1, b: 0}, {a:1, b: 1}];\n * R.findLastIndex(R.propEq('a', 1))(xs); //=> 1\n * R.findLastIndex(R.propEq('a', 4))(xs); //=> -1\n */\n\nvar findLastIndex =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xfindLastIndex, function findLastIndex(fn, list) {\n var idx = list.length - 1;\n\n while (idx >= 0) {\n if (fn(list[idx])) {\n return idx;\n }\n\n idx -= 1;\n }\n\n return -1;\n}));\n\nexport default findLastIndex;","import _curry1 from \"./internal/_curry1.js\";\nimport _makeFlat from \"./internal/_makeFlat.js\";\n/**\n * Returns a new list by pulling every item out of it (and all its sub-arrays)\n * and putting them in a new array, depth-first.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [b]\n * @param {Array} list The array to consider.\n * @return {Array} The flattened list.\n * @see R.unnest\n * @example\n *\n * R.flatten([1, 2, [3, 4], 5, [6, [7, 8, [9, [10, 11], 12]]]]);\n * //=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]\n */\n\nvar flatten =\n/*#__PURE__*/\n_curry1(\n/*#__PURE__*/\n_makeFlat(true));\n\nexport default flatten;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Returns a new function much like the supplied one, except that the first two\n * arguments' order is reversed.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig ((a, b, c, ...) -> z) -> (b -> a -> c -> ... -> z)\n * @param {Function} fn The function to invoke with its first two parameters reversed.\n * @return {*} The result of invoking `fn` with its first two parameters' order reversed.\n * @example\n *\n * const mergeThree = (a, b, c) => [].concat(a, b, c);\n *\n * mergeThree(1, 2, 3); //=> [1, 2, 3]\n *\n * R.flip(mergeThree)(1, 2, 3); //=> [2, 1, 3]\n * @symb R.flip(f)(a, b, c) = f(b, a, c)\n */\n\nvar flip =\n/*#__PURE__*/\n_curry1(function flip(fn) {\n return curryN(fn.length, function (a, b) {\n var args = Array.prototype.slice.call(arguments, 0);\n args[0] = b;\n args[1] = a;\n return fn.apply(this, args);\n });\n});\n\nexport default flip;","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Iterate over an input `list`, calling a provided function `fn` for each\n * element in the list.\n *\n * `fn` receives one argument: *(value)*.\n *\n * Note: `R.forEach` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.forEach` method. For more\n * details on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Description\n *\n * Also note that, unlike `Array.prototype.forEach`, Ramda's `forEach` returns\n * the original array. In some libraries this function is named `each`.\n *\n * Dispatches to the `forEach` method of the second argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> *) -> [a] -> [a]\n * @param {Function} fn The function to invoke. Receives one argument, `value`.\n * @param {Array} list The list to iterate over.\n * @return {Array} The original list.\n * @see R.addIndex\n * @example\n *\n * const printXPlusFive = x => console.log(x + 5);\n * R.forEach(printXPlusFive, [1, 2, 3]); //=> [1, 2, 3]\n * // logs 6\n * // logs 7\n * // logs 8\n * @symb R.forEach(f, [a, b, c]) = [a, b, c]\n */\n\nvar forEach =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_checkForMethod('forEach', function forEach(fn, list) {\n var len = list.length;\n var idx = 0;\n\n while (idx < len) {\n fn(list[idx]);\n idx += 1;\n }\n\n return list;\n}));\n\nexport default forEach;","import _curry2 from \"./internal/_curry2.js\";\nimport keys from \"./keys.js\";\n/**\n * Iterate over an input `object`, calling a provided function `fn` for each\n * key and value in the object.\n *\n * `fn` receives three argument: *(value, key, obj)*.\n *\n * @func\n * @memberOf R\n * @since v0.23.0\n * @category Object\n * @sig ((a, String, StrMap a) -> Any) -> StrMap a -> StrMap a\n * @param {Function} fn The function to invoke. Receives three argument, `value`, `key`, `obj`.\n * @param {Object} obj The object to iterate over.\n * @return {Object} The original object.\n * @example\n *\n * const printKeyConcatValue = (value, key) => console.log(key + ':' + value);\n * R.forEachObjIndexed(printKeyConcatValue, {x: 1, y: 2}); //=> {x: 1, y: 2}\n * // logs x:1\n * // logs y:2\n * @symb R.forEachObjIndexed(f, {x: a, y: b}) = {x: a, y: b}\n */\n\nvar forEachObjIndexed =\n/*#__PURE__*/\n_curry2(function forEachObjIndexed(fn, obj) {\n var keyList = keys(obj);\n var idx = 0;\n\n while (idx < keyList.length) {\n var key = keyList[idx];\n fn(obj[key], key, obj);\n idx += 1;\n }\n\n return obj;\n});\n\nexport default forEachObjIndexed;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Creates a new object from a list key-value pairs. If a key appears in\n * multiple pairs, the rightmost pair is included in the object.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category List\n * @sig [[k,v]] -> {k: v}\n * @param {Array} pairs An array of two-element arrays that will be the keys and values of the output object.\n * @return {Object} The object made by pairing up `keys` and `values`.\n * @see R.toPairs, R.pair\n * @example\n *\n * R.fromPairs([['a', 1], ['b', 2], ['c', 3]]); //=> {a: 1, b: 2, c: 3}\n */\n\nvar fromPairs =\n/*#__PURE__*/\n_curry1(function fromPairs(pairs) {\n var result = {};\n var idx = 0;\n\n while (idx < pairs.length) {\n result[pairs[idx][0]] = pairs[idx][1];\n idx += 1;\n }\n\n return result;\n});\n\nexport default fromPairs;","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport reduceBy from \"./reduceBy.js\";\n/**\n * Splits a list into sub-lists stored in an object, based on the result of\n * calling a String-returning function on each element, and grouping the\n * results according to values returned.\n *\n * Dispatches to the `groupBy` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> String) -> [a] -> {String: [a]}\n * @param {Function} fn Function :: a -> String\n * @param {Array} list The array to group\n * @return {Object} An object with the output of `fn` for keys, mapped to arrays of elements\n * that produced that key when passed to `fn`.\n * @see R.reduceBy, R.transduce\n * @example\n *\n * const byGrade = R.groupBy(function(student) {\n * const score = student.score;\n * return score < 65 ? 'F' :\n * score < 70 ? 'D' :\n * score < 80 ? 'C' :\n * score < 90 ? 'B' : 'A';\n * });\n * const students = [{name: 'Abby', score: 84},\n * {name: 'Eddy', score: 58},\n * // ...\n * {name: 'Jack', score: 69}];\n * byGrade(students);\n * // {\n * // 'A': [{name: 'Dianne', score: 99}],\n * // 'B': [{name: 'Abby', score: 84}]\n * // // ...,\n * // 'F': [{name: 'Eddy', score: 58}]\n * // }\n */\n\nvar groupBy =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_checkForMethod('groupBy',\n/*#__PURE__*/\nreduceBy(function (acc, item) {\n if (acc == null) {\n acc = [];\n }\n\n acc.push(item);\n return acc;\n}, null)));\n\nexport default groupBy;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Takes a list and returns a list of lists where each sublist's elements are\n * all satisfied pairwise comparison according to the provided function.\n * Only adjacent elements are passed to the comparison function.\n *\n * @func\n * @memberOf R\n * @since v0.21.0\n * @category List\n * @sig ((a, a) → Boolean) → [a] → [[a]]\n * @param {Function} fn Function for determining whether two given (adjacent)\n * elements should be in the same group\n * @param {Array} list The array to group. Also accepts a string, which will be\n * treated as a list of characters.\n * @return {List} A list that contains sublists of elements,\n * whose concatenations are equal to the original list.\n * @example\n *\n * R.groupWith(R.equals, [0, 1, 1, 2, 3, 5, 8, 13, 21])\n * //=> [[0], [1, 1], [2], [3], [5], [8], [13], [21]]\n *\n * R.groupWith((a, b) => a + 1 === b, [0, 1, 1, 2, 3, 5, 8, 13, 21])\n * //=> [[0, 1], [1, 2, 3], [5], [8], [13], [21]]\n *\n * R.groupWith((a, b) => a % 2 === b % 2, [0, 1, 1, 2, 3, 5, 8, 13, 21])\n * //=> [[0], [1, 1], [2], [3, 5], [8], [13, 21]]\n *\n * R.groupWith(R.eqBy(isVowel), 'aestiou')\n * //=> ['ae', 'st', 'iou']\n */\n\nvar groupWith =\n/*#__PURE__*/\n_curry2(function (fn, list) {\n var res = [];\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n var nextidx = idx + 1;\n\n while (nextidx < len && fn(list[nextidx - 1], list[nextidx])) {\n nextidx += 1;\n }\n\n res.push(list.slice(idx, nextidx));\n idx = nextidx;\n }\n\n return res;\n});\n\nexport default groupWith;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the first argument is greater than the second; `false`\n * otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @see R.lt\n * @example\n *\n * R.gt(2, 1); //=> true\n * R.gt(2, 2); //=> false\n * R.gt(2, 3); //=> false\n * R.gt('a', 'z'); //=> false\n * R.gt('z', 'a'); //=> true\n */\n\nvar gt =\n/*#__PURE__*/\n_curry2(function gt(a, b) {\n return a > b;\n});\n\nexport default gt;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the first argument is greater than or equal to the second;\n * `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> Boolean\n * @param {Number} a\n * @param {Number} b\n * @return {Boolean}\n * @see R.lte\n * @example\n *\n * R.gte(2, 1); //=> true\n * R.gte(2, 2); //=> true\n * R.gte(2, 3); //=> false\n * R.gte('a', 'z'); //=> false\n * R.gte('z', 'a'); //=> true\n */\n\nvar gte =\n/*#__PURE__*/\n_curry2(function gte(a, b) {\n return a >= b;\n});\n\nexport default gte;","import _curry2 from \"./internal/_curry2.js\";\nimport _has from \"./internal/_has.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Returns whether or not a path exists in an object. Only the object's\n * own properties are checked.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> {a} -> Boolean\n * @param {Array} path The path to use.\n * @param {Object} obj The object to check the path in.\n * @return {Boolean} Whether the path exists.\n * @see R.has\n * @example\n *\n * R.hasPath(['a', 'b'], {a: {b: 2}}); // => true\n * R.hasPath(['a', 'b'], {a: {b: undefined}}); // => true\n * R.hasPath(['a', 'b'], {a: {c: 2}}); // => false\n * R.hasPath(['a', 'b'], {}); // => false\n */\n\nvar hasPath =\n/*#__PURE__*/\n_curry2(function hasPath(_path, obj) {\n if (_path.length === 0 || isNil(obj)) {\n return false;\n }\n\n var val = obj;\n var idx = 0;\n\n while (idx < _path.length) {\n if (!isNil(val) && _has(_path[idx], val)) {\n val = val[_path[idx]];\n idx += 1;\n } else {\n return false;\n }\n }\n\n return true;\n});\n\nexport default hasPath;","import _curry2 from \"./internal/_curry2.js\";\nimport hasPath from \"./hasPath.js\";\n/**\n * Returns whether or not an object has an own property with the specified name\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Object\n * @sig s -> {s: x} -> Boolean\n * @param {String} prop The name of the property to check for.\n * @param {Object} obj The object to query.\n * @return {Boolean} Whether the property exists.\n * @example\n *\n * const hasName = R.has('name');\n * hasName({name: 'alice'}); //=> true\n * hasName({name: 'bob'}); //=> true\n * hasName({}); //=> false\n *\n * const point = {x: 0, y: 0};\n * const pointHas = R.has(R.__, point);\n * pointHas('x'); //=> true\n * pointHas('y'); //=> true\n * pointHas('z'); //=> false\n */\n\nvar has =\n/*#__PURE__*/\n_curry2(function has(prop, obj) {\n return hasPath([prop], obj);\n});\n\nexport default has;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns whether or not an object or its prototype chain has a property with\n * the specified name\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Object\n * @sig s -> {s: x} -> Boolean\n * @param {String} prop The name of the property to check for.\n * @param {Object} obj The object to query.\n * @return {Boolean} Whether the property exists.\n * @example\n *\n * function Rectangle(width, height) {\n * this.width = width;\n * this.height = height;\n * }\n * Rectangle.prototype.area = function() {\n * return this.width * this.height;\n * };\n *\n * const square = new Rectangle(2, 2);\n * R.hasIn('width', square); //=> true\n * R.hasIn('area', square); //=> true\n */\n\nvar hasIn =\n/*#__PURE__*/\n_curry2(function hasIn(prop, obj) {\n return prop in obj;\n});\n\nexport default hasIn;","import _objectIs from \"./internal/_objectIs.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns true if its arguments are identical, false otherwise. Values are\n * identical if they reference the same memory. `NaN` is identical to `NaN`;\n * `0` and `-0` are not identical.\n *\n * Note this is merely a curried version of ES6 `Object.is`.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * const o = {};\n * R.identical(o, o); //=> true\n * R.identical(1, 1); //=> true\n * R.identical(1, '1'); //=> false\n * R.identical([], []); //=> false\n * R.identical(0, -0); //=> false\n * R.identical(NaN, NaN); //=> true\n */\n\nvar identical =\n/*#__PURE__*/\n_curry2(_objectIs);\n\nexport default identical;","import _curry3 from \"./internal/_curry3.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Creates a function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)\n * @param {Function} condition A predicate function\n * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value.\n * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value.\n * @return {Function} A new function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n * @see R.unless, R.when, R.cond\n * @example\n *\n * const incCount = R.ifElse(\n * R.has('count'),\n * R.over(R.lensProp('count'), R.inc),\n * R.assoc('count', 1)\n * );\n * incCount({}); //=> { count: 1 }\n * incCount({ count: 1 }); //=> { count: 2 }\n */\n\nvar ifElse =\n/*#__PURE__*/\n_curry3(function ifElse(condition, onTrue, onFalse) {\n return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() {\n return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments);\n });\n});\n\nexport default ifElse;","import add from \"./add.js\";\n/**\n * Increments its argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Math\n * @sig Number -> Number\n * @param {Number} n\n * @return {Number} n + 1\n * @see R.dec\n * @example\n *\n * R.inc(42); //=> 43\n */\n\nvar inc =\n/*#__PURE__*/\nadd(1);\nexport default inc;","import _includes from \"./internal/_includes.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the specified value is equal, in [`R.equals`](#equals)\n * terms, to at least one element of the given list; `false` otherwise.\n * Works also with strings.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category List\n * @sig a -> [a] -> Boolean\n * @param {Object} a The item to compare against.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if an equivalent item is in the list, `false` otherwise.\n * @see R.any\n * @example\n *\n * R.includes(3, [1, 2, 3]); //=> true\n * R.includes(4, [1, 2, 3]); //=> false\n * R.includes({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true\n * R.includes([42], [[42]]); //=> true\n * R.includes('ba', 'banana'); //=>true\n */\n\nvar includes =\n/*#__PURE__*/\n_curry2(_includes);\n\nexport default includes;","import reduceBy from \"./reduceBy.js\";\n/**\n * Given a function that generates a key, turns a list of objects into an\n * object indexing the objects by the given key. Note that if multiple\n * objects generate the same value for the indexing key only the last value\n * will be included in the generated object.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig (a -> String) -> [{k: v}] -> {k: {k: v}}\n * @param {Function} fn Function :: a -> String\n * @param {Array} array The array of objects to index\n * @return {Object} An object indexing each array element by the given property.\n * @example\n *\n * const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}];\n * R.indexBy(R.prop('id'), list);\n * //=> {abc: {id: 'abc', title: 'B'}, xyz: {id: 'xyz', title: 'A'}}\n */\n\nvar indexBy =\n/*#__PURE__*/\nreduceBy(function (acc, elem) {\n return elem;\n}, null);\nexport default indexBy;","import _curry2 from \"./internal/_curry2.js\";\nimport _indexOf from \"./internal/_indexOf.js\";\nimport _isArray from \"./internal/_isArray.js\";\n/**\n * Returns the position of the first occurrence of an item in an array, or -1\n * if the item is not included in the array. [`R.equals`](#equals) is used to\n * determine equality.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig a -> [a] -> Number\n * @param {*} target The item to find.\n * @param {Array} xs The array to search in.\n * @return {Number} the index of the target, or -1 if the target is not found.\n * @see R.lastIndexOf\n * @example\n *\n * R.indexOf(3, [1,2,3,4]); //=> 2\n * R.indexOf(10, [1,2,3,4]); //=> -1\n */\n\nvar indexOf =\n/*#__PURE__*/\n_curry2(function indexOf(target, xs) {\n return typeof xs.indexOf === 'function' && !_isArray(xs) ? xs.indexOf(target) : _indexOf(xs, target, 0);\n});\n\nexport default indexOf;","import slice from \"./slice.js\";\n/**\n * Returns all but the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.last, R.head, R.tail\n * @example\n *\n * R.init([1, 2, 3]); //=> [1, 2]\n * R.init([1, 2]); //=> [1]\n * R.init([1]); //=> []\n * R.init([]); //=> []\n *\n * R.init('abc'); //=> 'ab'\n * R.init('ab'); //=> 'a'\n * R.init('a'); //=> ''\n * R.init(''); //=> ''\n */\n\nvar init =\n/*#__PURE__*/\nslice(0, -1);\nexport default init;","import _includesWith from \"./internal/_includesWith.js\";\nimport _curry3 from \"./internal/_curry3.js\";\nimport _filter from \"./internal/_filter.js\";\n/**\n * Takes a predicate `pred`, a list `xs`, and a list `ys`, and returns a list\n * `xs'` comprising each of the elements of `xs` which is equal to one or more\n * elements of `ys` according to `pred`.\n *\n * `pred` must be a binary function expecting an element from each list.\n *\n * `xs`, `ys`, and `xs'` are treated as sets, semantically, so ordering should\n * not be significant, but since `xs'` is ordered the implementation guarantees\n * that its values are in the same order as they appear in `xs`. Duplicates are\n * not removed, so `xs'` may contain duplicates if `xs` contains duplicates.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Relation\n * @sig ((a, b) -> Boolean) -> [a] -> [b] -> [a]\n * @param {Function} pred\n * @param {Array} xs\n * @param {Array} ys\n * @return {Array}\n * @see R.intersection\n * @example\n *\n * R.innerJoin(\n * (record, id) => record.id === id,\n * [{id: 824, name: 'Richie Furay'},\n * {id: 956, name: 'Dewey Martin'},\n * {id: 313, name: 'Bruce Palmer'},\n * {id: 456, name: 'Stephen Stills'},\n * {id: 177, name: 'Neil Young'}],\n * [177, 456, 999]\n * );\n * //=> [{id: 456, name: 'Stephen Stills'}, {id: 177, name: 'Neil Young'}]\n */\n\nvar innerJoin =\n/*#__PURE__*/\n_curry3(function innerJoin(pred, xs, ys) {\n return _filter(function (x) {\n return _includesWith(pred, x, ys);\n }, xs);\n});\n\nexport default innerJoin;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Inserts the supplied element into the list, at the specified `index`. _Note that\n\n * this is not destructive_: it returns a copy of the list with the changes.\n * No lists have been harmed in the application of this function.\n *\n * @func\n * @memberOf R\n * @since v0.2.2\n * @category List\n * @sig Number -> a -> [a] -> [a]\n * @param {Number} index The position to insert the element\n * @param {*} elt The element to insert into the Array\n * @param {Array} list The list to insert into\n * @return {Array} A new Array with `elt` inserted at `index`.\n * @example\n *\n * R.insert(2, 'x', [1,2,3,4]); //=> [1,2,'x',3,4]\n */\n\nvar insert =\n/*#__PURE__*/\n_curry3(function insert(idx, elt, list) {\n idx = idx < list.length && idx >= 0 ? idx : list.length;\n var result = Array.prototype.slice.call(list, 0);\n result.splice(idx, 0, elt);\n return result;\n});\n\nexport default insert;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Inserts the sub-list into the list, at the specified `index`. _Note that this is not\n * destructive_: it returns a copy of the list with the changes.\n * No lists have been harmed in the application of this function.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category List\n * @sig Number -> [a] -> [a] -> [a]\n * @param {Number} index The position to insert the sub-list\n * @param {Array} elts The sub-list to insert into the Array\n * @param {Array} list The list to insert the sub-list into\n * @return {Array} A new Array with `elts` inserted starting at `index`.\n * @example\n *\n * R.insertAll(2, ['x','y','z'], [1,2,3,4]); //=> [1,2,'x','y','z',3,4]\n */\n\nvar insertAll =\n/*#__PURE__*/\n_curry3(function insertAll(idx, elts, list) {\n idx = idx < list.length && idx >= 0 ? idx : list.length;\n return [].concat(Array.prototype.slice.call(list, 0, idx), elts, Array.prototype.slice.call(list, idx));\n});\n\nexport default insertAll;","import _Set from \"./internal/_Set.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a new list containing only one copy of each element in the original\n * list, based upon the value returned by applying the supplied function to\n * each list element. Prefers the first item if the supplied function produces\n * the same value on two items. [`R.equals`](#equals) is used for comparison.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig (a -> b) -> [a] -> [a]\n * @param {Function} fn A function used to produce a value to use during comparisons.\n * @param {Array} list The array to consider.\n * @return {Array} The list of unique items.\n * @example\n *\n * R.uniqBy(Math.abs, [-1, -5, 2, 10, 1, 2]); //=> [-1, -5, 2, 10]\n */\n\nvar uniqBy =\n/*#__PURE__*/\n_curry2(function uniqBy(fn, list) {\n var set = new _Set();\n var result = [];\n var idx = 0;\n var appliedItem, item;\n\n while (idx < list.length) {\n item = list[idx];\n appliedItem = fn(item);\n\n if (set.add(appliedItem)) {\n result.push(item);\n }\n\n idx += 1;\n }\n\n return result;\n});\n\nexport default uniqBy;","import identity from \"./identity.js\";\nimport uniqBy from \"./uniqBy.js\";\n/**\n * Returns a new list containing only one copy of each element in the original\n * list. [`R.equals`](#equals) is used to determine equality.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @param {Array} list The array to consider.\n * @return {Array} The list of unique items.\n * @example\n *\n * R.uniq([1, 1, 2, 1]); //=> [1, 2]\n * R.uniq([1, '1']); //=> [1, '1']\n * R.uniq([[42], [42]]); //=> [[42]]\n */\n\nvar uniq =\n/*#__PURE__*/\nuniqBy(identity);\nexport default uniq;","import _includes from \"./internal/_includes.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _filter from \"./internal/_filter.js\";\nimport flip from \"./flip.js\";\nimport uniq from \"./uniq.js\";\n/**\n * Combines two lists into a set (i.e. no duplicates) composed of those\n * elements common to both lists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig [*] -> [*] -> [*]\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The list of elements found in both `list1` and `list2`.\n * @see R.innerJoin\n * @example\n *\n * R.intersection([1,2,3,4], [7,6,5,4,3]); //=> [4, 3]\n */\n\nvar intersection =\n/*#__PURE__*/\n_curry2(function intersection(list1, list2) {\n var lookupList, filteredList;\n\n if (list1.length > list2.length) {\n lookupList = list1;\n filteredList = list2;\n } else {\n lookupList = list2;\n filteredList = list1;\n }\n\n return uniq(_filter(flip(_includes)(lookupList), filteredList));\n});\n\nexport default intersection;","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a new list with the separator interposed between elements.\n *\n * Dispatches to the `intersperse` method of the second argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category List\n * @sig a -> [a] -> [a]\n * @param {*} separator The element to add to the list.\n * @param {Array} list The list to be interposed.\n * @return {Array} The new list.\n * @example\n *\n * R.intersperse('a', ['b', 'n', 'n', 's']); //=> ['b', 'a', 'n', 'a', 'n', 'a', 's']\n */\n\nvar intersperse =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_checkForMethod('intersperse', function intersperse(separator, list) {\n var out = [];\n var idx = 0;\n var length = list.length;\n\n while (idx < length) {\n if (idx === length - 1) {\n out.push(list[idx]);\n } else {\n out.push(list[idx], separator);\n }\n\n idx += 1;\n }\n\n return out;\n}));\n\nexport default intersperse;","import _has from \"./_has.js\"; // Based on https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\nfunction _objectAssign(target) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n var idx = 1;\n var length = arguments.length;\n\n while (idx < length) {\n var source = arguments[idx];\n\n if (source != null) {\n for (var nextKey in source) {\n if (_has(nextKey, source)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n\n idx += 1;\n }\n\n return output;\n}\n\nexport default typeof Object.assign === 'function' ? Object.assign : _objectAssign;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates an object containing a single key:value pair.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category Object\n * @sig String -> a -> {String:a}\n * @param {String} key\n * @param {*} val\n * @return {Object}\n * @see R.pair\n * @example\n *\n * const matchPhrases = R.compose(\n * R.objOf('must'),\n * R.map(R.objOf('match_phrase'))\n * );\n * matchPhrases(['foo', 'bar', 'baz']); //=> {must: [{match_phrase: 'foo'}, {match_phrase: 'bar'}, {match_phrase: 'baz'}]}\n */\n\nvar objOf =\n/*#__PURE__*/\n_curry2(function objOf(key, val) {\n var obj = {};\n obj[key] = val;\n return obj;\n});\n\nexport default objOf;","import _objectAssign from \"./_objectAssign.js\";\nimport _identity from \"./_identity.js\";\nimport _isArrayLike from \"./_isArrayLike.js\";\nimport _isTransformer from \"./_isTransformer.js\";\nimport objOf from \"../objOf.js\";\nvar _stepCatArray = {\n '@@transducer/init': Array,\n '@@transducer/step': function (xs, x) {\n xs.push(x);\n return xs;\n },\n '@@transducer/result': _identity\n};\nvar _stepCatString = {\n '@@transducer/init': String,\n '@@transducer/step': function (a, b) {\n return a + b;\n },\n '@@transducer/result': _identity\n};\nvar _stepCatObject = {\n '@@transducer/init': Object,\n '@@transducer/step': function (result, input) {\n return _objectAssign(result, _isArrayLike(input) ? objOf(input[0], input[1]) : input);\n },\n '@@transducer/result': _identity\n};\nexport default function _stepCat(obj) {\n if (_isTransformer(obj)) {\n return obj;\n }\n\n if (_isArrayLike(obj)) {\n return _stepCatArray;\n }\n\n if (typeof obj === 'string') {\n return _stepCatString;\n }\n\n if (typeof obj === 'object') {\n return _stepCatObject;\n }\n\n throw new Error('Cannot create transformer for ' + obj);\n}","import _clone from \"./internal/_clone.js\";\nimport _curry3 from \"./internal/_curry3.js\";\nimport _isTransformer from \"./internal/_isTransformer.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport _stepCat from \"./internal/_stepCat.js\";\n/**\n * Transforms the items of the list with the transducer and appends the\n * transformed items to the accumulator using an appropriate iterator function\n * based on the accumulator type.\n *\n * The accumulator can be an array, string, object or a transformer. Iterated\n * items will be appended to arrays and concatenated to strings. Objects will\n * be merged directly or 2-item arrays will be merged as key, value pairs.\n *\n * The accumulator can also be a transformer object that provides a 2-arity\n * reducing iterator function, step, 0-arity initial value function, init, and\n * 1-arity result extraction function result. The step function is used as the\n * iterator function in reduce. The result function is used to convert the\n * final accumulator into the return type and in most cases is R.identity. The\n * init function is used to provide the initial accumulator.\n *\n * The iteration is performed with [`R.reduce`](#reduce) after initializing the\n * transducer.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig a -> (b -> b) -> [c] -> a\n * @param {*} acc The initial accumulator value.\n * @param {Function} xf The transducer function. Receives a transformer and returns a transformer.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.transduce\n * @example\n *\n * const numbers = [1, 2, 3, 4];\n * const transducer = R.compose(R.map(R.add(1)), R.take(2));\n *\n * R.into([], transducer, numbers); //=> [2, 3]\n *\n * const intoArray = R.into([]);\n * intoArray(transducer, numbers); //=> [2, 3]\n */\n\nvar into =\n/*#__PURE__*/\n_curry3(function into(acc, xf, list) {\n return _isTransformer(acc) ? _reduce(xf(acc), acc['@@transducer/init'](), list) : _reduce(xf(_stepCat(acc)), _clone(acc, [], [], false), list);\n});\n\nexport default into;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\nimport keys from \"./keys.js\";\n/**\n * Same as [`R.invertObj`](#invertObj), however this accounts for objects with\n * duplicate values by putting the values into an array.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Object\n * @sig {s: x} -> {x: [ s, ... ]}\n * @param {Object} obj The object or array to invert\n * @return {Object} out A new object with keys in an array.\n * @see R.invertObj\n * @example\n *\n * const raceResultsByFirstName = {\n * first: 'alice',\n * second: 'jake',\n * third: 'alice',\n * };\n * R.invert(raceResultsByFirstName);\n * //=> { 'alice': ['first', 'third'], 'jake':['second'] }\n */\n\nvar invert =\n/*#__PURE__*/\n_curry1(function invert(obj) {\n var props = keys(obj);\n var len = props.length;\n var idx = 0;\n var out = {};\n\n while (idx < len) {\n var key = props[idx];\n var val = obj[key];\n var list = _has(val, out) ? out[val] : out[val] = [];\n list[list.length] = key;\n idx += 1;\n }\n\n return out;\n});\n\nexport default invert;","import _curry1 from \"./internal/_curry1.js\";\nimport keys from \"./keys.js\";\n/**\n * Returns a new object with the keys of the given object as values, and the\n * values of the given object, which are coerced to strings, as keys. Note\n * that the last key found is preferred when handling the same value.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Object\n * @sig {s: x} -> {x: s}\n * @param {Object} obj The object or array to invert\n * @return {Object} out A new object\n * @see R.invert\n * @example\n *\n * const raceResults = {\n * first: 'alice',\n * second: 'jake'\n * };\n * R.invertObj(raceResults);\n * //=> { 'alice': 'first', 'jake':'second' }\n *\n * // Alternatively:\n * const raceResults = ['alice', 'jake'];\n * R.invertObj(raceResults);\n * //=> { 'alice': '0', 'jake':'1' }\n */\n\nvar invertObj =\n/*#__PURE__*/\n_curry1(function invertObj(obj) {\n var props = keys(obj);\n var len = props.length;\n var idx = 0;\n var out = {};\n\n while (idx < len) {\n var key = props[idx];\n out[obj[key]] = key;\n idx += 1;\n }\n\n return out;\n});\n\nexport default invertObj;","import _curry2 from \"./internal/_curry2.js\";\nimport _isFunction from \"./internal/_isFunction.js\";\nimport curryN from \"./curryN.js\";\nimport toString from \"./toString.js\";\n/**\n * Turns a named method with a specified arity into a function that can be\n * called directly supplied with arguments and a target object.\n *\n * The returned function is curried and accepts `arity + 1` parameters where\n * the final parameter is the target object.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig Number -> String -> (a -> b -> ... -> n -> Object -> *)\n * @param {Number} arity Number of arguments the returned function should take\n * before the target object.\n * @param {String} method Name of any of the target object's methods to call.\n * @return {Function} A new curried function.\n * @see R.construct\n * @example\n *\n * const sliceFrom = R.invoker(1, 'slice');\n * sliceFrom(6, 'abcdefghijklm'); //=> 'ghijklm'\n * const sliceFrom6 = R.invoker(2, 'slice')(6);\n * sliceFrom6(8, 'abcdefghijklm'); //=> 'gh'\n *\n * const dog = {\n * speak: async () => 'Woof!'\n * };\n * const speak = R.invoker(0, 'speak');\n * speak(dog).then(console.log) //~> 'Woof!'\n *\n * @symb R.invoker(0, 'method')(o) = o['method']()\n * @symb R.invoker(1, 'method')(a, o) = o['method'](a)\n * @symb R.invoker(2, 'method')(a, b, o) = o['method'](a, b)\n */\n\nvar invoker =\n/*#__PURE__*/\n_curry2(function invoker(arity, method) {\n return curryN(arity + 1, function () {\n var target = arguments[arity];\n\n if (target != null && _isFunction(target[method])) {\n return target[method].apply(target, Array.prototype.slice.call(arguments, 0, arity));\n }\n\n throw new TypeError(toString(target) + ' does not have a method named \"' + method + '\"');\n });\n});\n\nexport default invoker;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * See if an object (`val`) is an instance of the supplied constructor. This\n * function will check up the inheritance chain, if any.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Type\n * @sig (* -> {*}) -> a -> Boolean\n * @param {Object} ctor A constructor\n * @param {*} val The value to test\n * @return {Boolean}\n * @example\n *\n * R.is(Object, {}); //=> true\n * R.is(Number, 1); //=> true\n * R.is(Object, 1); //=> false\n * R.is(String, 's'); //=> true\n * R.is(String, new String('')); //=> true\n * R.is(Object, new String('')); //=> true\n * R.is(Object, 's'); //=> false\n * R.is(Number, {}); //=> false\n */\n\nvar is =\n/*#__PURE__*/\n_curry2(function is(Ctor, val) {\n return val != null && val.constructor === Ctor || val instanceof Ctor;\n});\n\nexport default is;","import _curry1 from \"./internal/_curry1.js\";\nimport empty from \"./empty.js\";\nimport equals from \"./equals.js\";\n/**\n * Returns `true` if the given value is its type's empty value; `false`\n * otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig a -> Boolean\n * @param {*} x\n * @return {Boolean}\n * @see R.empty\n * @example\n *\n * R.isEmpty([1, 2, 3]); //=> false\n * R.isEmpty([]); //=> true\n * R.isEmpty(''); //=> true\n * R.isEmpty(null); //=> false\n * R.isEmpty({}); //=> true\n * R.isEmpty({length: 0}); //=> false\n */\n\nvar isEmpty =\n/*#__PURE__*/\n_curry1(function isEmpty(x) {\n return x != null && equals(x, empty(x));\n});\n\nexport default isEmpty;","import invoker from \"./invoker.js\";\n/**\n * Returns a string made by inserting the `separator` between each element and\n * concatenating all the elements into a single string.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig String -> [a] -> String\n * @param {Number|String} separator The string used to separate the elements.\n * @param {Array} xs The elements to join into a string.\n * @return {String} str The string made by concatenating `xs` with `separator`.\n * @see R.split\n * @example\n *\n * const spacer = R.join(' ');\n * spacer(['a', 2, 3.4]); //=> 'a 2 3.4'\n * R.join('|', [1, 2, 3]); //=> '1|2|3'\n */\n\nvar join =\n/*#__PURE__*/\ninvoker(1, 'join');\nexport default join;","import _curry1 from \"./internal/_curry1.js\";\nimport converge from \"./converge.js\";\n/**\n * juxt applies a list of functions to a list of values.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Function\n * @sig [(a, b, ..., m) -> n] -> ((a, b, ..., m) -> [n])\n * @param {Array} fns An array of functions\n * @return {Function} A function that returns a list of values after applying each of the original `fns` to its parameters.\n * @see R.applySpec\n * @example\n *\n * const getRange = R.juxt([Math.min, Math.max]);\n * getRange(3, 4, 9, -3); //=> [-3, 9]\n * @symb R.juxt([f, g, h])(a, b) = [f(a, b), g(a, b), h(a, b)]\n */\n\nvar juxt =\n/*#__PURE__*/\n_curry1(function juxt(fns) {\n return converge(function () {\n return Array.prototype.slice.call(arguments, 0);\n }, fns);\n});\n\nexport default juxt;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Returns a list containing the names of all the properties of the supplied\n * object, including prototype properties.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own and prototype properties.\n * @see R.keys, R.valuesIn\n * @example\n *\n * const F = function() { this.x = 'X'; };\n * F.prototype.y = 'Y';\n * const f = new F();\n * R.keysIn(f); //=> ['x', 'y']\n */\n\nvar keysIn =\n/*#__PURE__*/\n_curry1(function keysIn(obj) {\n var prop;\n var ks = [];\n\n for (prop in obj) {\n ks[ks.length] = prop;\n }\n\n return ks;\n});\n\nexport default keysIn;","import _curry2 from \"./internal/_curry2.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport equals from \"./equals.js\";\n/**\n * Returns the position of the last occurrence of an item in an array, or -1 if\n * the item is not included in the array. [`R.equals`](#equals) is used to\n * determine equality.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig a -> [a] -> Number\n * @param {*} target The item to find.\n * @param {Array} xs The array to search in.\n * @return {Number} the index of the target, or -1 if the target is not found.\n * @see R.indexOf\n * @example\n *\n * R.lastIndexOf(3, [-1,3,3,0,1,2,3,4]); //=> 6\n * R.lastIndexOf(10, [1,2,3,4]); //=> -1\n */\n\nvar lastIndexOf =\n/*#__PURE__*/\n_curry2(function lastIndexOf(target, xs) {\n if (typeof xs.lastIndexOf === 'function' && !_isArray(xs)) {\n return xs.lastIndexOf(target);\n } else {\n var idx = xs.length - 1;\n\n while (idx >= 0) {\n if (equals(xs[idx], target)) {\n return idx;\n }\n\n idx -= 1;\n }\n\n return -1;\n }\n});\n\nexport default lastIndexOf;","export default function _isNumber(x) {\n return Object.prototype.toString.call(x) === '[object Number]';\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _isNumber from \"./internal/_isNumber.js\";\n/**\n * Returns the number of elements in the array by returning `list.length`.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category List\n * @sig [a] -> Number\n * @param {Array} list The array to inspect.\n * @return {Number} The length of the array.\n * @example\n *\n * R.length([]); //=> 0\n * R.length([1, 2, 3]); //=> 3\n */\n\nvar length =\n/*#__PURE__*/\n_curry1(function length(list) {\n return list != null && _isNumber(list.length) ? list.length : NaN;\n});\n\nexport default length;","import _curry2 from \"./internal/_curry2.js\";\nimport map from \"./map.js\";\n/**\n * Returns a lens for the given getter and setter functions. The getter \"gets\"\n * the value of the focus; the setter \"sets\" the value of the focus. The setter\n * should not mutate the data structure.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig (s -> a) -> ((a, s) -> s) -> Lens s a\n * @param {Function} getter\n * @param {Function} setter\n * @return {Lens}\n * @see R.view, R.set, R.over, R.lensIndex, R.lensProp\n * @example\n *\n * const xLens = R.lens(R.prop('x'), R.assoc('x'));\n *\n * R.view(xLens, {x: 1, y: 2}); //=> 1\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2}\n */\n\nvar lens =\n/*#__PURE__*/\n_curry2(function lens(getter, setter) {\n return function (toFunctorFn) {\n return function (target) {\n return map(function (focus) {\n return setter(focus, target);\n }, toFunctorFn(getter(target)));\n };\n };\n});\n\nexport default lens;","import _curry1 from \"./internal/_curry1.js\";\nimport lens from \"./lens.js\";\nimport nth from \"./nth.js\";\nimport update from \"./update.js\";\n/**\n * Returns a lens whose focus is the specified index.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Number -> Lens s a\n * @param {Number} n\n * @return {Lens}\n * @see R.view, R.set, R.over, R.nth\n * @example\n *\n * const headLens = R.lensIndex(0);\n *\n * R.view(headLens, ['a', 'b', 'c']); //=> 'a'\n * R.set(headLens, 'x', ['a', 'b', 'c']); //=> ['x', 'b', 'c']\n * R.over(headLens, R.toUpper, ['a', 'b', 'c']); //=> ['A', 'b', 'c']\n */\n\nvar lensIndex =\n/*#__PURE__*/\n_curry1(function lensIndex(n) {\n return lens(nth(n), update(n));\n});\n\nexport default lensIndex;","import _curry1 from \"./internal/_curry1.js\";\nimport assocPath from \"./assocPath.js\";\nimport lens from \"./lens.js\";\nimport path from \"./path.js\";\n/**\n * Returns a lens whose focus is the specified path.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Object\n * @typedefn Idx = String | Int\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig [Idx] -> Lens s a\n * @param {Array} path The path to use.\n * @return {Lens}\n * @see R.view, R.set, R.over\n * @example\n *\n * const xHeadYLens = R.lensPath(['x', 0, 'y']);\n *\n * R.view(xHeadYLens, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});\n * //=> 2\n * R.set(xHeadYLens, 1, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});\n * //=> {x: [{y: 1, z: 3}, {y: 4, z: 5}]}\n * R.over(xHeadYLens, R.negate, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});\n * //=> {x: [{y: -2, z: 3}, {y: 4, z: 5}]}\n */\n\nvar lensPath =\n/*#__PURE__*/\n_curry1(function lensPath(p) {\n return lens(path(p), assocPath(p));\n});\n\nexport default lensPath;","import _curry1 from \"./internal/_curry1.js\";\nimport assoc from \"./assoc.js\";\nimport lens from \"./lens.js\";\nimport prop from \"./prop.js\";\n/**\n * Returns a lens whose focus is the specified property.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig String -> Lens s a\n * @param {String} k\n * @return {Lens}\n * @see R.view, R.set, R.over\n * @example\n *\n * const xLens = R.lensProp('x');\n *\n * R.view(xLens, {x: 1, y: 2}); //=> 1\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2}\n */\n\nvar lensProp =\n/*#__PURE__*/\n_curry1(function lensProp(k) {\n return lens(prop(k), assoc(k));\n});\n\nexport default lensProp;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the first argument is less than the second; `false`\n * otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @see R.gt\n * @example\n *\n * R.lt(2, 1); //=> false\n * R.lt(2, 2); //=> false\n * R.lt(2, 3); //=> true\n * R.lt('a', 'z'); //=> true\n * R.lt('z', 'a'); //=> false\n */\n\nvar lt =\n/*#__PURE__*/\n_curry2(function lt(a, b) {\n return a < b;\n});\n\nexport default lt;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns `true` if the first argument is less than or equal to the second;\n * `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> Boolean\n * @param {Number} a\n * @param {Number} b\n * @return {Boolean}\n * @see R.gte\n * @example\n *\n * R.lte(2, 1); //=> false\n * R.lte(2, 2); //=> true\n * R.lte(2, 3); //=> true\n * R.lte('a', 'z'); //=> true\n * R.lte('z', 'a'); //=> false\n */\n\nvar lte =\n/*#__PURE__*/\n_curry2(function lte(a, b) {\n return a <= b;\n});\n\nexport default lte;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * The `mapAccum` function behaves like a combination of map and reduce; it\n * applies a function to each element of a list, passing an accumulating\n * parameter from left to right, and returning a final value of this\n * accumulator together with the new list.\n *\n * The iterator function receives two arguments, *acc* and *value*, and should\n * return a tuple *[acc, value]*.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category List\n * @sig ((acc, x) -> (acc, y)) -> acc -> [x] -> (acc, [y])\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.scan, R.addIndex, R.mapAccumRight\n * @example\n *\n * const digits = ['1', '2', '3', '4'];\n * const appender = (a, b) => [a + b, a + b];\n *\n * R.mapAccum(appender, 0, digits); //=> ['01234', ['01', '012', '0123', '01234']]\n * @symb R.mapAccum(f, a, [b, c, d]) = [\n * f(f(f(a, b)[0], c)[0], d)[0],\n * [\n * f(a, b)[1],\n * f(f(a, b)[0], c)[1],\n * f(f(f(a, b)[0], c)[0], d)[1]\n * ]\n * ]\n */\n\nvar mapAccum =\n/*#__PURE__*/\n_curry3(function mapAccum(fn, acc, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n var tuple = [acc];\n\n while (idx < len) {\n tuple = fn(tuple[0], list[idx]);\n result[idx] = tuple[1];\n idx += 1;\n }\n\n return [tuple[0], result];\n});\n\nexport default mapAccum;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * The `mapAccumRight` function behaves like a combination of map and reduce; it\n * applies a function to each element of a list, passing an accumulating\n * parameter from right to left, and returning a final value of this\n * accumulator together with the new list.\n *\n * Similar to [`mapAccum`](#mapAccum), except moves through the input list from\n * the right to the left.\n *\n * The iterator function receives two arguments, *acc* and *value*, and should\n * return a tuple *[acc, value]*.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category List\n * @sig ((acc, x) -> (acc, y)) -> acc -> [x] -> (acc, [y])\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.addIndex, R.mapAccum\n * @example\n *\n * const digits = ['1', '2', '3', '4'];\n * const appender = (a, b) => [b + a, b + a];\n *\n * R.mapAccumRight(appender, 5, digits); //=> ['12345', ['12345', '2345', '345', '45']]\n * @symb R.mapAccumRight(f, a, [b, c, d]) = [\n * f(f(f(a, d)[0], c)[0], b)[0],\n * [\n * f(a, d)[1],\n * f(f(a, d)[0], c)[1],\n * f(f(f(a, d)[0], c)[0], b)[1]\n * ]\n * ]\n */\n\nvar mapAccumRight =\n/*#__PURE__*/\n_curry3(function mapAccumRight(fn, acc, list) {\n var idx = list.length - 1;\n var result = [];\n var tuple = [acc];\n\n while (idx >= 0) {\n tuple = fn(tuple[0], list[idx]);\n result[idx] = tuple[1];\n idx -= 1;\n }\n\n return [tuple[0], result];\n});\n\nexport default mapAccumRight;","import _curry2 from \"./internal/_curry2.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport keys from \"./keys.js\";\n/**\n * An Object-specific version of [`map`](#map). The function is applied to three\n * arguments: *(value, key, obj)*. If only the value is significant, use\n * [`map`](#map) instead.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Object\n * @sig ((*, String, Object) -> *) -> Object -> Object\n * @param {Function} fn\n * @param {Object} obj\n * @return {Object}\n * @see R.map\n * @example\n *\n * const xyz = { x: 1, y: 2, z: 3 };\n * const prependKeyAndDouble = (num, key, obj) => key + (num * 2);\n *\n * R.mapObjIndexed(prependKeyAndDouble, xyz); //=> { x: 'x2', y: 'y4', z: 'z6' }\n */\n\nvar mapObjIndexed =\n/*#__PURE__*/\n_curry2(function mapObjIndexed(fn, obj) {\n return _reduce(function (acc, key) {\n acc[key] = fn(obj[key], key, obj);\n return acc;\n }, {}, keys(obj));\n});\n\nexport default mapObjIndexed;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Tests a regular expression against a String. Note that this function will\n * return an empty array when there are no matches. This differs from\n * [`String.prototype.match`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match)\n * which returns `null` when there are no matches.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category String\n * @sig RegExp -> String -> [String | Undefined]\n * @param {RegExp} rx A regular expression.\n * @param {String} str The string to match against\n * @return {Array} The list of matches or empty array.\n * @see R.test\n * @example\n *\n * R.match(/([a-z]a)/g, 'bananas'); //=> ['ba', 'na', 'na']\n * R.match(/a/, 'b'); //=> []\n * R.match(/a/, null); //=> TypeError: null does not have a method named \"match\"\n */\n\nvar match =\n/*#__PURE__*/\n_curry2(function match(rx, str) {\n return str.match(rx) || [];\n});\n\nexport default match;","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\n/**\n * `mathMod` behaves like the modulo operator should mathematically, unlike the\n * `%` operator (and by extension, [`R.modulo`](#modulo)). So while\n * `-17 % 5` is `-2`, `mathMod(-17, 5)` is `3`. `mathMod` requires Integer\n * arguments, and returns NaN when the modulus is zero or negative.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} m The dividend.\n * @param {Number} p the modulus.\n * @return {Number} The result of `b mod a`.\n * @see R.modulo\n * @example\n *\n * R.mathMod(-17, 5); //=> 3\n * R.mathMod(17, 5); //=> 2\n * R.mathMod(17, -5); //=> NaN\n * R.mathMod(17, 0); //=> NaN\n * R.mathMod(17.2, 5); //=> NaN\n * R.mathMod(17, 5.3); //=> NaN\n *\n * const clock = R.mathMod(R.__, 12);\n * clock(15); //=> 3\n * clock(24); //=> 0\n *\n * const seventeenMod = R.mathMod(17);\n * seventeenMod(3); //=> 2\n * seventeenMod(4); //=> 1\n * seventeenMod(10); //=> 7\n */\n\nvar mathMod =\n/*#__PURE__*/\n_curry2(function mathMod(m, p) {\n if (!_isInteger(m)) {\n return NaN;\n }\n\n if (!_isInteger(p) || p < 1) {\n return NaN;\n }\n\n return (m % p + p) % p;\n});\n\nexport default mathMod;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Takes a function and two values, and returns whichever value produces the\n * larger result when passed to the provided function.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Relation\n * @sig Ord b => (a -> b) -> a -> a -> a\n * @param {Function} f\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.max, R.minBy\n * @example\n *\n * // square :: Number -> Number\n * const square = n => n * n;\n *\n * R.maxBy(square, -3, 2); //=> -3\n *\n * R.reduce(R.maxBy(square), 0, [3, -5, 4, 1, -2]); //=> -5\n * R.reduce(R.maxBy(square), 0, []); //=> 0\n */\n\nvar maxBy =\n/*#__PURE__*/\n_curry3(function maxBy(f, a, b) {\n return f(b) > f(a) ? b : a;\n});\n\nexport default maxBy;","import add from \"./add.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Adds together all the elements of a list.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig [Number] -> Number\n * @param {Array} list An array of numbers\n * @return {Number} The sum of all the numbers in the list.\n * @see R.reduce\n * @example\n *\n * R.sum([2,4,6,8,100,1]); //=> 121\n */\n\nvar sum =\n/*#__PURE__*/\nreduce(add, 0);\nexport default sum;","import _curry1 from \"./internal/_curry1.js\";\nimport sum from \"./sum.js\";\n/**\n * Returns the mean of the given list of numbers.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Math\n * @sig [Number] -> Number\n * @param {Array} list\n * @return {Number}\n * @see R.median\n * @example\n *\n * R.mean([2, 7, 9]); //=> 6\n * R.mean([]); //=> NaN\n */\n\nvar mean =\n/*#__PURE__*/\n_curry1(function mean(list) {\n return sum(list) / list.length;\n});\n\nexport default mean;","import _curry1 from \"./internal/_curry1.js\";\nimport mean from \"./mean.js\";\n/**\n * Returns the median of the given list of numbers.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Math\n * @sig [Number] -> Number\n * @param {Array} list\n * @return {Number}\n * @see R.mean\n * @example\n *\n * R.median([2, 9, 7]); //=> 7\n * R.median([7, 2, 10, 9]); //=> 8\n * R.median([]); //=> NaN\n */\n\nvar median =\n/*#__PURE__*/\n_curry1(function median(list) {\n var len = list.length;\n\n if (len === 0) {\n return NaN;\n }\n\n var width = 2 - len % 2;\n var idx = (len - width) / 2;\n return mean(Array.prototype.slice.call(list, 0).sort(function (a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }).slice(idx, idx + width));\n});\n\nexport default median;","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _has from \"./internal/_has.js\";\n/**\n * Creates a new function that, when invoked, caches the result of calling `fn`\n * for a given argument set and returns the result. Subsequent calls to the\n * memoized `fn` with the same argument set will not result in an additional\n * call to `fn`; instead, the cached result for that set of arguments will be\n * returned.\n *\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Function\n * @sig (*... -> String) -> (*... -> a) -> (*... -> a)\n * @param {Function} fn The function to generate the cache key.\n * @param {Function} fn The function to memoize.\n * @return {Function} Memoized version of `fn`.\n * @example\n *\n * let count = 0;\n * const factorial = R.memoizeWith(R.identity, n => {\n * count += 1;\n * return R.product(R.range(1, n + 1));\n * });\n * factorial(5); //=> 120\n * factorial(5); //=> 120\n * factorial(5); //=> 120\n * count; //=> 1\n */\n\nvar memoizeWith =\n/*#__PURE__*/\n_curry2(function memoizeWith(mFn, fn) {\n var cache = {};\n return _arity(fn.length, function () {\n var key = mFn.apply(this, arguments);\n\n if (!_has(key, cache)) {\n cache[key] = fn.apply(this, arguments);\n }\n\n return cache[key];\n });\n});\n\nexport default memoizeWith;","import _objectAssign from \"./internal/_objectAssign.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Create a new object with the own properties of the first object merged with\n * the own properties of the second object. If a key exists in both objects,\n * the value from the second object will be used.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> {k: v} -> {k: v}\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeRight, R.mergeDeepRight, R.mergeWith, R.mergeWithKey\n * @deprecated since v0.26.0\n * @example\n *\n * R.merge({ 'name': 'fred', 'age': 10 }, { 'age': 40 });\n * //=> { 'name': 'fred', 'age': 40 }\n *\n * const withDefaults = R.merge({x: 0, y: 0});\n * withDefaults({y: 2}); //=> {x: 0, y: 2}\n * @symb R.merge(a, b) = {...a, ...b}\n */\n\nvar merge =\n/*#__PURE__*/\n_curry2(function merge(l, r) {\n return _objectAssign({}, l, r);\n});\n\nexport default merge;","import _objectAssign from \"./internal/_objectAssign.js\";\nimport _curry1 from \"./internal/_curry1.js\";\n/**\n * Merges a list of objects together into one object.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category List\n * @sig [{k: v}] -> {k: v}\n * @param {Array} list An array of objects\n * @return {Object} A merged object.\n * @see R.reduce\n * @example\n *\n * R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}\n * R.mergeAll([{foo:1},{foo:2},{bar:2}]); //=> {foo:2,bar:2}\n * @symb R.mergeAll([{ x: 1 }, { y: 2 }, { z: 3 }]) = { x: 1, y: 2, z: 3 }\n */\n\nvar mergeAll =\n/*#__PURE__*/\n_curry1(function mergeAll(list) {\n return _objectAssign.apply(null, [{}].concat(list));\n});\n\nexport default mergeAll;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\n/**\n * Creates a new object with the own properties of the two provided objects. If\n * a key exists in both objects, the provided function is applied to the key\n * and the values associated with the key in each object, with the result being\n * used as the value associated with the key in the returned object.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Object\n * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeDeepWithKey, R.merge, R.mergeWith\n * @example\n *\n * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r\n * R.mergeWithKey(concatValues,\n * { a: true, thing: 'foo', values: [10, 20] },\n * { b: true, thing: 'bar', values: [15, 35] });\n * //=> { a: true, b: true, thing: 'bar', values: [10, 20, 15, 35] }\n * @symb R.mergeWithKey(f, { x: 1, y: 2 }, { y: 5, z: 3 }) = { x: 1, y: f('y', 2, 5), z: 3 }\n */\n\nvar mergeWithKey =\n/*#__PURE__*/\n_curry3(function mergeWithKey(fn, l, r) {\n var result = {};\n var k;\n\n for (k in l) {\n if (_has(k, l)) {\n result[k] = _has(k, r) ? fn(k, l[k], r[k]) : l[k];\n }\n }\n\n for (k in r) {\n if (_has(k, r) && !_has(k, result)) {\n result[k] = r[k];\n }\n }\n\n return result;\n});\n\nexport default mergeWithKey;","import _curry3 from \"./internal/_curry3.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport mergeWithKey from \"./mergeWithKey.js\";\n/**\n * Creates a new object with the own properties of the two provided objects.\n * If a key exists in both objects:\n * - and both associated values are also objects then the values will be\n * recursively merged.\n * - otherwise the provided function is applied to the key and associated values\n * using the resulting value as the new value associated with the key.\n * If a key only exists in one object, the value will be associated with the key\n * of the resulting object.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.mergeWithKey, R.mergeDeepWith\n * @example\n *\n * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r\n * R.mergeDeepWithKey(concatValues,\n * { a: true, c: { thing: 'foo', values: [10, 20] }},\n * { b: true, c: { thing: 'bar', values: [15, 35] }});\n * //=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }}\n */\n\nvar mergeDeepWithKey =\n/*#__PURE__*/\n_curry3(function mergeDeepWithKey(fn, lObj, rObj) {\n return mergeWithKey(function (k, lVal, rVal) {\n if (_isObject(lVal) && _isObject(rVal)) {\n return mergeDeepWithKey(fn, lVal, rVal);\n } else {\n return fn(k, lVal, rVal);\n }\n }, lObj, rObj);\n});\n\nexport default mergeDeepWithKey;","import _curry2 from \"./internal/_curry2.js\";\nimport mergeDeepWithKey from \"./mergeDeepWithKey.js\";\n/**\n * Creates a new object with the own properties of the first object merged with\n * the own properties of the second object. If a key exists in both objects:\n * - and both values are objects, the two values will be recursively merged\n * - otherwise the value from the first object will be used.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig {a} -> {a} -> {a}\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.merge, R.mergeDeepRight, R.mergeDeepWith, R.mergeDeepWithKey\n * @example\n *\n * R.mergeDeepLeft({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},\n * { age: 40, contact: { email: 'baa@example.com' }});\n * //=> { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}\n */\n\nvar mergeDeepLeft =\n/*#__PURE__*/\n_curry2(function mergeDeepLeft(lObj, rObj) {\n return mergeDeepWithKey(function (k, lVal, rVal) {\n return lVal;\n }, lObj, rObj);\n});\n\nexport default mergeDeepLeft;","import _curry2 from \"./internal/_curry2.js\";\nimport mergeDeepWithKey from \"./mergeDeepWithKey.js\";\n/**\n * Creates a new object with the own properties of the first object merged with\n * the own properties of the second object. If a key exists in both objects:\n * - and both values are objects, the two values will be recursively merged\n * - otherwise the value from the second object will be used.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig {a} -> {a} -> {a}\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.merge, R.mergeDeepLeft, R.mergeDeepWith, R.mergeDeepWithKey\n * @example\n *\n * R.mergeDeepRight({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},\n * { age: 40, contact: { email: 'baa@example.com' }});\n * //=> { name: 'fred', age: 40, contact: { email: 'baa@example.com' }}\n */\n\nvar mergeDeepRight =\n/*#__PURE__*/\n_curry2(function mergeDeepRight(lObj, rObj) {\n return mergeDeepWithKey(function (k, lVal, rVal) {\n return rVal;\n }, lObj, rObj);\n});\n\nexport default mergeDeepRight;","import _curry3 from \"./internal/_curry3.js\";\nimport mergeDeepWithKey from \"./mergeDeepWithKey.js\";\n/**\n * Creates a new object with the own properties of the two provided objects.\n * If a key exists in both objects:\n * - and both associated values are also objects then the values will be\n * recursively merged.\n * - otherwise the provided function is applied to associated values using the\n * resulting value as the new value associated with the key.\n * If a key only exists in one object, the value will be associated with the key\n * of the resulting object.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig ((a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.mergeWith, R.mergeDeepWithKey\n * @example\n *\n * R.mergeDeepWith(R.concat,\n * { a: true, c: { values: [10, 20] }},\n * { b: true, c: { values: [15, 35] }});\n * //=> { a: true, b: true, c: { values: [10, 20, 15, 35] }}\n */\n\nvar mergeDeepWith =\n/*#__PURE__*/\n_curry3(function mergeDeepWith(fn, lObj, rObj) {\n return mergeDeepWithKey(function (k, lVal, rVal) {\n return fn(lVal, rVal);\n }, lObj, rObj);\n});\n\nexport default mergeDeepWith;","import _objectAssign from \"./internal/_objectAssign.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Create a new object with the own properties of the first object merged with\n * the own properties of the second object. If a key exists in both objects,\n * the value from the first object will be used.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Object\n * @sig {k: v} -> {k: v} -> {k: v}\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeRight, R.mergeDeepLeft, R.mergeWith, R.mergeWithKey\n * @example\n *\n * R.mergeLeft({ 'age': 40 }, { 'name': 'fred', 'age': 10 });\n * //=> { 'name': 'fred', 'age': 40 }\n *\n * const resetToDefault = R.mergeLeft({x: 0});\n * resetToDefault({x: 5, y: 2}); //=> {x: 0, y: 2}\n * @symb R.mergeLeft(a, b) = {...b, ...a}\n */\n\nvar mergeLeft =\n/*#__PURE__*/\n_curry2(function mergeLeft(l, r) {\n return _objectAssign({}, r, l);\n});\n\nexport default mergeLeft;","import _objectAssign from \"./internal/_objectAssign.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Create a new object with the own properties of the first object merged with\n * the own properties of the second object. If a key exists in both objects,\n * the value from the second object will be used.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Object\n * @sig {k: v} -> {k: v} -> {k: v}\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeLeft, R.mergeDeepRight, R.mergeWith, R.mergeWithKey\n * @example\n *\n * R.mergeRight({ 'name': 'fred', 'age': 10 }, { 'age': 40 });\n * //=> { 'name': 'fred', 'age': 40 }\n *\n * const withDefaults = R.mergeRight({x: 0, y: 0});\n * withDefaults({y: 2}); //=> {x: 0, y: 2}\n * @symb R.mergeRight(a, b) = {...a, ...b}\n */\n\nvar mergeRight =\n/*#__PURE__*/\n_curry2(function mergeRight(l, r) {\n return _objectAssign({}, l, r);\n});\n\nexport default mergeRight;","import _curry3 from \"./internal/_curry3.js\";\nimport mergeWithKey from \"./mergeWithKey.js\";\n/**\n * Creates a new object with the own properties of the two provided objects. If\n * a key exists in both objects, the provided function is applied to the values\n * associated with the key in each object, with the result being used as the\n * value associated with the key in the returned object.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Object\n * @sig ((a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeDeepWith, R.merge, R.mergeWithKey\n * @example\n *\n * R.mergeWith(R.concat,\n * { a: true, values: [10, 20] },\n * { b: true, values: [15, 35] });\n * //=> { a: true, b: true, values: [10, 20, 15, 35] }\n */\n\nvar mergeWith =\n/*#__PURE__*/\n_curry3(function mergeWith(fn, l, r) {\n return mergeWithKey(function (_, _l, _r) {\n return fn(_l, _r);\n }, l, r);\n});\n\nexport default mergeWith;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns the smaller of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.minBy, R.max\n * @example\n *\n * R.min(789, 123); //=> 123\n * R.min('a', 'b'); //=> 'a'\n */\n\nvar min =\n/*#__PURE__*/\n_curry2(function min(a, b) {\n return b < a ? b : a;\n});\n\nexport default min;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Takes a function and two values, and returns whichever value produces the\n * smaller result when passed to the provided function.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Relation\n * @sig Ord b => (a -> b) -> a -> a -> a\n * @param {Function} f\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.min, R.maxBy\n * @example\n *\n * // square :: Number -> Number\n * const square = n => n * n;\n *\n * R.minBy(square, -3, 2); //=> 2\n *\n * R.reduce(R.minBy(square), Infinity, [3, -5, 4, 1, -2]); //=> 1\n * R.reduce(R.minBy(square), Infinity, []); //=> Infinity\n */\n\nvar minBy =\n/*#__PURE__*/\n_curry3(function minBy(f, a, b) {\n return f(b) < f(a) ? b : a;\n});\n\nexport default minBy;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Divides the first parameter by the second and returns the remainder. Note\n * that this function preserves the JavaScript-style behavior for modulo. For\n * mathematical modulo see [`mathMod`](#mathMod).\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a The value to the divide.\n * @param {Number} b The pseudo-modulus\n * @return {Number} The result of `b % a`.\n * @see R.mathMod\n * @example\n *\n * R.modulo(17, 3); //=> 2\n * // JS behavior:\n * R.modulo(-17, 3); //=> -2\n * R.modulo(17, -3); //=> 2\n *\n * const isOdd = R.modulo(R.__, 2);\n * isOdd(42); //=> 0\n * isOdd(21); //=> 1\n */\n\nvar modulo =\n/*#__PURE__*/\n_curry2(function modulo(a, b) {\n return a % b;\n});\n\nexport default modulo;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Move an item, at index `from`, to index `to`, in a list of elements.\n * A new list will be created containing the new elements order.\n *\n * @func\n * @memberOf R\n * @since v0.27.1\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @param {Number} from The source index\n * @param {Number} to The destination index\n * @param {Array} list The list which will serve to realise the move\n * @return {Array} The new list reordered\n * @example\n *\n * R.move(0, 2, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['b', 'c', 'a', 'd', 'e', 'f']\n * R.move(-1, 0, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['f', 'a', 'b', 'c', 'd', 'e'] list rotation\n */\n\nvar move =\n/*#__PURE__*/\n_curry3(function (from, to, list) {\n var length = list.length;\n var result = list.slice();\n var positiveFrom = from < 0 ? length + from : from;\n var positiveTo = to < 0 ? length + to : to;\n var item = result.splice(positiveFrom, 1);\n return positiveFrom < 0 || positiveFrom >= list.length || positiveTo < 0 || positiveTo >= list.length ? list : [].concat(result.slice(0, positiveTo)).concat(item).concat(result.slice(positiveTo, list.length));\n});\n\nexport default move;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Multiplies two numbers. Equivalent to `a * b` but curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a The first value.\n * @param {Number} b The second value.\n * @return {Number} The result of `a * b`.\n * @see R.divide\n * @example\n *\n * const double = R.multiply(2);\n * const triple = R.multiply(3);\n * double(3); //=> 6\n * triple(4); //=> 12\n * R.multiply(2, 5); //=> 10\n */\n\nvar multiply =\n/*#__PURE__*/\n_curry2(function multiply(a, b) {\n return a * b;\n});\n\nexport default multiply;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Negates its argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Math\n * @sig Number -> Number\n * @param {Number} n\n * @return {Number}\n * @example\n *\n * R.negate(42); //=> -42\n */\n\nvar negate =\n/*#__PURE__*/\n_curry1(function negate(n) {\n return -n;\n});\n\nexport default negate;","import _complement from \"./internal/_complement.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport all from \"./all.js\";\n/**\n * Returns `true` if no elements of the list match the predicate, `false`\n * otherwise.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is not satisfied by every element, `false` otherwise.\n * @see R.all, R.any\n * @example\n *\n * const isEven = n => n % 2 === 0;\n * const isOdd = n => n % 2 === 1;\n *\n * R.none(isEven, [1, 3, 5, 7, 9, 11]); //=> true\n * R.none(isOdd, [1, 3, 5, 7, 8, 11]); //=> false\n */\n\nvar none =\n/*#__PURE__*/\n_curry2(function none(fn, input) {\n return all(_complement(fn), input);\n});\n\nexport default none;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport nth from \"./nth.js\";\n/**\n * Returns a function which returns its nth argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig Number -> *... -> *\n * @param {Number} n\n * @return {Function}\n * @example\n *\n * R.nthArg(1)('a', 'b', 'c'); //=> 'b'\n * R.nthArg(-1)('a', 'b', 'c'); //=> 'c'\n * @symb R.nthArg(-1)(a, b, c) = c\n * @symb R.nthArg(0)(a, b, c) = a\n * @symb R.nthArg(1)(a, b, c) = b\n */\n\nvar nthArg =\n/*#__PURE__*/\n_curry1(function nthArg(n) {\n var arity = n < 0 ? 1 : n + 1;\n return curryN(arity, function () {\n return nth(n, arguments);\n });\n});\n\nexport default nthArg;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * `o` is a curried composition function that returns a unary function.\n * Like [`compose`](#compose), `o` performs right-to-left function composition.\n * Unlike [`compose`](#compose), the rightmost function passed to `o` will be\n * invoked with only one argument. Also, unlike [`compose`](#compose), `o` is\n * limited to accepting only 2 unary functions. The name o was chosen because\n * of its similarity to the mathematical composition operator ∘.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Function\n * @sig (b -> c) -> (a -> b) -> a -> c\n * @param {Function} f\n * @param {Function} g\n * @return {Function}\n * @see R.compose, R.pipe\n * @example\n *\n * const classyGreeting = name => \"The name's \" + name.last + \", \" + name.first + \" \" + name.last\n * const yellGreeting = R.o(R.toUpper, classyGreeting);\n * yellGreeting({first: 'James', last: 'Bond'}); //=> \"THE NAME'S BOND, JAMES BOND\"\n *\n * R.o(R.multiply(10), R.add(10))(-4) //=> 60\n *\n * @symb R.o(f, g, x) = f(g(x))\n */\n\nvar o =\n/*#__PURE__*/\n_curry3(function o(f, g, x) {\n return f(g(x));\n});\n\nexport default o;","export default function _of(x) {\n return [x];\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _of from \"./internal/_of.js\";\n/**\n * Returns a singleton array containing the value provided.\n *\n * Note this `of` is different from the ES6 `of`; See\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig a -> [a]\n * @param {*} x any value\n * @return {Array} An array wrapping `x`.\n * @example\n *\n * R.of(null); //=> [null]\n * R.of([42]); //=> [[42]]\n */\n\nvar of =\n/*#__PURE__*/\n_curry1(_of);\n\nexport default of;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a partial copy of an object omitting the keys specified.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig [String] -> {String: *} -> {String: *}\n * @param {Array} names an array of String property names to omit from the new object\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with properties from `names` not on it.\n * @see R.pick\n * @example\n *\n * R.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, c: 3}\n */\n\nvar omit =\n/*#__PURE__*/\n_curry2(function omit(names, obj) {\n var result = {};\n var index = {};\n var idx = 0;\n var len = names.length;\n\n while (idx < len) {\n index[names[idx]] = 1;\n idx += 1;\n }\n\n for (var prop in obj) {\n if (!index.hasOwnProperty(prop)) {\n result[prop] = obj[prop];\n }\n }\n\n return result;\n});\n\nexport default omit;","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\n/**\n * Accepts a function `fn` and returns a function that guards invocation of\n * `fn` such that `fn` can only ever be called once, no matter how many times\n * the returned function is invoked. The first value calculated is returned in\n * subsequent invocations.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (a... -> b) -> (a... -> b)\n * @param {Function} fn The function to wrap in a call-only-once wrapper.\n * @return {Function} The wrapped function.\n * @example\n *\n * const addOneOnce = R.once(x => x + 1);\n * addOneOnce(10); //=> 11\n * addOneOnce(addOneOnce(50)); //=> 11\n */\n\nvar once =\n/*#__PURE__*/\n_curry1(function once(fn) {\n var called = false;\n var result;\n return _arity(fn.length, function () {\n if (called) {\n return result;\n }\n\n called = true;\n result = fn.apply(this, arguments);\n return result;\n });\n});\n\nexport default once;","import _isFunction from \"./_isFunction.js\";\nimport _toString from \"./_toString.js\";\nexport default function _assertPromise(name, p) {\n if (p == null || !_isFunction(p.then)) {\n throw new TypeError('`' + name + '` expected a Promise, received ' + _toString(p, []));\n }\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _assertPromise from \"./internal/_assertPromise.js\";\n/**\n * Returns the result of applying the onFailure function to the value inside\n * a failed promise. This is useful for handling rejected promises\n * inside function compositions.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Function\n * @sig (e -> b) -> (Promise e a) -> (Promise e b)\n * @sig (e -> (Promise f b)) -> (Promise e a) -> (Promise f b)\n * @param {Function} onFailure The function to apply. Can return a value or a promise of a value.\n * @param {Promise} p\n * @return {Promise} The result of calling `p.then(null, onFailure)`\n * @see R.then\n * @example\n *\n * var failedFetch = (id) => Promise.reject('bad ID');\n * var useDefault = () => ({ firstName: 'Bob', lastName: 'Loblaw' })\n *\n * //recoverFromFailure :: String -> Promise ({firstName, lastName})\n * var recoverFromFailure = R.pipe(\n * failedFetch,\n * R.otherwise(useDefault),\n * R.then(R.pick(['firstName', 'lastName'])),\n * );\n * recoverFromFailure(12345).then(console.log)\n */\n\nvar otherwise =\n/*#__PURE__*/\n_curry2(function otherwise(f, p) {\n _assertPromise('otherwise', p);\n\n return p.then(null, f);\n});\n\nexport default otherwise;","import _curry3 from \"./internal/_curry3.js\"; // `Identity` is a functor that holds a single value, where `map` simply\n// transforms the held value with the provided function.\n\nvar Identity = function (x) {\n return {\n value: x,\n map: function (f) {\n return Identity(f(x));\n }\n };\n};\n/**\n * Returns the result of \"setting\" the portion of the given data structure\n * focused by the given lens to the result of applying the given function to\n * the focused value.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Lens s a -> (a -> a) -> s -> s\n * @param {Lens} lens\n * @param {*} v\n * @param {*} x\n * @return {*}\n * @see R.prop, R.lensIndex, R.lensProp\n * @example\n *\n * const headLens = R.lensIndex(0);\n *\n * R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz']\n */\n\n\nvar over =\n/*#__PURE__*/\n_curry3(function over(lens, f, x) {\n // The value returned by the getter function is first transformed with `f`,\n // then set as the value of an `Identity`. This is then mapped over with the\n // setter function of the lens.\n return lens(function (y) {\n return Identity(f(y));\n })(x).value;\n});\n\nexport default over;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Takes two arguments, `fst` and `snd`, and returns `[fst, snd]`.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category List\n * @sig a -> b -> (a,b)\n * @param {*} fst\n * @param {*} snd\n * @return {Array}\n * @see R.objOf, R.of\n * @example\n *\n * R.pair('foo', 'bar'); //=> ['foo', 'bar']\n */\n\nvar pair =\n/*#__PURE__*/\n_curry2(function pair(fst, snd) {\n return [fst, snd];\n});\n\nexport default pair;","import _arity from \"./_arity.js\";\nimport _curry2 from \"./_curry2.js\";\nexport default function _createPartialApplicator(concat) {\n return _curry2(function (fn, args) {\n return _arity(Math.max(0, fn.length - args.length), function () {\n return fn.apply(this, concat(args, arguments));\n });\n });\n}","import _concat from \"./internal/_concat.js\";\nimport _createPartialApplicator from \"./internal/_createPartialApplicator.js\";\n/**\n * Takes a function `f` and a list of arguments, and returns a function `g`.\n * When applied, `g` returns the result of applying `f` to the arguments\n * provided initially followed by the arguments provided to `g`.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Function\n * @sig ((a, b, c, ..., n) -> x) -> [a, b, c, ...] -> ((d, e, f, ..., n) -> x)\n * @param {Function} f\n * @param {Array} args\n * @return {Function}\n * @see R.partialRight, R.curry\n * @example\n *\n * const multiply2 = (a, b) => a * b;\n * const double = R.partial(multiply2, [2]);\n * double(2); //=> 4\n *\n * const greet = (salutation, title, firstName, lastName) =>\n * salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';\n *\n * const sayHello = R.partial(greet, ['Hello']);\n * const sayHelloToMs = R.partial(sayHello, ['Ms.']);\n * sayHelloToMs('Jane', 'Jones'); //=> 'Hello, Ms. Jane Jones!'\n * @symb R.partial(f, [a, b])(c, d) = f(a, b, c, d)\n */\n\nvar partial =\n/*#__PURE__*/\n_createPartialApplicator(_concat);\n\nexport default partial;","import _concat from \"./internal/_concat.js\";\nimport _createPartialApplicator from \"./internal/_createPartialApplicator.js\";\nimport flip from \"./flip.js\";\n/**\n * Takes a function `f` and a list of arguments, and returns a function `g`.\n * When applied, `g` returns the result of applying `f` to the arguments\n * provided to `g` followed by the arguments provided initially.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Function\n * @sig ((a, b, c, ..., n) -> x) -> [d, e, f, ..., n] -> ((a, b, c, ...) -> x)\n * @param {Function} f\n * @param {Array} args\n * @return {Function}\n * @see R.partial\n * @example\n *\n * const greet = (salutation, title, firstName, lastName) =>\n * salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';\n *\n * const greetMsJaneJones = R.partialRight(greet, ['Ms.', 'Jane', 'Jones']);\n *\n * greetMsJaneJones('Hello'); //=> 'Hello, Ms. Jane Jones!'\n * @symb R.partialRight(f, [a, b])(c, d) = f(c, d, a, b)\n */\n\nvar partialRight =\n/*#__PURE__*/\n_createPartialApplicator(\n/*#__PURE__*/\nflip(_concat));\n\nexport default partialRight;","import filter from \"./filter.js\";\nimport juxt from \"./juxt.js\";\nimport reject from \"./reject.js\";\n/**\n * Takes a predicate and a list or other `Filterable` object and returns the\n * pair of filterable objects of the same type of elements which do and do not\n * satisfy, the predicate, respectively. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> [f a, f a]\n * @param {Function} pred A predicate to determine which side the element belongs to.\n * @param {Array} filterable the list (or other filterable) to partition.\n * @return {Array} An array, containing first the subset of elements that satisfy the\n * predicate, and second the subset of elements that do not satisfy.\n * @see R.filter, R.reject\n * @example\n *\n * R.partition(R.includes('s'), ['sss', 'ttt', 'foo', 'bars']);\n * // => [ [ 'sss', 'bars' ], [ 'ttt', 'foo' ] ]\n *\n * R.partition(R.includes('s'), { a: 'sss', b: 'ttt', foo: 'bars' });\n * // => [ { a: 'sss', foo: 'bars' }, { b: 'ttt' } ]\n */\n\nvar partition =\n/*#__PURE__*/\njuxt([filter, reject]);\nexport default partition;","import _curry3 from \"./internal/_curry3.js\";\nimport equals from \"./equals.js\";\nimport path from \"./path.js\";\n/**\n * Determines whether a nested path on an object has a specific value, in\n * [`R.equals`](#equals) terms. Most likely used to filter a list.\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Relation\n * @typedefn Idx = String | Int\n * @sig [Idx] -> a -> {a} -> Boolean\n * @param {Array} path The path of the nested property to use\n * @param {*} val The value to compare the nested property with\n * @param {Object} obj The object to check the nested property in\n * @return {Boolean} `true` if the value equals the nested object property,\n * `false` otherwise.\n * @example\n *\n * const user1 = { address: { zipCode: 90210 } };\n * const user2 = { address: { zipCode: 55555 } };\n * const user3 = { name: 'Bob' };\n * const users = [ user1, user2, user3 ];\n * const isFamous = R.pathEq(['address', 'zipCode'], 90210);\n * R.filter(isFamous, users); //=> [ user1 ]\n */\n\nvar pathEq =\n/*#__PURE__*/\n_curry3(function pathEq(_path, val, obj) {\n return equals(path(_path, obj), val);\n});\n\nexport default pathEq;","import _curry3 from \"./internal/_curry3.js\";\nimport defaultTo from \"./defaultTo.js\";\nimport path from \"./path.js\";\n/**\n * If the given, non-null object has a value at the given path, returns the\n * value at that path. Otherwise returns the provided default value.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig a -> [Idx] -> {a} -> a\n * @param {*} d The default value.\n * @param {Array} p The path to use.\n * @param {Object} obj The object to retrieve the nested property from.\n * @return {*} The data at `path` of the supplied object or the default value.\n * @example\n *\n * R.pathOr('N/A', ['a', 'b'], {a: {b: 2}}); //=> 2\n * R.pathOr('N/A', ['a', 'b'], {c: {b: 2}}); //=> \"N/A\"\n */\n\nvar pathOr =\n/*#__PURE__*/\n_curry3(function pathOr(d, p, obj) {\n return defaultTo(d, path(p, obj));\n});\n\nexport default pathOr;","import _curry3 from \"./internal/_curry3.js\";\nimport path from \"./path.js\";\n/**\n * Returns `true` if the specified object property at given path satisfies the\n * given predicate; `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Logic\n * @typedefn Idx = String | Int\n * @sig (a -> Boolean) -> [Idx] -> {a} -> Boolean\n * @param {Function} pred\n * @param {Array} propPath\n * @param {*} obj\n * @return {Boolean}\n * @see R.propSatisfies, R.path\n * @example\n *\n * R.pathSatisfies(y => y > 0, ['x', 'y'], {x: {y: 2}}); //=> true\n * R.pathSatisfies(R.is(Object), [], {x: {y: 2}}); //=> true\n */\n\nvar pathSatisfies =\n/*#__PURE__*/\n_curry3(function pathSatisfies(pred, propPath, obj) {\n return pred(path(propPath, obj));\n});\n\nexport default pathSatisfies;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a partial copy of an object containing only the keys specified. If\n * the key does not exist, the property is ignored.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig [k] -> {k: v} -> {k: v}\n * @param {Array} names an array of String property names to copy onto a new object\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with only properties from `names` on it.\n * @see R.omit, R.props\n * @example\n *\n * R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}\n * R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1}\n */\n\nvar pick =\n/*#__PURE__*/\n_curry2(function pick(names, obj) {\n var result = {};\n var idx = 0;\n\n while (idx < names.length) {\n if (names[idx] in obj) {\n result[names[idx]] = obj[names[idx]];\n }\n\n idx += 1;\n }\n\n return result;\n});\n\nexport default pick;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Similar to `pick` except that this one includes a `key: undefined` pair for\n * properties that don't exist.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig [k] -> {k: v} -> {k: v}\n * @param {Array} names an array of String property names to copy onto a new object\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with only properties from `names` on it.\n * @see R.pick\n * @example\n *\n * R.pickAll(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}\n * R.pickAll(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, e: undefined, f: undefined}\n */\n\nvar pickAll =\n/*#__PURE__*/\n_curry2(function pickAll(names, obj) {\n var result = {};\n var idx = 0;\n var len = names.length;\n\n while (idx < len) {\n var name = names[idx];\n result[name] = obj[name];\n idx += 1;\n }\n\n return result;\n});\n\nexport default pickAll;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a partial copy of an object containing only the keys that satisfy\n * the supplied predicate.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @sig ((v, k) -> Boolean) -> {k: v} -> {k: v}\n * @param {Function} pred A predicate to determine whether or not a key\n * should be included on the output object.\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with only properties that satisfy `pred`\n * on it.\n * @see R.pick, R.filter\n * @example\n *\n * const isUpperCase = (val, key) => key.toUpperCase() === key;\n * R.pickBy(isUpperCase, {a: 1, b: 2, A: 3, B: 4}); //=> {A: 3, B: 4}\n */\n\nvar pickBy =\n/*#__PURE__*/\n_curry2(function pickBy(test, obj) {\n var result = {};\n\n for (var prop in obj) {\n if (test(obj[prop], prop, obj)) {\n result[prop] = obj[prop];\n }\n }\n\n return result;\n});\n\nexport default pickBy;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a new list with the given element at the front, followed by the\n * contents of the list.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig a -> [a] -> [a]\n * @param {*} el The item to add to the head of the output list.\n * @param {Array} list The array to add to the tail of the output list.\n * @return {Array} A new array.\n * @see R.append\n * @example\n *\n * R.prepend('fee', ['fi', 'fo', 'fum']); //=> ['fee', 'fi', 'fo', 'fum']\n */\n\nvar prepend =\n/*#__PURE__*/\n_curry2(function prepend(el, list) {\n return _concat([el], list);\n});\n\nexport default prepend;","import multiply from \"./multiply.js\";\nimport reduce from \"./reduce.js\";\n/**\n * Multiplies together all the elements of a list.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig [Number] -> Number\n * @param {Array} list An array of numbers\n * @return {Number} The product of all the numbers in the list.\n * @see R.reduce\n * @example\n *\n * R.product([2,4,6,8,100,1]); //=> 38400\n */\n\nvar product =\n/*#__PURE__*/\nreduce(multiply, 1);\nexport default product;","import _curry2 from \"./internal/_curry2.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Accepts a function `fn` and a list of transformer functions and returns a\n * new curried function. When the new function is invoked, it calls the\n * function `fn` with parameters consisting of the result of calling each\n * supplied handler on successive arguments to the new function.\n *\n * If more arguments are passed to the returned function than transformer\n * functions, those arguments are passed directly to `fn` as additional\n * parameters. If you expect additional arguments that don't need to be\n * transformed, although you can ignore them, it's best to pass an identity\n * function so that the new function reports the correct arity.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig ((x1, x2, ...) -> z) -> [(a -> x1), (b -> x2), ...] -> (a -> b -> ... -> z)\n * @param {Function} fn The function to wrap.\n * @param {Array} transformers A list of transformer functions\n * @return {Function} The wrapped function.\n * @see R.converge\n * @example\n *\n * R.useWith(Math.pow, [R.identity, R.identity])(3, 4); //=> 81\n * R.useWith(Math.pow, [R.identity, R.identity])(3)(4); //=> 81\n * R.useWith(Math.pow, [R.dec, R.inc])(3, 4); //=> 32\n * R.useWith(Math.pow, [R.dec, R.inc])(3)(4); //=> 32\n * @symb R.useWith(f, [g, h])(a, b) = f(g(a), h(b))\n */\n\nvar useWith =\n/*#__PURE__*/\n_curry2(function useWith(fn, transformers) {\n return curryN(transformers.length, function () {\n var args = [];\n var idx = 0;\n\n while (idx < transformers.length) {\n args.push(transformers[idx].call(this, arguments[idx]));\n idx += 1;\n }\n\n return fn.apply(this, args.concat(Array.prototype.slice.call(arguments, transformers.length)));\n });\n});\n\nexport default useWith;","import _map from \"./internal/_map.js\";\nimport identity from \"./identity.js\";\nimport pickAll from \"./pickAll.js\";\nimport useWith from \"./useWith.js\";\n/**\n * Reasonable analog to SQL `select` statement.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @category Relation\n * @sig [k] -> [{k: v}] -> [{k: v}]\n * @param {Array} props The property names to project\n * @param {Array} objs The objects to query\n * @return {Array} An array of objects with just the `props` properties.\n * @example\n *\n * const abby = {name: 'Abby', age: 7, hair: 'blond', grade: 2};\n * const fred = {name: 'Fred', age: 12, hair: 'brown', grade: 7};\n * const kids = [abby, fred];\n * R.project(['name', 'grade'], kids); //=> [{name: 'Abby', grade: 2}, {name: 'Fred', grade: 7}]\n */\n\nvar project =\n/*#__PURE__*/\nuseWith(_map, [pickAll, identity]); // passing `identity` gives correct arity\n\nexport default project;","import _curry3 from \"./internal/_curry3.js\";\nimport equals from \"./equals.js\";\n/**\n * Returns `true` if the specified object property is equal, in\n * [`R.equals`](#equals) terms, to the given value; `false` otherwise.\n * You can test multiple properties with [`R.whereEq`](#whereEq).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig String -> a -> Object -> Boolean\n * @param {String} name\n * @param {*} val\n * @param {*} obj\n * @return {Boolean}\n * @see R.whereEq, R.propSatisfies, R.equals\n * @example\n *\n * const abby = {name: 'Abby', age: 7, hair: 'blond'};\n * const fred = {name: 'Fred', age: 12, hair: 'brown'};\n * const rusty = {name: 'Rusty', age: 10, hair: 'brown'};\n * const alois = {name: 'Alois', age: 15, disposition: 'surly'};\n * const kids = [abby, fred, rusty, alois];\n * const hasBrownHair = R.propEq('hair', 'brown');\n * R.filter(hasBrownHair, kids); //=> [fred, rusty]\n */\n\nvar propEq =\n/*#__PURE__*/\n_curry3(function propEq(name, val, obj) {\n return equals(val, obj[name]);\n});\n\nexport default propEq;","import _curry3 from \"./internal/_curry3.js\";\nimport is from \"./is.js\";\n/**\n * Returns `true` if the specified object property is of the given type;\n * `false` otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Type\n * @sig Type -> String -> Object -> Boolean\n * @param {Function} type\n * @param {String} name\n * @param {*} obj\n * @return {Boolean}\n * @see R.is, R.propSatisfies\n * @example\n *\n * R.propIs(Number, 'x', {x: 1, y: 2}); //=> true\n * R.propIs(Number, 'x', {x: 'foo'}); //=> false\n * R.propIs(Number, 'x', {}); //=> false\n */\n\nvar propIs =\n/*#__PURE__*/\n_curry3(function propIs(type, name, obj) {\n return is(type, obj[name]);\n});\n\nexport default propIs;","import _curry3 from \"./internal/_curry3.js\";\nimport pathOr from \"./pathOr.js\";\n/**\n * If the given, non-null object has an own property with the specified name,\n * returns the value of that property. Otherwise returns the provided default\n * value.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Object\n * @sig a -> String -> Object -> a\n * @param {*} val The default value.\n * @param {String} p The name of the property to return.\n * @param {Object} obj The object to query.\n * @return {*} The value of given property of the supplied object or the default value.\n * @example\n *\n * const alice = {\n * name: 'ALICE',\n * age: 101\n * };\n * const favorite = R.prop('favoriteLibrary');\n * const favoriteWithDefault = R.propOr('Ramda', 'favoriteLibrary');\n *\n * favorite(alice); //=> undefined\n * favoriteWithDefault(alice); //=> 'Ramda'\n */\n\nvar propOr =\n/*#__PURE__*/\n_curry3(function propOr(val, p, obj) {\n return pathOr(val, [p], obj);\n});\n\nexport default propOr;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Returns `true` if the specified object property satisfies the given\n * predicate; `false` otherwise. You can test multiple properties with\n * [`R.where`](#where).\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Logic\n * @sig (a -> Boolean) -> String -> {String: a} -> Boolean\n * @param {Function} pred\n * @param {String} name\n * @param {*} obj\n * @return {Boolean}\n * @see R.where, R.propEq, R.propIs\n * @example\n *\n * R.propSatisfies(x => x > 0, 'x', {x: 1, y: 2}); //=> true\n */\n\nvar propSatisfies =\n/*#__PURE__*/\n_curry3(function propSatisfies(pred, name, obj) {\n return pred(obj[name]);\n});\n\nexport default propSatisfies;","import _curry2 from \"./internal/_curry2.js\";\nimport path from \"./path.js\";\n/**\n * Acts as multiple `prop`: array of keys in, array of values out. Preserves\n * order.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig [k] -> {k: v} -> [v]\n * @param {Array} ps The property names to fetch\n * @param {Object} obj The object to query\n * @return {Array} The corresponding values or partially applied function.\n * @example\n *\n * R.props(['x', 'y'], {x: 1, y: 2}); //=> [1, 2]\n * R.props(['c', 'a', 'b'], {b: 2, a: 1}); //=> [undefined, 1, 2]\n *\n * const fullName = R.compose(R.join(' '), R.props(['first', 'last']));\n * fullName({last: 'Bullet-Tooth', age: 33, first: 'Tony'}); //=> 'Tony Bullet-Tooth'\n */\n\nvar props =\n/*#__PURE__*/\n_curry2(function props(ps, obj) {\n return ps.map(function (p) {\n return path([p], obj);\n });\n});\n\nexport default props;","import _curry2 from \"./internal/_curry2.js\";\nimport _isNumber from \"./internal/_isNumber.js\";\n/**\n * Returns a list of numbers from `from` (inclusive) to `to` (exclusive).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> Number -> [Number]\n * @param {Number} from The first number in the list.\n * @param {Number} to One more than the last number in the list.\n * @return {Array} The list of numbers in the set `[a, b)`.\n * @example\n *\n * R.range(1, 5); //=> [1, 2, 3, 4]\n * R.range(50, 53); //=> [50, 51, 52]\n */\n\nvar range =\n/*#__PURE__*/\n_curry2(function range(from, to) {\n if (!(_isNumber(from) && _isNumber(to))) {\n throw new TypeError('Both arguments to range must be numbers');\n }\n\n var result = [];\n var n = from;\n\n while (n < to) {\n result.push(n);\n n += 1;\n }\n\n return result;\n});\n\nexport default range;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * Similar to [`reduce`](#reduce), except moves through the input list from the\n * right to the left.\n *\n * The iterator function receives two values: *(value, acc)*, while the arguments'\n * order of `reduce`'s iterator function is *(acc, value)*.\n *\n * Note: `R.reduceRight` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduceRight` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight#Description\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> b) -> b -> [a] -> b\n * @param {Function} fn The iterator function. Receives two values, the current element from the array\n * and the accumulator.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduce, R.addIndex\n * @example\n *\n * R.reduceRight(R.subtract, 0, [1, 2, 3, 4]) // => (1 - (2 - (3 - (4 - 0)))) = -2\n * // - -2\n * // / \\ / \\\n * // 1 - 1 3\n * // / \\ / \\\n * // 2 - ==> 2 -1\n * // / \\ / \\\n * // 3 - 3 4\n * // / \\ / \\\n * // 4 0 4 0\n *\n * @symb R.reduceRight(f, a, [b, c, d]) = f(b, f(c, f(d, a)))\n */\n\nvar reduceRight =\n/*#__PURE__*/\n_curry3(function reduceRight(fn, acc, list) {\n var idx = list.length - 1;\n\n while (idx >= 0) {\n acc = fn(list[idx], acc);\n idx -= 1;\n }\n\n return acc;\n});\n\nexport default reduceRight;","import _curryN from \"./internal/_curryN.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport _reduced from \"./internal/_reduced.js\";\n/**\n * Like [`reduce`](#reduce), `reduceWhile` returns a single item by iterating\n * through the list, successively calling the iterator function. `reduceWhile`\n * also takes a predicate that is evaluated before each step. If the predicate\n * returns `false`, it \"short-circuits\" the iteration and returns the current\n * value of the accumulator.\n *\n * @func\n * @memberOf R\n * @since v0.22.0\n * @category List\n * @sig ((a, b) -> Boolean) -> ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} pred The predicate. It is passed the accumulator and the\n * current element.\n * @param {Function} fn The iterator function. Receives two values, the\n * accumulator and the current element.\n * @param {*} a The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduce, R.reduced\n * @example\n *\n * const isOdd = (acc, x) => x % 2 === 1;\n * const xs = [1, 3, 5, 60, 777, 800];\n * R.reduceWhile(isOdd, R.add, 0, xs); //=> 9\n *\n * const ys = [2, 4, 6]\n * R.reduceWhile(isOdd, R.add, 111, ys); //=> 111\n */\n\nvar reduceWhile =\n/*#__PURE__*/\n_curryN(4, [], function _reduceWhile(pred, fn, a, list) {\n return _reduce(function (acc, x) {\n return pred(acc, x) ? fn(acc, x) : _reduced(acc);\n }, a, list);\n});\n\nexport default reduceWhile;","import _curry1 from \"./internal/_curry1.js\";\nimport _reduced from \"./internal/_reduced.js\";\n/**\n * Returns a value wrapped to indicate that it is the final value of the reduce\n * and transduce functions. The returned value should be considered a black\n * box: the internal structure is not guaranteed to be stable.\n *\n * Note: this optimization is only available to the below functions:\n * - [`reduce`](#reduce)\n * - [`reduceWhile`](#reduceWhile)\n * - [`transduce`](#transduce)\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category List\n * @sig a -> *\n * @param {*} x The final value of the reduce.\n * @return {*} The wrapped value.\n * @see R.reduce, R.reduceWhile, R.transduce\n * @example\n *\n * R.reduce(\n * (acc, item) => item > 3 ? R.reduced(acc) : acc.concat(item),\n * [],\n * [1, 2, 3, 4, 5]) // [1, 2, 3]\n */\n\nvar reduced =\n/*#__PURE__*/\n_curry1(_reduced);\n\nexport default reduced;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Calls an input function `n` times, returning an array containing the results\n * of those function calls.\n *\n * `fn` is passed one argument: The current value of `n`, which begins at `0`\n * and is gradually incremented to `n - 1`.\n *\n * @func\n * @memberOf R\n * @since v0.2.3\n * @category List\n * @sig (Number -> a) -> Number -> [a]\n * @param {Function} fn The function to invoke. Passed one argument, the current value of `n`.\n * @param {Number} n A value between `0` and `n - 1`. Increments after each function call.\n * @return {Array} An array containing the return values of all calls to `fn`.\n * @see R.repeat\n * @example\n *\n * R.times(R.identity, 5); //=> [0, 1, 2, 3, 4]\n * @symb R.times(f, 0) = []\n * @symb R.times(f, 1) = [f(0)]\n * @symb R.times(f, 2) = [f(0), f(1)]\n */\n\nvar times =\n/*#__PURE__*/\n_curry2(function times(fn, n) {\n var len = Number(n);\n var idx = 0;\n var list;\n\n if (len < 0 || isNaN(len)) {\n throw new RangeError('n must be a non-negative number');\n }\n\n list = new Array(len);\n\n while (idx < len) {\n list[idx] = fn(idx);\n idx += 1;\n }\n\n return list;\n});\n\nexport default times;","import _curry2 from \"./internal/_curry2.js\";\nimport always from \"./always.js\";\nimport times from \"./times.js\";\n/**\n * Returns a fixed list of size `n` containing a specified identical value.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig a -> n -> [a]\n * @param {*} value The value to repeat.\n * @param {Number} n The desired size of the output list.\n * @return {Array} A new array containing `n` `value`s.\n * @see R.times\n * @example\n *\n * R.repeat('hi', 5); //=> ['hi', 'hi', 'hi', 'hi', 'hi']\n *\n * const obj = {};\n * const repeatedObjs = R.repeat(obj, 5); //=> [{}, {}, {}, {}, {}]\n * repeatedObjs[0] === repeatedObjs[1]; //=> true\n * @symb R.repeat(a, 0) = []\n * @symb R.repeat(a, 1) = [a]\n * @symb R.repeat(a, 2) = [a, a]\n */\n\nvar repeat =\n/*#__PURE__*/\n_curry2(function repeat(value, n) {\n return times(always(value), n);\n});\n\nexport default repeat;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Replace a substring or regex match in a string with a replacement.\n *\n * The first two parameters correspond to the parameters of the\n * `String.prototype.replace()` function, so the second parameter can also be a\n * function.\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category String\n * @sig RegExp|String -> String -> String -> String\n * @param {RegExp|String} pattern A regular expression or a substring to match.\n * @param {String} replacement The string to replace the matches with.\n * @param {String} str The String to do the search and replacement in.\n * @return {String} The result.\n * @example\n *\n * R.replace('foo', 'bar', 'foo foo foo'); //=> 'bar foo foo'\n * R.replace(/foo/, 'bar', 'foo foo foo'); //=> 'bar foo foo'\n *\n * // Use the \"g\" (global) flag to replace all occurrences:\n * R.replace(/foo/g, 'bar', 'foo foo foo'); //=> 'bar bar bar'\n */\n\nvar replace =\n/*#__PURE__*/\n_curry3(function replace(regex, replacement, str) {\n return str.replace(regex, replacement);\n});\n\nexport default replace;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Scan is similar to [`reduce`](#reduce), but returns a list of successively\n * reduced values from the left\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> [a]\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n * current element from the array\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {Array} A list of all intermediately reduced values.\n * @see R.reduce, R.mapAccum\n * @example\n *\n * const numbers = [1, 2, 3, 4];\n * const factorials = R.scan(R.multiply, 1, numbers); //=> [1, 1, 2, 6, 24]\n * @symb R.scan(f, a, [b, c]) = [a, f(a, b), f(f(a, b), c)]\n */\n\nvar scan =\n/*#__PURE__*/\n_curry3(function scan(fn, acc, list) {\n var idx = 0;\n var len = list.length;\n var result = [acc];\n\n while (idx < len) {\n acc = fn(acc, list[idx]);\n result[idx + 1] = acc;\n idx += 1;\n }\n\n return result;\n});\n\nexport default scan;","import _curry2 from \"./internal/_curry2.js\";\nimport ap from \"./ap.js\";\nimport map from \"./map.js\";\nimport prepend from \"./prepend.js\";\nimport reduceRight from \"./reduceRight.js\";\n/**\n * Transforms a [Traversable](https://github.com/fantasyland/fantasy-land#traversable)\n * of [Applicative](https://github.com/fantasyland/fantasy-land#applicative) into an\n * Applicative of Traversable.\n *\n * Dispatches to the `sequence` method of the second argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig (Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a)\n * @param {Function} of\n * @param {*} traversable\n * @return {*}\n * @see R.traverse\n * @example\n *\n * R.sequence(Maybe.of, [Just(1), Just(2), Just(3)]); //=> Just([1, 2, 3])\n * R.sequence(Maybe.of, [Just(1), Just(2), Nothing()]); //=> Nothing()\n *\n * R.sequence(R.of, Just([1, 2, 3])); //=> [Just(1), Just(2), Just(3)]\n * R.sequence(R.of, Nothing()); //=> [Nothing()]\n */\n\nvar sequence =\n/*#__PURE__*/\n_curry2(function sequence(of, traversable) {\n return typeof traversable.sequence === 'function' ? traversable.sequence(of) : reduceRight(function (x, acc) {\n return ap(map(prepend, x), acc);\n }, of([]), traversable);\n});\n\nexport default sequence;","import _curry3 from \"./internal/_curry3.js\";\nimport always from \"./always.js\";\nimport over from \"./over.js\";\n/**\n * Returns the result of \"setting\" the portion of the given data structure\n * focused by the given lens to the given value.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Lens s a -> a -> s -> s\n * @param {Lens} lens\n * @param {*} v\n * @param {*} x\n * @return {*}\n * @see R.prop, R.lensIndex, R.lensProp\n * @example\n *\n * const xLens = R.lensProp('x');\n *\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.set(xLens, 8, {x: 1, y: 2}); //=> {x: 8, y: 2}\n */\n\nvar set =\n/*#__PURE__*/\n_curry3(function set(lens, v, x) {\n return over(lens, always(v), x);\n});\n\nexport default set;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a copy of the list, sorted according to the comparator function,\n * which should accept two values at a time and return a negative number if the\n * first value is smaller, a positive number if it's larger, and zero if they\n * are equal. Please note that this is a **copy** of the list. It does not\n * modify the original.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, a) -> Number) -> [a] -> [a]\n * @param {Function} comparator A sorting function :: a -> b -> Int\n * @param {Array} list The list to sort\n * @return {Array} a new array with its elements sorted by the comparator function.\n * @example\n *\n * const diff = function(a, b) { return a - b; };\n * R.sort(diff, [4,2,7,5]); //=> [2, 4, 5, 7]\n */\n\nvar sort =\n/*#__PURE__*/\n_curry2(function sort(comparator, list) {\n return Array.prototype.slice.call(list, 0).sort(comparator);\n});\n\nexport default sort;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Sorts the list according to the supplied function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord b => (a -> b) -> [a] -> [a]\n * @param {Function} fn\n * @param {Array} list The list to sort.\n * @return {Array} A new list sorted by the keys generated by `fn`.\n * @example\n *\n * const sortByFirstItem = R.sortBy(R.prop(0));\n * const pairs = [[-1, 1], [-2, 2], [-3, 3]];\n * sortByFirstItem(pairs); //=> [[-3, 3], [-2, 2], [-1, 1]]\n *\n * const sortByNameCaseInsensitive = R.sortBy(R.compose(R.toLower, R.prop('name')));\n * const alice = {\n * name: 'ALICE',\n * age: 101\n * };\n * const bob = {\n * name: 'Bob',\n * age: -10\n * };\n * const clara = {\n * name: 'clara',\n * age: 314.159\n * };\n * const people = [clara, bob, alice];\n * sortByNameCaseInsensitive(people); //=> [alice, bob, clara]\n */\n\nvar sortBy =\n/*#__PURE__*/\n_curry2(function sortBy(fn, list) {\n return Array.prototype.slice.call(list, 0).sort(function (a, b) {\n var aa = fn(a);\n var bb = fn(b);\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n });\n});\n\nexport default sortBy;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Sorts a list according to a list of comparators.\n *\n * @func\n * @memberOf R\n * @since v0.23.0\n * @category Relation\n * @sig [(a, a) -> Number] -> [a] -> [a]\n * @param {Array} functions A list of comparator functions.\n * @param {Array} list The list to sort.\n * @return {Array} A new list sorted according to the comarator functions.\n * @example\n *\n * const alice = {\n * name: 'alice',\n * age: 40\n * };\n * const bob = {\n * name: 'bob',\n * age: 30\n * };\n * const clara = {\n * name: 'clara',\n * age: 40\n * };\n * const people = [clara, bob, alice];\n * const ageNameSort = R.sortWith([\n * R.descend(R.prop('age')),\n * R.ascend(R.prop('name'))\n * ]);\n * ageNameSort(people); //=> [alice, clara, bob]\n */\n\nvar sortWith =\n/*#__PURE__*/\n_curry2(function sortWith(fns, list) {\n return Array.prototype.slice.call(list, 0).sort(function (a, b) {\n var result = 0;\n var i = 0;\n\n while (result === 0 && i < fns.length) {\n result = fns[i](a, b);\n i += 1;\n }\n\n return result;\n });\n});\n\nexport default sortWith;","import invoker from \"./invoker.js\";\n/**\n * Splits a string into an array of strings based on the given\n * separator.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category String\n * @sig (String | RegExp) -> String -> [String]\n * @param {String|RegExp} sep The pattern.\n * @param {String} str The string to separate into an array.\n * @return {Array} The array of strings from `str` separated by `sep`.\n * @see R.join\n * @example\n *\n * const pathComponents = R.split('/');\n * R.tail(pathComponents('/usr/local/bin/node')); //=> ['usr', 'local', 'bin', 'node']\n *\n * R.split('.', 'a.b.c.xyz.d'); //=> ['a', 'b', 'c', 'xyz', 'd']\n */\n\nvar split =\n/*#__PURE__*/\ninvoker(1, 'split');\nexport default split;","import _curry2 from \"./internal/_curry2.js\";\nimport length from \"./length.js\";\nimport slice from \"./slice.js\";\n/**\n * Splits a given list or string at a given index.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig Number -> [a] -> [[a], [a]]\n * @sig Number -> String -> [String, String]\n * @param {Number} index The index where the array/string is split.\n * @param {Array|String} array The array/string to be split.\n * @return {Array}\n * @example\n *\n * R.splitAt(1, [1, 2, 3]); //=> [[1], [2, 3]]\n * R.splitAt(5, 'hello world'); //=> ['hello', ' world']\n * R.splitAt(-1, 'foobar'); //=> ['fooba', 'r']\n */\n\nvar splitAt =\n/*#__PURE__*/\n_curry2(function splitAt(index, array) {\n return [slice(0, index, array), slice(index, length(array), array)];\n});\n\nexport default splitAt;","import _curry2 from \"./internal/_curry2.js\";\nimport slice from \"./slice.js\";\n/**\n * Splits a collection into slices of the specified length.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig Number -> [a] -> [[a]]\n * @sig Number -> String -> [String]\n * @param {Number} n\n * @param {Array} list\n * @return {Array}\n * @example\n *\n * R.splitEvery(3, [1, 2, 3, 4, 5, 6, 7]); //=> [[1, 2, 3], [4, 5, 6], [7]]\n * R.splitEvery(3, 'foobarbaz'); //=> ['foo', 'bar', 'baz']\n */\n\nvar splitEvery =\n/*#__PURE__*/\n_curry2(function splitEvery(n, list) {\n if (n <= 0) {\n throw new Error('First argument to splitEvery must be a positive integer');\n }\n\n var result = [];\n var idx = 0;\n\n while (idx < list.length) {\n result.push(slice(idx, idx += n, list));\n }\n\n return result;\n});\n\nexport default splitEvery;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Takes a list and a predicate and returns a pair of lists with the following properties:\n *\n * - the result of concatenating the two output lists is equivalent to the input list;\n * - none of the elements of the first output list satisfies the predicate; and\n * - if the second output list is non-empty, its first element satisfies the predicate.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> [[a], [a]]\n * @param {Function} pred The predicate that determines where the array is split.\n * @param {Array} list The array to be split.\n * @return {Array}\n * @example\n *\n * R.splitWhen(R.equals(2), [1, 2, 3, 1, 2, 3]); //=> [[1], [2, 3, 1, 2, 3]]\n */\n\nvar splitWhen =\n/*#__PURE__*/\n_curry2(function splitWhen(pred, list) {\n var idx = 0;\n var len = list.length;\n var prefix = [];\n\n while (idx < len && !pred(list[idx])) {\n prefix.push(list[idx]);\n idx += 1;\n }\n\n return [prefix, Array.prototype.slice.call(list, idx)];\n});\n\nexport default splitWhen;","import _curry2 from \"./internal/_curry2.js\";\nimport equals from \"./equals.js\";\nimport take from \"./take.js\";\n/**\n * Checks if a list starts with the provided sublist.\n *\n * Similarly, checks if a string starts with the provided substring.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category List\n * @sig [a] -> [a] -> Boolean\n * @sig String -> String -> Boolean\n * @param {*} prefix\n * @param {*} list\n * @return {Boolean}\n * @see R.endsWith\n * @example\n *\n * R.startsWith('a', 'abc') //=> true\n * R.startsWith('b', 'abc') //=> false\n * R.startsWith(['a'], ['a', 'b', 'c']) //=> true\n * R.startsWith(['b'], ['a', 'b', 'c']) //=> false\n */\n\nvar startsWith =\n/*#__PURE__*/\n_curry2(function (prefix, list) {\n return equals(take(prefix.length, list), prefix);\n});\n\nexport default startsWith;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Subtracts its second argument from its first argument.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Math\n * @sig Number -> Number -> Number\n * @param {Number} a The first value.\n * @param {Number} b The second value.\n * @return {Number} The result of `a - b`.\n * @see R.add\n * @example\n *\n * R.subtract(10, 8); //=> 2\n *\n * const minus5 = R.subtract(R.__, 5);\n * minus5(17); //=> 12\n *\n * const complementaryAngle = R.subtract(90);\n * complementaryAngle(30); //=> 60\n * complementaryAngle(72); //=> 18\n */\n\nvar subtract =\n/*#__PURE__*/\n_curry2(function subtract(a, b) {\n return Number(a) - Number(b);\n});\n\nexport default subtract;","import _curry2 from \"./internal/_curry2.js\";\nimport concat from \"./concat.js\";\nimport difference from \"./difference.js\";\n/**\n * Finds the set (i.e. no duplicates) of all elements contained in the first or\n * second list, but not both.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Relation\n * @sig [*] -> [*] -> [*]\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The elements in `list1` or `list2`, but not both.\n * @see R.symmetricDifferenceWith, R.difference, R.differenceWith\n * @example\n *\n * R.symmetricDifference([1,2,3,4], [7,6,5,4,3]); //=> [1,2,7,6,5]\n * R.symmetricDifference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5,1,2]\n */\n\nvar symmetricDifference =\n/*#__PURE__*/\n_curry2(function symmetricDifference(list1, list2) {\n return concat(difference(list1, list2), difference(list2, list1));\n});\n\nexport default symmetricDifference;","import _curry3 from \"./internal/_curry3.js\";\nimport concat from \"./concat.js\";\nimport differenceWith from \"./differenceWith.js\";\n/**\n * Finds the set (i.e. no duplicates) of all elements contained in the first or\n * second list, but not both. Duplication is determined according to the value\n * returned by applying the supplied predicate to two list elements.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Relation\n * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a]\n * @param {Function} pred A predicate used to test whether two items are equal.\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The elements in `list1` or `list2`, but not both.\n * @see R.symmetricDifference, R.difference, R.differenceWith\n * @example\n *\n * const eqA = R.eqBy(R.prop('a'));\n * const l1 = [{a: 1}, {a: 2}, {a: 3}, {a: 4}];\n * const l2 = [{a: 3}, {a: 4}, {a: 5}, {a: 6}];\n * R.symmetricDifferenceWith(eqA, l1, l2); //=> [{a: 1}, {a: 2}, {a: 5}, {a: 6}]\n */\n\nvar symmetricDifferenceWith =\n/*#__PURE__*/\n_curry3(function symmetricDifferenceWith(pred, list1, list2) {\n return concat(differenceWith(pred, list1, list2), differenceWith(pred, list2, list1));\n});\n\nexport default symmetricDifferenceWith;","import _curry2 from \"./internal/_curry2.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns a new list containing the last `n` elements of a given list, passing\n * each value to the supplied predicate function, and terminating when the\n * predicate function returns `false`. Excludes the element that caused the\n * predicate function to fail. The predicate function is passed one argument:\n * *(value)*.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> [a]\n * @sig (a -> Boolean) -> String -> String\n * @param {Function} fn The function called per iteration.\n * @param {Array} xs The collection to iterate over.\n * @return {Array} A new array.\n * @see R.dropLastWhile, R.addIndex\n * @example\n *\n * const isNotOne = x => x !== 1;\n *\n * R.takeLastWhile(isNotOne, [1, 2, 3, 4]); //=> [2, 3, 4]\n *\n * R.takeLastWhile(x => x !== 'R' , 'Ramda'); //=> 'amda'\n */\n\nvar takeLastWhile =\n/*#__PURE__*/\n_curry2(function takeLastWhile(fn, xs) {\n var idx = xs.length - 1;\n\n while (idx >= 0 && fn(xs[idx])) {\n idx -= 1;\n }\n\n return slice(idx + 1, Infinity, xs);\n});\n\nexport default takeLastWhile;","import _curry2 from \"./_curry2.js\";\nimport _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XTakeWhile =\n/*#__PURE__*/\nfunction () {\n function XTakeWhile(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XTakeWhile.prototype['@@transducer/init'] = _xfBase.init;\n XTakeWhile.prototype['@@transducer/result'] = _xfBase.result;\n\n XTakeWhile.prototype['@@transducer/step'] = function (result, input) {\n return this.f(input) ? this.xf['@@transducer/step'](result, input) : _reduced(result);\n };\n\n return XTakeWhile;\n}();\n\nvar _xtakeWhile =\n/*#__PURE__*/\n_curry2(function _xtakeWhile(f, xf) {\n return new XTakeWhile(f, xf);\n});\n\nexport default _xtakeWhile;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xtakeWhile from \"./internal/_xtakeWhile.js\";\nimport slice from \"./slice.js\";\n/**\n * Returns a new list containing the first `n` elements of a given list,\n * passing each value to the supplied predicate function, and terminating when\n * the predicate function returns `false`. Excludes the element that caused the\n * predicate function to fail. The predicate function is passed one argument:\n * *(value)*.\n *\n * Dispatches to the `takeWhile` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> [a]\n * @sig (a -> Boolean) -> String -> String\n * @param {Function} fn The function called per iteration.\n * @param {Array} xs The collection to iterate over.\n * @return {Array} A new array.\n * @see R.dropWhile, R.transduce, R.addIndex\n * @example\n *\n * const isNotFour = x => x !== 4;\n *\n * R.takeWhile(isNotFour, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3]\n *\n * R.takeWhile(x => x !== 'd' , 'Ramda'); //=> 'Ram'\n */\n\nvar takeWhile =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['takeWhile'], _xtakeWhile, function takeWhile(fn, xs) {\n var idx = 0;\n var len = xs.length;\n\n while (idx < len && fn(xs[idx])) {\n idx += 1;\n }\n\n return slice(0, idx, xs);\n}));\n\nexport default takeWhile;","import _curry2 from \"./_curry2.js\";\nimport _xfBase from \"./_xfBase.js\";\n\nvar XTap =\n/*#__PURE__*/\nfunction () {\n function XTap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XTap.prototype['@@transducer/init'] = _xfBase.init;\n XTap.prototype['@@transducer/result'] = _xfBase.result;\n\n XTap.prototype['@@transducer/step'] = function (result, input) {\n this.f(input);\n return this.xf['@@transducer/step'](result, input);\n };\n\n return XTap;\n}();\n\nvar _xtap =\n/*#__PURE__*/\n_curry2(function _xtap(f, xf) {\n return new XTap(f, xf);\n});\n\nexport default _xtap;","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xtap from \"./internal/_xtap.js\";\n/**\n * Runs the given function with the supplied object, then returns the object.\n *\n * Acts as a transducer if a transformer is given as second parameter.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (a -> *) -> a -> a\n * @param {Function} fn The function to call with `x`. The return value of `fn` will be thrown away.\n * @param {*} x\n * @return {*} `x`.\n * @example\n *\n * const sayX = x => console.log('x is ' + x);\n * R.tap(sayX, 100); //=> 100\n * // logs 'x is 100'\n * @symb R.tap(f, a) = a\n */\n\nvar tap =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable([], _xtap, function tap(fn, x) {\n fn(x);\n return x;\n}));\n\nexport default tap;","import _cloneRegExp from \"./internal/_cloneRegExp.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _isRegExp from \"./internal/_isRegExp.js\";\nimport toString from \"./toString.js\";\n/**\n * Determines whether a given string matches a given regular expression.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category String\n * @sig RegExp -> String -> Boolean\n * @param {RegExp} pattern\n * @param {String} str\n * @return {Boolean}\n * @see R.match\n * @example\n *\n * R.test(/^x/, 'xyz'); //=> true\n * R.test(/^y/, 'xyz'); //=> false\n */\n\nvar test =\n/*#__PURE__*/\n_curry2(function test(pattern, str) {\n if (!_isRegExp(pattern)) {\n throw new TypeError('‘test’ requires a value of type RegExp as its first argument; received ' + toString(pattern));\n }\n\n return _cloneRegExp(pattern).test(str);\n});\n\nexport default test;","export default function _isRegExp(x) {\n return Object.prototype.toString.call(x) === '[object RegExp]';\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _assertPromise from \"./internal/_assertPromise.js\";\n/**\n * Returns the result of applying the onSuccess function to the value inside\n * a successfully resolved promise. This is useful for working with promises\n * inside function compositions.\n *\n * @func\n * @memberOf R\n * @since v0.27.1\n * @category Function\n * @sig (a -> b) -> (Promise e a) -> (Promise e b)\n * @sig (a -> (Promise e b)) -> (Promise e a) -> (Promise e b)\n * @param {Function} onSuccess The function to apply. Can return a value or a promise of a value.\n * @param {Promise} p\n * @return {Promise} The result of calling `p.then(onSuccess)`\n * @see R.otherwise\n * @example\n *\n * var makeQuery = (email) => ({ query: { email }});\n *\n * //getMemberName :: String -> Promise ({firstName, lastName})\n * var getMemberName = R.pipe(\n * makeQuery,\n * fetchMember,\n * R.andThen(R.pick(['firstName', 'lastName']))\n * );\n */\n\nvar andThen =\n/*#__PURE__*/\n_curry2(function andThen(f, p) {\n _assertPromise('andThen', p);\n\n return p.then(f);\n});\n\nexport default andThen;","import invoker from \"./invoker.js\";\n/**\n * The lower case version of a string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category String\n * @sig String -> String\n * @param {String} str The string to lower case.\n * @return {String} The lower case version of `str`.\n * @see R.toUpper\n * @example\n *\n * R.toLower('XYZ'); //=> 'xyz'\n */\n\nvar toLower =\n/*#__PURE__*/\ninvoker(0, 'toLowerCase');\nexport default toLower;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\n/**\n * Converts an object into an array of key, value arrays. Only the object's\n * own properties are used.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.4.0\n * @category Object\n * @sig {String: *} -> [[String,*]]\n * @param {Object} obj The object to extract from\n * @return {Array} An array of key, value arrays from the object's own properties.\n * @see R.fromPairs\n * @example\n *\n * R.toPairs({a: 1, b: 2, c: 3}); //=> [['a', 1], ['b', 2], ['c', 3]]\n */\n\nvar toPairs =\n/*#__PURE__*/\n_curry1(function toPairs(obj) {\n var pairs = [];\n\n for (var prop in obj) {\n if (_has(prop, obj)) {\n pairs[pairs.length] = [prop, obj[prop]];\n }\n }\n\n return pairs;\n});\n\nexport default toPairs;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Converts an object into an array of key, value arrays. The object's own\n * properties and prototype properties are used. Note that the order of the\n * output array is not guaranteed to be consistent across different JS\n * platforms.\n *\n * @func\n * @memberOf R\n * @since v0.4.0\n * @category Object\n * @sig {String: *} -> [[String,*]]\n * @param {Object} obj The object to extract from\n * @return {Array} An array of key, value arrays from the object's own\n * and prototype properties.\n * @example\n *\n * const F = function() { this.x = 'X'; };\n * F.prototype.y = 'Y';\n * const f = new F();\n * R.toPairsIn(f); //=> [['x','X'], ['y','Y']]\n */\n\nvar toPairsIn =\n/*#__PURE__*/\n_curry1(function toPairsIn(obj) {\n var pairs = [];\n\n for (var prop in obj) {\n pairs[pairs.length] = [prop, obj[prop]];\n }\n\n return pairs;\n});\n\nexport default toPairsIn;","import invoker from \"./invoker.js\";\n/**\n * The upper case version of a string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category String\n * @sig String -> String\n * @param {String} str The string to upper case.\n * @return {String} The upper case version of `str`.\n * @see R.toLower\n * @example\n *\n * R.toUpper('abc'); //=> 'ABC'\n */\n\nvar toUpper =\n/*#__PURE__*/\ninvoker(0, 'toUpperCase');\nexport default toUpper;","import _reduce from \"./internal/_reduce.js\";\nimport _xwrap from \"./internal/_xwrap.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Initializes a transducer using supplied iterator function. Returns a single\n * item by iterating through the list, successively calling the transformed\n * iterator function and passing it an accumulator value and the current value\n * from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It will be\n * wrapped as a transformer to initialize the transducer. A transformer can be\n * passed directly in place of an iterator function. In both cases, iteration\n * may be stopped early with the [`R.reduced`](#reduced) function.\n *\n * A transducer is a function that accepts a transformer and returns a\n * transformer and can be composed directly.\n *\n * A transformer is an an object that provides a 2-arity reducing iterator\n * function, step, 0-arity initial value function, init, and 1-arity result\n * extraction function, result. The step function is used as the iterator\n * function in reduce. The result function is used to convert the final\n * accumulator into the return type and in most cases is\n * [`R.identity`](#identity). The init function can be used to provide an\n * initial accumulator, but is ignored by transduce.\n *\n * The iteration is performed with [`R.reduce`](#reduce) after initializing the transducer.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig (c -> c) -> ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} xf The transducer function. Receives a transformer and returns a transformer.\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n * current element from the array. Wrapped as transformer, if necessary, and used to\n * initialize the transducer\n * @param {*} acc The initial accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduce, R.reduced, R.into\n * @example\n *\n * const numbers = [1, 2, 3, 4];\n * const transducer = R.compose(R.map(R.add(1)), R.take(2));\n * R.transduce(transducer, R.flip(R.append), [], numbers); //=> [2, 3]\n *\n * const isOdd = (x) => x % 2 === 1;\n * const firstOddTransducer = R.compose(R.filter(isOdd), R.take(1));\n * R.transduce(firstOddTransducer, R.flip(R.append), [], R.range(0, 100)); //=> [1]\n */\n\nvar transduce =\n/*#__PURE__*/\ncurryN(4, function transduce(xf, fn, acc, list) {\n return _reduce(xf(typeof fn === 'function' ? _xwrap(fn) : fn), acc, list);\n});\nexport default transduce;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Transposes the rows and columns of a 2D list.\n * When passed a list of `n` lists of length `x`,\n * returns a list of `x` lists of length `n`.\n *\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig [[a]] -> [[a]]\n * @param {Array} list A 2D list\n * @return {Array} A 2D list\n * @example\n *\n * R.transpose([[1, 'a'], [2, 'b'], [3, 'c']]) //=> [[1, 2, 3], ['a', 'b', 'c']]\n * R.transpose([[1, 2, 3], ['a', 'b', 'c']]) //=> [[1, 'a'], [2, 'b'], [3, 'c']]\n *\n * // If some of the rows are shorter than the following rows, their elements are skipped:\n * R.transpose([[10, 11], [20], [], [30, 31, 32]]) //=> [[10, 20, 30], [11, 31], [32]]\n * @symb R.transpose([[a], [b], [c]]) = [a, b, c]\n * @symb R.transpose([[a, b], [c, d]]) = [[a, c], [b, d]]\n * @symb R.transpose([[a, b], [c]]) = [[a, c], [b]]\n */\n\nvar transpose =\n/*#__PURE__*/\n_curry1(function transpose(outerlist) {\n var i = 0;\n var result = [];\n\n while (i < outerlist.length) {\n var innerlist = outerlist[i];\n var j = 0;\n\n while (j < innerlist.length) {\n if (typeof result[j] === 'undefined') {\n result[j] = [];\n }\n\n result[j].push(innerlist[j]);\n j += 1;\n }\n\n i += 1;\n }\n\n return result;\n});\n\nexport default transpose;","import _curry3 from \"./internal/_curry3.js\";\nimport map from \"./map.js\";\nimport sequence from \"./sequence.js\";\n/**\n * Maps an [Applicative](https://github.com/fantasyland/fantasy-land#applicative)-returning\n * function over a [Traversable](https://github.com/fantasyland/fantasy-land#traversable),\n * then uses [`sequence`](#sequence) to transform the resulting Traversable of Applicative\n * into an Applicative of Traversable.\n *\n * Dispatches to the `traverse` method of the third argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig (Applicative f, Traversable t) => (a -> f a) -> (a -> f b) -> t a -> f (t b)\n * @param {Function} of\n * @param {Function} f\n * @param {*} traversable\n * @return {*}\n * @see R.sequence\n * @example\n *\n * // Returns `Maybe.Nothing` if the given divisor is `0`\n * const safeDiv = n => d => d === 0 ? Maybe.Nothing() : Maybe.Just(n / d)\n *\n * R.traverse(Maybe.of, safeDiv(10), [2, 4, 5]); //=> Maybe.Just([5, 2.5, 2])\n * R.traverse(Maybe.of, safeDiv(10), [2, 0, 5]); //=> Maybe.Nothing\n */\n\nvar traverse =\n/*#__PURE__*/\n_curry3(function traverse(of, f, traversable) {\n return typeof traversable['fantasy-land/traverse'] === 'function' ? traversable['fantasy-land/traverse'](f, of) : sequence(of, map(f, traversable));\n});\n\nexport default traverse;","import _curry1 from \"./internal/_curry1.js\";\nvar ws = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' + '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028' + '\\u2029\\uFEFF';\nvar zeroWidth = '\\u200b';\nvar hasProtoTrim = typeof String.prototype.trim === 'function';\n/**\n * Removes (strips) whitespace from both ends of the string.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category String\n * @sig String -> String\n * @param {String} str The string to trim.\n * @return {String} Trimmed version of `str`.\n * @example\n *\n * R.trim(' xyz '); //=> 'xyz'\n * R.map(R.trim, R.split(',', 'x, y, z')); //=> ['x', 'y', 'z']\n */\n\nvar trim = !hasProtoTrim ||\n/*#__PURE__*/\nws.trim() || !\n/*#__PURE__*/\nzeroWidth.trim() ?\n/*#__PURE__*/\n_curry1(function trim(str) {\n var beginRx = new RegExp('^[' + ws + '][' + ws + ']*');\n var endRx = new RegExp('[' + ws + '][' + ws + ']*$');\n return str.replace(beginRx, '').replace(endRx, '');\n}) :\n/*#__PURE__*/\n_curry1(function trim(str) {\n return str.trim();\n});\nexport default trim;","import _arity from \"./internal/_arity.js\";\nimport _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * `tryCatch` takes two functions, a `tryer` and a `catcher`. The returned\n * function evaluates the `tryer`; if it does not throw, it simply returns the\n * result. If the `tryer` *does* throw, the returned function evaluates the\n * `catcher` function and returns its result. Note that for effective\n * composition with this function, both the `tryer` and `catcher` functions\n * must return the same type of results.\n *\n * @func\n * @memberOf R\n * @since v0.20.0\n * @category Function\n * @sig (...x -> a) -> ((e, ...x) -> a) -> (...x -> a)\n * @param {Function} tryer The function that may throw.\n * @param {Function} catcher The function that will be evaluated if `tryer` throws.\n * @return {Function} A new function that will catch exceptions and send then to the catcher.\n * @example\n *\n * R.tryCatch(R.prop('x'), R.F)({x: true}); //=> true\n * R.tryCatch(() => { throw 'foo'}, R.always('catched'))('bar') // => 'catched'\n * R.tryCatch(R.times(R.identity), R.always([]))('s') // => []\n * R.tryCatch(() => { throw 'this is not a valid value'}, (err, value)=>({error : err, value }))('bar') // => {'error': 'this is not a valid value', 'value': 'bar'}\n */\n\nvar tryCatch =\n/*#__PURE__*/\n_curry2(function _tryCatch(tryer, catcher) {\n return _arity(tryer.length, function () {\n try {\n return tryer.apply(this, arguments);\n } catch (e) {\n return catcher.apply(this, _concat([e], arguments));\n }\n });\n});\n\nexport default tryCatch;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Takes a function `fn`, which takes a single array argument, and returns a\n * function which:\n *\n * - takes any number of positional arguments;\n * - passes these arguments to `fn` as an array; and\n * - returns the result.\n *\n * In other words, `R.unapply` derives a variadic function from a function which\n * takes an array. `R.unapply` is the inverse of [`R.apply`](#apply).\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Function\n * @sig ([*...] -> a) -> (*... -> a)\n * @param {Function} fn\n * @return {Function}\n * @see R.apply\n * @example\n *\n * R.unapply(JSON.stringify)(1, 2, 3); //=> '[1,2,3]'\n * @symb R.unapply(f)(a, b) = f([a, b])\n */\n\nvar unapply =\n/*#__PURE__*/\n_curry1(function unapply(fn) {\n return function () {\n return fn(Array.prototype.slice.call(arguments, 0));\n };\n});\n\nexport default unapply;","import _curry1 from \"./internal/_curry1.js\";\nimport nAry from \"./nAry.js\";\n/**\n * Wraps a function of any arity (including nullary) in a function that accepts\n * exactly 1 parameter. Any extraneous parameters will not be passed to the\n * supplied function.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Function\n * @sig (* -> b) -> (a -> b)\n * @param {Function} fn The function to wrap.\n * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of\n * arity 1.\n * @see R.binary, R.nAry\n * @example\n *\n * const takesTwoArgs = function(a, b) {\n * return [a, b];\n * };\n * takesTwoArgs.length; //=> 2\n * takesTwoArgs(1, 2); //=> [1, 2]\n *\n * const takesOneArg = R.unary(takesTwoArgs);\n * takesOneArg.length; //=> 1\n * // Only 1 argument is passed to the wrapped function\n * takesOneArg(1, 2); //=> [1, undefined]\n * @symb R.unary(f)(a, b, c) = f(a)\n */\n\nvar unary =\n/*#__PURE__*/\n_curry1(function unary(fn) {\n return nAry(1, fn);\n});\n\nexport default unary;","import _curry2 from \"./internal/_curry2.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Returns a function of arity `n` from a (manually) curried function.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Function\n * @sig Number -> (a -> b) -> (a -> c)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to uncurry.\n * @return {Function} A new function.\n * @see R.curry\n * @example\n *\n * const addFour = a => b => c => d => a + b + c + d;\n *\n * const uncurriedAddFour = R.uncurryN(4, addFour);\n * uncurriedAddFour(1, 2, 3, 4); //=> 10\n */\n\nvar uncurryN =\n/*#__PURE__*/\n_curry2(function uncurryN(depth, fn) {\n return curryN(depth, function () {\n var currentDepth = 1;\n var value = fn;\n var idx = 0;\n var endIdx;\n\n while (currentDepth <= depth && typeof value === 'function') {\n endIdx = currentDepth === depth ? arguments.length : idx + value.length;\n value = value.apply(this, Array.prototype.slice.call(arguments, idx, endIdx));\n currentDepth += 1;\n idx = endIdx;\n }\n\n return value;\n });\n});\n\nexport default uncurryN;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Builds a list from a seed value. Accepts an iterator function, which returns\n * either false to stop iteration or an array of length 2 containing the value\n * to add to the resulting list and the seed to be used in the next call to the\n * iterator function.\n *\n * The iterator function receives one argument: *(seed)*.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category List\n * @sig (a -> [b]) -> * -> [b]\n * @param {Function} fn The iterator function. receives one argument, `seed`, and returns\n * either false to quit iteration or an array of length two to proceed. The element\n * at index 0 of this array will be added to the resulting array, and the element\n * at index 1 will be passed to the next call to `fn`.\n * @param {*} seed The seed value.\n * @return {Array} The final list.\n * @example\n *\n * const f = n => n > 50 ? false : [-n, n + 10];\n * R.unfold(f, 10); //=> [-10, -20, -30, -40, -50]\n * @symb R.unfold(f, x) = [f(x)[0], f(f(x)[1])[0], f(f(f(x)[1])[1])[0], ...]\n */\n\nvar unfold =\n/*#__PURE__*/\n_curry2(function unfold(fn, seed) {\n var pair = fn(seed);\n var result = [];\n\n while (pair && pair.length) {\n result[result.length] = pair[0];\n pair = fn(pair[1]);\n }\n\n return result;\n});\n\nexport default unfold;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport compose from \"./compose.js\";\nimport uniq from \"./uniq.js\";\n/**\n * Combines two lists into a set (i.e. no duplicates) composed of the elements\n * of each list.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig [*] -> [*] -> [*]\n * @param {Array} as The first list.\n * @param {Array} bs The second list.\n * @return {Array} The first and second lists concatenated, with\n * duplicates removed.\n * @example\n *\n * R.union([1, 2, 3], [2, 3, 4]); //=> [1, 2, 3, 4]\n */\n\nvar union =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\ncompose(uniq, _concat));\n\nexport default union;","import _includesWith from \"./internal/_includesWith.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns a new list containing only one copy of each element in the original\n * list, based upon the value returned by applying the supplied predicate to\n * two list elements. Prefers the first item if two items compare equal based\n * on the predicate.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category List\n * @sig ((a, a) -> Boolean) -> [a] -> [a]\n * @param {Function} pred A predicate used to test whether two items are equal.\n * @param {Array} list The array to consider.\n * @return {Array} The list of unique items.\n * @example\n *\n * const strEq = R.eqBy(String);\n * R.uniqWith(strEq)([1, '1', 2, 1]); //=> [1, 2]\n * R.uniqWith(strEq)([{}, {}]); //=> [{}]\n * R.uniqWith(strEq)([1, '1', 1]); //=> [1]\n * R.uniqWith(strEq)(['1', 1, 1]); //=> ['1']\n */\n\nvar uniqWith =\n/*#__PURE__*/\n_curry2(function uniqWith(pred, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n var item;\n\n while (idx < len) {\n item = list[idx];\n\n if (!_includesWith(pred, item, result)) {\n result[result.length] = item;\n }\n\n idx += 1;\n }\n\n return result;\n});\n\nexport default uniqWith;","import _concat from \"./internal/_concat.js\";\nimport _curry3 from \"./internal/_curry3.js\";\nimport uniqWith from \"./uniqWith.js\";\n/**\n * Combines two lists into a set (i.e. no duplicates) composed of the elements\n * of each list. Duplication is determined according to the value returned by\n * applying the supplied predicate to two list elements.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig ((a, a) -> Boolean) -> [*] -> [*] -> [*]\n * @param {Function} pred A predicate used to test whether two items are equal.\n * @param {Array} list1 The first list.\n * @param {Array} list2 The second list.\n * @return {Array} The first and second lists concatenated, with\n * duplicates removed.\n * @see R.union\n * @example\n *\n * const l1 = [{a: 1}, {a: 2}];\n * const l2 = [{a: 1}, {a: 4}];\n * R.unionWith(R.eqBy(R.prop('a')), l1, l2); //=> [{a: 1}, {a: 2}, {a: 4}]\n */\n\nvar unionWith =\n/*#__PURE__*/\n_curry3(function unionWith(pred, list1, list2) {\n return uniqWith(pred, _concat(list1, list2));\n});\n\nexport default unionWith;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Tests the final argument by passing it to the given predicate function. If\n * the predicate is not satisfied, the function will return the result of\n * calling the `whenFalseFn` function with the same argument. If the predicate\n * is satisfied, the argument is returned as is.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category Logic\n * @sig (a -> Boolean) -> (a -> a) -> a -> a\n * @param {Function} pred A predicate function\n * @param {Function} whenFalseFn A function to invoke when the `pred` evaluates\n * to a falsy value.\n * @param {*} x An object to test with the `pred` function and\n * pass to `whenFalseFn` if necessary.\n * @return {*} Either `x` or the result of applying `x` to `whenFalseFn`.\n * @see R.ifElse, R.when, R.cond\n * @example\n *\n * let safeInc = R.unless(R.isNil, R.inc);\n * safeInc(null); //=> null\n * safeInc(1); //=> 2\n */\n\nvar unless =\n/*#__PURE__*/\n_curry3(function unless(pred, whenFalseFn, x) {\n return pred(x) ? x : whenFalseFn(x);\n});\n\nexport default unless;","import _identity from \"./internal/_identity.js\";\nimport chain from \"./chain.js\";\n/**\n * Shorthand for `R.chain(R.identity)`, which removes one level of nesting from\n * any [Chain](https://github.com/fantasyland/fantasy-land#chain).\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category List\n * @sig Chain c => c (c a) -> c a\n * @param {*} list\n * @return {*}\n * @see R.flatten, R.chain\n * @example\n *\n * R.unnest([1, [2], [[3]]]); //=> [1, 2, [3]]\n * R.unnest([[1, 2], [3, 4], [5, 6]]); //=> [1, 2, 3, 4, 5, 6]\n */\n\nvar unnest =\n/*#__PURE__*/\nchain(_identity);\nexport default unnest;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Takes a predicate, a transformation function, and an initial value,\n * and returns a value of the same type as the initial value.\n * It does so by applying the transformation until the predicate is satisfied,\n * at which point it returns the satisfactory value.\n *\n * @func\n * @memberOf R\n * @since v0.20.0\n * @category Logic\n * @sig (a -> Boolean) -> (a -> a) -> a -> a\n * @param {Function} pred A predicate function\n * @param {Function} fn The iterator function\n * @param {*} init Initial value\n * @return {*} Final value that satisfies predicate\n * @example\n *\n * R.until(R.gt(R.__, 100), R.multiply(2))(1) // => 128\n */\n\nvar until =\n/*#__PURE__*/\n_curry3(function until(pred, fn, init) {\n var val = init;\n\n while (!pred(val)) {\n val = fn(val);\n }\n\n return val;\n});\n\nexport default until;","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Returns a list of all the properties, including prototype properties, of the\n * supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Object\n * @sig {k: v} -> [v]\n * @param {Object} obj The object to extract values from\n * @return {Array} An array of the values of the object's own and prototype properties.\n * @see R.values, R.keysIn\n * @example\n *\n * const F = function() { this.x = 'X'; };\n * F.prototype.y = 'Y';\n * const f = new F();\n * R.valuesIn(f); //=> ['X', 'Y']\n */\n\nvar valuesIn =\n/*#__PURE__*/\n_curry1(function valuesIn(obj) {\n var prop;\n var vs = [];\n\n for (prop in obj) {\n vs[vs.length] = obj[prop];\n }\n\n return vs;\n});\n\nexport default valuesIn;","import _curry2 from \"./internal/_curry2.js\"; // `Const` is a functor that effectively ignores the function given to `map`.\n\nvar Const = function (x) {\n return {\n value: x,\n 'fantasy-land/map': function () {\n return this;\n }\n };\n};\n/**\n * Returns a \"view\" of the given data structure, determined by the given lens.\n * The lens's focus determines which portion of the data structure is visible.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Lens s a -> s -> a\n * @param {Lens} lens\n * @param {*} x\n * @return {*}\n * @see R.prop, R.lensIndex, R.lensProp\n * @example\n *\n * const xLens = R.lensProp('x');\n *\n * R.view(xLens, {x: 1, y: 2}); //=> 1\n * R.view(xLens, {x: 4, y: 2}); //=> 4\n */\n\n\nvar view =\n/*#__PURE__*/\n_curry2(function view(lens, x) {\n // Using `Const` effectively ignores the setter function of the `lens`,\n // leaving the value returned by the getter function unmodified.\n return lens(Const)(x).value;\n});\n\nexport default view;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Tests the final argument by passing it to the given predicate function. If\n * the predicate is satisfied, the function will return the result of calling\n * the `whenTrueFn` function with the same argument. If the predicate is not\n * satisfied, the argument is returned as is.\n *\n * @func\n * @memberOf R\n * @since v0.18.0\n * @category Logic\n * @sig (a -> Boolean) -> (a -> a) -> a -> a\n * @param {Function} pred A predicate function\n * @param {Function} whenTrueFn A function to invoke when the `condition`\n * evaluates to a truthy value.\n * @param {*} x An object to test with the `pred` function and\n * pass to `whenTrueFn` if necessary.\n * @return {*} Either `x` or the result of applying `x` to `whenTrueFn`.\n * @see R.ifElse, R.unless, R.cond\n * @example\n *\n * // truncate :: String -> String\n * const truncate = R.when(\n * R.propSatisfies(R.gt(R.__, 10), 'length'),\n * R.pipe(R.take(10), R.append('…'), R.join(''))\n * );\n * truncate('12345'); //=> '12345'\n * truncate('0123456789ABC'); //=> '0123456789…'\n */\n\nvar when =\n/*#__PURE__*/\n_curry3(function when(pred, whenTrueFn, x) {\n return pred(x) ? whenTrueFn(x) : x;\n});\n\nexport default when;","import _curry2 from \"./internal/_curry2.js\";\nimport _has from \"./internal/_has.js\";\n/**\n * Takes a spec object and a test object; returns true if the test satisfies\n * the spec. Each of the spec's own properties must be a predicate function.\n * Each predicate is applied to the value of the corresponding property of the\n * test object. `where` returns true if all the predicates return true, false\n * otherwise.\n *\n * `where` is well suited to declaratively expressing constraints for other\n * functions such as [`filter`](#filter) and [`find`](#find).\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category Object\n * @sig {String: (* -> Boolean)} -> {String: *} -> Boolean\n * @param {Object} spec\n * @param {Object} testObj\n * @return {Boolean}\n * @see R.propSatisfies, R.whereEq\n * @example\n *\n * // pred :: Object -> Boolean\n * const pred = R.where({\n * a: R.equals('foo'),\n * b: R.complement(R.equals('bar')),\n * x: R.gt(R.__, 10),\n * y: R.lt(R.__, 20)\n * });\n *\n * pred({a: 'foo', b: 'xxx', x: 11, y: 19}); //=> true\n * pred({a: 'xxx', b: 'xxx', x: 11, y: 19}); //=> false\n * pred({a: 'foo', b: 'bar', x: 11, y: 19}); //=> false\n * pred({a: 'foo', b: 'xxx', x: 10, y: 19}); //=> false\n * pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> false\n */\n\nvar where =\n/*#__PURE__*/\n_curry2(function where(spec, testObj) {\n for (var prop in spec) {\n if (_has(prop, spec) && !spec[prop](testObj[prop])) {\n return false;\n }\n }\n\n return true;\n});\n\nexport default where;","import _curry2 from \"./internal/_curry2.js\";\nimport equals from \"./equals.js\";\nimport map from \"./map.js\";\nimport where from \"./where.js\";\n/**\n * Takes a spec object and a test object; returns true if the test satisfies\n * the spec, false otherwise. An object satisfies the spec if, for each of the\n * spec's own properties, accessing that property of the object gives the same\n * value (in [`R.equals`](#equals) terms) as accessing that property of the\n * spec.\n *\n * `whereEq` is a specialization of [`where`](#where).\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Object\n * @sig {String: *} -> {String: *} -> Boolean\n * @param {Object} spec\n * @param {Object} testObj\n * @return {Boolean}\n * @see R.propEq, R.where\n * @example\n *\n * // pred :: Object -> Boolean\n * const pred = R.whereEq({a: 1, b: 2});\n *\n * pred({a: 1}); //=> false\n * pred({a: 1, b: 2}); //=> true\n * pred({a: 1, b: 2, c: 3}); //=> true\n * pred({a: 1, b: 1}); //=> false\n */\n\nvar whereEq =\n/*#__PURE__*/\n_curry2(function whereEq(spec, testObj) {\n return where(map(equals, spec), testObj);\n});\n\nexport default whereEq;","import _includes from \"./internal/_includes.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport flip from \"./flip.js\";\nimport reject from \"./reject.js\";\n/**\n * Returns a new list without values in the first argument.\n * [`R.equals`](#equals) is used to determine equality.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category List\n * @sig [a] -> [a] -> [a]\n * @param {Array} list1 The values to be removed from `list2`.\n * @param {Array} list2 The array to remove values from.\n * @return {Array} The new array without values in `list1`.\n * @see R.transduce, R.difference, R.remove\n * @example\n *\n * R.without([1, 2], [1, 2, 1, 3, 4]); //=> [3, 4]\n */\n\nvar without =\n/*#__PURE__*/\n_curry2(function (xs, list) {\n return reject(flip(_includes)(xs), list);\n});\n\nexport default without;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Exclusive disjunction logical operation.\n * Returns `true` if one of the arguments is truthy and the other is falsy.\n * Otherwise, it returns `false`.\n *\n * @func\n * @memberOf R\n * @since v0.27.1\n * @category Logic\n * @sig a -> b -> Boolean\n * @param {Any} a\n * @param {Any} b\n * @return {Boolean} true if one of the arguments is truthy and the other is falsy\n * @see R.or, R.and\n * @example\n *\n * R.xor(true, true); //=> false\n * R.xor(true, false); //=> true\n * R.xor(false, true); //=> true\n * R.xor(false, false); //=> false\n */\n\nvar xor =\n/*#__PURE__*/\n_curry2(function xor(a, b) {\n return Boolean(!a ^ !b);\n});\n\nexport default xor;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a new list out of the two supplied by creating each possible pair\n * from the lists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [b] -> [[a,b]]\n * @param {Array} as The first list.\n * @param {Array} bs The second list.\n * @return {Array} The list made by combining each possible pair from\n * `as` and `bs` into pairs (`[a, b]`).\n * @example\n *\n * R.xprod([1, 2], ['a', 'b']); //=> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]\n * @symb R.xprod([a, b], [c, d]) = [[a, c], [a, d], [b, c], [b, d]]\n */\n\nvar xprod =\n/*#__PURE__*/\n_curry2(function xprod(a, b) {\n // = xprodWith(prepend); (takes about 3 times as long...)\n var idx = 0;\n var ilen = a.length;\n var j;\n var jlen = b.length;\n var result = [];\n\n while (idx < ilen) {\n j = 0;\n\n while (j < jlen) {\n result[result.length] = [a[idx], b[j]];\n j += 1;\n }\n\n idx += 1;\n }\n\n return result;\n});\n\nexport default xprod;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a new list out of the two supplied by pairing up equally-positioned\n * items from both lists. The returned list is truncated to the length of the\n * shorter of the two input lists.\n * Note: `zip` is equivalent to `zipWith(function(a, b) { return [a, b] })`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [b] -> [[a,b]]\n * @param {Array} list1 The first array to consider.\n * @param {Array} list2 The second array to consider.\n * @return {Array} The list made by pairing up same-indexed elements of `list1` and `list2`.\n * @example\n *\n * R.zip([1, 2, 3], ['a', 'b', 'c']); //=> [[1, 'a'], [2, 'b'], [3, 'c']]\n * @symb R.zip([a, b, c], [d, e, f]) = [[a, d], [b, e], [c, f]]\n */\n\nvar zip =\n/*#__PURE__*/\n_curry2(function zip(a, b) {\n var rv = [];\n var idx = 0;\n var len = Math.min(a.length, b.length);\n\n while (idx < len) {\n rv[idx] = [a[idx], b[idx]];\n idx += 1;\n }\n\n return rv;\n});\n\nexport default zip;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Creates a new object out of a list of keys and a list of values.\n * Key/value pairing is truncated to the length of the shorter of the two lists.\n * Note: `zipObj` is equivalent to `pipe(zip, fromPairs)`.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category List\n * @sig [String] -> [*] -> {String: *}\n * @param {Array} keys The array that will be properties on the output object.\n * @param {Array} values The list of values on the output object.\n * @return {Object} The object made by pairing up same-indexed elements of `keys` and `values`.\n * @example\n *\n * R.zipObj(['a', 'b', 'c'], [1, 2, 3]); //=> {a: 1, b: 2, c: 3}\n */\n\nvar zipObj =\n/*#__PURE__*/\n_curry2(function zipObj(keys, values) {\n var idx = 0;\n var len = Math.min(keys.length, values.length);\n var out = {};\n\n while (idx < len) {\n out[keys[idx]] = values[idx];\n idx += 1;\n }\n\n return out;\n});\n\nexport default zipObj;","import _curry3 from \"./internal/_curry3.js\";\n/**\n * Creates a new list out of the two supplied by applying the function to each\n * equally-positioned pair in the lists. The returned list is truncated to the\n * length of the shorter of the two input lists.\n *\n * @function\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> c) -> [a] -> [b] -> [c]\n * @param {Function} fn The function used to combine the two elements into one value.\n * @param {Array} list1 The first array to consider.\n * @param {Array} list2 The second array to consider.\n * @return {Array} The list made by combining same-indexed elements of `list1` and `list2`\n * using `fn`.\n * @example\n *\n * const f = (x, y) => {\n * // ...\n * };\n * R.zipWith(f, [1, 2, 3], ['a', 'b', 'c']);\n * //=> [f(1, 'a'), f(2, 'b'), f(3, 'c')]\n * @symb R.zipWith(fn, [a, b, c], [d, e, f]) = [fn(a, d), fn(b, e), fn(c, f)]\n */\n\nvar zipWith =\n/*#__PURE__*/\n_curry3(function zipWith(fn, a, b) {\n var rv = [];\n var idx = 0;\n var len = Math.min(a.length, b.length);\n\n while (idx < len) {\n rv[idx] = fn(a[idx], b[idx]);\n idx += 1;\n }\n\n return rv;\n});\n\nexport default zipWith;","import curryN from \"./curryN.js\";\nimport _curry1 from \"./internal/_curry1.js\";\n/**\n * Creates a thunk out of a function. A thunk delays a calculation until\n * its result is needed, providing lazy evaluation of arguments.\n *\n * @func\n * @memberOf R\n * @since v0.26.0\n * @category Function\n * @sig ((a, b, ..., j) -> k) -> (a, b, ..., j) -> (() -> k)\n * @param {Function} fn A function to wrap in a thunk\n * @return {Function} Expects arguments for `fn` and returns a new function\n * that, when called, applies those arguments to `fn`.\n * @see R.partial, R.partialRight\n * @example\n *\n * R.thunkify(R.identity)(42)(); //=> 42\n * R.thunkify((a, b) => a + b)(25, 17)(); //=> 42\n */\n\nvar thunkify =\n/*#__PURE__*/\n_curry1(function thunkify(fn) {\n return curryN(fn.length, function createThunk() {\n var fnArgs = arguments;\n return function invokeThunk() {\n return fn.apply(this, fnArgs);\n };\n });\n});\n\nexport default thunkify;","import pipeP from \"./pipeP.js\";\nimport reverse from \"./reverse.js\";\n/**\n * Performs right-to-left composition of one or more Promise-returning\n * functions. The last arguments may have any arity; the remaining\n * arguments must be unary.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Function\n * @sig ((y -> Promise z), (x -> Promise y), ..., (a -> Promise b)) -> (a -> Promise z)\n * @param {...Function} functions The functions to compose\n * @return {Function}\n * @see R.pipeP\n * @deprecated since v0.26.0\n * @example\n *\n * const db = {\n * users: {\n * JOE: {\n * name: 'Joe',\n * followers: ['STEVE', 'SUZY']\n * }\n * }\n * }\n *\n * // We'll pretend to do a db lookup which returns a promise\n * const lookupUser = (userId) => Promise.resolve(db.users[userId])\n * const lookupFollowers = (user) => Promise.resolve(user.followers)\n * lookupUser('JOE').then(lookupFollowers)\n *\n * // followersForUser :: String -> Promise [UserId]\n * const followersForUser = R.composeP(lookupFollowers, lookupUser);\n * followersForUser('JOE').then(followers => console.log('Followers:', followers))\n * // Followers: [\"STEVE\",\"SUZY\"]\n */\n\nexport default function composeP() {\n if (arguments.length === 0) {\n throw new Error('composeP requires at least one argument');\n }\n\n return pipeP.apply(this, reverse(arguments));\n}","import composeK from \"./composeK.js\";\nimport reverse from \"./reverse.js\";\n/**\n * Returns the left-to-right Kleisli composition of the provided functions,\n * each of which must return a value of a type supported by [`chain`](#chain).\n *\n * `R.pipeK(f, g, h)` is equivalent to `R.pipe(f, R.chain(g), R.chain(h))`.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Function\n * @sig Chain m => ((a -> m b), (b -> m c), ..., (y -> m z)) -> (a -> m z)\n * @param {...Function}\n * @return {Function}\n * @see R.composeK\n * @deprecated since v0.26.0\n * @example\n *\n * // parseJson :: String -> Maybe *\n * // get :: String -> Object -> Maybe *\n *\n * // getStateCode :: Maybe String -> Maybe String\n * const getStateCode = R.pipeK(\n * parseJson,\n * get('user'),\n * get('address'),\n * get('state'),\n * R.compose(Maybe.of, R.toUpper)\n * );\n *\n * getStateCode('{\"user\":{\"address\":{\"state\":\"ny\"}}}');\n * //=> Just('NY')\n * getStateCode('[Invalid JSON]');\n * //=> Nothing()\n * @symb R.pipeK(f, g, h)(a) = R.chain(h, R.chain(g, f(a)))\n */\n\nexport default function pipeK() {\n if (arguments.length === 0) {\n throw new Error('pipeK requires at least one argument');\n }\n\n return composeK.apply(this, reverse(arguments));\n}","import * as R from 'ramda'\n\nObject.keys =\n\tObject.keys\n\t|| R.keys\n\nObject.values =\n\tObject.values\n\t|| R.values\n\n/* eslint-disable */\nArray.prototype.flatMap =\n\tArray.prototype.flatMap\n\t|| function flatMapPolyfill(f){\n\t\treturn this.reduce(\n\t\t\t(p,n) => p.concat( f(n) )\n\t\t\t, []\n\t\t)\n\t}\n\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\nif (typeof Object.assign !== 'function') {\n\t// Must be writable: true, enumerable: false, configurable: true\n\tObject.defineProperty(Object, \"assign\", {\n\t\tvalue: function assign(target, varArgs) { // .length of function is 2\n\t\t'use strict';\n\t\tif (target === null || target === undefined) {\n\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t}\n\n\t\tlet to = Object(target);\n\n\t\tfor (let index = 1; index < arguments.length; index++) {\n\t\t\tlet nextSource = arguments[index];\n\n\t\t\tif (nextSource !== null && nextSource !== undefined) {\n\t\t\tfor (let nextKey in nextSource) {\n\t\t\t\t// Avoid bugs when hasOwnProperty is shadowed\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn to;\n\t\t}\n\t\t,writable: true\n\t\t,configurable: true\n\t});\n}\n\nif (!Object.entries) {\n\tObject.entries = function( obj ){\n\t let ownProps = Object.keys( obj )\n\t\t ,i = ownProps.length\n\t\t ,resArray = new Array(i); // preallocate the Array\n\t while (i--)\n\t\tresArray[i] = [ownProps[i], obj[ownProps[i]]];\n\n\t return resArray;\n\t};\n}\n\nif (!String.prototype.startsWith) {\n Object.defineProperty(String.prototype, 'startsWith', {\n value: function(search, rawPos) {\n let pos = rawPos > 0 ? rawPos|0 : 0;\n return this.substring(pos, pos + search.length) === search;\n }\n });\n}\n\nif (!String.prototype.endsWith) {\n\tString.prototype.endsWith = function(search, this_len) {\n\t\tif (this_len === undefined || this_len > this.length) {\n\t\t\tthis_len = this.length;\n\t\t}\n\t\treturn this.substring(this_len - search.length, this_len) === search;\n\t};\n}\n\nif (!Array.prototype.includes) {\n\tArray.prototype.includes = function(x) {\n\t\treturn this.indexOf(x) > -1\n\t};\n}\n\nif (!String.prototype.includes) {\n\tString.prototype.includes = function(search, start) {\n\t\t'use strict';\n\n\t\tif (search instanceof RegExp) {\n\t\t\tthrow TypeError('first argument must not be a RegExp');\n\t\t}\n\t\tif (start === undefined) { start = 0; }\n\t\treturn this.indexOf(search, start) !== -1;\n\t};\n}\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches =\n\tElement.prototype.matchesSelector\n\t|| Element.prototype.mozMatchesSelector\n\t|| Element.prototype.msMatchesSelector\n\t|| Element.prototype.oMatchesSelector\n\t|| Element.prototype.webkitMatchesSelector\n\t|| function(s) {\n\t\tlet matches = (this.document || this.ownerDocument).querySelectorAll(s)\n\t\t\t,i = matches.length;\n\t\twhile (--i >= 0 && matches.item(i) !== this) {}\n\t\treturn i > -1;\n\t};\n}","\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\tisKeyed && (input[i] != null || typeof input[i] === \"boolean\")\n\t\t\t\t\t\t? \"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.\"\n\t\t\t\t\t\t: \"In fragments, vnodes must either all have keys or none have keys.\"\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril.js requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nmodule.exports = {}.hasOwnProperty\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = {}\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\tvnode.attrs = {}\n\n\tif (!isEmpty(state.attrs) && !isEmpty(attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tfor (var key in attrs) {\n\t\tif (hasOwn.call(attrs, key) && key !== \"key\") {\n\t\t\tvnode.attrs = attrs\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n/** @constructor */\nvar PromisePolyfill = function(executor) {\n\tif (!(this instanceof PromisePolyfill)) throw new Error(\"Promise must be called with 'new'.\")\n\tif (typeof executor !== \"function\") throw new TypeError(\"executor must be a function.\")\n\n\tvar self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false)\n\tvar instance = self._instance = {resolvers: resolvers, rejectors: rejectors}\n\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\tfunction handler(list, shouldAbsorb) {\n\t\treturn function execute(value) {\n\t\t\tvar then\n\t\t\ttry {\n\t\t\t\tif (shouldAbsorb && value != null && (typeof value === \"object\" || typeof value === \"function\") && typeof (then = value.then) === \"function\") {\n\t\t\t\t\tif (value === self) throw new TypeError(\"Promise can't be resolved with itself.\")\n\t\t\t\t\texecuteOnce(then.bind(value))\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallAsync(function() {\n\t\t\t\t\t\tif (!shouldAbsorb && list.length === 0) console.error(\"Possible unhandled promise rejection:\", value)\n\t\t\t\t\t\tfor (var i = 0; i < list.length; i++) list[i](value)\n\t\t\t\t\t\tresolvers.length = 0, rejectors.length = 0\n\t\t\t\t\t\tinstance.state = shouldAbsorb\n\t\t\t\t\t\tinstance.retry = function() {execute(value)}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\trejectCurrent(e)\n\t\t\t}\n\t\t}\n\t}\n\tfunction executeOnce(then) {\n\t\tvar runs = 0\n\t\tfunction run(fn) {\n\t\t\treturn function(value) {\n\t\t\t\tif (runs++ > 0) return\n\t\t\t\tfn(value)\n\t\t\t}\n\t\t}\n\t\tvar onerror = run(rejectCurrent)\n\t\ttry {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)}\n\t}\n\n\texecuteOnce(executor)\n}\nPromisePolyfill.prototype.then = function(onFulfilled, onRejection) {\n\tvar self = this, instance = self._instance\n\tfunction handle(callback, list, next, state) {\n\t\tlist.push(function(value) {\n\t\t\tif (typeof callback !== \"function\") next(value)\n\t\t\telse try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)}\n\t\t})\n\t\tif (typeof instance.retry === \"function\" && state === instance.state) instance.retry()\n\t}\n\tvar resolveNext, rejectNext\n\tvar promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject})\n\thandle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false)\n\treturn promise\n}\nPromisePolyfill.prototype.catch = function(onRejection) {\n\treturn this.then(null, onRejection)\n}\nPromisePolyfill.prototype.finally = function(callback) {\n\treturn this.then(\n\t\tfunction(value) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\tfunction(reason) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn PromisePolyfill.reject(reason);\n\t\t\t})\n\t\t}\n\t)\n}\nPromisePolyfill.resolve = function(value) {\n\tif (value instanceof PromisePolyfill) return value\n\treturn new PromisePolyfill(function(resolve) {resolve(value)})\n}\nPromisePolyfill.reject = function(value) {\n\treturn new PromisePolyfill(function(resolve, reject) {reject(value)})\n}\nPromisePolyfill.all = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tvar total = list.length, count = 0, values = []\n\t\tif (list.length === 0) resolve([])\n\t\telse for (var i = 0; i < list.length; i++) {\n\t\t\t(function(i) {\n\t\t\t\tfunction consume(value) {\n\t\t\t\t\tcount++\n\t\t\t\t\tvalues[i] = value\n\t\t\t\t\tif (count === total) resolve(values)\n\t\t\t\t}\n\t\t\t\tif (list[i] != null && (typeof list[i] === \"object\" || typeof list[i] === \"function\") && typeof list[i].then === \"function\") {\n\t\t\t\t\tlist[i].then(consume, reject)\n\t\t\t\t}\n\t\t\t\telse consume(list[i])\n\t\t\t})(i)\n\t\t}\n\t})\n}\nPromisePolyfill.race = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tlist[i].then(resolve, reject)\n\t\t}\n\t})\n}\n\nmodule.exports = PromisePolyfill\n","/* global window */\n\"use strict\"\n\nvar PromisePolyfill = require(\"./polyfill\")\n\nif (typeof window !== \"undefined\") {\n\tif (typeof window.Promise === \"undefined\") {\n\t\twindow.Promise = PromisePolyfill\n\t} else if (!window.Promise.prototype.finally) {\n\t\twindow.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = window.Promise\n} else if (typeof global !== \"undefined\") {\n\tif (typeof global.Promise === \"undefined\") {\n\t\tglobal.Promise = PromisePolyfill\n\t} else if (!global.Promise.prototype.finally) {\n\t\tglobal.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = global.Promise\n} else {\n\tmodule.exports = PromisePolyfill\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function($window) {\n\tvar $doc = $window && $window.document\n\tvar currentRedraw\n\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"'vnode.state' must not be modified.\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement() {\n\t\ttry {\n\t\t\treturn $doc.activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = $doc.createTextNode(vnode.children)\n\t\tinsertNode(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"ij\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no in sight.\n\t\tvar temp = $doc.createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"\" + vnode.children + \"\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvnode.instance = []\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tvnode.instance.push(child)\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) :\n\t\t\tis ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertNode(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\t//\n\t// The fourth part of the diff currently inserts nodes unconditionally, leading to issues\n\t// like #1791 and #1999. We need to be smarter about those situations where adjascent old\n\t// nodes remain together in the new list in a way that isn't covered by parts one and\n\t// three of the diff algo.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveNodes(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveNodes(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveNodes(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveHTML(parent, old)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t\tvnode.instance = old.instance\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tif (vnode.tag === \"textarea\") {\n\t\t\tif (vnode.attrs == null) vnode.attrs = {}\n\t\t}\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequence\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This covers a really specific edge case:\n\t// - Parent node is keyed and contains child\n\t// - Child is removed, returns unresolved promise in `onbeforeremove`\n\t// - Parent node is moved in keyed diff\n\t// - Remaining children still need moved appropriately\n\t//\n\t// Ideally, I'd track removed nodes as well, but that introduces a lot more\n\t// complexity and I'm not exactly interested in doing that.\n\tfunction moveNodes(parent, vnode, nextSibling) {\n\t\tvar frag = $doc.createDocumentFragment()\n\t\tmoveChildToFrag(parent, frag, vnode)\n\t\tinsertNode(parent, frag, nextSibling)\n\t}\n\tfunction moveChildToFrag(parent, frag, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\t\t\tfrag.appendChild(vnode.instance[i])\n\t\t\t\t}\n\t\t\t} else if (vnode.tag !== \"[\") {\n\t\t\t\t// Don't recurse for text nodes *or* elements, just fragments\n\t\t\t\tfrag.appendChild(vnode.dom)\n\t\t\t} else if (vnode.children.length === 1) {\n\t\t\t\tvnode = vnode.children[0]\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\tif (child != null) moveChildToFrag(parent, frag, child)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfunction insertNode(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted.\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t} else {\n\t\t\tif (stateResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) { mask &= 2; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tstateResult.then(next, next)\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) { mask &= 1; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tattrsResult.then(next, next)\n\t\t\t}\n\t\t}\n\n\t\tfunction reallyRemove() {\n\t\t\tcheckState(vnode, original)\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t}\n\t}\n\tfunction removeHTML(parent, vnode) {\n\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\tparent.removeChild(vnode.instance[i])\n\t\t}\n\t}\n\tfunction removeChild(parent, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tremoveHTML(parent, vnode)\n\t\t\t} else {\n\t\t\t\tif (vnode.tag !== \"[\") {\n\t\t\t\t\tparent.removeChild(vnode.dom)\n\t\t\t\t\tif (!Array.isArray(vnode.children)) break\n\t\t\t\t}\n\t\t\t\tif (vnode.children.length === 1) {\n\t\t\t\t\tvnode = vnode.children[0]\n\t\t\t\t\tif (vnode != null) continue\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\t\tif (child != null) removeChild(parent, child)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t//\n\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\tvar isFileInput = attrs != null && vnode.tag === \"input\" && attrs.type === \"file\"\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns, isFileInput)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns, isFileInput) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\" || key === \"type\" && vnode.tag === \"input\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\t//setting input[type=file][value] to same value causes an error to be generated if it's non-empty\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && (isFileInput || vnode.dom === activeElement())) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting input[type=file][value] to different value is an error if it's non-empty\n\t\t\t\t// Not ideal, but it at least works around the most common source of uncaught exceptions for now.\n\t\t\t\tif (isFileInput && \"\" + value !== \"\") { console.error(\"`value` is read-only on file inputs!\"); return }\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\tvnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& key !== \"title\" // creates \"null\" as title\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement()\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (old && old === attrs) {\n\t\t\tconsole.warn(\"Don't reuse attrs object, use new object for every redraw, this will throw in next major\")\n\t\t}\n\t\tif (attrs != null) {\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\t//\n\t\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\t\tvar isFileInput = vnode.tag === \"input\" && attrs.type === \"file\"\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns, isFileInput)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement() || vnode.tag === \"option\" && vnode.dom.parentNode === $doc.activeElement\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style.cssText = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style.cssText = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) element.style.setProperty(normalizeKey(key), String(value))\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\telement.style.setProperty(normalizeKey(key), value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\telement.style.removeProperty(normalizeKey(key))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tvnode.events._ = currentRedraw\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\tvar currentDOM\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\t\tif (currentDOM != null && dom.contains(currentDOM)) {\n\t\t\tthrow new TypeError(\"Node is currently being rendered to and thus is locked.\")\n\t\t}\n\t\tvar prevRedraw = currentRedraw\n\t\tvar prevDOM = currentDOM\n\t\tvar hooks = []\n\t\tvar active = activeElement()\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\ttry {\n\t\t\t// First time rendering into a node clears it out\n\t\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\t\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t\tdom.vnodes = vnodes\n\t\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\t\tif (active != null && activeElement() !== active && typeof active.focus === \"function\") active.focus()\n\t\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t\tcurrentDOM = prevDOM\n\t\t}\n\t}\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(typeof window !== \"undefined\" ? window : null)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar pending = false\n\tvar offset = -1\n\n\tfunction sync() {\n\t\tfor (offset = 0; offset < subscriptions.length; offset += 2) {\n\t\t\ttry { render(subscriptions[offset], Vnode(subscriptions[offset + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\toffset = -1\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount expects a component, not a vnode.\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\tif (index <= offset) offset -= 2\n\t\t\trender(root, [])\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : null, typeof console !== \"undefined\" ? console : null)\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nvar hasOwn = require(\"./hasOwn\")\n\nmodule.exports = Object.assign || function(target, source) {\n\tfor (var key in source) {\n\t\tif (hasOwn.call(source, key)) target[key] = source[key]\n\t}\n}\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"../util/assign\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names must be separated by either a '/', '-', or '.'.\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tassign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nmodule.exports = function($window, Promise, oncompletion) {\n\tvar callbackCount = 0\n\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction makeRequest(factory) {\n\t\treturn function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = new Promise(function(resolve, reject) {\n\t\t\t\tfactory(buildPathname(url, args.params), args, function (data) {\n\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tdata[i] = new args.type(data[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse data = new args.type(data)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data)\n\t\t\t\t}, reject)\n\t\t\t})\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif (hasOwn.call(args.headers, key) && key.toLowerCase() === name) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData || body instanceof $window.URLSearchParams)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false, isTimeout = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, \"content-type\")) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, \"accept\")) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif (hasOwn.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") {\n\t\t\t\t\t\t\t\t// Handle no-content which will not parse.\n\t\t\t\t\t\t\t\ttry { response = JSON.parse(ev.target.responseText) }\n\t\t\t\t\t\t\t\tcatch (e) { response = null }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (success) resolve(response)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar completeErrorResponse = function() {\n\t\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (xhr.status === 0) {\n\t\t\t\t\t\t\t\t// Use setTimeout to push this code block onto the event queue\n\t\t\t\t\t\t\t\t// This allows `xhr.ontimeout` to run in the case that there is a timeout\n\t\t\t\t\t\t\t\t// Without this setTimeout, `xhr.ontimeout` doesn't have a chance to reject\n\t\t\t\t\t\t\t\t// as `xhr.onreadystatechange` will run before it\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif (isTimeout) return\n\t\t\t\t\t\t\t\t\tcompleteErrorResponse()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else completeErrorResponse()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.ontimeout = function (ev) {\n\t\t\t\tisTimeout = true\n\t\t\t\tvar error = new Error(\"Request timed out\")\n\t\t\t\terror.code = ev.target.status\n\t\t\t\treject(error)\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData || body instanceof $window.URLSearchParams) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t}),\n\t\tjsonp: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar callbackName = args.callbackName || \"_mithril_\" + Math.round(Math.random() * 1e16) + \"_\" + callbackCount++\n\t\t\tvar script = $window.document.createElement(\"script\")\n\t\t\t$window[callbackName] = function(data) {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\tresolve(data)\n\t\t\t}\n\t\t\tscript.onerror = function() {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\treject(new Error(\"JSONP request failed\"))\n\t\t\t}\n\t\t\tscript.src = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n\t\t\t\tencodeURIComponent(args.callbackKey || \"callback\") + \"=\" +\n\t\t\t\tencodeURIComponent(callbackName)\n\t\t\t$window.document.documentElement.appendChild(script)\n\t\t}),\n\t}\n}\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./promise/promise\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, PromisePolyfill, mountRedraw.redraw)\n","\"use strict\"\n\nfunction decodeURIComponentSave(str) {\n\ttry {\n\t\treturn decodeURIComponent(str)\n\t} catch(err) {\n\t\treturn str\n\t}\n}\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponentSave(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponentSave(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t\tif (path.length > 1 && path[path.length - 1] === \"/\") path = path.slice(0, -1)\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\n// Note: this is mildly perf-sensitive.\n//\n// It does *not* use `delete` - dynamic `delete`s usually cause objects to bail\n// out into dictionary mode and just generally cause a bunch of optimization\n// issues within engines.\n//\n// Ideally, I would've preferred to do this, if it weren't for the optimization\n// issues:\n//\n// ```js\n// const hasOwn = require(\"./hasOwn\")\n// const magic = [\n// \"key\", \"oninit\", \"oncreate\", \"onbeforeupdate\", \"onupdate\",\n// \"onbeforeremove\", \"onremove\",\n// ]\n// module.exports = (attrs, extras) => {\n// const result = Object.assign(Object.create(null), attrs)\n// for (const key of magic) delete result[key]\n// if (extras != null) for (const key of extras) delete result[key]\n// return result\n// }\n// ```\n\nvar hasOwn = require(\"./hasOwn\")\n// Words in RegExp literals are sometimes mangled incorrectly by the internal bundler, so use RegExp().\nvar magic = new RegExp(\"^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$\")\n\nmodule.exports = function(attrs, extras) {\n\tvar result = {}\n\n\tif (extras != null) {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key) && extras.indexOf(key) < 0) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key)) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.Fragment = \"[\"\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.jsonp = request.jsonp\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.PromisePolyfill = require(\"./promise/polyfill\")\nm.censor = require(\"./util/censor\")\n\nmodule.exports = m\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\nvar Promise = require(\"../promise/promise\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../util/assign\")\nvar censor = require(\"../util/censor\")\n\nvar sentinel = {}\n\nfunction decodeURIComponentSave(component) {\n\ttry {\n\t\treturn decodeURIComponent(component)\n\t} catch(e) {\n\t\treturn component\n\t}\n}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar callAsync = $window == null\n\t\t// In case Mithril.js' loaded globally without the DOM, let's not break\n\t\t? null\n\t\t: typeof $window.setImmediate === \"function\" ? $window.setImmediate : $window.setTimeout\n\tvar p = Promise.resolve()\n\n\tvar scheduled = false\n\n\t// state === 0: init\n\t// state === 1: scheduled\n\t// state === 2: done\n\tvar ready = false\n\tvar state = 0\n\n\tvar compiled, fallbackRoute\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar RouterRoot = {\n\t\tonbeforeupdate: function() {\n\t\t\tstate = state ? 2 : 1\n\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t},\n\t\tonremove: function() {\n\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t},\n\t\tview: function() {\n\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\treturn vnode\n\t\t},\n\t}\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction resolveRoute() {\n\t\tscheduled = false\n\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t// but that's not our problem.\n\t\tvar prefix = $window.location.hash\n\t\tif (route.prefix[0] !== \"#\") {\n\t\t\tprefix = $window.location.search + prefix\n\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t}\n\t\t}\n\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t// since the representation is consistently a relatively poorly\n\t\t// optimized cons string.\n\t\tvar path = prefix.concat()\n\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponentSave)\n\t\t\t.slice(route.prefix.length)\n\t\tvar data = parsePathname(path)\n\n\t\tassign(data.params, $window.history.state)\n\n\t\tfunction reject(e) {\n\t\t\tconsole.error(e)\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\n\t\tloop(0)\n\t\tfunction loop(i) {\n\t\t\t// state === 0: init\n\t\t\t// state === 1: scheduled\n\t\t\t// state === 2: done\n\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\tvar localComp = payload\n\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t}).then(update, path === fallbackRoute ? null : reject)\n\t\t\t\t\t}\n\t\t\t\t\telse update(\"div\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path === fallbackRoute) {\n\t\t\t\tthrow new Error(\"Could not resolve default route \" + fallbackRoute + \".\")\n\t\t\t}\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\t}\n\n\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t// cleared if `hashchange` is used, since that makes it automatically\n\t// async.\n\tfunction fireAsync() {\n\t\tif (!scheduled) {\n\t\t\tscheduled = true\n\t\t\t// TODO: just do `mountRedraw.redraw()` here and elide the timer\n\t\t\t// dependency. Note that this will muck with tests a *lot*, so it's\n\t\t\t// not as easy of a change as it sounds.\n\t\t\tcallAsync(resolveRoute)\n\t\t}\n\t}\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (ready) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (!root) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\n\t\tcompiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a '/'.\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either '/', '.', or '-'.\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tfallbackRoute = defaultRoute\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes.\")\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\tready = true\n\t\tmountRedraw.mount(root, RouterRoot)\n\t\tresolveRoute()\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\t// Omit the used parameters from the rendered element - they are\n\t\t\t// internal. Also, censor the various lifecycle methods.\n\t\t\t//\n\t\t\t// We don't strip the other parameters because for convenience we\n\t\t\t// let them be specified in the selector as well.\n\t\t\tvar child = m(\n\t\t\t\tvnode.attrs.selector || \"a\",\n\t\t\t\tcensor(vnode.attrs, [\"options\", \"params\", \"selector\", \"onclick\"]),\n\t\t\t\tvnode.children\n\t\t\t)\n\t\t\tvar options, onclick, href\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want add `onclick` on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t} else {\n\t\t\t\toptions = vnode.attrs.options\n\t\t\t\tonclick = vnode.attrs.onclick\n\t\t\t\t// Easier to build it now to keep it isomorphic.\n\t\t\t\thref = buildPathname(child.attrs.href, vnode.attrs.params)\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","import mithril from 'mithril';\n\nconst querySelector = ()=>undefined;\nconst querySelectorAll = ()=>[];\nconst appendChild = ()=>{};\nconst createElement = ()=>({\n tag: '',\n addEventListener () {},\n querySelector,\n querySelectorAll,\n appendChild\n });\nconst head = createElement();\nconst body = createElement();\nconst _document = globalThis.document ?? {\n createElement,\n querySelector,\n querySelectorAll,\n appendChild,\n head,\n body\n};\n\n// @ts-nocheck\nvar warnedHalt = false;\nObject.defineProperty(StreamConstructor, \"HALT\", {\n get: function() {\n warnedHalt || console.log(\"HALT is deprecated and has been renamed to SKIP\");\n warnedHalt = true;\n return StreamConstructor.SKIP;\n }\n});\nfunction StreamConstructor(value) {\n var dependentStreams = [];\n var dependentFns = [];\n function stream(v) {\n if (arguments.length && v !== StreamConstructor.SKIP) {\n value = v;\n if (open(stream)) {\n stream._changing();\n stream._state = \"active\";\n // Cloning the list to ensure it's still iterated in intended\n // order\n dependentStreams.slice().forEach(function(s, i) {\n if (open(s)) s(this[i](value));\n }, dependentFns.slice());\n }\n }\n return value;\n }\n stream.constructor = StreamConstructor;\n stream._state = arguments.length && value !== StreamConstructor.SKIP ? \"active\" : \"pending\";\n stream._parents = [];\n stream._changing = function() {\n if (open(stream)) stream._state = \"changing\";\n dependentStreams.forEach(function(s) {\n s._changing();\n });\n };\n stream.set = (newValue)=>{\n stream(newValue);\n };\n stream.update = (valueOrFunction)=>{\n return stream(valueOrFunction(value));\n };\n stream.get = stream.dropRepeatsWith = (eq)=>{\n const sentinel = {};\n let prev = sentinel;\n const out = StreamConstructor();\n stream.map((x)=>{\n if (prev === sentinel || !eq(x, prev)) {\n prev = x;\n out(x);\n }\n return null;\n });\n out._original = stream._original || stream;\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.dropRepeats = ()=>stream.dropRepeatsWith((a, b)=>a == b);\n stream.afterSilence = (ms)=>{\n let id;\n const out = StreamConstructor();\n stream.map((x)=>{\n clearTimeout(id);\n id = setTimeout(()=>out(x), ms);\n return null;\n });\n out._original = stream._original || stream;\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.default = (x)=>{\n const out = stream.map((x)=>x);\n if (stream._state === \"pending\") {\n out(x);\n }\n out._original = stream._original || stream;\n return out;\n };\n stream.log = (prefix = \"\")=>{\n return stream.map((x)=>{\n return console.log(prefix, x);\n });\n };\n stream.throttle = (ms)=>{\n const out = StreamConstructor();\n let last = null;\n let id = 0;\n function process(x) {\n let wasNull = last == null;\n if (last == null) {\n last = Date.now();\n }\n let dt = Date.now() - last;\n clearTimeout(id);\n if (dt >= ms || wasNull) {\n out(x);\n last = Date.now();\n } else {\n id = setTimeout(process, Math.max(0, ms - dt), x);\n }\n }\n stream.map(process);\n out._original = stream._original || stream;\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.once = ()=>{\n let i = 0;\n return stream.map((x)=>{\n i++;\n if (i > 1) {\n return StreamConstructor.SKIP;\n } else {\n return x;\n }\n });\n };\n stream.filter = (predicate)=>{\n let out = stream.map((x)=>predicate(x) ? x : StreamConstructor.SKIP);\n out._original = out._original || stream;\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.reject = (predicate)=>{\n let out = stream.map((x)=>!predicate(x) ? x : StreamConstructor.SKIP);\n out._original = out._original || stream;\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.awaitAll = (visitor, onError)=>{\n let out = StreamConstructor();\n stream.map((x)=>{\n visitor(x).then(out, onError);\n });\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.awaitLatest = (visitor, onError)=>{\n let pending;\n let out = StreamConstructor();\n stream.map((x)=>{\n pending = visitor(x);\n let localPending = pending;\n localPending.then((x)=>{\n if (localPending === pending) {\n out(x);\n }\n }, onError);\n });\n stream.end.map((x)=>{\n if (x === true) {\n out.end(x);\n }\n });\n return out;\n };\n stream.skip = (n = 1)=>{\n let i = 0;\n let out = StreamConstructor();\n stream.end.map(out.end);\n stream.map((x)=>{\n i++;\n if (i > n) {\n out(x);\n }\n });\n return out;\n };\n stream._map = function(fn, ignoreInitial) {\n var target = ignoreInitial ? StreamConstructor() : StreamConstructor(fn(value));\n target._parents.push(stream);\n dependentStreams.push(target);\n dependentFns.push(fn);\n return target;\n };\n stream.map = function(fn) {\n return stream._map(fn, stream._state !== \"active\");\n };\n var end;\n function createEnd() {\n end = Stream();\n end.map(function(value) {\n if (value === true) {\n stream._parents.forEach(function(p) {\n p._unregisterChild(stream);\n });\n stream._state = \"ended\";\n stream._parents.length = dependentStreams.length = dependentFns.length = 0;\n }\n return value;\n });\n return end;\n }\n let get;\n function createGet() {\n get = stream.map((x)=>x);\n return get;\n }\n stream.toJSON = function() {\n return value != null && typeof value.toJSON === \"function\" ? value.toJSON() : value;\n };\n stream[\"fantasy-land/map\"] = stream.map;\n stream[\"fantasy-land/ap\"] = function(x) {\n return combine(function(s1, s2) {\n return s1()(s2());\n }, [\n x,\n stream\n ]);\n };\n stream._unregisterChild = function(child) {\n var childIndex = dependentStreams.indexOf(child);\n if (childIndex !== -1) {\n dependentStreams.splice(childIndex, 1);\n dependentFns.splice(childIndex, 1);\n }\n };\n Object.defineProperty(stream, \"end\", {\n get: function() {\n return end || createEnd();\n }\n });\n Object.defineProperty(stream, \"get\", {\n get: function() {\n return get || createGet();\n }\n });\n return stream;\n}\nStreamConstructor.SKIP = {};\nStreamConstructor.lift = lift;\nStreamConstructor.scan = scan;\nStreamConstructor.merge = merge;\nStreamConstructor.combine = combine;\nStreamConstructor.scanMerge = scanMerge;\nStreamConstructor[\"fantasy-land/of\"] = StreamConstructor;\nfunction combine(fn, streams) {\n var ready = streams.every(function(s) {\n if (s.constructor !== StreamConstructor) {\n throw new Error(\"Ensure that each item passed to stream.combine/stream.merge/lift is a stream.\");\n }\n return s._state === \"active\";\n });\n var stream = ready ? StreamConstructor(fn.apply(null, streams.concat([\n streams\n ]))) : StreamConstructor();\n var changed = [];\n var mappers = streams.map(function(s) {\n return s._map(function(value) {\n changed.push(s);\n if (ready || streams.every(function(s) {\n return s._state !== \"pending\";\n })) {\n ready = true;\n stream(fn.apply(null, streams.concat([\n changed\n ])));\n changed = [];\n }\n return value;\n }, true);\n });\n // if any dependency ends, end the combined stream\n streams.forEach((dep)=>{\n dep.end.map((ended)=>{\n if (ended === true && !stream.end()) {\n stream.end(true);\n }\n });\n });\n var endStream = stream.end.map(function(value) {\n if (value === true) {\n mappers.forEach(function(mapper) {\n mapper.end(true);\n });\n endStream.end(true);\n }\n return undefined;\n });\n return stream;\n}\nfunction merge(streams) {\n return combine(function() {\n return streams.map(function(s) {\n return s();\n });\n }, streams);\n}\nfunction scan(fn, acc, origin) {\n var stream = origin.map(function(v) {\n var next = fn(acc, v);\n if (next !== StreamConstructor.SKIP) acc = next;\n return next;\n });\n stream(acc);\n return stream;\n}\nfunction scanMerge(tuples, seed) {\n var streams = tuples.map(function(tuple) {\n return tuple[0];\n });\n var stream = combine(function() {\n var changed = arguments[arguments.length - 1];\n streams.forEach(function(stream, i) {\n if (changed.indexOf(stream) > -1) {\n seed = tuples[i][1](seed, stream());\n }\n });\n return seed;\n }, streams);\n stream(seed);\n return stream;\n}\nfunction lift() {\n var fn = arguments[0];\n var streams = Array.prototype.slice.call(arguments, 1);\n return merge(streams).map(function(streams) {\n return fn.apply(undefined, streams);\n });\n}\nfunction open(s) {\n return s._state === \"pending\" || s._state === \"active\" || s._state === \"changing\";\n}\nconst Stream = StreamConstructor;\n\nfunction inject(x) {\n return JSON.stringify(x);\n}\nfunction callable(strings, values) {\n let streamValues = [];\n let idx = values.map((x)=>{\n if (typeof x == 'function') {\n streamValues.push(x);\n return 'stream';\n } else {\n return 'raw';\n }\n });\n const fn = new Function(...Array.from({\n length: streamValues.length\n }).map((_, i)=>`$` + i).concat(`\n return (${strings.map((s, i)=>i in values ? idx[i] === 'stream' ? `${s}$${i}` : `${s}${inject(values[i])}` : s).join('')})\n `));\n return {\n fn,\n streamValues\n };\n}\n\n// Typed version of https://www.npmjs.com/package/xet\n// by @barneycarroll\nfunction xet(map, key, fn) {\n if (map.has(key)) {\n return map.get(key);\n }\n const value = fn(key, map);\n map.set(key, value);\n return value;\n}\n\n// whenever we encounter a stream, we assign it an id\n// which we can retrieve by reference\n// we can then use these ids in string caches reliably\nconst referenceIds = new WeakMap();\nlet ids = 0;\nconst notify = new WeakMap();\nfunction useStore(name, stateStream) {\n const write = (f)=>{\n stateStream.update(f);\n };\n // we take the source array, and the reference ids of all the source strings\n // and we smoosh them together into a key, this key can then be used to retrieve\n // the precompiled store instance instead of creating it a new\n const storeCache = new Map();\n const path = [\n name\n ];\n const compareResultSetReferences = (a, b)=>{\n for(let i = 0; i < Math.max(a.length, b.length); i++){\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n };\n function createChildStore(key, getter, setter, parentStore, path, isStatic) {\n // we want to react to changes to the source data\n // via our predicate even if the references haven't changed\n // our predicate may rely on some external dep changing\n const sourceStream = // todo pass this in as data\n // also we don't want to getAllEvents, its more complicated than that, need to fix that\n path.slice(-1)[0].startsWith('filter') || path.slice(-1)[0].startsWith('addField') ? parentStore.getAllEvents : parentStore.getAll;\n const rawRead$ = sourceStream.map((results)=>{\n let out = results.flatMap((row)=>getter(row));\n return out;\n });\n const read$ = rawRead$.dropRepeatsWith((a, b)=>{\n const out = compareResultSetReferences(a, b);\n return out;\n });\n const write = (f)=>{\n notify.get(parentStore)((parent)=>setter(parent, f));\n };\n function deleteFn() {\n // delete should apply to the currently predicated rows.\n // Predicates can rely on computed properties.\n // it gets quite involved, so we cheat, we call update and return\n // a special sentinel which will be detected in the parent\n // update and filter out the esults\n let sentinel = Symbol.for('bacta/delete');\n write((x)=>{\n x[sentinel] = true;\n return x;\n });\n }\n let get = read$.map((xs)=>xs[0]);\n let store = {\n get,\n getAll: read$,\n getAllEvents: rawRead$,\n update: write,\n focus,\n prop,\n unnest,\n addField,\n filterResult,\n where: filterResult,\n delete: deleteFn,\n path,\n \"bacta/store\": true,\n set: (x)=>write(()=>x),\n count: read$.map((xs)=>xs.length),\n key,\n isStatic\n };\n notify.set(store, (f)=>{\n notify.get(parentStore)((parent)=>setter(parent, f));\n });\n return store;\n }\n function prop(property) {\n const newPath = this.path.concat('prop(' + JSON.stringify(property) + ')');\n const key = newPath.join('.');\n return xet(storeCache, key, ()=>{\n return createChildStore(key, (row)=>typeof row === 'undefined' ? [] : [\n row[property]\n ], (parent, update)=>{\n // todo-james consolidate this delete logic so it applies to operators other than prop\n // e.g. what if the store was a list and they just unnest, no prop, delete wouldn't work\n let updated = update(parent[property]);\n if (Array.isArray(updated)) {\n let filtered = updated.filter((x)=>!x[Symbol.for('bacta/delete')]);\n let result = {\n ...parent,\n [property]: filtered\n };\n return result;\n } else if (updated[Symbol.for(\"bacta/delete\")]) {\n let result = {\n ...parent\n };\n delete result[property];\n return result;\n } else {\n return {\n ...parent,\n [property]: updated\n };\n }\n }, this, newPath, true);\n });\n }\n function unnest() {\n const newPath = this.path.concat('unnest()');\n const key = newPath.join('.');\n return xet(storeCache, key, ()=>createChildStore(key, (arrayRow)=>arrayRow, (arrayRow, update)=>arrayRow.map((unnestedRow)=>update(unnestedRow)), this, newPath, false));\n }\n function addField(fieldName, visitor) {\n const newPath = this.path.concat(`addField(${fieldName}, ${visitor + ''})`);\n const key = newPath.join('.');\n return xet(storeCache, key, ()=>{\n let childStore = createChildStore(key, (row)=>typeof row === 'undefined' ? [] : [\n {\n ...row,\n [fieldName]: visitor(row)\n }\n ], (row, update)=>{\n // add field temporarily\n let transformed = {\n ...row,\n [fieldName]: visitor(row)\n };\n // let child streams see it for their own visitors\n let visited = update(transformed);\n // delete it\n delete visited[fieldName];\n // provide new state to root\n return visited;\n }, this, newPath, false);\n return childStore;\n });\n }\n function filterResult(strings, ...values) {\n let valueIds = values.map((x)=>{\n if (typeof x === 'function') {\n return xet(referenceIds, x, ()=>`stream_${ids++}`);\n } else {\n return x;\n }\n });\n const newPath = this.path.concat(`filterResult(${strings.map((x, i)=>x + (JSON.stringify(valueIds[i]) ?? '')).join('')})`);\n const key = newPath.join('.');\n return xet(storeCache, key, ()=>{\n const { fn , streamValues } = callable(strings, values);\n let childStore = createChildStore(key, (row)=>typeof row === 'undefined' ? [] : fn(...streamValues.map((x)=>x()))(row) ? [\n row\n ] : [], (row, update)=>fn(...streamValues.map((x)=>x()))(row) ? update(row) : row, this, newPath, false);\n if (streamValues.length) {\n let i = 0;\n Stream.merge(streamValues).map((xs)=>{\n // todo-james create an internal way to repropagate the child store\n // without mistaking it for a user write\n i > 0 && childStore.update((x)=>x);\n i++;\n });\n }\n return childStore;\n });\n }\n function focus(getter, setter, isStatic) {\n const newPath = this.path.concat(`focus(${getter})`);\n const key = newPath.join('.');\n return xet(storeCache, key, ()=>createChildStore(key, getter, setter, this, newPath, isStatic));\n }\n let getAll = stateStream.get.map((x)=>[\n x\n ]);\n let store = {\n get: stateStream.get,\n getAll,\n getAllEvents: getAll,\n update: write,\n focus,\n prop,\n unnest,\n addField,\n filterResult,\n where: filterResult,\n // can't delete the root store\n delete () {},\n path,\n \"bacta/store\": true,\n isStatic: true,\n set: (x)=>write(()=>x),\n count: Stream(1),\n key: name\n };\n storeCache.set(name, store);\n notify.set(store, (f)=>{\n stateStream.update(f);\n });\n return store;\n}\n\nconst wrapComponents = new Map();\nfunction upgradeAttrs(attrs) {\n let newAttrs = {};\n let onCreates = [];\n let onRemoves = [];\n for (let key of Object.keys(attrs)){\n let v = attrs[key];\n if (key.startsWith(\"on\")) {\n newAttrs[key] = attrs[key];\n } else if (key.startsWith(\"$on\")) {\n if (typeof v === \"function\") {\n newAttrs[key.slice(1)] = (event)=>{\n event.redraw = false;\n attrs[key](event);\n };\n } else {\n newAttrs[key.slice(1)] = (event)=>{\n event.redraw = false;\n Object.entries(v).forEach(([k, value])=>{\n if (value) {\n value = value.set;\n }\n value(event.currentTarget[k]);\n });\n };\n onCreates.push((vnode)=>{\n Object.entries(v).forEach(([k, V])=>{\n if (V[\"bacta/store\"]) {\n V = V.get;\n }\n let S = V;\n S();\n S.map((v)=>{\n if (k in attrs) {\n return;\n }\n if (k in vnode.dom) {\n vnode.dom[k] = v;\n } else {\n vnode.dom.setAttribute(k, v);\n }\n });\n });\n });\n }\n } else if ((key == 'class' || key == 'className') && v != null && typeof v === 'object') ; else if (typeof v === \"function\" || v != null && v[\"bacta/store\"]) {\n if (v[\"bacta/store\"]) {\n v = v.get;\n }\n if (!v[\"fantasy-land/map\"]) {\n onCreates.push((vnode)=>{\n let out = v(vnode);\n if (out[\"bacta/store\"]) {\n out = out.get;\n }\n if (out[\"fantasy-land/map\"]) {\n let s = out.dropRepeats().map((x)=>{\n if (key == 'class' || key == 'className' || key in vnode.dom) {\n // @ts-ignore\n vnode.dom[key] = x;\n } else {\n vnode.dom.setAttribute(key, x);\n }\n });\n onRemoves.push(()=>s.end(true));\n } else {\n if (key in vnode.dom) {\n vnode.dom[key] = out;\n } else {\n vnode.dom.setAttribute(key, out);\n }\n }\n });\n } else {\n onCreates.push((vnode)=>{\n let s = v.map((x)=>{\n if (key in vnode.dom) {\n vnode.dom[key] = x;\n } else {\n vnode.dom.setAttribute(key, x);\n }\n });\n onRemoves.push(()=>s.end(true));\n });\n }\n } else {\n newAttrs[key] = attrs[key];\n }\n }\n if (onCreates.length) {\n newAttrs.oncreate = (vnode)=>{\n attrs?.oncreate?.(vnode);\n onCreates.forEach((f)=>f(vnode));\n };\n }\n if (onRemoves.length) {\n newAttrs.onremove = (vnode)=>{\n attrs?.onremove?.(vnode);\n onRemoves.forEach((f)=>f(vnode));\n };\n }\n return newAttrs;\n}\nfunction upgradeComponent(component) {\n let onCreates = [];\n let onRemoves = [];\n function wrappedComponent(vnode) {\n const makeStream = (...args)=>{\n const local = Stream(...args);\n onRemoves.push(()=>{\n local.end(true);\n });\n local.effect = function(visitor) {\n let cleanup;\n local.map((x)=>{\n if (cleanup) {\n cleanup();\n }\n cleanup = visitor(x);\n });\n local.end.map((x)=>{\n if (x && cleanup) {\n cleanup();\n }\n });\n };\n return local;\n };\n class BactaError extends Error {\n }\n class Cancellation extends BactaError {\n }\n function makeEffect(options, visitor) {\n let local = makeStream(...'seed' in options ? [\n options.seed\n ] : []);\n let it = visitor(local);\n let running = true;\n let restartTimeoutId;\n function requestRestart() {\n if (running) {\n it.return(new Cancellation());\n running = false;\n }\n clearTimeout(restartTimeoutId);\n restartTimeoutId = setTimeout(()=>{\n it = visitor(local);\n running = true;\n handler();\n });\n }\n async function handler() {\n let done = false, value = null;\n let next;\n while(!done){\n try {\n options;\n void ({ done , value } = it.next(next));\n next = value;\n value = await value;\n if (value == null) {\n continue;\n } else if (Array.isArray(value)) {\n next = [];\n let deps = [];\n for (let x of value){\n x = await x;\n if (x == null) {\n next.push(x);\n continue;\n } else if (x['fantasy-land/map']) {\n // on the event after this one, restart the iterator\n deps.push(x);\n // wait for the next value, and inject it\n next.push(await new Promise((Y)=>x.once().map(Y)));\n } else if (x['bacta/store']) {\n // on the event after this one, restart the iterator\n deps.push(x.get);\n // wait for the next value, and inject it\n next.push(await new Promise((Y)=>x.get.once().map(Y)));\n } else {\n next.push(x);\n }\n }\n // if any of the deps emit, restart\n if (deps.length) {\n Stream.merge(deps).skip(1).once().map(()=>requestRestart());\n }\n } else if (typeof value == 'object') {\n if (value['bacta/store']) {\n // on the event after this one, restart the iterator\n value.get.skip(1).once().map(()=>requestRestart());\n // wait for the next value, and inject it\n next = await new Promise((Y)=>value.get.once().map(Y));\n }\n } else if (typeof value == 'function') {\n if (value['fantasy-land/map']) {\n // on the event after this one, restart the iterator\n value.skip(1).once().map(()=>{\n requestRestart();\n });\n // wait for the next value, and inject it\n next = await new Promise((Y)=>value.once().map(Y));\n }\n }\n } catch (e) {\n it.throw(e);\n }\n }\n }\n onRemoves.push(()=>{\n it.return(new Cancellation());\n });\n onCreates.push(()=>{\n handler();\n });\n return local;\n }\n function makeResource(...args) {\n let [signal, visitor] = args.length == 1 ? [\n null,\n args[0]\n ] : args;\n let local;\n let fetcher;\n let refetch;\n if (signal) {\n local = makeStream(signal._state === \"active\" ? {\n state: \"loading\",\n loading: true\n } : {\n state: \"idle\",\n loading: false\n });\n let latest;\n local.map((x)=>{\n if (x.state === \"loaded\") {\n latest = x.value;\n }\n });\n signal.map(()=>{\n local.update((x)=>({\n state: latest ? \"reloading\" : \"loading\",\n loading: true,\n value: latest\n }));\n });\n fetcher = async (x)=>{\n try {\n let value = await visitor(x);\n return {\n state: \"loaded\",\n loading: false,\n value: value\n };\n } catch (e) {\n return {\n state: \"error\",\n loading: false,\n error: e,\n value: undefined\n };\n }\n };\n refetch = ()=>fetcher(signal?.get()).then(local.set);\n signal.awaitLatest((x)=>fetcher(x)).map(local.set);\n } else {\n local = makeStream({\n state: \"loading\",\n loading: true\n });\n fetcher = ()=>Promise.resolve(visitor()).then((value)=>({\n state: \"loaded\",\n loading: false,\n value: value\n }), (error)=>({\n state: \"error\",\n loading: false,\n error,\n value: undefined\n }));\n fetcher().then(local.set);\n refetch = ()=>fetcher();\n }\n {\n let resourceStream = local;\n resourceStream.refetch = refetch;\n resourceStream.updateValue = (f)=>{\n resourceStream.update((x)=>({\n state: 'loaded',\n value: f(x.value),\n loading: false\n }));\n };\n return resourceStream;\n }\n }\n vnode.useStream = makeStream;\n vnode.useEffect = makeEffect;\n vnode.useStore = useStore;\n vnode.useResource = makeResource;\n const routeUpdate$ = makeStream(m.route.get());\n const routeUnique$ = routeUpdate$.dropRepeats();\n vnode.route = routeUnique$;\n const theirComponentOriginal = typeof component == \"function\" ? component(vnode) : Object.assign(vnode, component);\n const theirComponent = typeof theirComponentOriginal === 'function' ? {\n view: theirComponentOriginal\n } : theirComponentOriginal;\n return {\n ...theirComponent,\n oncreate (vnode) {\n theirComponent?.oncreate?.(vnode);\n onCreates.forEach((onCreate)=>{\n onCreate(vnode);\n });\n },\n onupdate (vnode) {\n theirComponent?.onupdate?.(vnode);\n routeUpdate$(m.route.get());\n },\n onremove (vnode) {\n theirComponent?.onremove?.(vnode);\n onRemoves.forEach((onRemove)=>{\n onRemove(vnode);\n });\n }\n };\n }\n return wrappedComponent;\n}\nconst StreamChild = ({ attrs: { stream } })=>{\n let mapped;\n let firstRender = true;\n let parentEl;\n return {\n oncreate (vnode) {\n mapped = stream.map((x)=>{\n if (!firstRender || vnode.dom.parentElement?.childNodes.length == 1) {\n if (firstRender) {\n parentEl = vnode.dom.parentElement;\n }\n m.render(parentEl, x);\n } else {\n return m.render(vnode.dom, x);\n }\n firstRender = false;\n });\n },\n onremove () {\n mapped.end(true);\n },\n view: ()=>{\n return m(\"stream-child\");\n }\n };\n};\nconst ThunkChild = ({ attrs: { thunk } })=>{\n const resolved = thunk();\n const { children } = m(\"fake-node\", resolved);\n return {\n view: ()=>children\n };\n};\nfunction hyperscript(...args) {\n args = args.slice(0, 1).concat(args.slice(1).map((x)=>x == null ? x : args[0].legacyRenderProps ? x : x[\"fantasy-land/map\"] ? m(StreamChild, {\n stream: x\n }) : x[\"bacta/store\"] ? m(StreamChild, {\n stream: x.get\n }) : typeof x === \"function\" ? m(ThunkChild, {\n thunk: x\n }) : x));\n const vnode = mithril(...args);\n const attrs = vnode.attrs ?? {};\n if (typeof vnode.tag != \"string\") {\n const tagC = vnode.tag;\n if (wrapComponents.has(tagC)) {\n vnode.tag = wrapComponents.get(tagC);\n } else {\n const wrapper = upgradeComponent(tagC);\n wrapComponents.set(tagC, wrapper);\n vnode.tag = wrapper;\n }\n }\n if (typeof vnode.tag === \"string\") {\n vnode.attrs = upgradeAttrs(attrs);\n if (vnode.attrs.style) {\n vnode.attrs.style = upgradeAttrs(vnode.attrs.style);\n }\n }\n if (vnode.children) {\n vnode.children;\n }\n if (vnode != null && vnode.tag) {\n vnode.$children = $children;\n }\n return vnode;\n}\nconst Identity = (v)=>{\n return {\n view: v.attrs.view\n };\n};\nfunction $children(list$, keyProperty, viewFn) {\n const oncreate = this.attrs.oncreate;\n this.attrs.oncreate = (v)=>{\n if (oncreate) {\n oncreate(v);\n }\n list$.getAll.map((xs = [])=>{\n m.render(v.dom, xs.map((x)=>{\n const item = list$.filterResult([\n 'x => x.' + keyProperty + ' === ',\n ''\n ], x[keyProperty]);\n return hyperscript(Identity, {\n key: x[keyProperty],\n onbeforeupdate: ()=>false,\n view: ()=>viewFn(item)\n });\n }));\n });\n };\n return this;\n}\n// https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781\nconst simpleHash = (str)=>{\n let hash = 0;\n for(let i = 0; i < str.length; i++){\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash &= hash; // Convert to 32bit integer\n }\n return \"css_\" + new Uint32Array([\n hash\n ])[0].toString(36);\n};\nconst sheets = new Set();\nconst styleEl = _document.createElement(\"style\");\nstyleEl.type = \"text/css\";\n_document.head.appendChild(styleEl);\nfunction css(strings, ...values) {\n let onCreates = [];\n let onRemoves = [];\n let string = strings.join(\"var(--$-n)\");\n const hash = simpleHash(string);\n string = string.replace(/\\&/g, \".\" + hash).replace(/\\$/g, hash);\n return m(\"bacta-css-node\", {\n oninit (vnode) {\n for(let i = 0; i < values.length; i++){\n let fn = values[i];\n let value = values[i];\n string = string.replace(\"--\" + hash + \"-n\", \"--\" + hash + \"-\" + i);\n if (typeof fn === \"function\") {\n let responseIfNotStream = !fn[\"fantasy-land/map\"] ? fn() : {};\n let stream = fn[\"fantasy-land/map\"] ? fn : responseIfNotStream[\"fantasy-land/map\"] ? responseIfNotStream : null;\n if (stream) {\n onCreates.push((dom)=>{\n let s = stream.map((x)=>{\n dom?.style?.setProperty(\"--\" + hash + \"-\" + i, x);\n onRemoves.push(()=>{\n s.end(true);\n });\n });\n });\n value = stream();\n } else {\n value = fn();\n }\n }\n onCreates.push((dom)=>{\n dom?.style?.setProperty(\"--\" + hash + \"-\" + i, value);\n });\n let varName = \"--\" + hash + \"-\" + i;\n vnode.attrs = {\n ...vnode.attrs,\n style: {\n ...vnode.attrs.style ?? {},\n [varName]: value == null ? \"unset\" : value\n }\n };\n }\n if (!sheets.has(hash)) {\n styleEl.textContent += \"\\n\" + string;\n }\n },\n oncreate (vnode) {\n let dom = vnode.dom.parentNode;\n dom.classList.add(hash);\n onCreates.forEach((f)=>{\n f(dom);\n });\n },\n onremove (vnode) {\n onRemoves.forEach((f)=>{\n f(vnode.dom.parentNode);\n });\n }\n });\n}\nfunction h(...args) {\n if (args[0].raw) {\n return css(...args);\n } else {\n return hyperscript(...args);\n }\n}\n// we need to wrap the entry point because our hyperscript\n// function doesn't get a chance to touch the initial components\n// otherwise\nconst wrap = (App)=>function Wrapper() {\n return {\n view: (v)=>m(App, v.attrs)\n };\n };\nfunction mount(el, component) {\n return mithril.mount(el, wrap(component));\n}\nfunction route(el, defaultRoute, routes) {\n const wrapped = Object.fromEntries(Object.entries(routes).map(([key, val])=>[\n key,\n wrap(val)\n ]));\n return mithril.route(el, defaultRoute, wrapped);\n}\nObject.assign(route, mithril.route);\nlet m = Object.assign(h, mithril, {\n route,\n mount\n});\n\nexport { Stream, css, m as default };\n","/* globals setTimeout, console */\nimport { Stream as prop } from 'bacta'\n\nprop.once = s => {\n\tlet times = 0;\n\tlet out = prop()\n\n\tlet watch =\n\t\ts.map(\n\t\t\tx => {\n\t\t\t\ttimes++\n\t\t\t\tif( times == 1 ){\n\t\t\t\t\treturn out(x)\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\tif( out ) {\n\t\t\t\t\t\t\tout.end(true)\n\t\t\t\t\t\t\twatch.end(true)\n\t\t\t\t\t\t\twatch = null\n\t\t\t\t\t\t\tout = null\n\t\t\t\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\t\t\t\ts = null\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\n\treturn out\n}\n\nprop.end = s => {\n\ts.end(true)\n}\n\nprop.fromFlydStream = function(flydStream){\n\tconst out = prop()\n\n\tflydStream.map(out)\n\n\tflydStream.end.map(\n\t\tt => t === true ? out.end(true) : null\n\t)\n\treturn out\n}\n\n// todo-james remove mergeAll usages in favour of merge\nprop.merge = prop.merge\n\nprop.dropRepeatsWith = (equals, s) => {\n\tlet prev = NaN\n\tconst out = prop();\n\ts.map(\n\t\tx => {\n\t\t\tif( equals(x,prev) ) {\n\t\t\t\tprev=x\n\t\t\t\treturn null\n\t\t\t} else {\n\t\t\t\tprev=x\n\t\t\t\treturn out(x)\n\t\t\t}\n\t\t}\n\t)\n\n\treturn out\n}\n\nprop.dropRepeats = s => {\n\treturn prop.dropRepeatsWith( (a,b) => a == b, s )\n}\n\nprop.isStream = function(s){\n\treturn s != null && s.constructor == prop\n}\n\nprop.afterSilence = function(ms, s){\n\treturn s.afterSilence(ms)\n}\n\n\nprop.log = function(o){\n\tObject.keys(o)\n\t\t.map(function(k){\n\t\t\tconst s = o[k]\n\n\t\t\treturn s.map(\n\t\t\t\tx => console.log(k, x)\n\t\t\t)\n\t\t})\n\t}\n\nprop.over = f => s => s( f(s() ) )\n\nexport {\n\tprop\n}\n","/* globals window */\nimport m from 'bacta'\nimport { prop as stream } from '../../stream'\n\nm.withAttr = (attribute, callback) => event => {\n\tcallback(event.target[attribute])\n}\n\nconst hrefToURL = ({ href, prefix }) => (\n\t'/'\n\t+ href\n)\n\t.replace(window.location.origin, '')\n\t.replace(prefix || '', '')\n\t.replace(/(\\/)+/g, '/') // /#/ -> //\n\t.split('?')\n\t[0]\n\t.replace(/\\/$/,'') // trailing\n\nlet Route;\nlet getState;\n\nm.route = {\n\tbuildQueryString: m.buildQueryString\n\t,parseQueryString: m.parseQueryString\n\t,set Route(x) {\n\t\tRoute = x\n\t}\n\t,set getState(x){\n\t\tgetState = x\n\t}\n\t,get Route(){\n\t\treturn Route\n\t}\n\t,set(url){\n\t\tconst route = Route.matchOr(() => null, url)\n\n\t\tif( route ) {\n\t\t\tRoute.set( route )\n\t\t}\n\t\treturn url\n\t}\n\t,link({ dom }){\n\t\tdom.addEventListener('click', function(e){\n\t\t\tconst href = hrefToURL({ href: dom.href, prefix: '' })\n\t\t\tconst route = Route.matchOr(() => getState().route, href)\n\n\t\t\tRoute.set( route )\n\t\t\treturn e.preventDefault()\n\t\t})\n\t}\n\t,get(){\n\t\treturn Route && Route.toURL(getState().route)\n\t}\n\t,param(param){\n\t\tif( param in getState().route.value ) {\n\t\t\treturn getState().route.value[param]\n\t\t} else {\n\t\t\treturn new window.URLSearchParams(window.location.search).get(param)\n\t\t}\n\t}\n}\n\nObject.assign(m, {\n\tprop: stream\n\t,component: m\n})","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","/* globals document */\n/* eslint-disable no-param-reassign */\nconst defaultStream = {\n\tis: x => typeof x == 'function' && x.map, // lol\n\tgetVal: x => x(),\n\thasVal: x => typeof x() != 'undefined',\n\tsubscribe(f, x) {\n\t\treturn x.map(f)\n\t},\n\tunsubscribe(x) {\n\t\tx.end(true)\n\t},\n}\n\nfunction CSS({\n\tsheets = {},\n\tStream = defaultStream,\n\tenv = typeof window == 'undefined'\n\t\t? ServerEnv({ Stream })\n\t\t: BrowserEnv({ Stream }),\n\thash = defaultHashCode,\n} = {}) {\n\tlet renders = 0\n\n\tfunction hashSheet(sheet) {\n\t\tif (sheet in sheets) {\n\t\t\treturn sheets[sheet]\n\t\t} else {\n\t\t\treturn (sheets[sheet] = hash(sheet))\n\t\t}\n\t}\n\n\tconst Value = {\n\t\tVar(value) {\n\t\t\treturn { type: 'Value', tag: 'Var', value }\n\t\t},\n\t\tAnimation(reference) {\n\t\t\treturn { type: 'Value', tag: 'Animation', value: reference }\n\t\t},\n\t\tAnimationReference(reference) {\n\t\t\treturn {\n\t\t\t\ttype: 'Value',\n\t\t\t\ttag: 'AnimationReference',\n\t\t\t\tvalue: reference,\n\t\t\t}\n\t\t},\n\t\tStatic(value) {\n\t\t\treturn { type: 'Value', tag: 'Static', value }\n\t\t},\n\t\tChain({ pairs }) {\n\t\t\treturn { type: 'Value', tag: 'Chain', value: { pairs, chained: true } }\n\t\t},\n\t\tequals(a, b) {\n\t\t\treturn JSON.stringify(a) == JSON.stringify(b)\n\t\t},\n\t\tfold({ Static, Var, Chain, Animation, AnimationReference }) {\n\t\t\treturn x =>\n\t\t\t\t({\n\t\t\t\t\tStatic,\n\t\t\t\t\tVar,\n\t\t\t\t\tChain,\n\t\t\t\t\tAnimation,\n\t\t\t\t\tAnimationReference,\n\t\t\t\t}[x.tag](x.value))\n\t\t},\n\t}\n\n\tconst Pair = {\n\t\tinfer([k, v]) {\n\t\t\tif (v == null) {\n\t\t\t\t// ??? not sure\n\t\t\t\treturn [k, Value.Static('')]\n\t\t\t}\n\n\t\t\tif (typeof v == 'number') {\n\t\t\t\tv = v + ''\n\t\t\t}\n\n\t\t\treturn typeof v == 'string'\n\t\t\t\t? v.includes('@') || k.includes('@')\n\t\t\t\t\t? [k, Value.Static(v)]\n\t\t\t\t\t: v.includes(':') || v.includes(';')\n\t\t\t\t\t? [k, Value.Chain(Sheet()([v]))]\n\t\t\t\t\t: [k, Value.Var(v)]\n\t\t\t\t: typeof x == 'number'\n\t\t\t\t? [k, Value.Var(v)]\n\t\t\t\t: v.tag == 'CSSChainAPI'\n\t\t\t\t? [k, Value.Chain({ pairs: v.pairs })]\n\t\t\t\t: Stream.is(v)\n\t\t\t\t? [k, Value.Var(v)]\n\t\t\t\t: [k, v]\n\t\t},\n\t}\n\n\tfunction getSheet() {\n\t\treturn env.getSheet()\n\t}\n\n\tfunction Sheet({ pairs = [], chained = false } = {}) {\n\t\tlet renderId = ++renders\n\n\t\tconst originalPairs = pairs\n\n\t\tfunction entry(theirStrings, ...theirValues) {\n\t\t\t// const oldSections = sections.slice()\n\n\t\t\tlet stack = originalPairs.concat(\n\t\t\t\ttheirStrings.map((x, i) => Pair.infer([x, theirValues[i]])),\n\t\t\t)\n\n\t\t\tlet pairs = []\n\t\t\tlet placeholder = Value.Static('')\n\n\t\t\twhile (stack.length) {\n\t\t\t\tlet [string, value] = stack.shift()\n\n\t\t\t\t// Is the Value a Chain? if so, we'll put the values\n\t\t\t\t// strings/values next on the stack\n\n\t\t\t\tlet pair = [string, placeholder]\n\n\t\t\t\tif (value) {\n\t\t\t\t\tif (value.tag == 'Chain') {\n\t\t\t\t\t\tstack.unshift(...value.value.pairs)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpair[1] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpairs.push(pair)\n\t\t\t}\n\n\t\t\tlet filteredPairs = pairs.filter(\n\t\t\t\tx =>\n\t\t\t\t\t!(x[0].replace(/\\s+/g, '') == '' && Value.equals(x[1], placeholder)),\n\t\t\t)\n\n\t\t\tconst out = new Sheet({\n\t\t\t\tpairs: filteredPairs,\n\t\t\t\tchained: true,\n\t\t\t})\n\n\t\t\treturn out\n\t\t}\n\n\t\tfunction $nest(theirSelector, definition) {\n\t\t\tconst selector = theirSelector.startsWith('&')\n\t\t\t\t? theirSelector\n\t\t\t\t: `\\n& ${theirSelector} `\n\n\t\t\treturn entry([`${selector} {\\n`, `\\n}\\n`], definition)\n\t\t}\n\n\t\tfunction $media(query, definition) {\n\t\t\treturn entry`\n\t\t\t\t@media ${Value.Static(query)} {\n\t\t\t\t\t${definition}\n\t\t\t\t}\n\t\t\t`\n\t\t}\n\n\t\tfunction $animate(timing, definition) {\n\t\t\tconst reference =\n\t\t\t\ttypeof definition == 'string'\n\t\t\t\t\t? hash(definition)\n\t\t\t\t\t: 'getSheet' in definition\n\t\t\t\t\t? hash(definition.getSheet())\n\t\t\t\t\t: hash(\n\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(definition).map(([k, v]) => [\n\t\t\t\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t\t\t\t\tv.getSheet ? v.getSheet() : v,\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t )\n\n\t\t\tconst definitionInstance =\n\t\t\t\ttypeof definition == 'string'\n\t\t\t\t\t? definition\n\t\t\t\t\t: 'getSheet' in definition\n\t\t\t\t\t? definition\n\t\t\t\t\t: Value.Chain({\n\t\t\t\t\t\t\tpairs: Object.entries(definition).flatMap(([key, value]) => {\n\t\t\t\t\t\t\t\tconst pairs = [\n\t\t\t\t\t\t\t\t\t['\\n' + key + ' {\\n', value],\n\t\t\t\t\t\t\t\t\t['\\n}', null],\n\t\t\t\t\t\t\t\t].map(Pair.infer)\n\n\t\t\t\t\t\t\t\treturn pairs\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t })\n\n\t\t\treturn entry`\n\t\t\t\t@keyframes ${Value.Animation(reference)} {\n\t\t\t\t\t${definitionInstance}\n\t\t\t\t}\n\n\t\t\t\t&& {\n\t\t\t\t\tanimation: ${Value.AnimationReference(reference)} ${Value.Static(timing)};\n\t\t\t\t}\n\t\t\t`\n\t\t}\n\n\t\tfunction processComments(line) {\n\t\t\tlet i = line.indexOf('//')\n\t\t\tif (i > -1) {\n\t\t\t\tif (line[i - 1] == ':') {\n\t\t\t\t\t// not a comment, but a protocol\n\t\t\t\t\treturn line\n\t\t\t\t}\n\t\t\t\treturn line.slice(0, i) + line.slice(i).replace('//', '/*') + ' */'\n\t\t\t}\n\t\t\treturn line\n\t\t}\n\n\t\t// eslint-disable-next-line complexity\n\t\tfunction getSheet() {\n\t\t\tlet vars = []\n\t\t\tlet animations = []\n\n\t\t\tlet stack = pairs.slice()\n\n\t\t\tlet sheet = ''\n\n\t\t\tlet isAtRule = false\n\t\t\tlet isBlock = false\n\t\t\tlet isComment = false\n\t\t\tlet opens = 0\n\t\t\tlet closes = 0\n\t\t\tlet braceInserted = false\n\n\t\t\tlet animationReferences = {}\n\n\t\t\tlet indent = s =>\n\t\t\t\tArray(Math.max(0, opens - closes + (s.includes('{') ? -1 : 0)))\n\t\t\t\t\t.fill(' ')\n\t\t\t\t\t.join('') + s\n\n\t\t\tlet indented = s => indent(s.replace(/^\\s+/, ''))\n\n\t\t\twhile (stack.length) {\n\t\t\t\tconst [k, unformattedV] = stack.shift()\n\n\t\t\t\tlet formattedV = Value.fold({\n\t\t\t\t\tVar: () => {\n\t\t\t\t\t\tvars.push(unformattedV)\n\t\t\t\t\t\treturn `var(--var_&_${vars.length - 1})`\n\t\t\t\t\t},\n\t\t\t\t\tAnimation: reference => {\n\t\t\t\t\t\tanimations.push(unformattedV)\n\t\t\t\t\t\tanimationReferences[reference] = `animation_&_${animations.length}`\n\t\t\t\t\t\treturn animationReferences[reference]\n\t\t\t\t\t},\n\t\t\t\t\tAnimationReference: reference => {\n\t\t\t\t\t\treturn animationReferences[reference]\n\t\t\t\t\t},\n\t\t\t\t\tStatic: x => {\n\t\t\t\t\t\treturn x\n\t\t\t\t\t},\n\t\t\t\t\tChain() {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Value.Chain should always be flattened before formatting.',\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t})(unformattedV)\n\n\t\t\t\tlet lines = []\n\t\t\t\tlet re_braces = /\\{|\\}|\\(|\\)/g\n\n\t\t\t\tconst lineStack = Object.entries(k.split('\\n'))\n\n\t\t\t\tif (unformattedV.tag == 'Static') {\n\t\t\t\t\tlineStack[lineStack.length - 1][1] += formattedV\n\t\t\t\t\tformattedV = ''\n\t\t\t\t}\n\n\t\t\t\tfor (let [i, line] of lineStack) {\n\t\t\t\t\tline = processComments(line)\n\n\t\t\t\t\tif (line.includes('/*')) {\n\t\t\t\t\t\tif (!line.includes('*/')) {\n\t\t\t\t\t\t\tisComment = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else if (line.includes('*/')) {\n\t\t\t\t\t\tisComment = false\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else if (isComment) {\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tlet originalOpens = opens\n\t\t\t\t\tlet originalCloses = closes\n\t\t\t\t\topens += (line.match(/\\{/g) || []).length\n\t\t\t\t\tcloses += (line.match(/\\}/g) || []).length\n\n\t\t\t\t\tlet opensDelta = opens - closes\n\n\t\t\t\t\tlet lineWithoutBracingAndSpacing = [line.indexOf('/*')]\n\t\t\t\t\t\t.map(i => (i == -1 ? line.length : i))\n\t\t\t\t\t\t.map(i => line.slice(0, i))\n\t\t\t\t\t\t.map(s => s.replace(re_braces, '').replace(/\\s+/g, ''))[0]\n\n\t\t\t\t\tlet lineHasRules = !isComment && lineWithoutBracingAndSpacing != ''\n\n\t\t\t\t\tif (line.replace(/\\s+/g, '') == '') {\n\t\t\t\t\t\tlines.push(indented(''))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opensDelta < 0) {\n\t\t\t\t\t\topens = originalOpens\n\t\t\t\t\t\tcloses = originalCloses\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif (line.includes('@')) {\n\t\t\t\t\t\tif (!isAtRule && isBlock) {\n\t\t\t\t\t\t\tcloses += 1\n\t\t\t\t\t\t\tlines.push(indented('}'), '')\n\t\t\t\t\t\t\tisBlock = false\n\t\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\t} else if (isBlock) {\n\t\t\t\t\t\t\tcloses += 1\n\t\t\t\t\t\t\tlines.push(indented('}'), '')\n\t\t\t\t\t\t\tcloses += 1\n\t\t\t\t\t\t\tlines.push(indented('}'), '')\n\t\t\t\t\t\t\tisBlock = false\n\t\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\t} else if (isAtRule) {\n\t\t\t\t\t\t\tcloses += 1\n\t\t\t\t\t\t\tlines.push(indented('}'))\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tisAtRule = true\n\n\t\t\t\t\t\tif (opensDelta > 1) {\n\t\t\t\t\t\t\tisBlock = true\n\t\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t} else if (isAtRule && opensDelta < 1) {\n\t\t\t\t\t\tisAtRule = false\n\t\t\t\t\t\tisBlock = false\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\t// detect block inside at rule closing\n\t\t\t\t\t} else if (isAtRule && isBlock && opensDelta < 2) {\n\t\t\t\t\t\tif (braceInserted) {\n\t\t\t\t\t\t\tisAtRule = false\n\t\t\t\t\t\t\tlines.push(indented('}'))\n\t\t\t\t\t\t\tcloses += 1 // back to the future\n\t\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisBlock = false\n\t\t\t\t\t\tlines.push(indented(line))\n\n\t\t\t\t\t\t// detect at rule or block closing\n\t\t\t\t\t} else if (isBlock && opensDelta < 1) {\n\t\t\t\t\t\tisAtRule = false\n\t\t\t\t\t\tisBlock = false\n\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\tlines.push(indented(line))\n\n\t\t\t\t\t\t// naked block closing when new block starts\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(isAtRule && opensDelta > 2) ||\n\t\t\t\t\t\t(!isAtRule && isBlock && opensDelta > 1)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcloses += 2\n\t\t\t\t\t\tlines.push(indented('}'), '')\n\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\tcloses -= 1\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\t// detect block opening in source\n\t\t\t\t\t} else if (isAtRule && !isBlock && opensDelta > 1) {\n\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\tisBlock = true\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t} else if (!isAtRule && !isBlock && opensDelta > 0) {\n\t\t\t\t\t\tbraceInserted = false\n\t\t\t\t\t\tisBlock = true\n\t\t\t\t\t\tlines.push(indented(line))\n\t\t\t\t\t\t// detect block required\n\t\t\t\t\t} else if (!isBlock && opensDelta == 0 && lineHasRules) {\n\t\t\t\t\t\topens++\n\t\t\t\t\t\tlines.push(indented('&& {'))\n\t\t\t\t\t\tbraceInserted = true\n\t\t\t\t\t\tisBlock = true\n\t\t\t\t\t\tlines.push(indented(line))\n\n\t\t\t\t\t\t// detect block required in at-rule\n\t\t\t\t\t} else if (isAtRule && !isBlock && opensDelta == 1 && lineHasRules) {\n\t\t\t\t\t\topens++\n\t\t\t\t\t\tlines.push(indented('&& {'))\n\t\t\t\t\t\tisBlock = true\n\t\t\t\t\t\tbraceInserted = true\n\t\t\t\t\t\tlines.push(indented(line))\n\n\t\t\t\t\t\t// normal\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet continuingLine = sheet.length > 0 && i == 0\n\n\t\t\t\t\t\tlines.push(continuingLine ? line : indented(line))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsheet += lines.join('\\n')\n\t\t\t\tsheet += formattedV\n\t\t\t}\n\n\t\t\tif (opens - closes != 0) {\n\t\t\t\tcloses++\n\t\t\t\tsheet += '\\n}'\n\t\t\t}\n\n\t\t\treturn [sheet]\n\t\t\t\t.join('\\n')\n\t\t\t\t.split('\\n')\n\t\t\t\t.filter(s => !s.replace(/\\s+/g, '') == '')\n\t\t\t\t.join('\\n')\n\t\t}\n\n\t\tfunction _class() {\n\t\t\tconst sheet = getSheet()\n\t\t\tconst classname = 'css_' + hashSheet(sheet)\n\n\t\t\tconst replacedSheet = sheet\n\t\t\t\t.replace(/_\\&/g, '_' + classname)\n\t\t\t\t.replace(/\\&/g, '.' + classname)\n\n\t\t\tconst renderSelector = `css-render-${renderId}`\n\n\t\t\tenv.insertSheet(classname, renderSelector, replacedSheet, pairs)\n\t\t\tenv.updateVars(classname, renderSelector, replacedSheet, pairs)\n\n\t\t\treturn [classname, renderSelector]\n\t\t}\n\n\t\tconst api = {\n\t\t\ttag: 'CSSChainAPI',\n\t\t\tpairs,\n\t\t\tgetSheet,\n\t\t\t$nest,\n\t\t\t$media,\n\t\t\t$animate,\n\t\t\t_class,\n\t\t\tget class() {\n\t\t\t\treturn _class().join(' ')\n\t\t\t},\n\t\t\tvalueOf() {\n\t\t\t\treturn '.' + _class().join('.')\n\t\t\t},\n\t\t}\n\n\t\treturn chained ? api : entry\n\t}\n\n\tconst css = Object.assign(Sheet(), Sheet()``)\n\n\treturn Object.assign(css, {\n\t\tenv,\n\t\tValue,\n\t\tSheet,\n\t\thash,\n\t\tgetSheet,\n\t\ttrust: Value.Static,\n\t})\n}\n\n// Inspired by: https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\nfunction defaultHashCode(s) {\n\tlet hash = 0\n\tfor (let x of s) {\n\t\tlet char = x.charCodeAt()\n\t\thash = (hash << 5) - hash + char\n\t\thash &= hash\n\t}\n\thash = hash >>> 0\n\treturn hash.toString(15)\n}\n\nfunction ServerEnv({ Stream = defaultStream } = {}) {\n\tconst sheets = {}\n\tconst varDeclarations = {}\n\tfunction insertSheet(hash, renderSelector, sheet) {\n\t\tsheets[hash] = sheet\n\n\t\treturn sheet\n\t}\n\n\tconst getVarVal = x => (Stream.is(x) ? Stream.getVal(x.value) : x.value)\n\n\tfunction updateVars(hash, renderSelector, sheet, pairs) {\n\t\tconst vars = pairs.flatMap(([_, x]) => (x.tag == 'Var' ? [x] : []))\n\n\t\tconst varDeclaration = vars.map(\n\t\t\t(x, i) => `--var_${hash}_${i}: ${getVarVal(x)};`,\n\t\t)\n\n\t\tvarDeclarations[hash] = varDeclaration.length\n\t\t\t? [\n\t\t\t\t\t`.${hash}.${renderSelector} {`,\n\t\t\t\t\tvarDeclaration.map(x => ` ${x}`).join('\\n'),\n\t\t\t\t\t`}`,\n\t\t\t ]\n\t\t\t: []\n\t}\n\n\tfunction getSheet() {\n\t\treturn []\n\t\t\t.concat(\n\t\t\t\tObject.values(sheets).join('\\n'),\n\t\t\t\tObject.values(varDeclarations).map(x => x.join('\\n')),\n\t\t\t)\n\t\t\t.join('\\n')\n\t}\n\n\treturn {\n\t\tinsertSheet,\n\t\tupdateVars,\n\t\tgetSheet,\n\t}\n}\n\nfunction BrowserEnv({\n\tStream = defaultStream,\n\n\t// eslint-disable-next-line no-undef\n\tdoc = document,\n\t// eslint-disable-next-line no-undef\n\ttimeout = setTimeout,\n\t// eslint-disable-next-line no-undef\n\traf = requestAnimationFrame,\n}) {\n\tconst inserted = {}\n\n\tconst styleEl = document.createElement('style')\n\tdocument.head.appendChild(styleEl)\n\n\tfunction insertSheet(hash, _, sheet) {\n\t\tif (!(hash in inserted)) {\n\t\t\tinserted[hash] = sheet\n\t\t\tstyleEl.textContent += sheet\n\t\t}\n\t\treturn sheet\n\t}\n\n\tfunction setProperty(el, varName, value) {\n\t\tel.style.setProperty(varName, value)\n\t}\n\n\t// Detect if a hash+stream has been subscribed before\n\t// The same hash will be the class name for all elements\n\t// that need that var updated to that stream value\n\t// { [stream]: [(Element/Selector,VarName)] }\n\tlet streamVarUpdates = new WeakMap()\n\n\tfunction streamSetProperty(el, varName, stream) {\n\t\tlet subscribe = false\n\t\tif (!streamVarUpdates.has(stream)) {\n\t\t\tlet map = new Map()\n\t\t\tstreamVarUpdates.set(stream, map)\n\n\t\t\tsubscribe = true\n\t\t}\n\n\t\tconst map = streamVarUpdates.get(stream)\n\n\t\tif (!map.has(el)) {\n\t\t\tmap.set(el, new Set())\n\t\t}\n\n\t\tconst set = map.get(el)\n\t\tset.add(varName)\n\t\tif (!subscribe && Stream.hasVal(stream)) {\n\t\t\tsetProperty(el, varName, Stream.getVal(stream))\n\t\t}\n\n\t\tif (subscribe) {\n\t\t\tlet ref = Stream.subscribe(value => {\n\t\t\t\tconst map = streamVarUpdates.get(stream)\n\t\t\t\tfor (let [el, varNames] of map) {\n\t\t\t\t\tif (el.parentNode) {\n\t\t\t\t\t\tfor (let varName of varNames) {\n\t\t\t\t\t\t\tsetProperty(el, varName, value)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// unsubscribe el\n\t\t\t\t\t\tmap.delete(el)\n\t\t\t\t\t\t// unsubscribe stream\n\t\t\t\t\t\tif (map.size() == 0) {\n\t\t\t\t\t\t\tstreamVarUpdates.delete(stream)\n\t\t\t\t\t\t\tStream.unsubscribe(ref)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, stream)\n\t\t}\n\t}\n\n\tconst scheduleF = f => (selector, varName, value, { remaining = 3 } = {}) => {\n\t\tif (remaining > 0) {\n\t\t\traf(() => {\n\t\t\t\tlet els = doc.getElementsByClassName(selector)\n\n\t\t\t\tif (!els.length) {\n\t\t\t\t\ttimeout(() => {\n\t\t\t\t\t\tscheduleF(f)(selector, varName, value, {\n\t\t\t\t\t\t\tremaining: remaining - 1,\n\t\t\t\t\t\t})\n\t\t\t\t\t}, 100)\n\t\t\t\t} else {\n\t\t\t\t\tfor (let el of els) {\n\t\t\t\t\t\tf(el, varName, value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tconst schedule = scheduleF(setProperty)\n\tconst scheduleStream = scheduleF(streamSetProperty)\n\n\tfunction updateVars(hash, renderSelector, __, pairs) {\n\t\tconst vars = pairs.flatMap(([_, x]) => (x.tag == 'Var' ? [x] : []))\n\n\t\tvars.forEach((x, i) => {\n\t\t\tif (Stream.is(x.value)) {\n\t\t\t\tscheduleStream(renderSelector, `--var_${hash}_${i}`, x.value)\n\t\t\t} else {\n\t\t\t\tschedule(renderSelector, `--var_${hash}_${i}`, x.value)\n\t\t\t}\n\t\t})\n\t}\n\n\tfunction getSheet() {\n\t\treturn Object.values(inserted).join('\\n')\n\t}\n\treturn {\n\t\tinsertSheet,\n\t\tupdateVars,\n\t\tgetSheet,\n\t}\n}\n\nexport default CSS()\n","/* globals localStorage */\n/**\n * Like the browser Local Storage API but with a few super powers\n *\n * 1. Always saves and restores JSON values\n * 2. Namespaces all writes to prevent collisions with 3rd party scripts and for testing/migrations\n * 3. Provides operations for default values when a value doesn't exist, with a background set\n * 4. Exports a stream that lets you keep track of all writes/deletes\n */\nimport * as m from 'bacta'\nconst stream = m.Stream\nconst s = stream()\n\nlet namespace = ''\n\nconst api = {\n\tsetNamespace(key) {\n\t\tnamespace = key + '/'\n\t\treturn key\n\t}\n\t,getItem(key) {\n\t\treturn api.getItemOr(key, null)\n\t}\n\t,setItem(key, value) {\n\t\tlocalStorage.setItem(namespace + key, JSON.stringify(value))\n\t\ts({ key, value, op: 'set' })\n\t\treturn value\n\t}\n\t,getItemOr(key, otherwise) {\n\t\tlet out\n\t\tif (localStorage.getItem(namespace + key) != null) {\n\t\t\ttry {\n\t\t\t\tout = JSON.parse(localStorage.getItem(namespace + key))\n\t\t\t} catch (e) {\n\t\t\t\tout = otherwise\n\t\t\t}\n\t\t} else {\n\t\t\tout = otherwise\n\t\t}\n\n\t\ts({ key, value: out, otherwise, op: 'get' })\n\t\treturn out\n\t}\n\t,getItemOrSet(key, otherwise) {\n\t\tconst out = api.getItemOr(key, null)\n\t\tif (out == null) {\n\t\t\treturn api.setItem(key, otherwise)\n\t\t}\n\t\treturn out\n\t}\n\t,unsetItem(key) {\n\t\tconst out = delete localStorage[namespace + key]\n\t\ts({ key, op: 'unset' })\n\t\treturn out\n\t}\n\t,stream: s,\n}\n\nexport default new Proxy(api, {\n\tget(_, key) {\n\t\tif (typeof key == 'string' || typeof key == 'number') {\n\t\t\tif (key in api) {\n\t\t\t\treturn api[key]\n\t\t\t} else {\n\t\t\t\treturn api.getItem(key)\n\t\t\t}\n\t\t} else {\n\t\t\treturn api[key]\n\t\t}\n\t}\n\t,set(_, key, value) {\n\t\tif (typeof key == 'string' || typeof key == 'number') {\n\t\t\tif (key in api) {\n\t\t\t\treturn api[key]\n\t\t\t} else {\n\t\t\t\treturn api.setItem(key, value)\n\t\t\t}\n\t\t} else {\n\t\t\treturn api[key]\n\t\t}\n\t}\n\t,deleteProperty(_, k) {\n\t\treturn api.unsetItem(k)\n\t},\n})\n","import m from 'bacta'\n\nconst h = m\nh.trust = m.trust\nh.fragment = m.fragment\nh.mount = m.mount\nh.redraw = m.redraw\nh.render = m.render\nh.request = m.request\n\nh.routed =\nfunction RoutedComponent( name, defaultRoute, patterns, theirOptions, Comp ){\n\n\tconst { ...options } = theirOptions\n\n\treturn function RoutedComputed(vnode){\n\n\t\tconst $ = vnode.attrs.$[name]\n\n\t\tconst Route = vnode.attrs.Route\n\t\t\t.subroute(name, (x) => defaultRoute(x, vnode.attrs), patterns, {\n\t\t\t\t$, ...options\n\t\t\t})\n\n\t\tlet subscriptions = 0;\n\t\tconst subscribe = (create, destroy=null) => {\n\t\t\tconst out = create()\n\t\t\tif( destroy == null && out && out.$type == 'how/stream' ) {\n\t\t\t\tdestroy = () => out.end(true)\n\t\t\t} else if( destroy == null && out && out.$type == 'how/z2-proxy' ) {\n\t\t\t\tdestroy = () => out.$end()\n\t\t\t} else {\n\t\t\t\tthrow new Error('Custom subscriptions must provide a clean up function')\n\t\t\t}\n\t\t\tvnode.subscriptions['subscribe' + ++subscriptions] = destroy\n\t\t\treturn out\n\t\t}\n\n\t\treturn {\n\t\t\tview({ attrs }){\n\t\t\t\treturn h(Comp, {\n\t\t\t\t\t...attrs\n\t\t\t\t\t,ParentRoute: vnode.attrs.Route\n\t\t\t\t\t,$$: vnode.attrs.$\n\t\t\t\t\t,$\n\t\t\t\t\t,Route\n\t\t\t\t\t,subscribe\n\t\t\t\t})\n\t\t\t}\n\t\t\t// todo-james this doesn't get called on logout for some reason?\n\t\t\t,onremove(){\n\t\t\t\t// clear params on route change\n\t\t\t\tRoute.search.$({})\n\t\t\t\t$.$end()\n\t\t\t\tRoute.end()\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport default h\n","import { Stream as stream2 } from 'bacta'\n/* globals setTimeout, clearTimeout */\nconst J = x => {\n\treturn JSON.stringify(x, function(_, x){\n\t\tif( typeof x == 'function' ) {\n\t\t\treturn x + ''\n\t\t} else {\n\t\t\treturn x\n\t\t}\n\t})\n}\n\nconst afterSilence = ms => s => {\n\tlet id\n\n\tconst out = stream2()\n\ts.map(x => {\n\t\tclearTimeout(id)\n\t\tid = setTimeout(() => out(x), ms)\n\t\treturn null\n\t})\n\n\treturn out\n}\n\nconst throttle = ms => s => {\n\tconst out = stream2()\n\tlet last = null\n\tlet id = 0\n\n\tfunction process(x) {\n\t\tif (last == null) {\n\t\t\tlast = Date.now()\n\t\t}\n\t\tlet dt = Date.now() - last\n\t\tclearTimeout(id)\n\n\t\tif (dt >= ms) {\n\t\t\tout(x)\n\t\t\tlast = Date.now()\n\t\t} else {\n\t\t\tid = setTimeout(process, Math.max(0, ms - dt), x)\n\t\t}\n\t}\n\n\ts.map(process)\n\n\treturn out\n}\n\nconst defaultStream = {\n\thasVal: x => typeof defaultStream.getVal(x) != 'undefined'\n\t,getVal: x => x()\n\t,setVal: (x, a) => x(a)\n\t,of: (...args) => args.length ? stream2(args[0]) : stream2()\n\t,subscribe: (f, x) => x.map(f)\n\t,unsubscribe: x => x.end(true)\n\t,merge: stream2.merge\n\t,dropRepeatsWith: eq => s => {\n\t\tconst sentinel = {}\n\t\tlet prev = sentinel\n\t\tconst out = defaultStream.of()\n\n\t\ts.map(x => {\n\t\t\tif (prev === sentinel || !eq(x, prev)) {\n\t\t\t\tprev = x\n\t\t\t\tdefaultStream.setVal(out, x)\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\n\t\treturn out\n\t}\n\t,afterSilence\n\t,throttle,\n}\n\nfunction NestedMirrorIndex(index) {\n\tconst mirror = {}\n\tconst self = {\n\t\tset(outer, inner, value) {\n\t\t\tindex[outer] = index[outer] || {}\n\t\t\tindex[outer][inner] = value\n\n\t\t\tmirror[inner] = mirror[inner] || {}\n\t\t\tmirror[inner][outer] = value\n\n\t\t\treturn self\n\t\t}\n\t\t,get(outer, inner) {\n\t\t\treturn index[outer][inner]\n\t\t}\n\t\t,getOuter(outer) {\n\t\t\treturn index[outer] || {}\n\t\t}\n\t\t,getMirror(outer, inner) {\n\t\t\treturn mirror[inner][outer]\n\t\t}\n\t\t,getMirrorOuter(inner) {\n\t\t\treturn mirror[inner] || {}\n\t\t}\n\t\t,remove(key) {\n\t\t\tconst mirrorDelete = Object.keys(index[key] || {})\n\t\t\tdelete index[key]\n\n\t\t\tmirrorDelete.forEach(mirrorKey => delete mirror[mirrorKey][key])\n\t\t\treturn self\n\t\t}\n\t\t,removeNested(outer, inner) {\n\t\t\tdelete index[outer][inner]\n\t\t\tdelete mirror[inner][outer]\n\t\t\treturn self\n\t\t}\n\t\t,index\n\t\t,mirror,\n\t}\n\n\treturn self\n}\n\n// An attempt at a rewrite of z2\n// to rely on a simpler propagation dependency logic chain\n// that just asks the parents who they rely on, and caches that list\n// until one of those items is dropped/extended.\n// we shouldn't need \"children\" or \"parents\" I think.\n// but we will still rely on rank\nfunction Z3({\n\t// The initial state\n\tinitial = {},\n\n\t// The stream interface, can be used\n\t// as an interface to alternative stream libraries\n\t// defaults to mithril-stream\n\tStream = defaultStream,\n\n\t// The default state stream\n\t// this exists for simple Z usages\n\t// where you already have a stream with state in it\n\t// and you want to use Z to query it\n\tstate: state = Stream.of(initial),\n\n\t// The default getter for extracting state\n\t// from the state stream.\n\t//\n\t// Defined separately so we can later check if\n\t// a custom getState was passed in by the user.\n\t// If so we cannot make guarantees we'd normally make.\n\t_defaultGetState = () => Stream.getVal(state),\n\n\t// User provided way to get the current state from\n\t// the outside world.\n\tgetState = _defaultGetState,\n\n\t// User provided way for Z to update the\n\t// state of the outside world.\n\t// Called during update/remove of a subquery.\n\tsetState = f => {\n\t\tconst out = state(f(state()))\n\t\treturn out\n\t},\n\t// An optional user provided callback\n\t// to listen to the state of the outside world\n\t// and update Z's internal caches.\n\t// This is preferred to simply secretly updating\n\t// the state stream, as Z will be unaware a change has\n\t// occurred.\n\tupdateState = getState == _defaultGetState\n\t\t? f => {\n\t\t\t\tstate.map(f)\n\t\t\t\treturn null\n\t\t }\n\t\t: () => {\n\t\t\t\treturn null\n\t\t },\n\t// Used to convert values into primitive represenations\n\t// for comparison.\n\t// Can be overloaded to get different equality behaviour.\n\tserialize = J,\n\n\t// Used to compare values which is often used to prevent\n\t// propagation when a value is unchanged.\n\t// Also used when detecting infinite loops.\n\tequals = (a, b) => serialize(a) == serialize(b),\n\n\t// The sentinel value used to detect a query's intention\n\t// to delete it's current value.\n\t// Can be altered to `{}` if you want an update of `undefined`\n\t// to be treated as any other value.\n\t$delete = undefined,\n\n\tdev = {\n\t\tenforceArrowUsage: true,\n\t},\n} = {}) {\n\t// An index of the operations list for each key.\n\tconst operations = { '': [] }\n\n\t// Used to record internal stream creation.\n\t// That way we can know a stream is really just a listener\n\t// for a part of our managed state tree instead of a 3rd party\n\t// stream.\n\t//\n\t// Uses a weakmap because for external streams we have no\n\t// other way of relying on identity other than by reference.\n\tconst queryStreams = new WeakMap()\n\n\t// Used to retrive query streams by key.\n\t// Technically queryStreams.get( cache[key] )\n\t// could be used, but it would be awkward to debug.\n\tconst streams = {}\n\n\t// Used to track if a stream used as a dependency has been\n\t// seen before. When we first encounter a stream we assign an id\n\t// so that two queries with the same visitor function but different\n\t// input streams have unique keys.\n\tconst seenStreams = new WeakMap()\n\n\t// A sequential id counter used by seeStream.\n\tlet streamId = 0\n\n\t// Any time we see a stream we pass it to this function to record\n\t// an id for that stream if it is the first time it has been passed\n\t// to a Z function.\n\tconst seeStream = (stream, theirId) => {\n\t\tif (seenStreams.has(stream)) {\n\t\t\treturn seenStreams.get(stream)\n\t\t} else {\n\t\t\tconst id = theirId || ++streamId\n\t\t\tseenStreams.set(stream, id)\n\t\t\treturn id\n\t\t}\n\t}\n\n\t// An internal cache of values key'd by the query key.\n\t// When reading, 99% of the time you'll be reading from\n\t// values instead of recomputing the lensed value.\n\tconst values = {}\n\n\t// An internal cache of the compiled queries.\n\t// This cache holds the write query, not the staggered read query.\n\tconst cache = {}\n\n\t// An internal cache of the compiled read queries.\n\t// This cache doesn't hold the write queries, it's for read only\n\t// queries, and must be passed the immediate parent value, not getState()\n\t// as input.\n\tconst staggeredCache = {}\n\n\t// An internal marker that a query's cached value is no\n\t// longer fresh.\n\t//\n\t// Note presence in the index is all that matters, not the value\n\t// of stale[key] itself. By convention Z writes\n\t// `stale[key] = true` but the boolean that is stored is never\n\t// used.\n\tconst stale = {}\n\n\t// An index of the parents of a key.\n\t// Used to compute the rank of a query in a propagation.\n\tconst parents = { '': [] }\n\n\t// An index of the parents of a key that are simply property\n\t// access queries.\n\t// These queries have a higher rank in the propagation sort.\n\tconst propParents = { '': [] }\n\n\t// An index of the parents of a key that are not simple\n\t// property access queries.\n\t// e.g. .$values, $map and .$filter.\n\t//\n\t// These queries have a lower rank in the propagation sort.\n\tconst nonPropParents = { '': [] }\n\n\t// Each query is assigned a rank based on the composition\n\t// of its operations.\n\t//\n\t// The goal is to update in a wave from root to leaf\n\t// and for simply property access fields to be updated first.\n\t// This is so when a dynamic query is re-evaluated it\n\t// can rely on the assumption that all parent values are\n\t// in sync after the last update.\n\t//\n\t// This isn't better or worse than updating from leaves to root.\n\t// But it _is_ better than updating in definition order\n\t// which is often how stream propagation works.\n\t// Which is basically chaos at a sufficient level of complexity.\n\tconst rank = { '': -Infinity }\n\n\t// An index of keys that a query requires in order to\n\t// exist.\n\t//\n\t// When one of these requirements propagates we also need to\n\t// propagate. If any of these requirements are ended, we also\n\t// need to end.\n\t// If any of these requirements are removed, we also need to be\n\t// removed.\n\t//\n\t// Used to build the sorted propagation list when the tree is modified.\n\t//\n\t// Note it is called updateRequirements in contrast to propagationRequirements.\n\t// updateRequirements mean, if any of these requirements are directly modified from userland\n\t// we need to be re-propagated.\n\t//\n\t// A propagationRequirement is different, if a propagationRequirement is not directly updated\n\t// but forced to propagate due to some other change, then we also need to propagate.\n\t// This is used by dynamic queries.\n\tconst updateRequirements = NestedMirrorIndex({})\n\n\t// If a direct prop parent of a dynamic query is propagated, it may affect\n\t// the logic in our visitor function.\n\t//\n\t// But if a non direct parent is propagated, it will not affect the logic in our\n\t// visitor function, it is simply being propagated in response to a sibling update\n\t// that our visitor function cannot access.\n\t//\n\t// So dynamics will have a propagationRequirement on direct prop parents.\n\t//\n\t// This will usually be triggered if a child of our prop parent was updated\n\t// forcing the parent to be propagated. In turn our visitor function might\n\t// depend on that child value so we need to propagate too.\n\tconst propagationRequirements = NestedMirrorIndex({})\n\n\t// An internal marker that is set whenever propagation starts.\n\t//\n\t// Used to dectect and react to infinite loops and postpone\n\t// stream updates to the edges of the propagation.\n\tlet propagating = false\n\n\t// If an update causes a non query stream to emit while propagating\n\t// that is the dependency of another query - we stash the key of the stream\n\t// in a list.\n\t//\n\t// At the end of the propagation we loop through and process\n\t// those updates.\n\t//\n\t// We defer streams til the end of a propagation as streams\n\t// are considered external. And the external world should always\n\t// read / write from/to a fully propagated state tree.\n\tlet propagatingStreamEmits = []\n\n\t// streams that need to be written to at the end of a propagation\n\tlet deferredStreamEmits = []\n\n\t// When we trigger an update internally we mark this flag as true\n\t// So that if we receive a call to `updateState` we can assume it\n\t// was triggered by ourselves calling `setState`.\n\t//\n\t// Once an update is complete, the flag is set back to false\n\t// so that future notifications of the state tree are received\n\t// and processed via a root update.\n\tlet ignoreNotification = false\n\n\t// When updating, we record the key's of updates within a propagation.\n\t// That way we can detect repeating state transitions and stop an infinite\n\t// loop.\n\t//\n\t// See: stopPropagationLoop and propagationMemory\n\tlet updates = []\n\n\t// When we have detected a repeating state transition in an update loop\n\t// we set this flag to true to terminate the propagation early.\n\tlet stopPropagationLoop = false\n\n\t// propagationMemory records state transitions by storing\n\t//\n\t//\t1. The key of the previous update\n\t// 2. The key of the current update\n\t// 3. The value of the previous update of this transition.\n\t//\n\t// This is stored as a nested index after each update:\n\t//\n\t// \tpropagationMemory[prev][key] = value\n\t// When value == propagationMemory[prev][key] we set\n\t// set stopPropagationLoop = true as we've detected a redundant\n\t// loop.\n\t//\n\t// Note this will allow loops that result in new value each time\n\t// which requires the user to have their own base cases.\n\t//\n\t// Part of Z's philosophy is to do what you expect.\n\t// We stop loops that are obviously redundant but allow you to\n\t// write to the state tree mid propagation if you know what you\n\t// are doing.\n\t//\n\tlet propagationMemory = {}\n\n\t// An index of proxies that have been created via the $ syntax.\n\t// This saves CPU cycles when accessing previously created queries.\n\t// Making it efficient to \"create\" a query in frequently called userland\n\t// functions e.g. a render/view function.\n\tlet proxies = {}\n\n\t// An operation constructor for property access.\n\tconst $prop = property => ({\n\t\tkey: typeof property == 'string' ? '.' + property : '[' + property + ']'\n\n\t\t,type: 'Operation'\n\t\t,tag: 'Property'\n\t\t,value: {\n\t\t\tproperty\n\t\t\t,otherwise: undefined,\n\t\t},\n\t})\n\n\t// Creates a key for dependencies, making use of seeStream's auto id\n\t// for streams.\n\tconst depKey = dependencies =>\n\t\tdependencies.length\n\t\t\t? ', streams:(' + dependencies.map(x => seeStream(x)).join(',') + ')'\n\t\t\t: ''\n\n\t// Creates an operation that filters the previous target of a query.\n\t// It works a lot like a where clause in SQL\n\tconst $filter = (key, visitor, ...dependencies) => {\n\t\tif (typeof key == 'function') {\n\t\t\tif (visitor || dependencies.length || (key+'').includes('=>')) {\n\t\t\t\tconst deps = visitor ? [visitor, ...dependencies] : dependencies\n\t\t\t\treturn $filter(key.toString(), key, ...deps)\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Potential collision: A $filter without a key, and without dependencies could easily have a name collision.'\n\t\t\t\t\t\t+ '\\n'\n\t\t\t\t\t\t+ 'Either provide a unique key e.g. $filter(x.id, '\n\t\t\t\t\t\t+ key\n\t\t\t\t\t\t+ ')'\n\t\t\t\t\t\t+ '\\nor provide a unique dependency stream e.g. $filter('\n\t\t\t\t\t\t+ key\n\t\t\t\t\t\t+ ', yStream)'\n\t\t\t\t\t\t+ '\\nor both.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (key != visitor) {\n\t\t\tkey += ', ' + visitor\n\t\t}\n\t\treturn {\n\t\t\tkey: '.$filter(' + key + depKey(dependencies) + ')'\n\t\t\t,type: 'Operation'\n\t\t\t,tag: 'Filter'\n\t\t\t,value: {\n\t\t\t\tvisitor: visitor\n\t\t\t\t,dependencies,\n\t\t\t},\n\t\t}\n\t}\n\n\tconst $map = (key, visitor, ...dependencies) => {\n\t\tif (typeof key == 'function') {\n\t\t\tif (visitor || dependencies.length || (key+'').includes('=>') ) {\n\t\t\t\tconst deps = visitor ? [visitor, ...dependencies] : dependencies\n\t\t\t\treturn $map(key.toString(), key, ...deps)\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Potential collision: A $map without a key, and without dependencies could easily have a name collision.'\n\t\t\t\t\t\t+ '\\n'\n\t\t\t\t\t\t+ 'Either provide a unique key e.g. $map(x.id, '\n\t\t\t\t\t\t+ key\n\t\t\t\t\t\t+ ')'\n\t\t\t\t\t\t+ '\\nor provide a unique dependency stream e.g. $map('\n\t\t\t\t\t\t+ key\n\t\t\t\t\t\t+ ', yStream)'\n\t\t\t\t\t\t+ '\\nor both.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (key != visitor) {\n\t\t\tkey += ', ' + visitor\n\t\t}\n\t\treturn {\n\t\t\tkey: '.$map(' + key + depKey(dependencies) + ')'\n\t\t\t,type: 'Operation'\n\t\t\t,tag: 'Map'\n\t\t\t,value: {\n\t\t\t\tvisitor: visitor\n\t\t\t\t,dependencies,\n\t\t\t},\n\t\t}\n\t}\n\n\t// An operation that visits each value in a list, often used\n\t// in combination with $filter as .$values.$filter(...) so that\n\t// the filter predicate evaluates the list item, not the list\n\t// itself.\n\tconst $values = {\n\t\tkey: '.$values'\n\t\t,type: 'Operation'\n\t\t,tag: 'Values',\n\t}\n\n\t// If a stream is a Z stream we get the value from the cache\n\t// instead of the stream beause the cache is updated before\n\t// the stream propagation phase\n\tfunction getDependencyValue(stream) {\n\t\tif (queryStreams.has(stream)) {\n\t\t\tconst key = queryStreams.get(stream)\n\t\t\treturn values[key][0]\n\t\t} else {\n\t\t\treturn Stream.getVal(stream)\n\t\t}\n\t}\n\n\t// Intelligently adds a default value to the previous operation\n\t// by reading ahead in the operations list to infer user intent\n\t//\n\t// e.g. if a user's next operation uses a number as a property\n\t// we can infer the current operations default value is a list\n\tfunction injectOtherwise(operations) {\n\t\tconst noOtherwise = []\n\n\t\tfor (let op of operations) {\n\t\t\tif (op.tag != 'Property') {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (noOtherwise.length) {\n\t\t\t\tconst otherwise = typeof op.value.property == 'string' ? {} : []\n\t\t\t\tfor (let empty of noOtherwise) {\n\t\t\t\t\tempty.value.otherwise = otherwise\n\t\t\t\t}\n\t\t\t\tnoOtherwise.length = 0\n\t\t\t}\n\t\t\tif (typeof op.value.otherwise == 'undefined') {\n\t\t\t\tnoOtherwise.push(op)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Takes a list of operations and converts it into\n\t// a query interface { select, update, remove }.\n\t//\n\t// When doing updates `ys` is the total list of operations.\n\t// When doing reads `ys` is the last operation only and we\n\t// run that final operation over the cached value of its parent\n\t// query.\n\t//\n\t// This process is mangaged in staggeredCompile.\n\tconst theirCompile = ys => {\n\t\tinjectOtherwise(ys)\n\n\t\tconst keywords = ys.map(operation => {\n\t\t\tif (operation.tag == 'Property') {\n\t\t\t\tconst key = operation.value.property\n\t\t\t\tconst otherwise = operation.value.otherwise\n\n\t\t\t\treturn {\n\t\t\t\t\tselect(o) {\n\t\t\t\t\t\treturn o != null && key in Object(o) ? [o[key]] : []\n\t\t\t\t\t}\n\t\t\t\t\t,remove(o) {\n\t\t\t\t\t\tif (typeof key == 'number') {\n\t\t\t\t\t\t\treturn o.filter((_, i) => i == key)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst copy = { ...o }\n\t\t\t\t\t\t\tdelete copy[key]\n\t\t\t\t\t\t\treturn copy\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,update(f, o) {\n\t\t\t\t\t\tlet previous\n\t\t\t\t\t\tlet copy\n\t\t\t\t\t\tif (typeof key == 'number') {\n\t\t\t\t\t\t\tcopy = (o || []).slice()\n\t\t\t\t\t\t\tprevious = key in o ? o[key] : otherwise\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcopy = { ...o }\n\t\t\t\t\t\t\tprevious = key in o ? o[key] : otherwise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet result = f(previous)\n\t\t\t\t\t\tif (result == $delete) {\n\t\t\t\t\t\t\tdelete copy[key]\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcopy[key] = result\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn copy\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else if (operation.tag == 'Values') {\n\t\t\t\treturn {\n\t\t\t\t\tselect(o) {\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,remove(o) {\n\t\t\t\t\t\treturn Array.isArray(o) ? [] : {}\n\t\t\t\t\t}\n\t\t\t\t\t,update(f, o) {\n\t\t\t\t\t\treturn Array.isArray(o)\n\t\t\t\t\t\t\t? o.flatMap(x => {\n\t\t\t\t\t\t\t\t\tconst result = f(x)\n\t\t\t\t\t\t\t\t\tif (result == $delete) {\n\t\t\t\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn [result]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t })\n\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(o).flatMap(([k, x]) => {\n\t\t\t\t\t\t\t\t\t\tconst result = f(x)\n\t\t\t\t\t\t\t\t\t\tif (result == $delete) {\n\t\t\t\t\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn [[k, f(x)]]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t )\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else if (operation.tag == 'Filter') {\n\t\t\t\treturn {\n\t\t\t\t\tselect(o) {\n\t\t\t\t\t\t// for select we return [o] or [] depending\n\t\t\t\t\t\t// on the predicate\n\t\t\t\t\t\tconst allDepsReady = operation.value.dependencies.every(x =>\n\t\t\t\t\t\t\tqueryStreams.has(x)\n\t\t\t\t\t\t\t\t? queryStreams.get(x) in values\n\t\t\t\t\t\t\t\t: Stream.hasVal(x),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst args = allDepsReady\n\t\t\t\t\t\t\t? operation.value.dependencies.map(getDependencyValue)\n\t\t\t\t\t\t\t: []\n\n\t\t\t\t\t\tconst f = operation.value.visitor\n\n\t\t\t\t\t\treturn allDepsReady ? [o].filter(x => f(x, ...args)) : []\n\t\t\t\t\t}\n\t\t\t\t\t,remove(o) {\n\t\t\t\t\t\tconst cond = operation.value.visitor(\n\t\t\t\t\t\t\to,\n\t\t\t\t\t\t\t...operation.value.dependencies.map(getDependencyValue),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif (cond) {\n\t\t\t\t\t\t\treturn $delete\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn o\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,update(f, o) {\n\t\t\t\t\t\t// for update we always return the complete input\n\t\t\t\t\t\t// but we conditionally apply an update\n\t\t\t\t\t\tconst cond = operation.value.visitor(\n\t\t\t\t\t\t\to,\n\t\t\t\t\t\t\t...operation.value.dependencies.map(getDependencyValue),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tif (cond) {\n\t\t\t\t\t\t\tconst result = f(o)\n\n\t\t\t\t\t\t\t// todo-james just return f(o) after debugging\n\t\t\t\t\t\t\tif (result == $delete) {\n\t\t\t\t\t\t\t\treturn $delete\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn o\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else if (operation.tag == 'Map') {\n\t\t\t\treturn {\n\t\t\t\t\tselect(o) {\n\t\t\t\t\t\t// for select we return [o] or [] depending\n\t\t\t\t\t\t// on the predicate\n\t\t\t\t\t\tconst allDepsReady = operation.value.dependencies.every(x =>\n\t\t\t\t\t\t\tqueryStreams.has(x)\n\t\t\t\t\t\t\t\t? queryStreams.get(x) in values\n\t\t\t\t\t\t\t\t: Stream.hasVal(x),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst args = allDepsReady\n\t\t\t\t\t\t\t? operation.value.dependencies.map(getDependencyValue)\n\t\t\t\t\t\t\t: []\n\n\t\t\t\t\t\tconst f = operation.value.visitor\n\n\t\t\t\t\t\treturn allDepsReady ? [o].map(x => f(x, ...args)) : []\n\t\t\t\t\t}\n\t\t\t\t\t,remove(_, o) {\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,update(_, o) {\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tselect(o) {\n\t\t\t\t\t\treturn [o]\n\t\t\t\t\t}\n\t\t\t\t\t,remove(o) {\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,update(_, o) {\n\t\t\t\t\t\treturn o\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst updates = keywords.map(kw => f => o => kw.update(f, o))\n\n\t\tconst composedUpdate = updates.reduceRight(\n\t\t\t(g, f) => x => f(g(x)),\n\t\t\tx => x,\n\t\t)\n\n\t\tconst composedParentUpdate = updates.slice(0, -1).reduceRight(\n\t\t\t(g, f) => x => f(g(x)),\n\t\t\tx => x,\n\t\t)\n\n\t\tconst S =\n\t\t\tkeywords.length == 1\n\t\t\t\t? x => keywords[0].select(x)\n\t\t\t\t: keywords\n\t\t\t\t\t\t.map(kw => kw.select)\n\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t(g, f) => x => g(x).flatMap(f),\n\t\t\t\t\t\t\tx => [x],\n\t\t\t\t\t\t)\n\n\t\tconst D = composedParentUpdate(x => {\n\t\t\tif (keywords.length) {\n\t\t\t\treturn keywords.slice(-1)[0].remove(x)\n\t\t\t} else {\n\t\t\t\treturn $delete\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\tselect(xs) {\n\t\t\t\tconst Q = S\n\t\t\t\tkeywords\n\t\t\t\treturn xs.flatMap(x => Q(x))\n\t\t\t}\n\t\t\t,remove(xs) {\n\t\t\t\treturn xs.map(x => D(x))\n\t\t\t}\n\t\t\t,update(F, xs) {\n\t\t\t\tconst Q = composedUpdate(F)\n\t\t\t\treturn xs.map(x => Q(x))\n\t\t\t},\n\t\t}\n\t}\n\n\t// A small wrapper around theirCompile.\n\t// in addition to compiling it\n\t// stores the key and the \"type\" on the compiled\n\t// instance. This is used in the stream / proxy libs.\n\t//\n\n\t// It also marks the query as stale, and caches the output\n\t// for next time.\n\tfunction compile(cache, key, xs) {\n\t\tconst output = theirCompile(xs)\n\n\t\toutput.key = key\n\t\toutput.$type = 'how/z2-instance'\n\n\t\tstale[key] = true\n\t\tcache[key] = output\n\t\treturn cache[key]\n\t}\n\n\t// We check if an operation is dynamic via duck typing.\n\t// If the operation has a visitor, we assume it is dynamic.\n\t// This could be more concrete, e.g. as a metadata property?\n\t//\n\t// If a query is dynamic it is ranked differently and it affects\n\t// how queries propagate because a visitor function could technically\n\t// access any child value of the current position in the tree.\n\t// If a child of the dynamic is propagated then the dynamic\n\t// needs to propagate too.\n\t//\n\t// e.g. a $filter can acces a nested property:\n\t//\n\t//\t.$filter( x => x.a.b.c.d.e.f > 3 )\n\t//\n\t// without parsing the function body, we can't know how far down the tree\n\t// the dynamic function accessed. So just assume it accesses all children.\n\tfunction isDynamic(x) {\n\t\treturn x.value && x.value.visitor\n\t}\n\n\tconst dropRepeats = Stream.dropRepeatsWith(equals)\n\n\t// Not all dependencies are queries (maybe they should be)\n\t// so we need to listen to the non query deps and propagate\n\t// our query when they emit.\n\t//\n\t// But there's some edge cases:\n\t//\n\t// 1. We should only propagate if the stream value that emitted has changed.\n\t// 2. We should only propagate if all the deps have a value.\n\t// 3. If we're already propagating, we should schedule our stream\n\t// \t\tupdate for the end of that propagation via a stack.\n\t// 4. If we're not propagating and 1 & 2 are satisified, propagate\n\t//\t\timmediately.\n\tfunction subscribeToStreamDependencies({ node, key, xs }) {\n\t\tif (\n\t\t\tnode.value\n\t\t\t&& node.value.dependencies\n\t\t\t&& node.value.dependencies.length\n\t\t) {\n\t\t\tconst nonQueryDeps = node.value.dependencies.filter(\n\t\t\t\tx => !queryStreams.has(x),\n\t\t\t)\n\n\t\t\t// 2.\n\t\t\tdefaultStream.subscribe(() => {\n\t\t\t\tconst parentPropKey = propParents[key].slice(-1)[0]\n\n\t\t\t\tconst parentPropReady =\n\t\t\t\t\tparentPropKey in values && !(parentPropKey in stale)\n\n\t\t\t\tconst ready =\n\t\t\t\t\tparentPropReady && node.value.dependencies.every(Stream.hasVal)\n\n\t\t\t\tif (ready) {\n\t\t\t\t\tif (propagating) {\n\t\t\t\t\t\tpropagatingStreamEmits.push(key)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdate(x => x, xs, key)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null\n\t\t\t}, dropRepeats(Stream.merge(nonQueryDeps)))\n\t\t}\n\t}\n\n\t// Compile each component part of a query separately\n\t// and store in a staggeredCache.\n\t//\n\t// We can then efficiently jump to the specific\n\t// query that needs to be recalcuated during propagation\n\t// without recomputing everything from scratch.\n\tfunction staggeredCompile(_, xs) {\n\t\tconst take = xs.slice()\n\n\t\tlet _propParents = ['']\n\t\tlet _nonPropParents = []\n\n\t\tlet key = ''\n\t\tlet p = null\n\n\t\twhile (take.length) {\n\t\t\tconst node = take.shift()\n\t\t\tconst parent = key\n\t\t\tkey += node.key\n\n\t\t\t// if the parents for this key have not been\n\t\t\t// processed before, process them\n\t\t\t// technically the if statement isn't necessary\n\t\t\t// we just need to know if the key is in the staggered\n\t\t\t// cache or not to indicate if its processed already.\n\t\t\tif (!(key in staggeredCache)) {\n\t\t\t\tparents[key] = parents[parent].concat([parent])\n\n\t\t\t\tpropParents[key] = _propParents.slice()\n\t\t\t\tnonPropParents[key] = _nonPropParents.slice()\n\n\t\t\t\trank[key] =\n\t\t\t\t\t1 * propParents[key].length\n\t\t\t\t\t+ (node.tag == 'Property' ? 1 : 100)\n\t\t\t\t\t+ 100 * nonPropParents[key].length\n\t\t\t}\n\n\t\t\t// The updateRequirements hash is an index of queries\n\t\t\t// that this query needs to be propagated in order to\n\t\t\t// propagate itself.\n\t\t\t//\n\t\t\t// In addition, if any of these updateRequirements are directly modified\n\t\t\t// this query should also propagate.\n\t\t\tif (!(key in staggeredCache)) {\n\t\t\t\tlet [queryDeps, prevPropParent] = isDynamic(node)\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tnode.value.dependencies.flatMap(x =>\n\t\t\t\t\t\t\t\tqueryStreams.has(x) ? [queryStreams.get(x)] : [],\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,_propParents.slice(-1)[0]\n\t\t\t\t\t ,]\n\t\t\t\t\t: [[], null]\n\n\t\t\t\t// This query requires all parents\n\t\t\t\t// if they update, we need to propagate.\n\t\t\t\t// This query also requires any query deps.\n\t\t\t\t// If they update, we also need to update.\n\t\t\t\t//\n\t\t\t\t// Technically we require any of our requirements'\n\t\t\t\t// requirements. But that is evaluated in getAllChildren\n\t\t\t\t// as its a dynamic tree that changes when queries are\n\t\t\t\t// created/destroyed.\n\t\t\t\t//\n\t\t\t\t// So we cache and invalidate that cache accordingly.\n\t\t\t\t//\n\t\t\t\t// The query dep is updated which instigated a change that\n\t\t\t\t// we react to.\n\t\t\t\t//\n\t\t\t\t// Hence the query dep is the instigator, and we are the reactor\n\n\t\t\t\tparents[key].concat(queryDeps).forEach(instigator => {\n\t\t\t\t\tconst reactor = key\n\n\t\t\t\t\tupdateRequirements.set(instigator, reactor, true)\n\n\t\t\t\t\tdelete computePropagationNodesCache[instigator]\n\t\t\t\t})\n\n\t\t\t\t// If we are dynamic and our immediate prop parent is\n\t\t\t\t// propagated we need to update.\n\t\t\t\t//\n\t\t\t\t// Because that symbolizes a child update that\n\t\t\t\t// maybe our visitor function makes use of.\n\t\t\t\t//\n\t\t\t\t// If one of our query deps is propagated we need to\n\t\t\t\t// propagate as well. Because that propagtion implies\n\t\t\t\t// the dep could have changed, and therefore our visitor\n\t\t\t\t// might evaluate to a different result.\n\t\t\t\t//\n\t\t\t\t// The prop parent is propagated which instigates a change\n\t\t\t\t// which we react to.\n\t\t\t\t// Hence instigator=propParent and reactor=key\n\n\t\t\t\tif (prevPropParent) {\n\t\t\t\t\tconst instigator = prevPropParent\n\t\t\t\t\tconst reactor = key\n\t\t\t\t\tpropagationRequirements.set(instigator, reactor, true)\n\n\t\t\t\t\tdelete computePropagationNodesCache[instigator]\n\t\t\t\t}\n\n\t\t\t\tparents[key].forEach(orgQuery => {\n\t\t\t\t\t// things our parent reacts to\n\t\t\t\t\tconst instigators = Object.keys(\n\t\t\t\t\t\tpropagationRequirements.getMirrorOuter(orgQuery),\n\t\t\t\t\t)\n\n\t\t\t\t\t// inehrit all propagation requirements of our parents\n\t\t\t\t\tconst reactor = key\n\t\t\t\t\tinstigators.forEach(instigator => {\n\t\t\t\t\t\tpropagationRequirements.set(instigator, reactor, true)\n\t\t\t\t\t\tdelete computePropagationNodesCache[instigator]\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\tqueryDeps.forEach(instigator => {\n\t\t\t\t\tconst reactor = key\n\t\t\t\t\tpropagationRequirements.set(instigator, reactor, true)\n\n\t\t\t\t\tdelete computePropagationNodesCache[instigator]\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (node && node.tag == 'Property') {\n\t\t\t\t_propParents.push(key)\n\t\t\t} else {\n\t\t\t\t_nonPropParents.push(key)\n\t\t\t}\n\n\t\t\tlet uncached = !(key in staggeredCache)\n\n\t\t\tif (uncached) {\n\t\t\t\tcompile(staggeredCache, parent + node.key, [node])\n\t\t\t}\n\n\t\t\tlet out = staggeredCache[key]\n\n\t\t\tif (uncached) {\n\t\t\t\tlet thisXS = xs.slice(0, xs.length-take.length)\n\t\t\t\tsubscribeToStreamDependencies({ node, key, xs: thisXS })\n\t\t\t}\n\n\t\t\tp = out\n\t\t}\n\n\t\t// This ensures you can compile an empty query.\n\t\t{\n\t\t\tlet out\n\n\t\t\tif (xs.length) {\n\t\t\t\tout = p\n\t\t\t} else {\n\t\t\t\tif (!('' in staggeredCache)) {\n\t\t\t\t\tcompile(staggeredCache, '', [])\n\t\t\t\t}\n\t\t\t\tout = staggeredCache['']\n\t\t\t}\n\n\t\t\treturn out\n\t\t}\n\t}\n\n\t// There's several steps to fully compile a query.\n\t// This function consolidates that logic to make it easier\n\t// to set breakpoints on compilation of a specific key\n\t// irregardless of the entry point.\n\tfunction compilation(key, xs) {\n\t\tif (!(key in cache)) {\n\t\t\tcompile(cache, key, xs)\n\t\t\tstaggeredCompile(key, xs)\n\n\t\t\toperations[key] = xs\n\t\t}\n\t}\n\n\t// Walks through the operations and recomputing\n\t// and stale values.\n\t// Most of the time, all parents are not stale and\n\t// the last op is the only query that requires evaluation.\n\t//\n\t// Staggered selecting guarantees that if a child is not stale\n\t// a operation parent will not be stale either.\n\t//\n\t// Note staggeredSelect assumes staggeredCompile has already\n\t// run. If not, staggeredCache[key].* would crash.\n\tfunction staggeredSelect(operations) {\n\t\tlet prefix = ''\n\t\tlet out\n\n\t\tlet streamUpdates = []\n\n\t\tfor (let op of operations) {\n\t\t\tlet key = prefix + op.key\n\t\t\tlet isStale = key in stale || !(key in values)\n\t\t\tlet parentValue = values[prefix]\n\n\t\t\tif (isStale) {\n\t\t\t\tconst $ = staggeredCache[key]\n\n\t\t\t\tvalues[key] = $.select(parentValue)\n\t\t\t\tout = values[key]\n\t\t\t\tdelete stale[key]\n\t\t\t\tif (\n\t\t\t\t\tkey in streams\n\t\t\t\t\t&& !equals(values[key], Stream.getVal(streams[key]))\n\t\t\t\t) {\n\t\t\t\t\tstreamUpdates.push(() => Stream.setVal(streams[key], values[key]))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprefix = key\n\t\t}\n\n\t\tstreamUpdates.forEach(f => f())\n\n\t\tif (operations.length == 0) {\n\t\t\treturn [getState()]\n\t\t} else {\n\t\t\treturn out\n\t\t}\n\t}\n\n\t// Logically reads a queries value from the state tree.\n\t//\n\t// May compile the query if it has not already been compiled.\n\t// May also grab a cached value is the current value is not\n\t// marked as stale.\n\tfunction select(operations, key = operations.map(x => x.key).join('')) {\n\t\tcompilation(key, operations)\n\n\t\tif (key in values && !(key in stale)) {\n\t\t\treturn values[key]\n\t\t} else {\n\t\t\tconst value = staggeredSelect(operations)\n\t\t\treturn values[key] = value\n\t\t}\n\t}\n\n\tfunction update(\n\t\tvisitor,\n\t\toperations,\n\t\tkey = operations.map(x => x.key).join(''),\n\t) {\n\t\tcompilation(key, operations)\n\n\t\tconst $ = cache[key]\n\n\t\tconst prevResults = values[$.key]\n\t\tconst newResults = []\n\n\t\tignoreNotification = true\n\t\tsetState(\n\t\t\tstate =>\n\t\t\t\t$.update(\n\t\t\t\t\tprevious => {\n\t\t\t\t\t\tconst next = visitor(previous)\n\t\t\t\t\t\tnewResults.push(next)\n\t\t\t\t\t\treturn next\n\t\t\t\t\t},\n\t\t\t\t\t[state],\n\t\t\t\t)[0],\n\t\t)\n\t\tif (propagating) {\n\t\t\tconst valueRep = serialize(newResults)\n\t\t\tconst prev = updates.length ? updates[updates.length - 1] : ''\n\n\t\t\tpropagationMemory[''] = propagationMemory[''] || {}\n\t\t\tpropagationMemory[''][key] = propagationMemory[''][key] || {}\n\t\t\tpropagationMemory[prev] = propagationMemory[prev] || {}\n\t\t\tpropagationMemory[prev][key] = propagationMemory[prev][key] || {}\n\n\t\t\tif (\n\t\t\t\t// subsequent updates\n\t\t\t\tvalueRep in propagationMemory[prev][key]\n\t\t\t\t// first update\n\t\t\t\t|| valueRep in propagationMemory[''][key]\n\t\t\t) {\n\t\t\t\tstopPropagationLoop = true\n\t\t\t} else {\n\t\t\t\tpropagationMemory[prev][key][valueRep] = true\n\t\t\t}\n\t\t\tupdates.push(key)\n\t\t}\n\t\tignoreNotification = false\n\t\tlet same =\n\t\t\tequals(prevResults, newResults)\n\n\t\tif (!same) {\n\t\t\tpropagateFrom($)\n\t\t}\n\t\treturn getState()\n\t}\n\n\tfunction $stream(operations, key = operations.map(x => x.key).join('')) {\n\t\tcompilation(key, operations)\n\t\tlet out\n\t\t// we've got a cache for this\n\t\tif (key in streams) {\n\t\t\tout = streams[key]\n\t\t} else if (key in values) {\n\t\t\tconst value = values[key]\n\t\t\tif (value.length) {\n\t\t\t\tseeStream(streams[key] = Stream.of(values[key]), key)\n\t\t\t} else {\n\t\t\t\tseeStream(streams[key] = Stream.of(), key)\n\t\t\t}\n\t\t\tout = streams[key]\n\t\t\tqueryStreams.set(out, key)\n\t\t} else {\n\t\t\tconst value = staggeredSelect(operations)\n\t\t\tif (value.length) {\n\t\t\t\tvalues[key] = value\n\t\t\t\tseeStream(streams[key] = Stream.of(values[key]), key)\n\t\t\t} else {\n\t\t\t\tseeStream(streams[key] = Stream.of(), key)\n\t\t\t}\n\t\t\tout = streams[key]\n\t\t\tqueryStreams.set(out, key)\n\t\t}\n\t\treturn out\n\t}\n\n\tfunction remove(operations, key = operations.map(x => x.key).join('')) {\n\t\tcompilation(key, operations)\n\n\t\tconst $ = cache[key]\n\t\tsetState(state => $.remove([state])[0])\n\n\t\tpropagateFrom($)\n\n\t\treturn getState()\n\t}\n\n\tconst comparator = (x, y) => {\n\t\treturn rank[x] > rank[y] ? 1 : rank[y] > rank[x] ? -1 : 0\n\t}\n\n\tconst keySort = xs =>\n\t\txs.sort((x, y) => {\n\t\t\treturn comparator(x, y)\n\t\t})\n\n\tlet computePropagationNodesCache = {}\n\tfunction computePropagationNodes(key) {\n\t\tif (!(key in cache)) {\n\t\t\treturn []\n\t\t}\n\t\t// find all the nodes that have a requirement on this key\n\t\t// being updated.\n\t\t//\n\t\t// also, for each key we find, find any keys that have a\n\t\t// propagation requirement on that key being propagated.\n\t\t//\n\t\t// finally sort the list based on rank, then cache and return.\n\n\t\t// ok so naive, just scan requirements, doing double index look ups\n\t\t// that means, for as many queries as there are in tree we'll look up\n\t\t// that many + any requirements they have\n\t\t// so inefficient, but accurate.\n\t\t//\n\t\t// as we record requirements, we could record when this cache is\n\t\t// invalidated so we can cache aggressively.\n\t\t//\n\t\t// So if this key, or any of the keys mentioned are removed,\n\t\t// delete this cache.\n\t\t//\n\t\t// And, if a new key is compiled, that has a requirement on any\n\t\t// of the final resolved list, we drop this cache as well.\n\t\t//\n\t\t// aha!\n\t\t//\n\t\t// if we are about to add an item to the stack, we can instead\n\t\t// check if that key we are adding is already in the cache\n\t\t// and because we know our caches are always valid (as above)\n\t\t// we can skip the extra loop\n\t\t//\n\t\t// so really, most of the time, a new compute will rely on other\n\t\t// caches and by on average about O(2n) instead of O(n^2) or\n\t\t// O(log(n))\n\n\t\tif (key in computePropagationNodesCache) {\n\t\t\treturn computePropagationNodesCache[key]\n\t\t} else {\n\t\t\tconst set = new Set()\n\n\t\t\tconst updateRequirementsList = Object.keys(\n\t\t\t\tupdateRequirements.getOuter(key),\n\t\t\t)\n\n\t\t\t// keys that react to us, or the updates being propagated\n\t\t\tconst stack = [].concat(parents[key], key, updateRequirementsList)\n\n\t\t\twhile (stack.length) {\n\t\t\t\tconst k = stack.shift()\n\n\t\t\t\tif (!set.has(k)) {\n\t\t\t\t\tset.add(k)\n\n\t\t\t\t\t{\n\t\t\t\t\t\t// propagationRequirements is used as a sentinel\n\t\t\t\t\t\t// that there is a dynamic that depends on a key\n\t\t\t\t\t\t// propagating\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// if this sentinel is satisfied, we grab\n\t\t\t\t\t\t// all nodes that would have an update requirement\n\t\t\t\t\t\t// and propagate them too\n\t\t\t\t\t\tconst xs = Object.keys(propagationRequirements.getOuter(k))\n\n\t\t\t\t\t\t// if $org has a propagationRequirement on\n\t\t\t\t\t\t// .organizations\n\t\t\t\t\t\t// then if we update $org.name all sub org queries\n\t\t\t\t\t\t// could be affected, so they need to re-propagate\n\t\t\t\t\t\t// when $org is ended, if its the only dynamic on that\n\t\t\t\t\t\t// path, then this check will no longer occur and those\n\t\t\t\t\t\t// children will no longer need to be propagated\n\t\t\t\t\t\tif (xs.length) {\n\t\t\t\t\t\t\tstack.push(...Object.keys(updateRequirements.getOuter(k)), ...xs)\n\n\t\t\t\t\t\t\t// dynamic children need to be included in the stack\n\t\t\t\t\t\t\t// too when this happens\n\t\t\t\t\t\t\t// e.g. $org.name\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// $org.name doesn't have an update requirement on\n\t\t\t\t\t\t\t// org_id changing\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// but it is a direct child of a dynamic\n\t\t\t\t\t\t\t// so it needs to update\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// should queries inherit propagation requirements\n\t\t\t\t\t\t\t// at compile time, would that break cleanup?\n\t\t\t\t\t\t\t// I don't think so\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst out = keySort([...set]).map(k => staggeredCache[k])\n\n\t\t\tcomputePropagationNodesCache[key] = out\n\n\t\t\treturn out\n\t\t}\n\t}\n\n\t// eslint-disable-next-line complexity\n\tfunction propagateFrom($) {\n\t\tlet isParentPropagation = !propagating\n\t\tif (stopPropagationLoop) {\n\t\t\treturn\n\t\t}\n\t\tlet entryPropagationValue = propagating\n\t\tif (!propagating) {\n\t\t\tpropagationMemory = {}\n\t\t}\n\t\tif (!entryPropagationValue) {\n\t\t\tpropagating = true\n\t\t}\n\n\t\tlet nodes = computePropagationNodes($.key)\n\n\t\tlet nodeKeys = new Set()\n\t\tfor (let $ of nodes) {\n\t\t\tlet key = $.key\n\t\t\tnodeKeys.add(key)\n\t\t\tstale[key] = true\n\n\t\t\tconst parentKey = parents[$.key][parents[$.key].length - 1]\n\t\t\t// should always be available\n\t\t\tlet parentValue =\n\t\t\t\tparentKey == '' || $.key == '' ? [getState()] : values[parentKey]\n\t\t\tvalues[key] = $.select(parentValue)\n\t\t}\n\n\t\t// Because we marked as stale the stream visitors won't\n\t\t// re-evaluate automatically\n\t\t// But operations like .$filter will not use a stale value\n\t\t// because the dependency values are\n\t\t// read from the cache instead of from the stream.\n\n\t\t// update streams in a separate pass to ensure\n\t\t// cache is fully propagated custom stream visitors run\n\n\t\tif (isParentPropagation) {\n\t\t\tfor (let $ of nodes) {\n\t\t\t\tlet key = $.key\n\t\t\t\tif (key in streams && !equals(values[key], streams[key]())) {\n\t\t\t\t\tstreams[key](values[key])\n\t\t\t\t\tif (stopPropagationLoop) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdelete stale[key]\n\t\t\t}\n\n\t\t\tfor (let key of deferredStreamEmits) {\n\t\t\t\tif (key in streams && !equals(values[key], streams[key]())) {\n\t\t\t\t\tstreams[key](values[key])\n\t\t\t\t\tif (stopPropagationLoop) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdelete stale[key]\n\t\t\t}\n\n\t\t\tfor (let key of propagatingStreamEmits) {\n\t\t\t\tupdate(x => x, operations[key], key)\n\t\t\t\tif (stopPropagationLoop) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdelete stale[key]\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let $ of nodes) {\n\t\t\t\tlet key = $.key\n\t\t\t\tif (key in streams && !equals(values[key], streams[key]())) {\n\t\t\t\t\tdeferredStreamEmits.push(key)\n\t\t\t\t}\n\t\t\t\tdelete stale[key]\n\t\t\t}\n\t\t}\n\n\t\tstopPropagationLoop = false\n\t\tif (!entryPropagationValue) {\n\t\t\tpropagating = false\n\t\t\tdeferredStreamEmits = []\n\t\t\tpropagatingStreamEmits = []\n\t\t\tupdates = []\n\t\t}\n\t}\n\n\t// Z is designed to be used via a proxy.\n\t// The proxy allows you to construct queries by dot chaining\n\t// methods/properties and finally invoking the query to select/update.\n\t//\n\t// Behind the scenes the proxy is simply building a lost of operations\n\t// which are passed to the lower level functions.\n\t//\n\t// The operations are used to compile the query, and after compilation\n\t// the operations are used to compute the key which is used for most indexes\n\t// in Z\n\tfunction ProxyResponse(xs, key = xs.map(x => x.key).join('')) {\n\t\tfunction prop(...args) {\n\t\t\tif (args.length) {\n\t\t\t\tif (typeof args[0] == 'function') {\n\t\t\t\t\treturn update(args[0], xs, key)\n\t\t\t\t} else {\n\t\t\t\t\treturn update(() => args[0], xs, key)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn select(xs, key)[0]\n\t\t\t}\n\t\t}\n\n\t\tprop.toString = function () {\n\t\t\tprop.valueOf() + ''\n\t\t}\n\n\t\tprop.valueOf = function () {\n\t\t\treturn prop.$get()[0]\n\t\t}\n\n\t\tprop.$get = () => {\n\t\t\treturn select(xs, key)\n\t\t}\n\n\t\tprop.$set = x => {\n\t\t\treturn update(() => x, xs, key)\n\t\t}\n\n\t\tprop.$update = x => {\n\t\t\treturn update(x, xs, key)\n\t\t}\n\n\t\tprop.$key = key\n\n\t\tprop.$all = function (...args) {\n\t\t\tif (args.length) {\n\t\t\t\tif (typeof args[0] == 'function') {\n\t\t\t\t\treturn update(args[0], xs, key)\n\t\t\t\t} else {\n\t\t\t\t\treturn update(() => args[0], xs, key)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn select(xs, key)\n\t\t\t}\n\t\t}\n\n\t\tprop.$type = 'how/z2-proxy'\n\n\t\tprop.$remove = function () {\n\n\t\t\t// todo-james should we auto call $end() afterwards\n\t\t\t// why keep a query around for an object that won't be in the tree\n\t\t\t// anymore\n\t\t\t// if they reuse it, it will just recompile it\n\t\t\treturn remove(xs, key)\n\t\t}\n\n\t\tprop.$throttled = function (ms = 500) {\n\t\t\treturn throttle(ms)(prop.$stream())\n\t\t}\n\n\t\tprop.$afterSilence = function (ms = 500) {\n\t\t\treturn afterSilence(ms)(prop.$stream())\n\t\t}\n\n\t\tprop.$stream = function () {\n\t\t\tconst out = Stream.of()\n\t\t\tseenStreams.set(out, key)\n\t\t\tqueryStreams.set(out, key)\n\n\t\t\tconst all = $stream(xs)\n\n\t\t\tStream.subscribe(xs => {\n\t\t\t\tif (xs.length) {\n\t\t\t\t\tout(xs[0])\n\t\t\t\t} else if (Stream.hasVal(out)) {\n\t\t\t\t\tout(xs[0])\n\t\t\t\t}\n\t\t\t}, all)\n\n\t\t\treturn out\n\t\t}\n\n\t\tprop.$stream.all = function () {\n\t\t\treturn $stream(xs)\n\t\t}\n\n\t\tprop.$end = function () {\n\t\t\treturn end(xs, key)\n\t\t}\n\n\t\tprop.$operations = function () {\n\t\t\treturn xs\n\t\t}\n\n\t\tprop.$filter = function (...args) {\n\t\t\tif (dev.enforceArrowUsage) {\n\t\t\t\tconst visitor = args[0]\n\t\t\t\tif (typeof visitor == 'function') {\n\t\t\t\t\tconst hasArrow = (visitor + '').includes('=>')\n\n\t\t\t\t\tif (!hasArrow) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${key}.$filter(...) has no key and appears to be using a curried function`\n\t\t\t\t\t\t\t\t+ ` this can lead to two unrelated queries sharing the same key.`\n\t\t\t\t\t\t\t\t+ ` To fix this we recommend using an arrow function to invoke your arguments`\n\t\t\t\t\t\t\t\t+ ` or provide a key, e.g. ${key}.$filter('my-filter', '...').`\n\t\t\t\t\t\t\t\t+ `\\n`\n\t\t\t\t\t\t\t\t+ `Note: You can disable this option by passing { dev: { enforceArrowUsage: false } }`\n\t\t\t\t\t\t\t\t+ ` when initializing Z.`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ProxyResponse(xs.concat($filter(...args)))\n\t\t}\n\n\t\tprop.$map = function (...args) {\n\t\t\tif (dev.enforceArrowUsage) {\n\t\t\t\tconst visitor = args[0]\n\t\t\t\tif (typeof visitor == 'function') {\n\t\t\t\t\tconst hasArrow = (visitor + '').includes('=>')\n\n\t\t\t\t\tif (!hasArrow) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`${key}.$map(...) has no key and appears to be using a curried function`\n\t\t\t\t\t\t\t\t+ ` this can lead to two unrelated queries sharing the same key.`\n\t\t\t\t\t\t\t\t+ ` To fix this we recommend using an arrow function to invoke your arguments`\n\t\t\t\t\t\t\t\t+ ` or provide a key, e.g. ${key}.$map('my-map', '...').`\n\t\t\t\t\t\t\t\t+ `\\n`\n\t\t\t\t\t\t\t\t+ `Note: You can disable this option by passing { dev: { enforceArrowUsage: false } }`\n\t\t\t\t\t\t\t\t+ ` when initializing Z.`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ProxyResponse(xs.concat($map(...args)))\n\t\t}\n\n\t\tprop.$filterValues = function (...args) {\n\t\t\treturn ProxyResponse(xs.concat($values)).$filter(...args)\n\t\t}\n\n\t\tprop.$mapValues = function (...args) {\n\t\t\treturn ProxyResponse(xs.concat($values)).$map(...args)\n\t\t}\n\n\t\tconst proxy = new Proxy(prop, {\n\t\t\thas(_, key) {\n\t\t\t\treturn key in prop || key in (prop.$get()[0] || {})\n\t\t\t}\n\t\t\t,deleteProperty(_, key) {\n\t\t\t\tconst x = proxy[key]\n\t\t\t\treturn x.$remove()\n\t\t\t}\n\t\t\t,set(_, property, value) {\n\t\t\t\tif (property in prop && property != 'name') {\n\t\t\t\t\treturn prop[property]\n\t\t\t\t} else {\n\t\t\t\t\treturn proxy[property].$set(value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t,get(_, property) {\n\t\t\t\tif (property == Symbol.toPrimitive) {\n\t\t\t\t\treturn () => prop.$get()[0]\n\t\t\t\t} else if (property == Symbol.iterator) {\n\t\t\t\t\treturn function* () {\n\t\t\t\t\t\tfor (let x of prop.$get()) {\n\t\t\t\t\t\t\tyield x\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tproperty in prop\n\t\t\t\t\t&& property != 'name'\n\t\t\t\t\t&& property != 'length'\n\t\t\t\t) {\n\t\t\t\t\treturn prop[property]\n\t\t\t\t} else if (property == '$values') {\n\t\t\t\t\treturn ProxyResponse(xs.concat($values))\n\t\t\t\t} else {\n\t\t\t\t\tconst newKey = key + '.' + property\n\n\t\t\t\t\tif (newKey in proxies) {\n\t\t\t\t\t\treturn proxies[newKey]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproxies[newKey] = ProxyResponse(xs.concat($prop(property)))\n\t\t\t\t\t\treturn proxies[newKey]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\treturn proxy\n\t}\n\n\tfunction end(xs, $key = xs.map(x => x.key).join('')) {\n\t\t// You may have defined a child query and then\n\t\t// say you want to end the root, but that root was never\n\t\t// used directly. And because Z is lazy, that will prevent\n\t\t// end from working correctly.\n\t\t//\n\t\t// e.g. you define route.value.user_id but you never read/write\n\t\t// directly to route, then the route query was never compiled\n\t\t//\n\t\t// so what we do is, compile the key if it doesn't exist so we can\n\t\t// remove all its children\n\t\t//\n\t\t// seems wasteful, but all the logic for understanding relationships\n\t\t// is inside compilation, so why duplicate it?\n\t\t// its also an edge case, hopefully in practice the context you are\n\t\t// ending is read and written directly so this branch never runs.\n\t\tif (!($key in cache)) {\n\t\t\tcompilation($key, xs)\n\t\t}\n\n\t\t// Nodes to be removed...\n\t\tconst pendingRemoval = [$key].concat(\n\t\t\tObject.keys(updateRequirements.getOuter($key)),\n\t\t)\n\n\t\tfor (let key of pendingRemoval) {\n\t\t\tdelete cache[key]\n\t\t\tdelete staggeredCache[key]\n\t\t\tif (key != '') {\n\t\t\t\tdelete values[key]\n\t\t\t\tdelete operations[key]\n\t\t\t\tdelete parents[key]\n\t\t\t\tdelete propParents[key]\n\t\t\t\tdelete nonPropParents[key]\n\t\t\t\tdelete rank[key]\n\t\t\t}\n\t\t\tdelete proxies[key]\n\t\t\tif (key in streams) delete streams[key]\n\t\t\tdelete stale[key]\n\t\t\tdelete rank[key]\n\n\t\t\tdelete computePropagationNodesCache[key]\n\n\t\t\t// We're deleting a reactor, we need to remove our reactor\n\t\t\t// from any instigator indexes that included us.\n\t\t\t// updateRequirements has a mirror index of the main index\n\t\t\t// so we can lookup all the instigators that have us indexed\n\t\t\t// then remove ourselves from their cache\n\t\t\tObject.keys(updateRequirements.getMirrorOuter(key)).forEach(\n\t\t\t\tinstigatorKey => {\n\t\t\t\t\tupdateRequirements.remove(instigatorKey, key)\n\t\t\t\t\tdelete computePropagationNodesCache[instigatorKey]\n\t\t\t\t},\n\t\t\t)\n\t\t\tObject.keys(propagationRequirements.getMirrorOuter(key)).forEach(\n\t\t\t\tinstigatorKey => {\n\t\t\t\t\tpropagationRequirements.remove(instigatorKey, key)\n\t\t\t\t\tdelete computePropagationNodesCache[instigatorKey]\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tupdateRequirements.remove(key)\n\t\t\tpropagationRequirements.remove(key)\n\t\t}\n\t}\n\n\tupdateState(state => {\n\t\tif (!ignoreNotification) {\n\t\t\tupdate(() => state, [])\n\t\t}\n\t})\n\n\t$stream([])\n\n\treturn {\n\t\tgetState\n\t\t,setState\n\t\t,state: state\n\t\t,select\n\t\t,update\n\t\t,remove\n\t\t,cache\n\t\t,staggeredCache\n\t\t,stale\n\t\t,values\n\t\t,streams\n\t\t,queryStreams\n\t\t,$prop\n\t\t,$filter\n\t\t,$values\n\t\t,$stream\n\t\t,end\n\t\t,rank\n\t\t,parents\n\t\t,ProxyResponse\n\t\t,$: ProxyResponse([])\n\t\t,computePropagationNodes\n\t\t,computePropagationNodesCache\n\t}\n}\n\nfunction query(state) {\n\treturn Z3({ initial: state }).$\n}\n\nfunction isZ2Proxy(x) {\n\tif (x == null) {\n\t\treturn false\n\t} else {\n\t\treturn x.$type == 'how/z2-proxy'\n\t}\n}\n\nexport { Z3 as Z, isZ2Proxy, query }\n","/* globals Symbol */\n\nexport const run = (initial, ...fns) => {\n\tif (fns.length == 0) {\n\t\tthrow new Error(\n\t\t\t'You must provide an initial value and a non-empty spread of functions.',\n\t\t)\n\t}\n\treturn fns.reduce((p, f) => f(p), initial)\n}\n\nexport const otherwise = tagNames => f => {\n\tif (Array.isArray(f)) {\n\t\tconst sublist = f\n\t\tconst excess = sublist.filter(x => !tagNames.includes(x))\n\n\t\tif (excess.length) {\n\t\t\tthrow new Error(\n\t\t\t\t'Tags provided do not match original definition.'\n\t\t\t\t\t+ ' The tags: ('\n\t\t\t\t\t+ excess.join('|')\n\t\t\t\t\t+ ') could not be found in the list:'\n\t\t\t\t\t+ ' ('\n\t\t\t\t\t+ tagNames.join('|')\n\t\t\t\t\t+ ')',\n\t\t\t)\n\t\t} else {\n\t\t\treturn otherwise(sublist)\n\t\t}\n\t} else {\n\t\treturn tagNames.reduce((p, k) => Object.assign(p, { [k]: f }), {})\n\t}\n}\n\nexport const _fold = () => fns => M => fns[M.tag](M.value)\n\nexport const pipe = (...fns) => {\n\tif (fns.length == 0) {\n\t\tthrow new Error('You must provide a non-empty spread of functions.')\n\t}\n\treturn initial => run(initial, ...fns)\n}\n\nexport const repeat = (n, x) => Array(n).fill(x)\nexport const repeatStr = (n, x) => n > 0 ? repeat(n, x).join('') : ''\n\nexport function annotate(visitor, value) {\n\tconst notPrimative = Object(value) === value\n\tconst isNil = value == null\n\tconst isArray = notPrimative && Array.isArray(value)\n\tconst isObject = notPrimative && !isArray\n\tconst isFunction = notPrimative && typeof value === 'function'\n\tconst isPrimative = !notPrimative\n\tconst isStag = isObject && value.type && value.tag\n\tconst valueStag = isStag && 'value' in value\n\tconst emptyStag = isStag && !valueStag\n\tconst isPojo = isObject && value.constructor.name == 'Object'\n\tconst isDate = isObject && value instanceof Date\n\tconst isError = isObject && value instanceof Error\n\tconst isString = typeof value === 'string'\n\n\treturn visitor({\n\t\tnotPrimative\n\t\t,isPrimative\n\t\t,isString\n\t\t,isNil\n\t\t,isArray\n\t\t,isObject\n\t\t,isPojo\n\t\t,isDate\n\t\t,isError\n\t\t,value\n\t\t,isFunction\n\t\t,isStag\n\t\t,valueStag\n\t\t,emptyStag\n\t})\n}\n\nexport const toString = x =>\n\tannotate(\n\t\t(function visitor(indentation) {\n\t\t\treturn annotation => {\n\t\t\t\tconst {\n\t\t\t\t\tvalue,\n\t\t\t\t\tisPojo,\n\t\t\t\t\tisObject,\n\t\t\t\t\tisArray,\n\t\t\t\t\tisDate,\n\t\t\t\t\tisError,\n\t\t\t\t\tvalueStag,\n\t\t\t\t\temptyStag,\n\t\t\t\t\tisString,\n\t\t\t\t\tisFunction,\n\t\t\t\t} = annotation\n\n\t\t\t\tconst indentChar = ''\n\t\t\t\tconst tab = repeatStr(indentation, indentChar)\n\t\t\t\tconst tabLess = repeatStr(indentation - 1, indentChar)\n\t\t\t\tconst tab2 = repeatStr(indentation + 1, indentChar)\n\t\t\t\tconst newLine = ''\n\n\t\t\t\treturn valueStag\n\t\t\t\t\t? value.type\n\t\t\t\t\t\t\t+ '.'\n\t\t\t\t\t\t\t+ value.tag\n\t\t\t\t\t\t\t+ '('\n\t\t\t\t\t\t\t+ (typeof value.value === 'undefined'\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: annotate(visitor(indentation + 1), value.value))\n\t\t\t\t\t\t\t+ (indentation > 0 ? newLine + tabLess : '')\n\t\t\t\t\t\t\t+ newLine\n\t\t\t\t\t\t\t+ tab\n\t\t\t\t\t\t\t+ ')'\n\t\t\t\t\t: emptyStag\n\t\t\t\t\t? value.type + '.' + value.tag + '()'\n\t\t\t\t\t: isPojo\n\t\t\t\t\t? Object.keys(value).length == 0\n\t\t\t\t\t\t? '{}'\n\t\t\t\t\t\t: run(\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tObject.entries,\n\t\t\t\t\t\t\t\txs =>\n\t\t\t\t\t\t\t\t\txs.map(\n\t\t\t\t\t\t\t\t\t\t([key, value]) =>\n\t\t\t\t\t\t\t\t\t\t\tnewLine\n\t\t\t\t\t\t\t\t\t\t\t+ tab2\n\t\t\t\t\t\t\t\t\t\t\t+ '\"'\n\t\t\t\t\t\t\t\t\t\t\t+ key\n\t\t\t\t\t\t\t\t\t\t\t+ '\":'\n\t\t\t\t\t\t\t\t\t\t\t+ annotate(visitor(indentation + 1), value).replace(\n\t\t\t\t\t\t\t\t\t\t\t\tnewLine + tab2,\n\t\t\t\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstrings => newLine + tab + '{' + strings + newLine + tab + '}',\n\t\t\t\t\t\t )\n\t\t\t\t\t: isArray\n\t\t\t\t\t? value.length == '0'\n\t\t\t\t\t\t? '[]'\n\t\t\t\t\t\t: newLine\n\t\t\t\t\t\t + tab\n\t\t\t\t\t\t + '['\n\t\t\t\t\t\t + newLine\n\t\t\t\t\t\t + tab\n\t\t\t\t\t\t + tab\n\t\t\t\t\t\t + value.map(x => annotate(visitor(indentation + 1), x)).join(', ')\n\t\t\t\t\t\t + newLine\n\t\t\t\t\t\t + tab\n\t\t\t\t\t\t + ']'\n\t\t\t\t\t: isDate\n\t\t\t\t\t? 'new ' + value.constructor.name + '(\"' + value.toISOString() + '\")'\n\t\t\t\t\t: isError\n\t\t\t\t\t? 'new ' + value.constructor.name + '(\"' + value.message + '\")'\n\t\t\t\t\t: isFunction\n\t\t\t\t\t? value + ''\n\t\t\t\t\t: isObject\n\t\t\t\t\t? 'new ' + value.constructor.name + '()'\n\t\t\t\t\t: isString\n\t\t\t\t\t? JSON.stringify(value)\n\t\t\t\t\t: '' + value\n\t\t\t}\n\t\t})(0),\n\t\tx,\n\t)\n\nexport const toJSON = x =>\n\tannotate(function visitor({ value, isPojo, isArray, valueStag, emptyStag }) {\n\t\tconst out = valueStag\n\t\t\t? annotate(visitor, value.value)\n\t\t\t: emptyStag\n\t\t\t? null\n\t\t\t: isPojo\n\t\t\t? fromEntries(\n\t\t\t\tObject.entries(value).map(value => annotate(visitor, value)),\n\t\t\t)\n\t\t\t: isArray\n\t\t\t? value.map(value => annotate(visitor, value))\n\t\t\t: value\n\n\t\treturn out\n\t}, x)\n\nexport function boundToJSON() {\n\treturn toJSON(this)\n}\n\nexport function boundToString() {\n\treturn toString(this)\n}\n\nexport function typeName(instance) {\n\treturn instance.type\n}\n\nexport function tagName(instance) {\n\treturn instance.tag\n}\n\nexport const proto = {\n\ttoString: boundToString\n\t,inspect: boundToString\n\t// , toJSON: boundToJSON\n\t,[Symbol.for('nodejs.util.inspect.custom')]: boundToString\n}\n\nexport function valueInstance(type, tag, value) {\n\treturn Object.assign(Object.create(proto), {\n\t\ttype\n\t\t,tag\n\t\t,value,\n\t})\n}\n\nexport function emptyInstance(type, tag) {\n\treturn Object.assign(Object.create(proto), {\n\t\ttype\n\t\t,tag\n\t})\n}\n\nexport const fromEntries = pairs => \n\tpairs.reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n\nexport const StaticSumTypeError = [\n\t'ExtraTags'\n\t,'MissingTags'\n\t,'InstanceNull'\n\t,'InstanceWrongType'\n\t,'InstanceShapeInvalid'\n\t,'VisitorNotAFunction'\n\t,'NotAType'\n\t,'TagsShapeInvalid'\n,].reduce(\n\t(p, n) => {\n\t\tp[n] = value => valueInstance(p.type, n, value)\n\t\tp.tags.push(n)\n\t\treturn p\n\t},\n\t{\n\t\ttype: 'StaticSumTypeError'\n\t\t,tags: []\n\t\t,traits: {}\n\t},\n)\n\nexport function getTags(T) {\n\treturn T.tags\n}\n\nexport const ErrMessageTags = {\n\tExtraTags: function ExtraTags(o) {\n\t\treturn [\n\t\t\t'Your tag function must have exactly the same'\n\t\t\t,' keys as the type: ' + o.T.type + '. '\n\t\t\t,'The following tags should not have been present:'\n\t\t\t,o.extraKeys.join(', ')\n\t\t,].join(' ')\n\t}\n\t,MissingTags: function MissingTags(o) {\n\t\treturn\n\t\t;[\n\t\t\t'Your tag function must have exactly the same'\n\t\t\t,'keys as the type: ' + o.T.type + '. The following keys were'\n\t\t\t,'missing:'\n\t\t\t,o.missingKeys.join(', ')\n\t\t,].join(' ')\n\t}\n\n\t,InstanceNull: function InstanceNull(o) {\n\t\treturn 'Null is not a valid member of the type ' + o.T.type\n\t}\n\n\t,InstanceWrongType: function InstanceWrongType(o) {\n\t\treturn\n\t\t;[\n\t\t\ttoString(o.x) + ' is not a valid member of the type'\n\t\t\t,o.T.type\n\t\t\t,'which expects the following tags'\n\t\t\t,getTags(o.T).join(' | ')\n\t\t,].join(' ')\n\t}\n\n\t,InstanceShapeInvalid: function InstanceShapeInvalid(o) {\n\t\treturn [\n\t\t\ttoString(o.x)\n\t\t\t,'is not a valid Member of the type:'\n\t\t\t,o.T.type + '. '\n\t\t\t,'Please review the definition of ' + o.T.type\n\t\t,].join(' ')\n\t}\n\t,VisitorNotAFunction: function (o) {\n\t\treturn (\n\t\t\to.context\n\t\t\t+ ' expected a visitor function '\n\t\t\t+ ' but instead received '\n\t\t\t+ toString(o.visitor)\n\t\t)\n\t}\n\t,NotAType: function (o) {\n\t\treturn (\n\t\t\to.context\n\t\t\t+ ' expected a Type ({ type: string, tags: string[] })'\n\t\t\t+ ' but received '\n\t\t\t+ toString(o.T)\n\t\t)\n\t}\n\t,TagsShapeInvalid(T, tags) {\n\t\treturn (\n\t\t\t'fold('\n\t\t\t+ typeName(T)\n\t\t\t+ ') tags provided were not the right shape. '\n\t\t\t+ 'Expected { [tag]: f } but received '\n\t\t\t+ toString(tags)\n\t\t)\n\t},\n}\n\nexport function foldT(getT) {\n\tconst T = getT()\n\tassertValidType('fold', T)\n\treturn function devCata$T(tags) {\n\t\tassertValidCata(T, tags)\n\n\t\tconst tagNames = Object.keys(tags)\n\n\t\tconst tKeys = getTags(T)\n\n\t\tconst xKeys = [\n\t\t\t[tagNames, T]\n\t\t\t,[tKeys, tags]\n\t\t,].map(function (t) {\n\t\t\tconst xs = t[0]\n\t\t\tconst index = t[1]\n\t\t\treturn xs.filter(function (x) {\n\t\t\t\treturn !(x in index)\n\t\t\t})\n\t\t})\n\n\t\tconst extraKeys = xKeys[0]\n\t\tconst missingKeys = xKeys[1]\n\n\t\tif (missingKeys.length > 0) {\n\t\t\treturn handleError(\n\t\t\t\tErr.MissingTags({ T: T, tags, missingKeys: missingKeys }),\n\t\t\t)\n\t\t} else if (extraKeys.length > 0) {\n\t\t\treturn handleError(Err.ExtraTags({ T: T, tags, extraKeys: extraKeys }))\n\t\t} else {\n\t\t\treturn function (x) {\n\t\t\t\treturn beforeFoldEval(T, tags, x) && tags[tagName(x)](x.value)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const errMessage = err => _fold(StaticSumTypeError)(ErrMessageTags)(err)\n\nexport function handleError(err) {\n\tconst e = new Error(tagName(err) + ': ' + errMessage(err))\n\tthrow e\n}\n\nexport const Err = StaticSumTypeError\n\nexport function assertValidType(context, T) {\n\tif (\n\t\tT == null\n\t\t|| !(\n\t\t\tT != null\n\t\t\t&& typeof T.type == 'string'\n\t\t\t&& Array.isArray(T.tags)\n\t\t\t&& 'traits' in T\n\t\t)\n\t) {\n\t\treturn handleError(Err.NotAType({ context, T }))\n\t}\n\treturn null\n}\n\nexport function assertValidVisitor(o) {\n\tif (typeof o.visitor != 'function') {\n\t\treturn handleError(\n\t\t\tErr.VisitorNotAFunction({ context: o.context, visitor: o.visitor }),\n\t\t)\n\t}\n\treturn null\n}\n\nexport function assertValidTag(T, instance) {\n\tif (\n\t\t!(\n\t\t\tinstance != null\n\t\t\t&& typeName(instance) == T.type\n\t\t\t&& getTags(T).includes(tagName(instance))\n\t\t)\n\t) {\n\t\treturn handleError(\n\t\t\tErr.InstanceShapeInvalid({\n\t\t\t\tx: instance\n\t\t\t\t,T: T,\n\t\t\t}),\n\t\t)\n\t}\n\treturn null\n}\n\nexport function assertValidCata(T, tags) {\n\tif (tags != null && !Array.isArray(tags) && typeof tags === 'object') {\n\t\treturn true\n\t} else {\n\t\tconst err = Err.TagsShapeInvalid(T, tags)\n\t\treturn handleError(err)\n\t}\n}\n\nexport function beforeFoldEval(T, tags, x) {\n\treturn x == null\n\t\t? handleError(\n\t\t\t\tErr.InstanceNull({\n\t\t\t\t\tT: T\n\t\t\t\t\t,tags\n\t\t\t\t\t,x: x,\n\t\t\t\t}),\n\t\t )\n\t\t: typeName(x) !== T.type\n\t\t? handleError(\n\t\t\t\tErr.InstanceWrongType({\n\t\t\t\t\tT: T\n\t\t\t\t\t,tags\n\t\t\t\t\t,x: x,\n\t\t\t\t}),\n\t\t )\n\t\t: !getTags(T).includes(tagName(x))\n\t\t? handleError(\n\t\t\t\tErr.InstanceShapeInvalid({\n\t\t\t\t\tT: T\n\t\t\t\t\t,tags\n\t\t\t\t\t,x: x,\n\t\t\t\t}),\n\t\t )\n\t\t: true\n}\n\nexport function fold(T) {\n\treturn foldT(() => T)\n}\n\nexport const mapAll = T => {\n\tconst foldT = fold(T)\n\n\treturn tags => {\n\t\tconst foldTags = foldT(tags)\n\t\treturn Ma => {\n\t\t\tassertValidTag(T, Ma)\n\t\t\tconst value = foldTags(Ma)\n\t\t\treturn T[tagName(Ma)](value)\n\t\t}\n\t}\n}\n\nexport const chainAll = T => {\n\tconst foldT = fold(T)\n\n\treturn tags => {\n\t\tconst foldTags = foldT(tags)\n\n\t\treturn Ma => {\n\t\t\tbeforeFoldEval(T, tags, Ma)\n\t\t\tif ('value' in Ma) {\n\t\t\t\tconst nestedValue = foldTags(Ma)\n\n\t\t\t\treturn beforeFoldEval(T, tags, nestedValue) && nestedValue\n\t\t\t} else {\n\t\t\t\treturn Ma\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const tags = (type, tagNames) => {\n\treturn {\n\t\ttype\n\t\t,traits: {}\n\t\t,tags: tagNames\n\t\t,...fromEntries(\n\t\t\ttagNames.map(tagName => [\n\t\t\t\ttagName\n\t\t\t\t,(...args) =>\n\t\t\t\t\targs.length\n\t\t\t\t\t\t? valueInstance(type, tagName, args[0])\n\t\t\t\t\t\t: emptyInstance(type, tagName)\n\t\t\t,]),\n\t\t),\n\t}\n}\n\nexport function either(type) {\n\treturn tags(type, ['Y', 'N'])\n}\n\nexport const Either = either('sumType.Either')\n","import {\n\tassertValidVisitor\n\t, assertValidType\n\t, assertValidTag\n\t, fold\n\t, mapAll\n\t, tagName\n}\n\tfrom './core.js'\n\nexport const all = T => Ms => {\n\tconst bad = Ms.filter(M => !T.toBoolean(M))\n\n\tif (bad.length > 0) {\n\t\treturn T.left(bad.map(x => x.value))\n\t} else {\n\t\treturn T.right(Ms.map(T.getOr(null)))\n\t}\n}\n\nexport const any = T => Ms =>\n\tMs.some(T.toBoolean)\n\t\t? T.right(Ms.filter(T.toBoolean).map(T.getOr(null)))\n\t\t: Ms.find(M => !T.toBoolean(M))\n\nexport const _bifold = T => {\n\tconst $fold = fold(T)\n\tconst { left, right } = T.traits['sum-type/bifunctor']\n\n\treturn (leftF, rightF) =>\n\t\t$fold({ [left]: leftF, [right]: rightF })\n}\n\nexport const bifold = T => {\n\tassertValidType('bifold', T)\n\n\treturn _bifold(T)\n}\n\nexport const _bimap = T => {\n\tconst _mapAll = mapAll(T)\n\tconst { left, right } = T.traits['sum-type/bifunctor']\n\n\treturn (leftF, rightF) =>\n\t\t_mapAll({\n\t\t\t[left]: leftF, [right]: rightF\n\t\t})\n}\n\nexport const bimap = T => {\n\tassertValidType('bimap', T)\n\n\treturn _bimap(T)\n}\n\nexport const _getOr = T => or =>\n\t_bifold(T)(\n\t\t() => or, x => x\n\t)\n\nexport const getOr = T => {\n\tassertValidType('getOr', T)\n\n\treturn or => {\n\t\treturn M => {\n\t\t\tassertValidTag(T, M)\n\n\t\t\treturn _getOr(T)(or)(M)\n\t\t}\n\t}\n}\n\nexport const getWith = T => (otherwise, f) =>\n\tbifold(T)(\n\t\t() => otherwise, x => f(x)\n\t)\n\nexport const tagBy = T => {\n\tfold(T) // just validates T\n\treturn (otherwise, visitor) => a => {\n\t\tassertValidVisitor({ context: 'tagBy', visitor })\n\t\treturn visitor(a) ? T.right(a) : T.left(otherwise)\n\t}\n}\n\nexport const toBoolean = T =>\n\tT.bifold(\n\t\t() => false\n\t\t, () => true\n\t)\n\nexport const fromNullable = T => x =>\n\tx == null ? T.left(x) : T.right(x)\n\nexport const encase = T => f => x => {\n\ttry {\n\t\treturn T.right(f(x))\n\t} catch (e) {\n\t\treturn T.left(e)\n\t}\n}\n\nexport const _concatWith = T => f => A => B => {\n\tconst { left, right } = T.traits['sum-type/bifunctor']\n\n\treturn tagName(A) == left\n\t\t? A\n\t\t: tagName(B) == left\n\t\t? B\n\t\t: T[right](f(A.value)(B.value))\n}\n\nexport const concatWith = T => {\n\tassertValidType('concatWith', T)\n\n\treturn f => {\n\t\tassertValidVisitor({\n\t\t\tcontext: 'concatWith'\n\t\t\t,visitor: f\n\t\t})\n\n\n\t\treturn A => {\n\t\t\tassertValidTag(T, A)\n\n\t\t\treturn B => {\n\t\t\t\tassertValidTag(T, B)\n\t\t\t\treturn _concatWith(T)(f)(A)(B)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const trait = ({ left, right }) => T => {\n\tT.traits['sum-type/bifunctor'] = { left, right }\n\n\tT.left = x => T[left](x)\n\tT.right = x => T[right](x)\n\tT.bifold = bifold(T)\n\tT.bimap = bimap(T)\n\tT.getOr = getOr(T)\n\tT.getWith = getWith(T)\n\tT.tagBy = tagBy(T)\n\tT.encase = encase(T)\n\tT.toBoolean = toBoolean(T)\n\tT.fromNullable = fromNullable(T)\n\tT.all = all(T)\n\tT.any = any(T)\n\n\tT.concatWith = concatWith(T)\n\n\treturn T\n}\n","import \n\t{ assertValidTag\n\t, getTags\n\t, tagName\n\t, fold\n\t, mapAll\n\t, chainAll\n\t, otherwise\n\t, Either\n\t}\nfrom './core.js'\n\nexport function trait(T) {\n\tif (T.traits['sum-type/decorated']) {\n\t\treturn T\n\t} else {\n\t\t// Do not expose this, they need to define their own _\n\t\tconst _ = otherwise(getTags(T))\n\n\t\tconst mapT = mapAll(T)\n\t\tconst chainT = chainAll(T)\n\t\tconst foldT = fold(T)\n\n\t\tgetTags(T).forEach(k => {\n\t\t\tconst options = [\n\t\t\t\t[k, k, k]\n\t\t\t\t,[k, '_' + k, '_' + k + '_']\n\t\t\t,]\n\n\t\t\toptions.forEach(([tag, fnName, wrapFnName]) => {\n\t\t\t\tT['is' + fnName] =\n\t\t\t\t\tT['is' + fnName]\n\t\t\t\t\t|| (M => {\n\t\t\t\t\t\tassertValidTag(T, M)\n\t\t\t\t\t\treturn tagName(M) === tag\n\t\t\t\t\t})\n\n\t\t\t\tT['map' + fnName] =\n\t\t\t\t\tT['map' + fnName]\n\t\t\t\t\t|| (f =>\n\t\t\t\t\t\tmapT({\n\t\t\t\t\t\t\t..._(x => x)\n\t\t\t\t\t\t\t,[tag]: f,\n\t\t\t\t\t\t}))\n\n\t\t\t\tT['get' + wrapFnName + 'Or'] =\n\t\t\t\t\tT['get' + wrapFnName + 'Or']\n\t\t\t\t\t|| (otherwise =>\n\t\t\t\t\t\tfoldT({\n\t\t\t\t\t\t\t..._(() => otherwise)\n\t\t\t\t\t\t\t,[tag]: x => x,\n\t\t\t\t\t\t}))\n\n\t\t\t\tT['get' + wrapFnName + 'With'] =\n\t\t\t\t\tT['get' + wrapFnName + 'With']\n\t\t\t\t\t|| ((otherwise, f) =>\n\t\t\t\t\t\tfoldT({\n\t\t\t\t\t\t\t..._(() => otherwise)\n\t\t\t\t\t\t\t,[tag]: x => f(x),\n\t\t\t\t\t\t}))\n\n\t\t\t\tT['chain' + fnName] =\n\t\t\t\t\tT['chain' + fnName]\n\t\t\t\t\t|| (f => x =>\n\t\t\t\t\t\tchainT({\n\t\t\t\t\t\t\t..._(() => x)\n\t\t\t\t\t\t\t,[tag]: f,\n\t\t\t\t\t\t})(x))\n\n\t\t\t\tT['assert' + fnName] =\n\t\t\t\t\tT['assert' + fnName]\n\t\t\t\t\t|| foldT({\n\t\t\t\t\t\t..._(Either.N)\n\t\t\t\t\t\t,[tag]: Either.Y,\n\t\t\t\t\t})\n\n\t\t\t\tT[tag.toLowerCase() + 's'] =\n\t\t\t\t\tT[tag + 's']\n\t\t\t\t\t|| (xs =>\n\t\t\t\t\t\txs.reduce(\n\t\t\t\t\t\t\t(p, n) => p.concat(T['is' + tag](n) ? [n.value] : []),\n\t\t\t\t\t\t\t[],\n\t\t\t\t\t\t))\n\t\t\t})\n\t\t})\n\t\tT.fold = T.fold || foldT\n\t\tT.mapAll = T.mapAll || mapT\n\t\tT.chainAll = T.chainAll || chainT\n\n\t\tT.traits['sum-type/decorated'] = true\n\t\treturn T\n\t}\n}\n","import \n\t{ valueInstance\n\t, emptyInstance\n\t, typeName\n\t, getTags\n\t, tagName\n\t, fold\n\t, mapAll\n\t, chainAll\n\t, otherwise\n\t, run\n\t, pipe\n\t, toJSON\n\t, toString\n\t, errMessage\n\t, StaticSumTypeError\n\t, boundToString\n\t, either\n\t, tags\n\t}\nfrom './core.js'\n\nimport { trait as bifunctor } from './bifunctor.js'\nimport { trait as functor } from './functor.js'\nimport { trait as monad } from './monad.js'\nimport { trait as decorate } from './decorate.js'\n\nexport const externalEither = name => \n\trun(\n\t\teither(name)\n\t\t,decorate\n\t\t,bifunctor({ left: 'N', right: 'Y' })\n\t\t,functor('Y')\n\t\t,monad('Y')\n\t)\n\nexport const externalMaybe = name =>\n\trun(\n\t\tname\n\t\t,externalEither\n\t\t,x => {\n\t\t\tconst oldN = x.N\n\t\t\tx.N = () => oldN()\n\t\t\tx.traits['sum-type/maybe'] = true\n\t\t\treturn x\n\t\t}\n\t)\n\nexport const externalTags = (type, tagNames) => \n\tdecorate(tags(type, tagNames))\n\nexport const decoratedEither = \n\texternalEither('sumType.Either')\n\nexport const {\n\tY\n\t,N\n\t,bifold: Ebifold\n\t,getOr: EgetOr\n\t,getWith: EgetWith\n\t,bimap: Ebimap\n\t,map: Emap\n\t,mapY: EmapY\n\t,mapN: EmapN\n\t,assertY: EassertY\n\t,assertN: EassertN\n\t,chainN: EchainN\n\t,chainY: EchainY\n\t,tagBy: EtagBy\n\t,chain: Echain\n\t,toBoolean: EtoBoolean\n\t,encase: Eencase\n\t,fromNullable: EfromNullable\n\t,all: Eall\n\t,any: Eany\n\t,isY: EisY\n\t,isN: EisN\n\t,ys: Eys\n\t,ns: Ens\n\t,concatWith: EconcatWith\n} = decoratedEither\n\nexport const fromNullable = EfromNullable\n\nexport { Ebifold as bifold }\nexport { EgetOr as getOr }\nexport { EgetWith as getWith }\nexport { Ebimap as bimap }\nexport { Emap as map }\nexport { EmapY as mapY }\nexport { EmapN as mapN }\nexport { EassertY as assertY }\nexport { EassertN as assertN }\nexport { EchainN as chainN }\nexport { EchainY as chainY }\nexport { EtagBy as tagBy }\nexport { Echain as chain }\nexport { EtoBoolean as toBoolean }\nexport { Eencase as encase }\nexport { Eall as all }\nexport { Eany as any }\nexport { EisY as isY }\nexport { EisN as isN }\nexport { Eys as ys }\nexport { Ens as ns }\nexport { EconcatWith as concatWith }\nexport { externalEither as either }\nexport { externalMaybe as maybe }\nexport { decoratedEither as Either }\n\nexport { externalTags as tags }\nexport { fold }\nexport { valueInstance }\nexport { emptyInstance }\nexport { toString }\nexport { toJSON }\nexport { otherwise }\nexport { tagName }\nexport { typeName }\nexport { getTags }\nexport { pipe }\nexport { run }\nexport { decorate }\nexport { mapAll }\nexport { chainAll }\nexport { errMessage }\nexport { StaticSumTypeError }\nexport { boundToString }\n","import \n\t{ assertValidVisitor\n\t, otherwise\n\t, mapAll\n\t} \nfrom './core.js'\n\nexport const trait = tag => T => {\n\tT.traits['sum-type/functor'] = tag\n\n\tT.of = T[tag]\n\tT.map =\n\t\tT.map\n\t\t|| (f => {\n\t\t\tassertValidVisitor({ context: 'map', visitor: f })\n\t\t\treturn mapAll(T)({\n\t\t\t\t...otherwise(T.tags)(x => x)\n\t\t\t\t,[tag]: f,\n\t\t\t})\n\t\t})\n\n\treturn T\n}\n","import \n\t{ assertValidVisitor\n\t, chainAll\n\t, otherwise\n\t, tagName \n\t} \nfrom './core.js'\n\nexport const trait = tag => T => {\n\tT.traits['sum-type/monad'] = tag\n\n\tT.of = T[tag]\n\tconst chainAllT = chainAll(T)\n\n\tT.chain = f => {\n\t\tassertValidVisitor({ context: 'chain', visitor: f })\n\n\t\treturn M => {\n\t\t\treturn chainAllT({\n\t\t\t\t...otherwise(T.tags)(x => T[tagName(M)](x))\n\t\t\t\t,[tag]: x => f(x),\n\t\t\t})(M)\n\t\t}\n\t}\n\treturn T\n}\n","import * as S from 'sum-type'\n\nconst Valid = {\n\tname: 'Valid'\n\t,type: 'Valid'\n\t,traits: {}\n\t,tags: ['Y', 'N']\n\t,Y: value => ({ case: 'Y', tag: 'Y', type: 'Valid', value })\n\t,N: value => ({ case: 'N', tag: 'N', type: 'Valid', value })\n\t,bifold: (N, Y) => o =>\n\t\t({\n\t\t\tY\n\t\t\t,N,\n\t\t}[o.tag](o.value))\n\t,fold: ({ Y, N }) => o => ({ Y, N }[o.tag](o.value))\n\t,map: f => o =>\n\t\t({\n\t\t\tY: x => Valid.Y(f(x))\n\t\t\t,N: () => o,\n\t\t}[o.tag](o.value)),\n}\n\nconst PatternToken = {\n\tname: 'PatternToken'\n\t,type: 'PatternToken'\n\t,traits: {}\n\t,tags: ['Path', 'Part']\n\t,Path: value => ({ case: 'Path', tag: 'Path', value, type: 'PatternToken' })\n\t,Part: value => ({ case: 'Part', tag: 'Part', value, type: 'PatternToken' })\n\n\t,groupSpecificity: tokens =>\n\t\ttokens.map(URLToken.specificity).reduce((p, n) => p + n, 0)\n\n\t,fold: ({ Path, Part }) => o =>\n\t\t({\n\t\t\tPath\n\t\t\t,Part,\n\t\t}[o.tag](o.value))\n\n\t,infer: segment =>\n\t\tsegment.startsWith(':')\n\t\t\t? PatternToken.Part(segment.slice(1))\n\t\t\t: PatternToken.Path(segment)\n\n\t,groupValidations: {\n\t\tduplicateDef: allTokensPairs => {\n\t\t\t// Pair (CaseName, PatternStr)\n\t\t\tconst patterns = allTokensPairs.map(([k, v]) => [\n\t\t\t\tk\n\t\t\t\t,PatternToken.toPattern(v)\n\t\t\t,])\n\n\t\t\t// StrMap (PatternStr, CaseName[])\n\t\t\tconst patternStrDupeSearch = patterns.reduce((p, [caseName, pattern]) => {\n\t\t\t\tp[pattern] = p[pattern] || []\n\t\t\t\tp[pattern].push(caseName)\n\n\t\t\t\treturn p\n\t\t\t}, {})\n\n\t\t\t// StrMap (CaseName, DupeMetaData)\n\t\t\t// where\n\t\t\t// DupeMetaData =\n\t\t\t// { caseNames::CaseName[], patternStr::PatternStr }\n\t\t\tconst caseDupes = Object.entries(patternStrDupeSearch).reduce(\n\t\t\t\t(p, [patternStr, caseNames]) => {\n\t\t\t\t\tif (caseNames.length > 1) {\n\t\t\t\t\t\tcaseNames.forEach(caseName => {\n\t\t\t\t\t\t\tp[caseName] = {\n\t\t\t\t\t\t\t\tcaseNames\n\t\t\t\t\t\t\t\t,patternStr,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn p\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t)\n\n\t\t\tif (Object.keys(caseDupes).length) {\n\t\t\t\treturn Valid.N(\n\t\t\t\t\t// StrMap (CaseName, PatternToken.Error )\n\t\t\t\t\tObject.entries(caseDupes).map(\n\t\t\t\t\t\t([caseName, { caseNames, patternStr }]) => [\n\t\t\t\t\t\t\tcaseName\n\t\t\t\t\t\t\t,PatternToken.Error.DuplicateDef({\n\t\t\t\t\t\t\t\tcaseNames\n\t\t\t\t\t\t\t\t,patternStr,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t,],\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn Valid.Y(allTokensPairs)\n\t\t\t}\n\t\t},\n\t}\n\n\t,singleValidations: {\n\t\tduplicatePart: tokens => {\n\t\t\tconst dupeParts = [\n\t\t\t\ttokens\n\t\t\t\t\t.flatMap(\n\t\t\t\t\t\tPatternToken.fold({\n\t\t\t\t\t\t\tPath: () => []\n\t\t\t\t\t\t\t,Part: x => [x],\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.reduce((p, n) => {\n\t\t\t\t\t\tp[n] = p[n] || 0\n\t\t\t\t\t\tp[n] = p[n] + 1\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}, {})\n\t\t\t,].flatMap(o => Object.entries(o).flatMap(([k, v]) => v > 1 ? [k] : []))\n\n\t\t\tif (dupeParts.length) {\n\t\t\t\treturn Valid.N(\n\t\t\t\t\tPatternToken.Error.DuplicatePart({\n\t\t\t\t\t\tdupeParts,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn Valid.Y(tokens)\n\t\t\t}\n\t\t},\n\t}\n\n\t,Error: {\n\t\tname: 'PatternToken.Error'\n\t\t,type: 'PatternToken.Error'\n\t\t,tags: ['DuplicateDef', 'DuplicatePart']\n\t\t,traits: {}\n\n\t\t,DuplicateDef({ caseNames, patternStr }) {\n\t\t\treturn {\n\t\t\t\ttype: 'PatternToken.Error'\n\t\t\t\t,case: 'DuplicateDef'\n\t\t\t\t,tag: 'DuplicateDef'\n\t\t\t\t,value: new TypeError(\n\t\t\t\t\t'Found duplicate pattern definitions for '\n\t\t\t\t\t\t+ 'routes: '\n\t\t\t\t\t\t+ caseNames.join(', ')\n\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t+ 'They all have equivalent pattern strings: '\n\t\t\t\t\t\t+ patternStr\n\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t+ 'Duplicated patterns lead to ambiguous matches.',\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\n\t\t,DuplicatePart({ dupeParts }) {\n\t\t\treturn {\n\t\t\t\ttype: 'PatternToken.Error'\n\t\t\t\t,case: 'DuplicatePart'\n\t\t\t\t,tag: 'DuplicatePart'\n\t\t\t\t,value: new TypeError(\n\t\t\t\t\t'Found duplicate variable bindings: '\n\t\t\t\t\t\t+ dupeParts.join(', ')\n\t\t\t\t\t\t+ '. Duplicated names lead to ambiguous bindings.',\n\t\t\t\t),\n\t\t\t}\n\t\t},\n\t}\n\n\t,validate(tokens) {\n\t\tconst out = Object.values(PatternToken.singleValidations).map(f =>\n\t\t\tf(tokens),\n\t\t)\n\n\t\tconst invalids = out.filter(x => x.tag === 'N').map(x => x.value)\n\n\t\treturn invalids.length > 0 ? Valid.N(invalids) : Valid.Y(tokens)\n\t}\n\n\t,validateGroup(allTokensGroup) {\n\t\tconst validTokensGroup = allTokensGroup.filter(([, v]) => v.tag === 'Y')\n\n\t\tconst out = Object.values(PatternToken.groupValidations).map(f =>\n\t\t\tf(validTokensGroup.map(([k, v]) => [k, v.value])),\n\t\t)\n\n\t\tconst invalids = out.filter(x => x.tag === 'N').map(x => x.value)\n\n\t\treturn invalids.length > 0 ? Valid.N(invalids) : Valid.Y(allTokensGroup)\n\t}\n\n\t,toString: x =>\n\t\t({\n\t\t\tPath: x => x\n\t\t\t,Part: x => ':' + x,\n\t\t}[x.tag](x.value))\n\n\t,toPattern: xs => xs.map(PatternToken.toString).join('/'),\n}\n\nconst URLToken = {\n\tPath: value => ({ case: 'Path', tag: 'Path', value, type: 'URLToken' })\n\t,Part: ({ key, value }) => ({\n\t\tcase: 'Part'\n\t\t,tag: 'Part'\n\t\t,value: { key, value }\n\t\t,type: 'URLToken',\n\t})\n\t,Variadic: ({ key, value }) => ({\n\t\tcase: 'Variadic'\n\t\t,tag: 'Variadic'\n\t\t,value: { key, value }\n\t\t,type: 'URLToken',\n\t})\n\t,Unmatched: ({ expected, actual }) => ({\n\t\tcase: 'Unmatched'\n\t\t,tag: 'Unmatched'\n\t\t,value: { expected, actual }\n\t\t,type: 'URLToken',\n\t})\n\n\t,specificity: token =>\n\t\tURLToken.fold({\n\t\t\tPath: () => 0b100\n\t\t\t,Part: () => 0b010\n\t\t\t,Variadic: () => 0b001\n\t\t\t,Unmatched:\n\t\t\t\t// We only sort matches\n\t\t\t\t/* istanbul ignore next */\n\t\t\t\t() => 0b000,\n\t\t})(token)\n\n\t,tags: ['Path', 'Part', 'Variadic', 'Unmatched']\n\t,traits: {}\n\t,fold: ({ Path, Part, Variadic, Unmatched }) => x =>\n\t\t({\n\t\t\tPath\n\t\t\t,Part\n\t\t\t,Variadic\n\t\t\t,Unmatched,\n\t\t}[x.tag](x.value))\n\n\t,toString: x =>\n\t\tURLToken.fold({\n\t\t\tPath: x => x\n\t\t\t,Part: ({ value: x, args = '' }) => x + args\n\t\t\t,Variadic: ({ value: x }) => x\n\t\t\t,Unmatched: ({ actual: x }) => x,\n\t\t})(x)\n\n\t,toURL: xs =>\n\t\t('/' + xs.map(URLToken.toString).join('/'))\n\t\t\t.split('/')\n\t\t\t.filter(Boolean)\n\t\t\t.join('/')\n\n\t,toArgs: xs =>\n\t\txs.reduce(\n\t\t\t(p, n) =>\n\t\t\t\tURLToken.fold({\n\t\t\t\t\tPart: ({ key, value }) => Object.assign(p, { [key]: value })\n\t\t\t\t\t,Path: () => p\n\t\t\t\t\t,Unmatched: () => p\n\t\t\t\t\t,Variadic: ({ key, value }) => Object.assign(p, { [key]: value }),\n\t\t\t\t})(n),\n\t\t\t{},\n\t\t)\n\n\t,fromPattern: o => segment =>\n\t\tPatternToken.fold({\n\t\t\tPath: expected =>\n\t\t\t\tsegment === expected\n\t\t\t\t\t? URLToken.Path(segment)\n\t\t\t\t\t: URLToken.Unmatched({ expected, actual: segment })\n\t\t\t,Part: key => URLToken.Part({ key, value: segment }),\n\t\t})(o)\n\n\t,validations: {\n\t\texcessPatterns: patternTokens => urlTokens => {\n\t\t\tconst numSegments = urlTokens.length\n\n\t\t\tconst numPatterns = patternTokens.length\n\n\t\t\tconst excessPatterns =\n\t\t\t\tnumPatterns > numSegments ? patternTokens.slice(numSegments) : []\n\n\t\t\tif (excessPatterns.length) {\n\t\t\t\treturn Valid.N(\n\t\t\t\t\tURLToken.Error.ExcessPattern({\n\t\t\t\t\t\turlTokens\n\t\t\t\t\t\t,patternTokens\n\t\t\t\t\t\t,excessPatterns,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn Valid.Y(urlTokens)\n\t\t\t}\n\t\t}\n\n\t\t,unmatchedPaths: patternTokens => urlTokens => {\n\t\t\tconst unmatched = urlTokens.filter(x => x.tag === 'Unmatched')\n\n\t\t\tif (unmatched.length) {\n\t\t\t\treturn Valid.N(\n\t\t\t\t\tURLToken.Error.UnmatchedPaths({ patternTokens, urlTokens }),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn Valid.Y(urlTokens)\n\t\t\t}\n\t\t},\n\t}\n\n\t,Error: {\n\t\tUnmatchedPaths({ patternTokens, urlTokens }) {\n\t\t\treturn {\n\t\t\t\ttype: 'URLToken.Error'\n\t\t\t\t,case: 'UnmatchedPaths'\n\t\t\t\t,tag: 'UnmatchedPaths'\n\t\t\t\t,value: new TypeError(\n\t\t\t\t\t'Pattern '\n\t\t\t\t\t\t+ PatternToken.toPattern(patternTokens)\n\t\t\t\t\t\t+ ' could not match URL '\n\t\t\t\t\t\t+ URLToken.toURL(urlTokens)\n\t\t\t\t\t\t+ ' due to unmatched path segments: '\n\t\t\t\t\t\t+ urlTokens\n\t\t\t\t\t\t\t.map(x => x.tag === 'Unmatched' ? URLToken.toString(x) : '...')\n\t\t\t\t\t\t\t.join('/'),\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\n\t\t,ExcessPattern({ urlTokens, excessPatterns, patternTokens }) {\n\t\t\treturn {\n\t\t\t\ttype: 'URLToken.Error'\n\t\t\t\t,case: 'ExcessPattern'\n\t\t\t\t,tag: 'ExcessPattern'\n\t\t\t\t,value: new TypeError(\n\t\t\t\t\t'The URL '\n\t\t\t\t\t\t+ URLToken.toURL(urlTokens)\n\t\t\t\t\t\t+ ' had excess patterns ('\n\t\t\t\t\t\t+ PatternToken.toPattern(excessPatterns)\n\t\t\t\t\t\t+ ')'\n\t\t\t\t\t\t+ ' when parsed as part of pattern:'\n\t\t\t\t\t\t+ ' '\n\t\t\t\t\t\t+ PatternToken.toPattern(patternTokens),\n\t\t\t\t),\n\t\t\t}\n\t\t},\n\t}\n\n\t,validate(patternTokens, urlTokens) {\n\t\tconst out = Object.values(URLToken.validations).map(f =>\n\t\t\tf(patternTokens)(urlTokens),\n\t\t)\n\n\t\tconst invalids = out.filter(x => x.tag === 'N').map(x => x.value)\n\n\t\treturn invalids.length > 0 ? Valid.N(invalids) : Valid.Y(urlTokens)\n\t},\n}\n\nfunction tokenizePattern(pattern) {\n\tconst patternTokens = pattern.split('/').map(PatternToken.infer)\n\n\treturn [patternTokens].map(PatternToken.validate).shift()\n}\n\nfunction tokenizeURL(patternTokens, theirURL) {\n\tconst url = theirURL\n\n\tconst urlTokens = url\n\t\t.split('/')\n\t\t.slice(0, patternTokens.length)\n\t\t.map((segment, i) => URLToken.fromPattern(patternTokens[i])(segment))\n\n\tconst segments = url.split('/')\n\n\tconst numSegments = segments.length\n\n\tconst numPatterns = patternTokens.length\n\n\tconst excessSegments =\n\t\tnumSegments > numPatterns ? segments.slice(numPatterns) : []\n\n\tconst args = excessSegments\n\n\tconst completeTokens = urlTokens\n\n\treturn [URLToken.validate(patternTokens, completeTokens)]\n\t\t.map(\n\t\t\tValid.map(() =>\n\t\t\t\turlTokens.concat(\n\t\t\t\t\tURLToken.Variadic({\n\t\t\t\t\t\tkey: 'args'\n\t\t\t\t\t\t,value: args.join('/'),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t)\n\t\t.shift()\n}\n\nfunction routeValidator({ tokenized }) {\n\tconst groupInvalids = [\n\t\tPatternToken.validateGroup(Object.entries(tokenized))\n\t,].flatMap(\n\t\tValid.bifold(\n\t\t\tx => x,\n\t\t\t() => [],\n\t\t),\n\t)\n\n\t// Pair (CaseName, PatternToken.Error[])\n\tconst invalids = Object.entries(tokenized)\n\t\t.filter(([, tokens]) => tokens.tag === 'N')\n\t\t.map(([key, x]) => [key, x.value])\n\t\t.concat(groupInvalids.reduce((p, n) => p.concat(n), []))\n\n\tif (invalids.length) {\n\t\treturn Valid.N(\n\t\t\tObject.entries(tokenized)\n\t\t\t\t.map(([k]) => [k, []])\n\t\t\t\t.concat(invalids)\n\t\t\t\t.reduce((p, [k, v]) => {\n\t\t\t\t\tp[k] = p[k] || []\n\t\t\t\t\tp[k] = p[k].concat(v)\n\t\t\t\t\treturn p\n\t\t\t\t}, {}),\n\t\t)\n\t} else {\n\t\treturn Valid.Y(tokenized)\n\t}\n}\n\nconst formatArgs = args =>\n\targs\n\t\t? args.startsWith('/')\n\t\t\t? formatArgs(args.slice(1))\n\t\t\t: args.endsWith('/')\n\t\t\t? formatArgs(args.slice(0, -1))\n\t\t\t: args\n\t\t: ''\n\nfunction SafeRouteType({ typeName, tokenized }) {\n\tlet $\n\t$ = Object.entries(tokenized).map(([caseName, tokens]) => {\n\t\tconst keys = tokens.value\n\t\t\t.reduce(\n\t\t\t\t(p, n) =>\n\t\t\t\t\tPatternToken.fold({\n\t\t\t\t\t\tPath: () => p\n\t\t\t\t\t\t,Part: key => p.concat(key),\n\t\t\t\t\t})(n),\n\t\t\t\t[],\n\t\t\t)\n\t\t\t.sort()\n\n\t\tfunction of(theirO) {\n\t\t\tconst { args = '', ...o } = theirO || {}\n\t\t\tconst foundKeys = Object.keys(o).sort()\n\n\t\t\tconst b = new Set(foundKeys)\n\n\t\t\tconst [matchedO, missing] = keys.reduce(\n\t\t\t\t([matched,missing], k) =>\n\t\t\t\t\tb.has(k)\n\t\t\t\t\t? [{ ...matched, [k]: o[k]}, missing]\n\t\t\t\t\t: [matched, missing.concat(k)]\n\t\t\t\t, [{}, []]\n\t\t\t)\n\n\t\t\tif (missing.length) {\n\t\t\t\treturn Valid.N(\n\t\t\t\t\tnew TypeError(\n\t\t\t\t\t\t'Properties missing for '\n\t\t\t\t\t\t\t+ typeName\n\t\t\t\t\t\t\t+ '.'\n\t\t\t\t\t\t\t+ caseName\n\t\t\t\t\t\t\t+ '. Expected: {'\n\t\t\t\t\t\t\t+ keys.join(',')\n\t\t\t\t\t\t\t+ '}'\n\t\t\t\t\t\t\t+ ' but found: {'\n\t\t\t\t\t\t\t+ foundKeys.join()\n\t\t\t\t\t\t\t+ '}',\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn Valid.Y({\n\t\t\t\t\ttype: typeName\n\t\t\t\t\t,case: caseName\n\t\t\t\t\t,tag: caseName\n\t\t\t\t\t,value: { ...matchedO, args: formatArgs(args) },\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t[caseName]: of,\n\t\t}\n\t})\n\n\t$ = $.reduce((p, n) => Object.assign(p, n), {})\n\n\treturn $\n}\n\nfunction RouteType({ typeName, safeRouteType }) {\n\tlet $\n\t$ = Object.entries(safeRouteType).map(([key, of]) => ({\n\t\t[key]: o =>\n\t\t\tValid.fold({\n\t\t\t\tY: x => x\n\t\t\t\t,N(err) {\n\t\t\t\t\tthrow err\n\t\t\t\t},\n\t\t\t})(of(o)),\n\t}))\n\n\t$ = $.reduce((p, n) => Object.assign(p, n))\n\t$ = { ...$, type: typeName, traits: {}, tags: Object.keys(safeRouteType) }\n\t$ = S.decorate($)\n\n\treturn $\n}\n\nconst PatternMatches = ({ tokenized, url }) => {\n\tconst pairs = Object.entries(tokenized).map(([key, patternTokens]) => [\n\t\tkey\n\t\t,tokenizeURL(patternTokens.value, url)\n\t,])\n\n\tconst invalid = pairs\n\t\t.filter(([, valid]) => valid.tag === 'N')\n\t\t.map(([key, { value }]) => ({ [key]: value }))\n\t\t.reduce((p, n) => Object.assign(p, n), {})\n\n\tconst valid = pairs\n\t\t.filter(([, valid]) => valid.tag === 'Y')\n\t\t.sort(\n\t\t\t([, { value: a }], [, { value: b }]) =>\n\t\t\t\tPatternToken.groupSpecificity(b) - PatternToken.groupSpecificity(a),\n\t\t)\n\n\tif (valid.length) {\n\t\treturn Valid.Y(valid)\n\t} else {\n\t\treturn Valid.N(invalid)\n\t}\n}\n\nconst Matches = ({ routeType }) => patternMatches => {\n\treturn Valid.bifold(Valid.N, xs =>\n\t\t// xs being non empty is technically a precondition\n\t\t// to being marked as valid\n\t\t// but we check it in any case as the types make it possible\n\t\txs.length == 0\n\t\t\t? /* istanbul ignore next */\n\t\t\t Valid.N({})\n\t\t\t: Valid.Y(\n\t\t\t\t\txs.map(([caseName, { value }]) =>\n\t\t\t\t\t\trouteType[caseName](URLToken.toArgs(value)),\n\t\t\t\t\t),\n\t\t\t ),\n\t)(patternMatches)\n}\n\nfunction type$safe(typeName, cases) {\n\t// StrMap (CaseName, Valid( N::PatternToken.Error[] | Y::PatternToken[] ) )\n\tconst tokenized = Object.entries(cases)\n\t\t.map(([caseName, pattern]) => {\n\t\t\treturn { [caseName]: tokenizePattern(pattern.replace(/\\/$/, '')) }\n\t\t})\n\t\t.reduce((p, n) => Object.assign(p, n), {})\n\n\tconst validated = routeValidator({ tokenized })\n\n\tif (validated.tag === 'N') {\n\t\treturn validated\n\t} else {\n\t\tconst safeRouteType = SafeRouteType({ typeName, tokenized })\n\n\t\tconst routeType = RouteType({ typeName, safeRouteType })\n\n\t\tconst matches = url => {\n\t\t\tconst patternMatches = PatternMatches({ tokenized, url })\n\t\t\treturn Matches({ routeType })(patternMatches)\n\t\t}\n\n\t\tconst matchOr = (otherwise, url) => {\n\t\t\tconst match = [url]\n\t\t\t\t.map(matches)\n\t\t\t\t.flatMap(Valid.bifold(otherwise, x => x))\n\t\t\t\t.slice(0, 1)\n\n\t\t\treturn match.length > 0\n\t\t\t\t? match[0]\n\t\t\t\t: /* istanbul ignore next */\n\t\t\t\t otherwise({})\n\t\t}\n\n\t\tconst toURL = routeCase => {\n\t\t\tconst raw =\n\t\t\t\t'/'\n\t\t\t\t+ tokenized[routeCase.tag].value\n\t\t\t\t\t.map(\n\t\t\t\t\t\tPatternToken.fold({\n\t\t\t\t\t\t\tPart: key => routeCase.value[key]\n\t\t\t\t\t\t\t,Path: key => key,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.concat(formatArgs(routeCase.value.args))\n\t\t\t\t\t.join('/')\n\n\t\t\treturn raw.replace(/\\/$/, '').replace('//', '/')\n\t\t}\n\n\t\treturn Valid.Y(\n\t\t\tObject.assign(\n\t\t\t\t{ safe: safeRouteType, matches, matchOr, toURL },\n\t\t\t\trouteType,\n\t\t\t),\n\t\t)\n\t}\n}\n\nconst type = (typename, cases) =>\n\tValid.bifold(\n\t\terrs => {\n\t\t\tthrow Object.values(errs)\n\t\t\t\t.flatMap(xs => xs)\n\t\t\t\t.map(x => x.value)\n\t\t\t\t.shift()\n\t\t},\n\t\tx => x,\n\t)(type$safe(typename, cases))\n\nexport {\n\ttokenizePattern,\n\ttokenizeURL,\n\tPatternToken,\n\tURLToken,\n\tValid,\n\ttype$safe,\n\ttype,\n}\n","/* globals window, URLSearchParams */\n\nimport * as superouter from './superouter.js'\nimport { Stream as stream } from 'bacta'\n\nconst Search = ($, { redraw=()=>{} },defaults={}) => {\n\n\tconst sync = (defaults) => {\n\t\tconst usp = new URLSearchParams(window.location.search)\n\n\t\tconst existing =\n\t\t\tObject.fromEntries(usp)\n\n\t\tObject.entries(defaults).forEach( ([k,v]) => {\n\t\t\tif( !(k in existing) ) {\n\t\t\t\texisting[k] = v\n\t\t\t}\n\t\t})\n\n\t\t$(existing)\n\t}\n\n\tconst service =\n\t\t$.$stream().map( x => {\n\t\t\tlet $ = new URLSearchParams()\n\n\t\t\tObject.entries(x).forEach(\n\t\t\t\t([key, value ]) => {\n\t\t\t\t\t$.set(key, value)\n\t\t\t\t}\n\t\t\t)\n\t\t\t$= $.toString()\n\t\t\t$= $ ? '?'+$ : ''\n\t\t\t$= `${window.location.pathname}${$}`\n\t\t\twindow.history.replaceState('', {}, $)\n\n\t\t\tredraw()\n\t\t\treturn null\n\t\t})\n\n\t// can also just end the query\n\tconst end = () => {\n\t\tservice.end(true)\n\t}\n\n\tsync(defaults)\n\n\treturn { sync, $, end }\n}\n\n// The internal recursive subRoute instance generator\n// called internally via `subroute.subRoute()`\n// the `$parent` and `Parent` are threaded through from the initial\n// call.\nfunction SubRoute(\n\t$root,\n\tRoot,\n\tParent = null,\n\ttypeName,\n\tdefaultRoute,\n\tcases,\n\t{ pushState = () => {}\n\t, replaceState = () => {}\n\t, redraw\n\t, $:$$\n\t, search:searchOptions={}\n\t, searchInstance=Search($$.search, {redraw}, searchOptions)\n\t, ...defaultOptions\n\t}\n) {\n\tlet ends = []\n\tlet $ = null\n\tif( $$ ) {\n\t\t$ = $$.route\n\t\tends.push( () => $.$end() )\n\t}\n\tif( Parent != null ) {\n\t\tsearchInstance.sync(searchOptions)\n\t}\n\tlet affixesCache\n\tfunction _affixes() {\n\t\tif (Parent == null) {\n\t\t\treturn {\n\t\t\t\tsuffix: $root.route.value.args()\n\t\t\t\t,prefix: '',\n\t\t\t}\n\t\t} else {\n\t\t\tconst {\n\t\t\t\tvalue: { args },\n\t\t\t} = Parent.get()\n\t\t\tconst suffix = args\n\n\t\t\tconst rootHREF = Root.toURL($root.route())\n\n\t\t\tconst i = rootHREF.lastIndexOf(suffix)\n\t\t\tconst prefix = rootHREF.substring(0, i)\n\n\t\t\treturn { suffix, prefix }\n\t\t}\n\t}\n\n\tfunction affixes() {\n\t\tif (affixesCache) {\n\t\t\treturn affixesCache\n\t\t} else {\n\t\t\treturn affixesCache = _affixes()\n\t\t}\n\t}\n\n\taffixes()\n\n\tconst Type = superouter.type(typeName, cases)\n\n\tfunction fromURL(theirURL) {\n\t\tconst { prefix } = affixes()\n\t\tconst url = theirURL.replace(prefix, '')\n\n\t\tconst x = ('/' + url).replace(/\\/\\//g, '/')\n\n\t\tconst match = Type.matchOr(() => defaultRoute(Type), x)\n\n\t\treturn match\n\t}\n\n\tfunction asRootRoute(x) {\n\t\tconst { prefix } = affixes()\n\t\treturn Root.matchOr(\n\t\t\t() => null,\n\t\t\t(prefix + Type.toURL(x)).replace(/\\/\\//g, '/'),\n\t\t)\n\t}\n\n\tfunction subroute(typeName, defaultRoute, cases, options = {}) {\n\t\treturn SubRoute($root, Root, out, typeName, defaultRoute, cases, {\n\t\t\tpushState\n\t\t\t,replaceState\n\t\t\t,redraw\n\t\t\t, searchInstance\n\t\t\t,...defaultOptions\n\t\t\t,...options,\n\t\t})\n\t}\n\n\tfunction set(request, theirOptions = {}) {\n\t\tconst options = { ...defaultOptions, ...theirOptions }\n\n\t\tconst route = typeof request == 'function' ? request(get()) : request\n\t\tconst rootRoute = asRootRoute(route)\n\t\tconst url = toURL(route)\n\n\t\tif (options.replace) {\n\t\t\treplaceState(url+window.location.search)\n\t\t} else {\n\t\t\tpushState(url+window.location.search)\n\t\t}\n\n\t\t$root.route(rootRoute)\n\n\t\treturn route\n\t}\n\n\t/**\n\t * When you want to go back before doing a set\n\t *\n\t * Async because history.back is async, we only perform the set\n\t * after the browser has registered a popstate.\n\t *\n\t * Useful for rewriting the past when leaving a modal for example\n\t */\n\tasync function back(request=null, theirOptions = {}){\n\t\t// Route state before going back\n\t\tconst got = request && get()\n\n\t\t// In Chrome calling history.back withing the same\n\t\t// stack as an anchor onclick will be a no-op\n\t\t// so this just puts it on a different stack\n\t\t// which we wait below\n\t\twindow.setTimeout( () => window.history.back(), 0)\n\n\t\tawait new Promise( Y => {\n\t\t\twindow.addEventListener('popstate', Y, { once: true })\n\t\t})\n\n\t\tif( request ) {\n\n\t\t\tconst route = typeof request == 'function'\n\t\t\t\t? await request(got, get())\n\t\t\t\t: request\n\n\t\t\tconst out = set(route, { ...theirOptions, replace: true })\n\t\t\treturn out\n\t\t}\n\n\t\treturn get()\n\t}\n\n\tfunction replace(request, theirOptions) {\n\t\treturn set(request, { replace: true, ...theirOptions })\n\t}\n\n\tfunction setValue(request, theirOptions) {\n\t\tconst got = get()\n\t\tconst gotValue = got.value || {}\n\t\tconst routeValue =\n\t\t\ttypeof request == 'function' ? request(gotValue) : request\n\t\tconst route = { ...got, value: routeValue }\n\n\t\treturn set(route, theirOptions)\n\t}\n\n\tfunction replaceValue(request, theirOptions) {\n\t\treturn setValue(request, { replace: true, ...theirOptions })\n\t}\n\n\tfunction get() {\n\t\treturn fromURL(Root.toURL($root.route()))\n\t}\n\n\tfunction getValue() {\n\t\treturn get().value || {}\n\t}\n\n\t// m.route.get()\n\tfunction toURL(...args) {\n\t\tif (args.length == 0) {\n\t\t\treturn Root.toURL($root.route())\n\t\t} else {\n\t\t\treturn Root.toURL(asRootRoute(args[0]))\n\t\t}\n\t}\n\n\tfunction link(route, { back: _back, ...theirOptions}={}) {\n\t\tconst href = toURL(route)\n\t\tconst options = { ...defaultOptions, ...theirOptions}\n\t\treturn {\n\t\t\thref\n\t\t\t,async onclick(e = EventMock) {\n\t\t\t\te.preventDefault()\n\n\t\t\t\t// prevent double clicking = duplicate history nodes\n\t\t\t\tif( href == toURL(get()) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tif( _back && options.replace) {\n\t\t\t\t\t\t// If we are replacing the current route\n\t\t\t\t\t\t// we have to go back first\n\t\t\t\t\t\t// update the past then apply set(route) afterwards\n\t\t\t\t\t\tawait back(_back, options)\n\t\t\t\t\t\tset(route, { ...options, replace: false})\n\t\t\t\t\t} else if (_back && !options.replace) {\n\t\t\t\t\t\t// if we are pushing onto the stack\n\t\t\t\t\t\t// we just need to replace the current item\n\t\t\t\t\t\t// before applying the set\n\t\t\t\t\t\t// so when they hit back they return to _back\n\t\t\t\t\t\t// not the actual past route\n\t\t\t\t\t\tset( _back, {...options, replace: true})\n\t\t\t\t\t\tset(route, { ...options, replace: false })\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(route, options)\n\t\t\t\t\t}\n\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tconst normalize = x => x.split('/').filter(Boolean).join('/')\n\tlet $stream = stream()\n\tif( $ ) {\n\n\t\tlet s =\n\t\t\t$stream.map( x => {\n\t\t\t\t$(x)\n\t\t\t\treturn null\n\t\t\t})\n\n\t\tends.push( () => s.end(true) )\n\t}\n\n\t{\n\t\tlet s =\n\t\t\t$root.route.$stream().map(() => {\n\t\t\t\tconst { prefix: a } = affixesCache\n\t\t\t\tconst { prefix: b } = _affixes()\n\t\t\t\tconst f = normalize\n\n\t\t\t\tif (f(a) == f(b)) {\n\t\t\t\t\t$stream(get())\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t})\n\n\t\tends.push( () => s.end(true) )\n\t}\n\n\n\n\tfunction end(){\n\t\t// Note we do not include searchInstance.end\n\t\t// here as it is shared by all instances by default\n\t\tfor(let end of ends){\n\t\t\tend()\n\t\t}\n\t}\n\n\tconst out = {\n\t\taffixes\n\t\t,fromURL\n\t\t,asRootRoute\n\t\t,subroute\n\t\t,toURL\n\t\t,get\n\t\t,getValue\n\t\t,set\n\t\t,setValue\n\t\t,back\n\t\t,link\n\t\t,$stream: () => $stream\n\t\t,replace\n\t\t,replaceValue\n\t\t,search: searchInstance\n\t\t,end\n\t\t,$\n\n\t\t// can be null\n\t\t,z: defaultOptions.z\n\t}\n\n\tObject.assign(out, Type, {\n\t\ttoURL\n\t\t,fromURL,\n\t})\n\n\treturn out\n}\n\nconst WindowMock = {\n\thistory: {\n\t\tpushState(_, __, href) {\n\t\t\tWindowMock.location.pathname = href\n\t\t}\n\t\t,replaceState(_, __, href) {\n\t\t\tWindowMock.location.pathname = href\n\t\t},\n\t}\n\t,addEventListener() {}\n\t,location: { pathname: '' },\n}\n\nconst EventMock = {\n\tpreventDefault() {},\n}\n\n// Exposes the subroute interface but for the parent route\n// so that even the parent route has the same interface to ensure\n// consistency\nfunction RootRoute({\n\t$,\n\tname: typeName,\n\tdefaultRoute,\n\troutes: cases,\n\twindow: theirWindow = typeof window != 'undefined' ? window : WindowMock,\n\tpathname: getPathName = () => theirWindow.location.pathname,\n\tredraw = () => {},\n\tonpopstate = f =>\n\t\ttheirWindow.addEventListener('popstate', e => {\n\t\t\tf(e)\n\t\t\tredraw()\n\t\t}),\n\tpushState = href => theirWindow.history.pushState('', {}, href),\n\treplaceState = href => theirWindow.history.replaceState('', {}, href),\n\t...defaultOptions\n}) {\n\tconst Type = superouter.type(typeName, cases)\n\n\tconst subRoute = SubRoute($, Type, null, typeName, defaultRoute, cases, {\n\t\tpushState\n\t\t,replaceState\n\t\t,$\n\t\t,redraw\n\t\t,...defaultOptions,\n\t})\n\n\tfunction refresh() {\n\t\tlet defaulted\n\t\t$.route(Type.matchOr(() => defaulted = defaultRoute(Type), getPathName()))\n\t\tif (defaulted) {\n\t\t\tsubRoute.set(subRoute.get())\n\t\t}\n\t}\n\n\t// when popstate happens refresh state tree route\n\tonpopstate(refresh)\n\n\t// write to state tree initial route state\n\trefresh()\n\n\treturn subRoute\n}\n\nexport default { Root: RootRoute, WindowMock }\n","/* globals document */\nimport localStorage from './localStorage.js'\nimport h from './hyperscript.js'\nimport { v4 as id } from 'uuid'\nimport * as Z from './z/index.js'\nimport router from './router.js'\n\nexport default function start({\n\tinitial = {},\n\tnamespace = null,\n\troutes: routeAndComps = {\n\t\tHome: ['/', () => null],\n\t},\n\tdefaultRender = null,\n\tdefaultRoute = x => x.Home(),\n\tservices = ({ ...args }) => () => ({ ...args }),\n\tcontainer = document.body,\n} = {}) {\n\tif (namespace) {\n\t\tlocalStorage.setNamespace('bute.v1')\n\t}\n\n\tconst defaultInitial = {\n\t\tsession_id: localStorage.getItemOrSet('session_id', id())\n\t\t,device_id: localStorage.getItemOrSet('device_id', id()),\n\t}\n\tconst z = Z.Z({ initial: { ...defaultInitial, ...initial } })\n\n\tconst { $ } = z\n\n\tconst routes = Object.fromEntries(\n\t\tObject.entries(routeAndComps).map(([k, [a, _]]) => [k, a]),\n\t)\n\n\tconst comps = Object.fromEntries(\n\t\tObject.entries(routeAndComps).map(([k, [_, b]]) => [k, b]),\n\t)\n\n\tconst Route = router.Root({\n\t\t$\n\t\t,name: 'Root'\n\t\t,defaultRoute\n\t\t,routes\n\t\t,redraw: h.redraw\n\t\t,z\n\t})\n\n\t$.route.$stream().map(() => h.redraw())\n\n\tconst RouteComponent = Route.fold(comps)\n\n\tlet currentRender = defaultRender\n\tlet prevRenderResolved = null\n\tlet prevRender = Promise.resolve(prevRenderResolved)\n\tlet currentAttrs = { $, Route }\n\tlet prevRoute = $.route().tag\n\tlet loadingRouteComp = null\n\tlet currentWrapperRouteComponent;\n\n\n\t// because the onRouteChange fn is returning a component\n\t// every route change will animate in, even if there is shared layout\n\t// code\n\t//\n\t// We want them to be able to supply lifecycle hooks\n\t// but we don't want a new component wrapper\n\t// so we could take the view attribute, invoke that in the view\n\t// then make a no-op component and merge the lifecycle hooks onto it\n\t// the `this` context would be retained for the hooks but not the view\n\t// but we could use `apply(context)` to handle that\n\t// even though we don't actually care about `this` at all\n\tlet staticWrapper = {\n\t\tview(v){\n\t\t\treturn staticWrapper._view ? staticWrapper._view(v) : null\n\t\t}\n\t}\n\n\tconst onRouteChange = services(currentAttrs) || (() => null)\n\tasync function loadRouteComp() {\n\t\tif (!loadingRouteComp || loadingRouteComp.tag != Route.get().tag) {\n\n\t\t\tloadingRouteComp = Route.get()\n\t\t\tlet result = RouteComponent(Route.get())\n\t\t\tlet render\n\t\t\tif ( result == null ) {\n\t\t\t\trender = () => result\n\t\t\t} else if ('then' in result) {\n\t\t\t\trender = await result\n\t\t\t} else {\n\t\t\t\trender = result\n\t\t\t}\n\t\t\tif ('default' in render) {\n\t\t\t\trender = render.default\n\t\t\t} else if ('Main' in render) {\n\t\t\t\tlet Main = render.Main\n\t\t\t\trender = x => h(Main, x)\n\t\t\t} else if ('main' in render) {\n\t\t\t\tlet main = render.main\n\t\t\t\tfunction Main({ attrs }) {\n\t\t\t\t\tconst view = main(attrs)\n\t\t\t\t\treturn { view }\n\t\t\t\t}\n\t\t\t\trender = x => h(Main, x)\n\t\t\t}\n\n\t\t\tcurrentWrapperRouteComponent =\n\t\t\t\tawait onRouteChange(currentAttrs)\n\n\t\t\tcurrentWrapperRouteComponent = currentWrapperRouteComponent || {}\n\t\t\tcurrentWrapperRouteComponent.view =\n\t\t\tcurrentWrapperRouteComponent.view || ((v) => render(v.attrs.attrs))\n\n\n\t\t\tlet view = currentWrapperRouteComponent.view\n\t\t\tlet lifeCycleComponent = {\n\t\t\t\t...currentWrapperRouteComponent\n\t\t\t\t, view: () => null\n\t\t\t}\n\t\t\tdelete lifeCycleComponent.key\n\t\t\tstaticWrapper._view = (v) => h('.static-wrapper-view'\n\t\t\t\t,h('.real-view',view(v))\n\t\t\t\t,h(lifeCycleComponent)\n\t\t\t)\n\n\t\t\t// use promise as a simple atomic queue\n\t\t\t// so first request wins, not first response\n\t\t\tprevRender = prevRender.then( () => {\n\t\t\t\tconst swap = currentRender\n\t\t\t\tcurrentRender = render\n\t\t\t\tprevRenderResolved = swap\n\t\t\t\tloadingRouteComp = null\n\t\t\t\treturn swap\n\t\t\t} )\n\n\n\t\t\th.redraw()\n\t\t}\n\t}\n\tloadRouteComp()\n\n\th.mount(container, function () {\n\t\tfunction view() {\n\t\t\tlet currentRoute = $.route.tag()\n\t\t\tif (currentRoute != prevRoute) {\n\t\t\t\tloadRouteComp()\n\t\t\t}\n\t\t\tprevRoute = currentRoute\n\n\t\t\tif ( currentWrapperRouteComponent ) {\n\t\t\t\treturn h(staticWrapper, {\n\t\t\t\t\tattrs: currentAttrs\n\t\t\t\t\t,render: currentRender\n\t\t\t\t\t,prevRender:prevRenderResolved\n\t\t\t\t\t,currentRoute\n\t\t\t\t\t,prevRoute\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn null\n\t\t\t}\n\t\t}\n\t\treturn { view }\n\t})\n\n\treturn currentAttrs\n}","import { v4 as id } from 'uuid'\nimport css from './css/index.js'\nimport h, { Stream as stream } from 'bacta'\nimport localStorage from './localStorage.js'\nimport start from './start.js'\nimport sql from './sql.js'\nimport * as options from 'sum-type'\nexport const request = h.request\n\nexport { options }\nexport { start, h, sql, stream, css, id, localStorage }\n\nexport default h\n","import localStorage from './localStorage.js'\nimport m from 'bacta'\nexport default function sql(strings, ...values) {\n\tlet session_id = localStorage.getItem('how.session_id')\n\tif (session_id == 'null') {\n\t\tsession_id = null\n\t}\n\tlet device_id = localStorage.getItem('how.device_id')\n\tif (device_id == 'null') {\n\t\tdevice_id = null\n\t}\n\treturn m.request({\n\t\tmethod: 'POST'\n\t\t,url: '/api/sql'\n\t\t,body: { strings, values, session_id },\n\t}).then(({ type, data }) => {\n\t\tif (type == 'data') {\n\t\t\treturn data\n\t\t} else if (type == 'error') {\n\t\t\tconst err = new Error(data.message)\n\t\t\terr.stack = data.stack\n\t\t\tthrow err\n\t\t} else {\n\t\t\tthrow new Error('Internal Server Error')\n\t\t}\n\t})\n}","var pseudos = [\n ':active',\n ':any',\n ':checked',\n ':default',\n ':disabled',\n ':empty',\n ':enabled',\n ':first',\n ':first-child',\n ':first-of-type',\n ':fullscreen',\n ':focus',\n ':hover',\n ':indeterminate',\n ':in-range',\n ':invalid',\n ':last-child',\n ':last-of-type',\n ':left',\n ':link',\n ':only-child',\n ':only-of-type',\n ':optional',\n ':out-of-range',\n ':read-only',\n ':read-write',\n ':required',\n ':right',\n ':root',\n ':scope',\n ':target',\n ':valid',\n ':visited',\n\n // With value\n ':dir',\n ':lang',\n ':not',\n ':nth-child',\n ':nth-last-child',\n ':nth-last-of-type',\n ':nth-of-type',\n\n // Elements\n '::after',\n '::before',\n '::first-letter',\n '::first-line',\n '::selection',\n '::backdrop',\n '::placeholder',\n '::marker',\n '::spelling-error',\n '::grammar-error'\n];\n\nvar popular = {\n ai : 'alignItems',\n b : 'bottom',\n bc : 'backgroundColor',\n br : 'borderRadius',\n bs : 'boxShadow',\n bi : 'backgroundImage',\n c : 'color',\n d : 'display',\n f : 'float',\n fd : 'flexDirection',\n ff : 'fontFamily',\n fs : 'fontSize',\n h : 'height',\n jc : 'justifyContent',\n l : 'left',\n lh : 'lineHeight',\n ls : 'letterSpacing',\n m : 'margin',\n mb : 'marginBottom',\n ml : 'marginLeft',\n mr : 'marginRight',\n mt : 'marginTop',\n o : 'opacity',\n p : 'padding',\n pb : 'paddingBottom',\n pl : 'paddingLeft',\n pr : 'paddingRight',\n pt : 'paddingTop',\n r : 'right',\n t : 'top',\n ta : 'textAlign',\n td : 'textDecoration',\n tt : 'textTransform',\n w : 'width'\n};\n\nvar cssProperties = ['float'].concat(Object.keys(\n typeof document === 'undefined'\n ? {}\n : findWidth(document.documentElement.style)\n).filter(function (p) { return p.indexOf('-') === -1 && p !== 'length'; }));\n\nfunction findWidth(obj) {\n return obj\n ? obj.hasOwnProperty('width')\n ? obj\n : findWidth(Object.getPrototypeOf(obj))\n : {}\n}\n\nvar isProp = /^-?-?[a-z][a-z-_0-9]*$/i;\n\nvar memoize = function (fn, cache) {\n if ( cache === void 0 ) cache = {};\n\n return function (item) { return item in cache\n ? cache[item]\n : cache[item] = fn(item); };\n};\n\nfunction add(style, prop, values) {\n if (prop in style) // Recursively increase specificity\n { add(style, '!' + prop, values); }\n else\n { style[prop] = formatValues(prop, values); }\n}\n\nvar vendorMap = Object.create(null, {});\nvar vendorValuePrefix = Object.create(null, {});\n\nvar vendorRegex = /^(o|O|ms|MS|Ms|moz|Moz|webkit|Webkit|WebKit)([A-Z])/;\n\nvar appendPx = memoize(function (prop) {\n try {\n var el = document.createElement('div');\n el.style[prop] = '1px';\n el.style.setProperty(prop, '1px');\n return el.style[prop].slice(-3) === '1px' ? 'px' : ''\n } catch (err) {\n return ''\n }\n}, {\n flex: '',\n boxShadow: 'px',\n border: 'px',\n borderTop: 'px',\n borderRight: 'px',\n borderBottom: 'px',\n borderLeft: 'px'\n});\n\nfunction lowercaseFirst(string) {\n return string.charAt(0).toLowerCase() + string.slice(1)\n}\n\nfunction assign(obj, obj2) {\n for (var key in obj2) {\n if (obj2.hasOwnProperty(key)) {\n obj[key] = typeof obj2[key] === 'string'\n ? obj2[key]\n : assign(obj[key] || {}, obj2[key]);\n }\n }\n return obj\n}\n\nvar hyphenSeparator = /-([a-z])/g;\nfunction hyphenToCamelCase(hyphen) {\n return hyphen.slice(hyphen.charAt(0) === '-' ? 1 : 0).replace(hyphenSeparator, function(match) {\n return match[1].toUpperCase()\n })\n}\n\nvar camelSeparator = /(\\B[A-Z])/g;\nfunction camelCaseToHyphen(camelCase) {\n return camelCase.replace(camelSeparator, '-$1').toLowerCase()\n}\n\nvar initialMatch = /([A-Z])/g;\nfunction initials(camelCase) {\n return camelCase.charAt(0) + (camelCase.match(initialMatch) || []).join('').toLowerCase()\n}\n\nvar ampersandMatch = /&/g;\nfunction objectToRules(style, selector, suffix, single) {\n if ( suffix === void 0 ) suffix = '';\n\n var base = {};\n var extra = suffix.indexOf('&') > -1 && suffix.indexOf(',') === -1 ? '' : '&';\n var rules = [];\n\n Object.keys(style).forEach(function (prop) {\n if (prop.charAt(0) === '@')\n { rules.push(prop + '{' + objectToRules(style[prop], selector, suffix, single).join('') + '}'); }\n else if (typeof style[prop] === 'object')\n { rules = rules.concat(objectToRules(style[prop], selector, suffix + prop, single)); }\n else\n { base[prop] = style[prop]; }\n });\n\n if (Object.keys(base).length) {\n rules.unshift(\n ((single || (suffix.charAt(0) === ' ') ? '' : '&') + extra + suffix).replace(ampersandMatch, selector).trim() +\n '{' + stylesToCss(base) + '}'\n );\n }\n\n return rules\n}\n\nvar selectorSplit = /,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/;\n\nfunction stylesToCss(style) {\n return Object.keys(style).reduce(function (acc, prop) { return acc + propToString(prop.charAt(0) === '!' ? prop.slice(1) : prop, style[prop]); }\n , '')\n}\n\nfunction propToString(prop, value) {\n prop = prop in vendorMap ? vendorMap[prop] : prop;\n return (vendorRegex.test(prop) ? '-' : '')\n + (cssVar(prop)\n ? prop\n : camelCaseToHyphen(prop)\n )\n + ':'\n + value\n + ';'\n}\n\nfunction formatValues(prop, value) {\n return Array.isArray(value)\n ? value.map(function (v) { return formatValue(prop, v); }).join(' ')\n : typeof value === 'string'\n ? formatValues(prop, value.split(' '))\n : formatValue(prop, value)\n}\n\nfunction formatValue(prop, value) {\n return value in vendorValuePrefix\n ? vendorValuePrefix[value]\n : value + (isNaN(value) || value === null || value === 0 || value === '0' || typeof value === 'boolean' || cssVar(prop) ? '' : appendPx(prop))\n}\n\nfunction cssVar(prop) {\n return prop.charAt(0) === '-' && prop.charAt(1) === '-'\n}\n\nvar classPrefix = 'b' + ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3) +\n ('000' + ((Math.random() * 46656) | 0).toString(36)).slice(-3);\n\nvar styleSheet = typeof document === 'object' && document.createElement('style');\nstyleSheet && document.head && document.head.appendChild(styleSheet);\nstyleSheet && (styleSheet.id = classPrefix);\n\nvar sheet = styleSheet && styleSheet.sheet;\n\nvar debug = false;\nvar classes = Object.create(null, {});\nvar rules = [];\nvar count = 0;\n\nfunction setDebug(d) {\n debug = d;\n}\n\nfunction getSheet() {\n var content = rules.join('');\n rules = [];\n classes = Object.create(null, {});\n count = 0;\n return content\n}\n\nfunction getRules() {\n return rules\n}\n\nfunction insert(rule, index) {\n rules.push(rule);\n\n if (debug)\n { return styleSheet.textContent = rules.join('\\n') }\n\n try {\n sheet && sheet.insertRule(rule, arguments.length > 1\n ? index\n : sheet.cssRules.length);\n } catch (e) {\n // Ignore thrown errors in eg. firefox for unsupported strings (::-webkit-inner-spin-button)\n }\n}\n\nfunction createClass(style) {\n var json = JSON.stringify(style);\n\n if (json in classes)\n { return classes[json] }\n\n var className = classPrefix + (++count)\n , rules = objectToRules(style, '.' + className);\n\n for (var i = 0; i < rules.length; i++)\n { insert(rules[i]); }\n\n classes[json] = className;\n\n return className\n}\n\n/* eslint no-invalid-this: 0 */\n\nvar shorts = Object.create(null);\n\nfunction bss(input, value) {\n var b = chain(bss);\n input && assign(b.__style, parse.apply(null, arguments));\n return b\n}\n\nfunction setProp(prop, value) {\n Object.defineProperty(bss, prop, {\n configurable: true,\n value: value\n });\n}\n\nObject.defineProperties(bss, {\n __style: {\n configurable: true,\n writable: true,\n value: {}\n },\n valueOf: {\n configurable: true,\n writable: true,\n value: function() {\n return '.' + this.class\n }\n },\n toString: {\n configurable: true,\n writable: true,\n value: function() {\n return this.class\n }\n }\n});\n\nsetProp('setDebug', setDebug);\n\nsetProp('$keyframes', keyframes);\nsetProp('$media', $media);\nsetProp('$import', $import);\nsetProp('$nest', $nest);\nsetProp('getSheet', getSheet);\nsetProp('getRules', getRules);\nsetProp('helper', helper);\nsetProp('css', css);\nsetProp('classPrefix', classPrefix);\n\nfunction chain(instance) {\n var newInstance = Object.create(bss, {\n __style: {\n value: assign({}, instance.__style)\n },\n style: {\n enumerable: true,\n get: function() {\n var this$1 = this;\n\n return Object.keys(this.__style).reduce(function (acc, key) {\n if (typeof this$1.__style[key] === 'number' || typeof this$1.__style[key] === 'string')\n { acc[key.charAt(0) === '!' ? key.slice(1) : key] = this$1.__style[key]; }\n return acc\n }, {})\n }\n }\n });\n\n if (instance === bss)\n { bss.__style = {}; }\n\n return newInstance\n}\n\ncssProperties.forEach(function (prop) {\n var vendor = prop.match(vendorRegex);\n if (vendor) {\n var unprefixed = lowercaseFirst(prop.replace(vendorRegex, '$2'));\n if (cssProperties.indexOf(unprefixed) === -1) {\n if (unprefixed === 'flexDirection')\n { vendorValuePrefix.flex = '-' + vendor[1].toLowerCase() + '-flex'; }\n\n vendorMap[unprefixed] = prop;\n setProp(unprefixed, setter(prop));\n setProp(short(unprefixed), bss[unprefixed]);\n return\n }\n }\n\n setProp(prop, setter(prop));\n setProp(short(prop), bss[prop]);\n});\n\nsetProp('content', function Content(arg) {\n var b = chain(this);\n arg === null || arg === undefined || arg === false\n ? delete b.__style.content\n : b.__style.content = '\"' + arg + '\"';\n return b\n});\n\nObject.defineProperty(bss, 'class', {\n set: function(value) {\n this.__class = value;\n },\n get: function() {\n return this.__class || createClass(this.__style)\n }\n});\n\nfunction $media(value, style) {\n var b = chain(this);\n if (value)\n { b.__style['@media ' + value] = parse(style); }\n\n return b\n}\n\nvar hasUrl = /^('|\"|url\\('|url\\(\")/i;\nfunction $import(value) {\n value && insert('@import '\n + (hasUrl.test(value) ? value : '\"' + value + '\"')\n + ';', 0);\n\n return chain(this)\n}\n\nfunction $nest(selector, properties) {\n var b = chain(this);\n if (arguments.length === 1)\n { Object.keys(selector).forEach(function (x) { return addNest(b.__style, x, selector[x]); }); }\n else if (selector)\n { addNest(b.__style, selector, properties); }\n\n return b\n}\n\nfunction addNest(style, selector, properties) {\n var prop = selector.split(selectorSplit).map(function (x) {\n x = x.trim();\n return (x.charAt(0) === ':' || x.charAt(0) === '[' ? '' : ' ') + x\n }).join(',&');\n\n prop in style\n ? assign(style[prop], parse(properties))\n : style[prop] = parse(properties);\n}\n\npseudos.forEach(function (name) { return setProp('$' + hyphenToCamelCase(name.replace(/:/g, '')), function Pseudo(value, style) {\n var b = chain(this);\n if (isTagged(value))\n { b.__style[name] = parse.apply(null, arguments); }\n else if (value || style)\n { b.__style[name + (style ? '(' + value + ')' : '')] = parse(style || value); }\n return b\n }); }\n);\n\nfunction setter(prop) {\n return function CssProperty(value) {\n var b = chain(this);\n if (!value && value !== 0)\n { delete b.__style[prop]; }\n else if (arguments.length > 0)\n { add(b.__style, prop, Array.prototype.slice.call(arguments)); }\n\n return b\n }\n}\n\nfunction css(selector, style) {\n if (arguments.length === 1)\n { Object.keys(selector).forEach(function (key) { return addCss(key, selector[key]); }); }\n else\n { addCss(selector, style); }\n\n return chain(this)\n}\n\nfunction addCss(selector, style) {\n objectToRules(parse(style), selector, '', true).forEach(function (rule) { return insert(rule); });\n}\n\nfunction helper(name, styling) {\n if (arguments.length === 1)\n { return Object.keys(name).forEach(function (key) { return helper(key, name[key]); }) }\n\n delete bss[name]; // Needed to avoid weird get calls in chrome\n\n if (typeof styling === 'function') {\n helper[name] = styling;\n Object.defineProperty(bss, name, {\n configurable: true,\n value: function Helper(input) {\n var b = chain(this);\n var result = isTagged(input)\n ? styling(raw(input, arguments))\n : styling.apply(null, arguments);\n assign(b.__style, result.__style);\n return b\n }\n });\n } else {\n helper[name] = parse(styling);\n Object.defineProperty(bss, name, {\n configurable: true,\n get: function() {\n var b = chain(this);\n assign(b.__style, parse(styling));\n return b\n }\n });\n }\n}\n\nbss.helper('$animate', function (value, props) { return bss.animation(bss.$keyframes(props) + ' ' + value); }\n);\n\nfunction short(prop) {\n var acronym = initials(prop)\n , short = popular[acronym] && popular[acronym] !== prop ? prop : acronym;\n\n shorts[short] = prop;\n return short\n}\n\nvar blockEndMatch = /;(?![^(\"]*[)\"])|\\n/;\nvar commentsMatch = /\\/\\*[\\s\\S]*?\\*\\/|([^:]|^)\\/\\/.*(?![^(\"]*[)\"])/g;\nvar propSeperator = /[ :]+/;\n\nvar stringToObject = memoize(function (string) {\n var last = ''\n , prev;\n\n return string.trim().replace(commentsMatch, '').split(blockEndMatch).reduce(function (acc, line) {\n if (!line)\n { return acc }\n line = last + line.trim();\n var ref = line.replace(propSeperator, ' ').split(' ');\n var key = ref[0];\n var tokens = ref.slice(1);\n\n last = line.charAt(line.length - 1) === ',' ? line : '';\n if (last)\n { return acc }\n\n if (line.charAt(0) === ',' || !isProp.test(key)) {\n acc[prev] += ' ' + line;\n return acc\n }\n\n if (!key)\n { return acc }\n\n var prop = key.charAt(0) === '-' && key.charAt(1) === '-'\n ? key\n : hyphenToCamelCase(key);\n\n prev = shorts[prop] || prop;\n\n if (key in helper) {\n typeof helper[key] === 'function'\n ? assign(acc, helper[key].apply(helper, tokens).__style)\n : assign(acc, helper[key]);\n } else if (prop in helper) {\n typeof helper[prop] === 'function'\n ? assign(acc, helper[prop].apply(helper, tokens).__style)\n : assign(acc, helper[prop]);\n } else if (tokens.length > 0) {\n add(acc, prev, tokens);\n }\n\n return acc\n }, {})\n});\n\nvar count$1 = 0;\nvar keyframeCache = {};\n\nfunction keyframes(props) {\n var content = Object.keys(props).reduce(function (acc, key) { return acc + key + '{' + stylesToCss(parse(props[key])) + '}'; }\n , '');\n\n if (content in keyframeCache)\n { return keyframeCache[content] }\n\n var name = classPrefix + count$1++;\n keyframeCache[content] = name;\n insert('@keyframes ' + name + '{' + content + '}');\n\n return name\n}\n\nfunction parse(input, value) {\n var obj;\n\n if (typeof input === 'string') {\n if (typeof value === 'string' || typeof value === 'number')\n { return (( obj = {}, obj[input] = value, obj )) }\n\n return stringToObject(input)\n } else if (isTagged(input)) {\n return stringToObject(raw(input, arguments))\n }\n\n return input.__style || sanitize(input)\n}\n\nfunction isTagged(input) {\n return Array.isArray(input) && typeof input[0] === 'string'\n}\n\nfunction raw(input, args) {\n var str = '';\n for (var i = 0; i < input.length; i++)\n { str += input[i] + (args[i + 1] || args[i + 1] === 0 ? args[i + 1] : ''); }\n return str\n}\n\nfunction sanitize(styles) {\n return Object.keys(styles).reduce(function (acc, key) {\n var value = styles[key];\n key = shorts[key] || key;\n\n if (!value && value !== 0 && value !== '')\n { return acc }\n\n if (key === 'content' && value.charAt(0) !== '\"')\n { acc[key] = '\"' + value + '\"'; }\n else if (typeof value === 'object')\n { acc[key] = sanitize(value); }\n else\n { add(acc, key, value); }\n\n return acc\n }, {})\n}\n\nexport default bss;\n//# sourceMappingURL=bss.esm.js.map\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","var traverse = module.exports = function (obj) {\n return new Traverse(obj);\n};\n\nfunction Traverse (obj) {\n this.value = obj;\n}\n\nTraverse.prototype.get = function (ps) {\n var node = this.value;\n for (var i = 0; i < ps.length; i ++) {\n var key = ps[i];\n if (!node || !hasOwnProperty.call(node, key)) {\n node = undefined;\n break;\n }\n node = node[key];\n }\n return node;\n};\n\nTraverse.prototype.has = function (ps) {\n var node = this.value;\n for (var i = 0; i < ps.length; i ++) {\n var key = ps[i];\n if (!node || !hasOwnProperty.call(node, key)) {\n return false;\n }\n node = node[key];\n }\n return true;\n};\n\nTraverse.prototype.set = function (ps, value) {\n var node = this.value;\n for (var i = 0; i < ps.length - 1; i ++) {\n var key = ps[i];\n if (!hasOwnProperty.call(node, key)) node[key] = {};\n node = node[key];\n }\n node[ps[i]] = value;\n return value;\n};\n\nTraverse.prototype.map = function (cb) {\n return walk(this.value, cb, true);\n};\n\nTraverse.prototype.forEach = function (cb) {\n this.value = walk(this.value, cb, false);\n return this.value;\n};\n\nTraverse.prototype.reduce = function (cb, init) {\n var skip = arguments.length === 1;\n var acc = skip ? this.value : init;\n this.forEach(function (x) {\n if (!this.isRoot || !skip) {\n acc = cb.call(this, acc, x);\n }\n });\n return acc;\n};\n\nTraverse.prototype.paths = function () {\n var acc = [];\n this.forEach(function (x) {\n acc.push(this.path); \n });\n return acc;\n};\n\nTraverse.prototype.nodes = function () {\n var acc = [];\n this.forEach(function (x) {\n acc.push(this.node);\n });\n return acc;\n};\n\nTraverse.prototype.clone = function () {\n var parents = [], nodes = [];\n \n return (function clone (src) {\n for (var i = 0; i < parents.length; i++) {\n if (parents[i] === src) {\n return nodes[i];\n }\n }\n \n if (typeof src === 'object' && src !== null) {\n var dst = copy(src);\n \n parents.push(src);\n nodes.push(dst);\n \n forEach(objectKeys(src), function (key) {\n dst[key] = clone(src[key]);\n });\n \n parents.pop();\n nodes.pop();\n return dst;\n }\n else {\n return src;\n }\n })(this.value);\n};\n\nfunction walk (root, cb, immutable) {\n var path = [];\n var parents = [];\n var alive = true;\n \n return (function walker (node_) {\n var node = immutable ? copy(node_) : node_;\n var modifiers = {};\n \n var keepGoing = true;\n \n var state = {\n node : node,\n node_ : node_,\n path : [].concat(path),\n parent : parents[parents.length - 1],\n parents : parents,\n key : path.slice(-1)[0],\n isRoot : path.length === 0,\n level : path.length,\n circular : null,\n update : function (x, stopHere) {\n if (!state.isRoot) {\n state.parent.node[state.key] = x;\n }\n state.node = x;\n if (stopHere) keepGoing = false;\n },\n 'delete' : function (stopHere) {\n delete state.parent.node[state.key];\n if (stopHere) keepGoing = false;\n },\n remove : function (stopHere) {\n if (isArray(state.parent.node)) {\n state.parent.node.splice(state.key, 1);\n }\n else {\n delete state.parent.node[state.key];\n }\n if (stopHere) keepGoing = false;\n },\n keys : null,\n before : function (f) { modifiers.before = f },\n after : function (f) { modifiers.after = f },\n pre : function (f) { modifiers.pre = f },\n post : function (f) { modifiers.post = f },\n stop : function () { alive = false },\n block : function () { keepGoing = false }\n };\n \n if (!alive) return state;\n \n function updateState() {\n if (typeof state.node === 'object' && state.node !== null) {\n if (!state.keys || state.node_ !== state.node) {\n state.keys = objectKeys(state.node)\n }\n \n state.isLeaf = state.keys.length == 0;\n \n for (var i = 0; i < parents.length; i++) {\n if (parents[i].node_ === node_) {\n state.circular = parents[i];\n break;\n }\n }\n }\n else {\n state.isLeaf = true;\n state.keys = null;\n }\n \n state.notLeaf = !state.isLeaf;\n state.notRoot = !state.isRoot;\n }\n \n updateState();\n \n // use return values to update if defined\n var ret = cb.call(state, state.node);\n if (ret !== undefined && state.update) state.update(ret);\n \n if (modifiers.before) modifiers.before.call(state, state.node);\n \n if (!keepGoing) return state;\n \n if (typeof state.node == 'object'\n && state.node !== null && !state.circular) {\n parents.push(state);\n \n updateState();\n \n forEach(state.keys, function (key, i) {\n path.push(key);\n \n if (modifiers.pre) modifiers.pre.call(state, state.node[key], key);\n \n var child = walker(state.node[key]);\n if (immutable && hasOwnProperty.call(state.node, key)) {\n state.node[key] = child.node;\n }\n \n child.isLast = i == state.keys.length - 1;\n child.isFirst = i == 0;\n \n if (modifiers.post) modifiers.post.call(state, child);\n \n path.pop();\n });\n parents.pop();\n }\n \n if (modifiers.after) modifiers.after.call(state, state.node);\n \n return state;\n })(root).node;\n}\n\nfunction copy (src) {\n if (typeof src === 'object' && src !== null) {\n var dst;\n \n if (isArray(src)) {\n dst = [];\n }\n else if (isDate(src)) {\n dst = new Date(src.getTime ? src.getTime() : src);\n }\n else if (isRegExp(src)) {\n dst = new RegExp(src);\n }\n else if (isError(src)) {\n dst = { message: src.message };\n }\n else if (isBoolean(src)) {\n dst = new Boolean(src);\n }\n else if (isNumber(src)) {\n dst = new Number(src);\n }\n else if (isString(src)) {\n dst = new String(src);\n }\n else if (Object.create && Object.getPrototypeOf) {\n dst = Object.create(Object.getPrototypeOf(src));\n }\n else if (src.constructor === Object) {\n dst = {};\n }\n else {\n var proto =\n (src.constructor && src.constructor.prototype)\n || src.__proto__\n || {}\n ;\n var T = function () {};\n T.prototype = proto;\n dst = new T;\n }\n \n forEach(objectKeys(src), function (key) {\n dst[key] = src[key];\n });\n return dst;\n }\n else return src;\n}\n\nvar objectKeys = Object.keys || function keys (obj) {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n};\n\nfunction toS (obj) { return Object.prototype.toString.call(obj) }\nfunction isDate (obj) { return toS(obj) === '[object Date]' }\nfunction isRegExp (obj) { return toS(obj) === '[object RegExp]' }\nfunction isError (obj) { return toS(obj) === '[object Error]' }\nfunction isBoolean (obj) { return toS(obj) === '[object Boolean]' }\nfunction isNumber (obj) { return toS(obj) === '[object Number]' }\nfunction isString (obj) { return toS(obj) === '[object String]' }\n\nvar isArray = Array.isArray || function isArray (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nforEach(objectKeys(Traverse.prototype), function (key) {\n traverse[key] = function (obj) {\n var args = [].slice.call(arguments, 1);\n var t = new Traverse(obj);\n return t[key].apply(t, args);\n };\n});\n\nvar hasOwnProperty = Object.hasOwnProperty || function (obj, key) {\n return key in obj;\n};\n","/* globals Promise */\nimport * as R from 'ramda'\nimport h, * as H from '../../how/index'\n\n// todo-james this is until I remove buildQueryString from the app completely\nimport m from 'bacta'\nconst p = R.pipe\nimport * as uuid from 'uuid'\nimport traverse from 'traverse'\nimport { prop as stream } from '../../stream'\n/*\n used as a default function for a bunch of situations\n*/\nconst empty = R.always(\"\")\nfunction normalizeErrorFormat(e){\n return new Error(\n e\n ? e.error\n : 'Unknown problem encountered. Please reload the page.'\n )\n\n}\n\n// session_id -> { [uuid]: {\n// transport: Transport\n// , when: Epoch\n// , method: string\n// , url: string\n// }}\n//\nconst requests = {}\nconst requestStream = stream()\nconst responseStream = stream()\n\nfunction Request({ url, method, body, baseURL }){\n return { url, method, body, baseURL }\n}\n\nlet Response; {\n let $ = H.options.either('Response')\n let {N} = $\n $ = {\n ...$\n ,N({ request, response={ body:null, status: 500 } }){\n let message =\n response.body\n ? response.body.message || response.body.error\n : null\n\n return N({\n request: Request(request), response, message\n })\n }\n ,infer(request, x){\n if( x.status > 199 && x.status < 300 ) {\n return Response.Y({ request, response: x })\n } else {\n return Response.N({ request, response: x })\n }\n }\n }\n Response = $\n}\n\nfunction buildRequest(\n baseURL=\"\"\n , headers={}\n , method='GET'\n , url=\"\"\n , body={}\n){\n\n const queryMerge = p(\n R.filter( x => x != null )\n ,m.route.buildQueryString\n ,R.when( Boolean, R.concat('?'))\n )\n\n const bodyMerge = p(\n R.objOf('data')\n )\n\n const [buildParams, buildBody] = method == 'GET'\n ? [queryMerge, empty]\n : [empty, bodyMerge ]\n\n const payload = R.mergeAll([\n { method }\n ,buildBody(body)\n ])\n\n const URL = (baseURL + url + buildParams(body))\n .replace('??','?')\n\n return { url: URL, method, headers, data: payload.data }\n}\n\nfunction MetadataTracker(){\n const requestedAt = Date.now()\n\n\n function removeMetaData(request){\n traverse(request).forEach(function(){\n const that = this\n if( that.key == '__requestedAt' ){\n that.remove()\n }\n })\n return request\n }\n\n\n function addMetaData(response){\n traverse(response).forEach(function(x){\n const that = this\n if( that.notLeaf && !Array.isArray(x) ){\n x.__requestedAt = requestedAt\n }\n })\n\n return response\n }\n\n\n return {\n removeMetaData\n ,addMetaData\n }\n}\n\nfunction request(\n baseURL=\"\"\n , headers={}\n , method='GET'\n , url=\"\"\n , body={}\n , transportProp\n){\n const id = uuid.v4()\n const config = buildRequest(\n baseURL, headers, method, url, body\n )\n\n // mithril v1 -> mithril v2 hack\n config.body = config.data\n\n const promise = h.request(\n R.merge(\n config\n , { config: function(transport){\n requests[id] =\n { id\n , transport\n , when: Date.now()\n , method, url\n }\n\n transport.addEventListener('abort', function handler(){\n delete requests[id]\n\n // probably not necessary\n transport.removeEventListener('abort', handler)\n })\n\n if( transportProp != null ){\n transportProp(transport)\n }\n\n }\n , background: true\n , withCredentials: true\n , extract: (xhr) => {\n return {\n status: xhr.status\n , body: JSON.parse(xhr.responseText)\n }\n }\n\n }\n )\n )\n\n const requestObject = {\n url, method, body, baseURL\n }\n requestStream(requestObject)\n\n // Note: This may seem more complicated than necessary but we're\n // fighting with Mithril 0.2x Promise implementation\n return new Promise(function(Y,N){\n promise\n .then( r => r )\n .then( (r) => {\n if ( id in requests ){\n delete requests[id]\n\n const response = Response.infer(requestObject, r)\n responseStream(response)\n\n if ( Response.isY(response) ) {\n return Y(r.body)\n } else {\n throw r.body\n }\n } else {\n return null // never respond\n }\n })\n .catch(function(e){\n requests; id; method; url;\n if( id in requests || e != null ){\n delete requests[id]\n N(normalizeErrorFormat(e))\n }\n return null // never respond\n })\n })\n\n}\n\nexport default {\n request\n ,buildRequest\n ,requests\n ,MetadataTracker\n ,requestStream\n ,responseStream\n ,Response\n}\n","/* globals process, window */\nimport * as R from 'ramda'\nimport moment from 'moment'\nimport request from '../request'\nimport { prop } from '../../../stream'\nimport * as uuid from 'uuid'\n\nconst exposer = (prop) =>\n\ttypeof prop == 'function'\n\t\t? R.call(prop)\n\t\t: R.identity(prop)\n\n\nimport m from 'bacta'\nconst I = i => i\n\nexport default function API(auth, organization_id){\n\n\tconst HARTH_API_URL = process.env.HARTH_API_URL\n\n\tconst milliperday = 1000*60*60*24\n\n\tfunction baseHeaders({ organization_id: theirOrgId }={}){\n\t\tconst auth_token = auth().auth_token\n\n\t\tlet headers = {}\n\n\t\tif ( auth_token) {\n\t\t\theaders.Authorization = `Bearer ${auth_token}`\n\t\t}\n\t\tconst someOrgId = theirOrgId || organization_id()\n\t\tif( someOrgId ) {\n\t\t\theaders['X-Odin-Organization'] = someOrgId\n\t\t}\n\n\t\theaders['X-Odin-Route'] = window.location.pathname\n\n\t\treturn headers\n\t}\n\n\tlet baseURL = HARTH_API_URL || \"/api\"\n\tif ( baseURL === \"/api\" ) {\n\t\tbaseURL = window.location.origin + '/api'\n\t}\n\n\tfunction GET ([method, url]) {\n\t\treturn request.request(\n\t\t\tbaseURL\n\t\t\t, baseHeaders()\n\t\t\t, method\n\t\t\t, url.join('')\n\t\t)\n\t}\n\n\tfunction last ( list ) {\n\t\treturn list[list.length -1]\n\t}\n\n\tfunction toParamHash( unsafeURL ) {\n\t\tconst url = unsafeURL.slice()\n\n\t\tconst tail = last(url)\n\n\t\tconst head =\n\t\t\turl.slice(0,-1)\n\n\t\tif( tail && Array.isArray(tail)){\n\n\t\t\tconst q = tail.reduce(function(p, n){\n\t\t\t\t\t\t\t\tp[ n[0] ] = n[1]\n\t\t\t\treturn p\n\t\t\t},{})\n\n\t\t\treturn [\n\t\t\t\thead\n\t\t\t\t,q\n\t\t\t]\n\n\t\t} else {\n\t\t\treturn [unsafeURL, {}]\n\t\t}\n\n\t}\n\n\tfunction LIST([method, inURL]) {\n\t\treturn LIST_ATTRS(baseURL, baseHeaders(), [method, inURL])\n\t}\n\n\tfunction LIST_ATTRS(_baseURL=baseURL, _baseHeaders=baseHeaders, [method, inURL]) {\n\t\treturn LIST_TRANSPORT_ATTRS(_baseURL, _baseHeaders=baseHeaders, [method, inURL])\n\t\t\t.promise\n\t}\n\n\tfunction LIST_TRANSPORT_ATTRS (\n\t\t_baseURL=baseURL, _baseHeaders=baseHeaders, [method, inURL]\n\t) {\n\n\t\tconst [outURL,paramHash] = toParamHash(inURL)\n\t\tconst transport = m.prop()\n\n\t\tparamHash['now'] = Date.now();\n\n\t\treturn {\n\t\t\tpromise: request.request(\n\t\t\t\t_baseURL\n\t\t\t\t,_baseHeaders()\n\t\t\t\t, method\n\t\t\t\t, outURL.join('')\n\t\t\t\t, paramHash\n\t\t\t\t, transport\n\t\t\t)\n\t\t\t\t.then( r => r.list )\n\t\t\t,transport: transport()\n\t\t}\n\t}\n\n\tfunction POST([method, url], [body, requestParser, responseParser, source]) {\n\t\treturn request.request(\n\t\t\tbaseURL\n\t\t\t,baseHeaders()\n\t\t\t,method\n\t\t\t,url.join('')\n\t\t\t,R.merge(requestParser(body), {source})\n\t\t)\n\t\t\t.then(responseParser)\n\t}\n\n\tfunction PATCH_MANY ([method, url], [body, requestParser, responseParser, source]) {\n\n\t\treturn request.request(\n\t\t\tbaseURL\n\t\t\t, baseHeaders()\n\t\t\t, method\n\t\t\t, url.join('')\n\t\t\t, { list: body.map(requestParser), source }\n\t\t)\n\t\t\t.then(\n\t\t\t\tr => r.list.map(responseParser)\n\t\t\t)\n\t}\n\n\tfunction DELETE ([method, url]) {\n\t\treturn request.request(\n\t\t\tbaseURL\n\t\t\t,baseHeaders()\n\t\t\t, method, url.join('')\n\t\t)\n\t}\n\n\n\tfunction APIOrganizationsDisciplineToOrganizationsDiscipline(d) {\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\td.organization_id || null\n\t\t\t,organizations_disciplines_id:\n\t\t\t\td.organizations_disciplines_id || null\n\t\t\t,organizations_disciplines_name:\n\t\t\t\td.organizations_disciplines_name\n\t\t\t,organizations_disciplines_description:\n\t\t\t\td.organizations_disciplines_description || \"\"\n\t\t\t,organizations_disciplines_nominal_rate:\n\t\t\t\td.organizations_disciplines_nominal_rate || 0\n\t\t\t,organizations_disciplines_uom:\n\t\t\t\td.organizations_disciplines_uom || \"N/A\"\n\t\t\t,contractrecognitionid:\n\t\t\t\td.contractrecognitionid\n\t\t\t,contractrecognitionname:\n\t\t\t\td.contractrecognitionname\n\t\t\t,contractrecognitiondescription:\n\t\t\t\td.contractrecognitiondescription\n\t\t\t,orgDisciplineNameDescription:\n\t\t\t\td.organizations_disciplines_name\n\t\t\t\t+ (\n\t\t\t\t\td.organizations_disciplines_description\n\t\t\t\t\t\t? ' - ' + d.organizations_disciplines_description\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t,organizations_disciplines_nominal_expenditure_rate:\n\t\t\t\td.organizations_disciplines_nominal_expenditure_rate || 0\n\t\t\t,organizations_disciplines_nominal_revenue_rate:\n\t\t\t\td.organizations_disciplines_nominal_revenue_rate || 0\n\t\t\t,completedcount: Number(d.completedcount)\n\t\t\t,completedsum: Number(d.completedsum)\n\t\t\t,scheduledsum: Number(d.scheduledsum)\n\t\t\t,applicablecontracts: d.applicablecontracts\n\t\t\t,applytoteams: []\n\t\t}\n\t}\n\n\n\tfunction OrganizationsDisciplineToAPIOrganizationsDiscipline(d) {\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\td.organization_id || null\n\t\t\t,organizations_disciplines_id:\n\t\t\t\td.organizations_disciplines_id || null\n\t\t\t,organizations_disciplines_name:\n\t\t\t\td.organizations_disciplines_name\n\t\t\t,organizations_disciplines_description:\n\t\t\t\td.organizations_disciplines_description || \"\"\n\t\t\t,organizations_disciplines_nominal_rate:\n\t\t\t\td.organizations_disciplines_nominal_rate || null\n\t\t\t,organizations_disciplines_uom:\n\t\t\t\td.organizations_disciplines_uom || \"N/A\"\n\t\t\t,organizations_disciplines_nominal_expenditure_rate:\n\t\t\t\td.organizations_disciplines_nominal_expenditure_rate || 0\n\t\t\t,organizations_disciplines_nominal_revenue_rate:\n\t\t\t\td.organizations_disciplines_nominal_revenue_rate || 0\n\t\t}\n\t}\n\n\n\tconst APIDisciplinesContractorsCrewtoDisciplinesContractorsCrew = (cid) =>\n\t\tfunction(dcc){\n\t\t\treturn {\n\t\t\t\tcrew_id: m.prop(dcc.crew_id || null)\n\t\t\t\t,contractor_id: m.prop(cid)\n\t\t\t\t,disciplines_contractors_crews_common:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_common)\n\t\t\t\t,disciplines_contractors_crews_excess:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_excess)\n\t\t\t\t,disciplines_contractors_crews_invalid:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_invalid)\n\t\t\t\t,disciplines_contractors_crews_id:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_id || null)\n\t\t\t\t,disciplines_contractors_crews_name:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_name)\n\t\t\t\t,disciplines_contractors_crews_contract_multiplier:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_contract_multiplier)\n\t\t\t\t,disciplines_contractors_crews_rating:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_rating)\n\t\t\t\t,disciplines_contractors_crews_utilized:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_utilized)\n\t\t\t\t,disciplines_contractors_crews_work_completed:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_crews_work_completed)\n\t\t\t\t,disciplines_contractors_id:\n\t\t\t\t\tm.prop(dcc.disciplines_contractors_id || null)\n\t\t\t\t,user_id:\n\t\t\t\t\tm.prop(dcc.user_id || null)\n\t\t\t\t,crews_discipline_rates_id: dcc.crews_discipline_rates_id\n\t\t\t}\n\t}\n\n\tconst APIDisciplineToDiscipline = (project_name) =>\n\t\tfunction(d) {\n\t\t\treturn {\n\t\t\t\tproject_id:\n\t\t\t\t\tm.prop(d.project_id || null)\n\t\t\t\t,organizations_disciplines_id:\n\t\t\t\t\tm.prop(d.organizations_disciplines_id)\n\t\t\t\t,discipline_name:\n\t\t\t\t\tm.prop(d.discipline_name)\n\t\t\t\t,discipline_description:\n\t\t\t\t\tm.prop(d.discipline_description)\n\t\t\t\t,discipline_order:\n\t\t\t\t\tm.prop(d.discipline_order)\n\t\t\t\t,discipline_contract_multiplier:\n\t\t\t\t\tm.prop(\n\t\t\t\t\t\td.discipline_contract_multiplier == Infinity\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: d.discipline_contract_multiplier\n\t\t\t\t\t)\n\t\t\t\t,discipline_priority:\n\t\t\t\t\tm.prop(d.discipline_order)\n\t\t\t\t,discipline_work:\n\t\t\t\t\tm.prop(d.discipline_work)\n\t\t\t\t,discipline_planned:\n\t\t\t\t\tm.prop(d.discipline_planned)\n\t\t\t\t,discipline_combination_limit:\n\t\t\t\t\tm.prop(d.discipline_combination_limit)\n\t\t\t\t,discipline_combine:\n\t\t\t\t\tm.prop(d.discipline_combine)\n\t\t\t\t,discipline_custom:\n\t\t\t\t\tm.prop(d.discipline_custom)\n\t\t\t\t,discipline_completed:\n\t\t\t\t\tm.prop(d.discipline_completed)\n\t\t\t\t,discipline_harshness:\n\t\t\t\t\tm.prop(d.discipline_harshness)\n\t\t\t\t,discipline_percent:\n\t\t\t\t\tm.prop(d.discipline_percent)\n\t\t\t\t,discipline_id:\n\t\t\t\t\tm.prop(d.discipline_id || null)\n\t\t\t\t,discipline_flow:\n\t\t\t\t\tm.prop(\n\t\t\t\t\td.discipline_flow == 'Conc'\n\t\t\t\t\t\t? 'Workflows'\n\t\t\t\t\t\t: 'Consecutive'\n\t\t\t\t)\n\n\t\t\t\t,discipline_start_date:\n\t\t\t\t\tm.prop(timestampToIsoUnsafe(d.discipline_start_date))\n\t\t\t\t,discipline_end_date:\n\t\t\t\t\tm.prop(timestampToIsoUnsafe(d.discipline_end_date))\n\t\t\t\t,discipline_uom:\n\t\t\t\t\tm.prop(d.discipline_uom)\n\t\t\t\t,discipline_recovery:\n\t\t\t\t\tm.prop(d.discipline_recovery)\n\t\t\t\t,discipline_auto_assign_tasks:\n\t\t\t\t\tm.prop(d.discipline_auto_assign_tasks)\n\t\t\t\t,discipline_strict_end:\n\t\t\t\t\tm.prop(d.discipline_strict_end)\n\t\t\t\t,discipline_strict_start:\n\t\t\t\t\tm.prop(d.discipline_strict_start)\n\t\t\t\t,discipline_consistency:\n\t\t\t\t\tm.prop(d.discipline_consistency)\n\t\t\t\t,discipline_consolidate_start:\n\t\t\t\t\tm.prop(d.discipline_consolidate_start)\n\t\t\t\t,disciplines_contractors:\n\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t.map(APIDisciplinesContractorToDisciplinesContractor)\n\n\t\t\t\t,organizations_disciplines_nominal_expenditure_rate:\n\t\t\t\t\tm.prop(d.organizations_disciplines_nominal_expenditure_rate)\n\t\t\t\t,organizations_disciplines_nominal_revenue_rate:\n\t\t\t\t\tm.prop(d.organizations_disciplines_nominal_revenue_rate)\n\t\t\t\t,contract_items_client_reference: m.prop('')\n\t\t\t\t,organizations_disciplines_nominal_rate:\n\t\t\t\t\tm.prop(d.organizations_disciplines_nominal_rate)\n\n\t\t\t\t,contract_items_rate: d.contract_items_rate\n\t\t\t\t,contractrecognitionid:\n\t\t\t\t\td.contractrecognitionid\n\t\t\t\t,contractrecognitionname:\n\t\t\t\t\td.contractrecognitionname\n\t\t\t\t,contractrecognitiondescription:\n\t\t\t\t\td.contractrecognitiondescription\n\n\t\t\t\t,CommonRecognition: d.discipline_id || null\n\t\t\t\t,ParentRecognition: d.ParentRecognition\n\t\t\t\t,ParentRecognitionID: d.project_id || null\n\t\t\t\t,disciplineName: d.discipline_name\n\t\t\t\t,discplineNameDescription: d.discplinenamedescription\n\t\t\t\t,eotSum: d.eotsum\n\t\t\t\t,nodSum: d.nodsum\n\t\t\t\t,varSum: d.varsum\n\t\t\t\t,lastAllocationDate: d.lastallocationdate\n\t\t\t\t,workdayeffort: d.workdayeffort\n\t\t\t\t,badeffortteams: d.badeffortteams\n\t\t\t\t,taskcount: Number(d.taskcount)\n\t\t\t\t,users: []\n\t\t\t}\n\t\t}\n\n\tfunction ProjectDetailsToAPIProjectDetails(d){\n\t\treturn R.mapObjIndexed((k) => typeof k == 'function' ? k() : k, d)\n\t}\n\n\tfunction ProjectContactsToAPIProjectContacts(c){\n\t\treturn {\n\t\t\tproject_id: c.project_id()\n\t\t\t,project_contacts_name: c.project_contacts_name()\n\t\t\t,project_contacts_type: c.project_contacts_type()\n\t\t\t,project_contacts_id: c.project_contacts_id()\n\t\t\t,project_contacts_phone: c.project_contacts_phone()\n\t\t\t,project_contacts_email: c.project_contacts_email()\n\t\t\t,user_id: c.user_id()\n\t\t}\n\t}\n\n\tfunction ProjectToAPIProject(o){\n\t\treturn {\n\t\t\t__requestedAt: o.__requestedAt\n\t\t\t,project_name: o\n\t\t\t\t.project_name()\n\t\t\t,project_parent: o.project_parent()\n\t\t\t,project_template_id: o.project_template_id()\n\t\t\t,project_draft_at: o.project_draft_at()\n\t\t\t,project_tendered_at: o.project_tendered_at()\n\t\t\t,project_rejected_at: o.project_rejected_at()\n\t\t\t,project_accepted_at: o.project_accepted_at()\n\t\t\t,project_site_type: o\n\t\t\t\t.project_site_type()\n\t\t\t,project_start_date:\n\t\t\t\ttimestampToIsoUnsafe( o.project_start_date() )\n\t\t\t,project_dead_date:\n\t\t\t\ttimestampToIsoUnsafe(o.project_dead_date() )\n\t\t\t,project_final_acceptance:\n\t\t\t\ttimestampToIsoUnsafe(o.project_final_acceptance() )\n\t\t\t,project_commissioning_date:\n\t\t\t\ttimestampToIsoUnsafe(o.project_commissioning_date() )\n\t\t\t,project_completion_comments: o\n\t\t\t\t.project_completion_comments()\n\t\t\t,project_completion_marker:\n\t\t\t\ttimestampToIsoUnsafe(o.project_completion_marker() )\n\t\t\t,project_documents:\n\t\t\t\to.project_documents()\n\t\t\t\t\t.filter( doc => doc.project_documents_href )\n\t\t\t\t\t.map(\n\t\t\t\t\t\tdoc => ({\n\t\t\t\t\t\t\tproject_documents_href:\n\t\t\t\t\t\t\t\tdoc.project_documents_href\n\t\t\t\t\t\t\t, project_documents_label:\n\t\t\t\t\t\t\t\tdoc.project_documents_label\n\t\t\t\t\t\t\t, project_documents_is_deliverable:\n\t\t\t\t\t\t\t\tdoc.project_documents_is_deliverable\n\t\t\t\t\t\t\t, project_documents_id: doc.project_documents_id\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\n\t\t\t,project_suburb: o\n\t\t\t\t.project_suburb()\n\t\t\t,project_material_suburb:\n\t\t\t\to.project_material_suburb()\n\t\t\t,project_priority:\n\t\t\t\to.project_priority()\n\t\t\t,disciplines:\n\t\t\t\to.disciplines.map(DisciplineToAPIDiscipline)\n\t\t\t,project_extras:\n\t\t\t\to.project_extras.map(ProjectDetailsToAPIProjectDetails)\n\t\t\t,project_id:\n\t\t\t\to.project_id()\n\t\t\t\t|| undefined\n\t\t\t,schedule_id:\n\t\t\t\to.schedule_id()\n\t\t\t\t|| undefined\n\t\t\t,organization_id:\n\t\t\t\to.organization_id()\n\t\t\t\t|| undefined\n\t\t\t,contract_id:\n\t\t\t\texposer(o.contract_id)\n\t\t\t\t|| undefined\n\t\t\t,project_contacts:\n\t\t\t\to.project_contacts.map(ProjectContactsToAPIProjectContacts)\n\t\t}\n\t}\n\n\tfunction APIDisciplinesContractorToDisciplinesContractor(\n\t\tdc\n\t) {\n\t\tconst f =\n\t\t\tAPIDisciplinesContractorsCrewtoDisciplinesContractorsCrew\n\n\t\treturn {\n\t\t\tdiscipline_id:\n\t\t\t\tm.prop(dc.discipline_id || null)\n\t\t\t,contractor_id:\n\t\t\t\tm.prop(dc.contractor_id || null)\n\t\t\t,contractrecognitionid:\n\t\t\t\tdc.contractor_id\n\t\t\t,disciplines_contractors_name:\n\t\t\t\tm.prop(dc.disciplines_contractors_name)\n\t\t\t,disciplines_contractors_common:\n\t\t\t\tm.prop(dc.disciplines_contractors_common)\n\t\t\t,disciplines_contractors_mixed_crews:\n\t\t\t\tm.prop(dc.disciplines_contractors_mixed_crews)\n\t\t\t,disciplines_contractors_quality_rating:\n\t\t\t\tm.prop(dc.disciplines_contractors_quality_rating)\n\t\t\t,disciplines_contractors_total_rating:\n\t\t\t\tm.prop(dc.disciplines_contractors_total_rating)\n\t\t\t,disciplines_contractors_utilized:\n\t\t\t\tm.prop(dc.disciplines_contractors_utilized)\n\t\t\t,disciplines_contractors_id:\n\t\t\t\tm.prop(dc.disciplines_contractors_id || null)\n\t\t\t,user_id:\n\t\t\t\tm.prop(dc.user_id || null)\n\t\t\t,disciplines_contractors_crews:\n\t\t\t\tdc.disciplines_contractors_crews\n\t\t\t\t\t.map(\n\t\t\t\t\t\tf(dc.contractor_id)\n\t\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction timestampToIsoSafe(timestamp) {\n\t\treturn new Date(timestamp)\n\t\t\t.toISOString()\n\t}\n\n\tfunction timestampToIsoUnsafe(\n\t\ttimestamp\n\t) {\n\t\treturn timestamp\n\t\t\t? timestampToIsoSafe(timestamp)\n\t\t\t: null\n\t}\n\n\tfunction isoToTimeStampUnsafe(\n\t\tiso\n\t) {\n\t\treturn iso\n\t\t\t? isoToTimeStampSafe(iso)\n\t\t\t: null\n\t}\n\n\tfunction isoToTimeStampSafe(\n\t\tiso\n\t) {\n\t\treturn new Date(iso).getTime()\n\t}\n\n\tfunction APIProjectDetailsToProjectDetails(d){\n\t\treturn {\n\t\t\tdiscipline_id:\n\t\t\t\tm.prop( d.discipline_id )\n\t\t\t,project_id:\n\t\t\t\tm.prop( d.project_id )\n\t\t\t,user_id:\n\t\t\t\tm.prop( d.user_id )\n\t\t\t,allocation_id:\n\t\t\t\tm.prop( d.allocation_id )\n\t\t\t,invite_id: m.prop( d.invite_id )\n\t\t\t,invite_email: d.invite_email\n\t\t\t,project_extras_planned_amount:\n\t\t\t\tm.prop( d.project_extras_planned_amount )\n\t\t\t,project_extras_custom:\n\t\t\t\tm.prop( d.project_extras_custom )\n\t\t\t,project_extras_actual_amount:\n\t\t\t\tm.prop( d.project_extras_actual_amount )\n\t\t\t,project_extras_id:\n\t\t\t\tm.prop( d.project_extras_id )\n\t\t\t,parents:\n\t\t\t\tm.prop( d.parents )\n\t\t\t,project_extras_type:\n\t\t\t\tm.prop( d.project_extras_type )\n\t\t\t,project_extras_frequency:\n\t\t\t\tm.prop( d.project_extras_frequency )\n\t\t\t,project_extras_description:\n\t\t\t\tm.prop( d.project_extras_description )\n\t\t\t,project_extras_notes:\n\t\t\t\tm.prop( d.project_extras_notes )\n\t\t\t,project_extras_address:\n\t\t\t\tm.prop( d.project_extras_address )\n\t\t\t,project_extras_priority:\n\t\t\t\tm.prop( d.project_extras_priority )\n\t\t\t,project_extras_date_assigned:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(d.project_extras_date_assigned) )\n\t\t\t,project_extras_date_completed:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(d.project_extras_date_completed) )\n\t\t\t,project_extras_date_verified:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(d.project_extras_date_verified) )\n\t\t\t,project_extras_date_invalid:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(d.project_extras_date_invalid) )\n\t\t\t,organization_id: m.prop( d.organization_id )\n\t\t\t,project_name: d.project_name\n\t\t\t,organizations_disciplines_id: m.prop(d.organizations_disciplines_id)\n\t\t\t,relatedDiscipline: d.relateddiscipline\n\t\t\t,username: d.username\n\t\t\t,costinvoices: d.costinvoices\n\t\t\t,revenueinvoices: d.revenueinvoices\n\t\t\t,filecount: Number(d.filecount)\n\t\t\t,contract_id: d.contract_id\n\t\t\t,schedule_id: d.schedule_id\n\t\t}\n\t}\n\n\tfunction APIProjectContactsToProjectContacts(c){\n\t\treturn {\n\t\t\tproject_id: m.prop(c.project_id)\n\t\t\t,project_contacts_id: m.prop(c.project_contacts_id)\n\t\t\t,project_contacts_type: m.prop(c.project_contacts_type)\n\t\t\t,project_contacts_name: m.prop(c.project_contacts_name)\n\t\t\t,project_contacts_phone: m.prop(c.project_contacts_phone)\n\t\t\t,project_contacts_email: m.prop(c.project_contacts_email)\n\t\t\t,user_id: m.prop(c.user_id)\n\t\t\t,nameRole: c.project_contacts_name + ' - ' + c.project_contacts_type\n\t\t}\n\t}\n\n\tfunction APIProjectToProject(o) {\n\t\treturn R.merge(o, {\n\t\t\tproject_id:\n\t\t\t\tm.prop(o.project_id || null)\n\t\t\t,project_name:\n\t\t\t\tm.prop(o.project_name)\n\t\t\t,project_parent: m.prop(o.project_parent)\n\t\t\t,project_template_id: m.prop(o.project_template_id)\n\t\t\t,project_draft_at: m.prop( isoToTimeStampUnsafe(o.project_draft_at) )\n\t\t\t,project_tendered_at: m.prop( isoToTimeStampUnsafe(o.project_tendered_at) )\n\t\t\t,project_rejected_at: m.prop( isoToTimeStampUnsafe(o.project_rejected_at) )\n\t\t\t,project_accepted_at: m.prop( isoToTimeStampUnsafe(o.project_accepted_at) )\n\t\t\t,project_site_type:\n\t\t\t\tm.prop(o.project_site_type)\n\t\t\t,schedule_id:\n\t\t\t\tm.prop(o.schedule_id || null)\n\t\t\t,project_start_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe( o.project_start_date) )\n\t\t\t,project_dead_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_dead_date) )\n\t\t\t,project_final_acceptance:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_final_acceptance) )\n\t\t\t,project_commissioning_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_commissioning_date) )\n\t\t\t,project_completion_comments:\n\t\t\t\tm.prop(o.project_completion_comments)\n\t\t\t,project_completion_marker:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_completion_marker) )\n\t\t\t,project_documents:\n\t\t\t\t[ o.project_documents ]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.concat([[]])\n\t\t\t\t.map(\n\t\t\t\t\txs => xs.filter( x =>\n\t\t\t\t\t\tx.project_documents_href\n\t\t\t\t\t\t&& x.project_documents_label\n\t\t\t\t\t)\n\t\t\t\t\t.map(\n\t\t\t\t\t\tdoc => ({\n\t\t\t\t\t\t\tproject_documents_href:\n\t\t\t\t\t\t\t\tdoc.project_documents_href\n\t\t\t\t\t\t\t, project_documents_label:\n\t\t\t\t\t\t\t\tdoc.project_documents_label\n\t\t\t\t\t\t\t, project_documents_is_deliverable:\n\t\t\t\t\t\t\t\tdoc.project_documents_is_deliverable\n\t\t\t\t\t\t\t, project_documents_id: doc.project_documents_id\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.map( xs => m.prop(xs) )\n\t\t\t\t.shift()\n\n\t\t\t,project_suburb:\n\t\t\t\tm.prop( o.project_suburb )\n\t\t\t,project_material_suburb:\n\t\t\t\tm.prop( o.project_material_suburb )\n\t\t\t,project_priority:\n\t\t\t\tm.prop( Number(o.project_priority) )\n\t\t\t,ParentRecognition:\n\t\t\t\to.project_name\n\t\t\t,CommonRecognition:\n\t\t\t\to.project_id\n\t\t\t,disciplines:\n\t\t\t\t(o.disciplines || []).map(APIDisciplineToDiscipline(o.project_name))\n\t\t\t,project_extras:\n\t\t\t\t(o.project_extras || []).map(APIProjectDetailsToProjectDetails)\n\t\t\t,project_contacts:\n\t\t\t\t(o.project_contacts || []).map(APIProjectContactsToProjectContacts)\n\t\t\t,organization_id: m.prop(o.organization_id || null)\n\t\t\t,contract_id: o.contract_id\n\t\t\t,contract_name: o.contract_name\n\t\t\t,contractrecognitionid: o.contractrecognitionid\n\t\t\t,contractrecognitionname: o.contractrecognitionname\n\t\t\t,contractrecognitiondescription: o.contractrecognitiondescription\n\t\t\t,eotSum: o.eotsum\n\t\t\t,nodSum: o.nodsum\n\t\t\t,varSum: o.varsum\n\t\t\t,incompletetaskcount: o.incompletetaskcount\n\t\t\t,lastAllocationDate: o.lastallocationdate\n\t\t\t,zip_url: o.zip_url\n\t\t\t,latest_zip_url: o.latest_zip_url\n\t\t\t,latest_zip_date: o.latest_zip_date\n\t\t\t,is_zip_processing: o.is_zip_processing\n\t\t\t,workdays:\n\t\t\t\tR.sum(\n\t\t\t\t\to.disciplines\n\t\t\t\t\t.map((d) =>\n\t\t\t\t\t\td.discipline_work-d.discipline_completed > 0 && d.workdayeffort\n\t\t\t\t\t\t? (d.discipline_work-d.discipline_completed)/d.workdayeffort\n\t\t\t\t\t\t: 0\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t,worksummaries: o.worksummaries\n\t\t})\n\t}\n\n\tfunction APIProjectToProject(o) {\n\t\treturn R.merge(o, {\n\t\t\tproject_id:\n\t\t\t\tm.prop(o.project_id || null)\n\t\t\t,project_name:\n\t\t\t\tm.prop(o.project_name)\n\t\t\t,project_parent: m.prop(o.project_parent)\n\t\t\t,project_template_id: m.prop(o.project_template_id)\n\t\t\t,project_draft_at: m.prop( isoToTimeStampUnsafe(o.project_draft_at) )\n\t\t\t,project_tendered_at: m.prop( isoToTimeStampUnsafe(o.project_tendered_at) )\n\t\t\t,project_rejected_at: m.prop( isoToTimeStampUnsafe(o.project_rejected_at) )\n\t\t\t,project_accepted_at: m.prop( isoToTimeStampUnsafe(o.project_accepted_at) )\n\t\t\t,project_site_type:\n\t\t\t\tm.prop(o.project_site_type)\n\t\t\t,schedule_id:\n\t\t\t\tm.prop(o.schedule_id || null)\n\t\t\t,project_start_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe( o.project_start_date) )\n\t\t\t,project_dead_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_dead_date) )\n\t\t\t,project_final_acceptance:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_final_acceptance) )\n\t\t\t,project_commissioning_date:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_commissioning_date) )\n\t\t\t,project_completion_comments:\n\t\t\t\tm.prop(o.project_completion_comments)\n\t\t\t,project_completion_marker:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.project_completion_marker) )\n\t\t\t,project_documents:\n\t\t\t\t[ o.project_documents ]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.concat([[]])\n\t\t\t\t.map(\n\t\t\t\t\txs => xs.filter( x =>\n\t\t\t\t\t\tx.project_documents_href\n\t\t\t\t\t\t&& x.project_documents_label\n\t\t\t\t\t)\n\t\t\t\t\t.map(\n\t\t\t\t\t\tdoc => ({\n\t\t\t\t\t\t\tproject_documents_href:\n\t\t\t\t\t\t\t\tdoc.project_documents_href\n\t\t\t\t\t\t\t, project_documents_label:\n\t\t\t\t\t\t\t\tdoc.project_documents_label\n\t\t\t\t\t\t\t, project_documents_is_deliverable:\n\t\t\t\t\t\t\t\tdoc.project_documents_is_deliverable\n\t\t\t\t\t\t\t, project_documents_id: doc.project_documents_id\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.map( xs => m.prop(xs) )\n\t\t\t\t.shift()\n\n\t\t\t,project_suburb:\n\t\t\t\tm.prop( o.project_suburb )\n\t\t\t,project_material_suburb:\n\t\t\t\tm.prop( o.project_material_suburb )\n\t\t\t,project_priority:\n\t\t\t\tm.prop( Number(o.project_priority) )\n\t\t\t,ParentRecognition:\n\t\t\t\to.project_name\n\t\t\t,CommonRecognition:\n\t\t\t\to.project_id\n\t\t\t,disciplines:\n\t\t\t\t(o.disciplines || []).map(APIDisciplineToDiscipline(o.project_name))\n\t\t\t,project_extras:\n\t\t\t\t(o.project_extras || []).map(APIProjectDetailsToProjectDetails)\n\t\t\t,project_contacts:\n\t\t\t\t(o.project_contacts || []).map(APIProjectContactsToProjectContacts)\n\t\t\t,organization_id: m.prop(o.organization_id || null)\n\t\t\t,contract_id: o.contract_id\n\t\t\t,contract_name: o.contract_name\n\t\t\t,contractrecognitionid: o.contractrecognitionid\n\t\t\t,contractrecognitionname: o.contractrecognitionname\n\t\t\t,contractrecognitiondescription: o.contractrecognitiondescription\n\t\t\t,eotSum: o.eotsum\n\t\t\t,nodSum: o.nodsum\n\t\t\t,varSum: o.varsum\n\t\t\t,incompletetaskcount: o.incompletetaskcount\n\t\t\t,lastAllocationDate: o.lastallocationdate\n\t\t\t,zip_url: o.zip_url\n\t\t\t,latest_zip_url: o.latest_zip_url\n\t\t\t,latest_zip_date: o.latest_zip_date\n\t\t\t,is_zip_processing: o.is_zip_processing\n\t\t\t,workdays:\n\t\t\t\tR.sum(\n\t\t\t\t\to.disciplines\n\t\t\t\t\t.map((d) =>\n\t\t\t\t\t\td.discipline_work-d.discipline_completed > 0 && d.workdayeffort\n\t\t\t\t\t\t? (d.discipline_work-d.discipline_completed)/d.workdayeffort\n\t\t\t\t\t\t: 0\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t,worksummaries: o.worksummaries\n\t\t})\n\t}\n\n\n\tfunction ContractToAPIContract(o){\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\texposer(o.organization_id)\n\t\t\t\t|| undefined\n\t\t\t,contract_id: exposer(o.contract_id)\n\t\t\t,contract_name: exposer(o.contract_name)\n\t\t\t,contract_description: exposer(o.contract_description)\n\t\t\t,contract_payment_term: exposer(o.contract_payment_term)\n\t\t\t,contract_count_invoices: exposer(o.contract_count_invoices)\n\t\t\t,contract_start_date: timestampToIsoUnsafe(exposer(o.contract_start_date))\n\t\t\t,contract_end_date: timestampToIsoUnsafe(exposer(o.contract_end_date))\n\t\t\t,supplier_id: exposer(o.supplier_id)\n\t\t\t,supplier_name: exposer(o.supplier_name)\n\t\t\t,contract_items: o.contract_items.map(ContractItemToAPIContractItem)\n\t\t\t,contract_terms: exposer(o.contract_terms)\n\t\t\t,accounts:\n\t\t\t\texposer(o.account_bsb)\n\t\t\t\t|| exposer(o.account_no)\n\t\t\t\t|| exposer(o.account_bank)\n\t\t\t\t|| exposer(o.account_bic)\n\t\t\t\t|| exposer(o.account_iban)\n\t\t\t\t|| exposer(o.account_swift_code)\n\t\t\t\t? [{\n\t\t\t\t\taccount_id: exposer(o.account_id)\n\t\t\t\t\t,account_bsb: exposer(o.account_bsb)\n\t\t\t\t\t,account_no: exposer(o.account_no)\n\t\t\t\t\t,account_bank: exposer(o.account_bank)\n\t\t\t\t\t,account_bic: exposer(o.account_bic)\n\t\t\t\t\t,account_iban: exposer(o.account_iban)\n\t\t\t\t\t,account_swift_code: exposer(o.account_swift_code)\n\t\t\t\t}]\n\t\t\t\t: []\n\t\t\t,clients:\n\t\t\t\texposer(o.client_organization_name)\n\t\t\t\t|| exposer(o.client_incorporation_no)\n\t\t\t\t|| exposer(o.client_email)\n\t\t\t\t|| exposer(o.client_phone)\n\t\t\t\t|| exposer(o.client_address)\n\t\t\t\t|| exposer(o.client_state)\n\t\t\t\t|| exposer(o.client_postcode)\n\t\t\t\t\t? [{\n\t\t\t\t\t\tclient_id: exposer(o.client_id)\n\t\t\t\t\t\t,client_organization_name: exposer(o.client_organization_name)\n\t\t\t\t\t\t,client_incorporation_no: exposer(o.client_incorporation_no)\n\t\t\t\t\t\t,client_email: exposer(o.client_email)\n\t\t\t\t\t\t,client_phone: exposer(o.client_phone)\n\t\t\t\t\t\t,client_address: exposer(o.client_address)\n\t\t\t\t\t\t,client_state: exposer(o.client_state)\n\t\t\t\t\t\t,client_postcode: exposer(o.client_postcode)\n\t\t\t\t\t}]\n\t\t\t\t\t: []\n\t\t}\n\t}\n\n\n\tfunction ContractItemToAPIContractItem(i){\n\t\treturn {\n\t\t\tcontract_id:\n\t\t\t\ti.contract_id\n\t\t\t,modules_id:\n\t\t\t\ti.modules_id\n\t\t\t,contractor_id:\n\t\t\t\ti.contractor_id\n\t\t\t,project_id:\n\t\t\t\ti.project_id\n\t\t\t,organizations_disciplines_id:\n\t\t\t\ti.organizations_disciplines_id\n\t\t\t,tools_id:\n\t\t\t\ti.tools_id\n\t\t\t,user_id:\n\t\t\t\ti.user_id\n\t\t\t,crew_id:\n\t\t\t\ti.crew_id\n\t\t\t,crews_discipline_rates_id:\n\t\t\t\ti.crews_discipline_rates_id\n\t\t\t,warehouse_id:\n\t\t\t\ti.warehouse_id\n\t\t\t,contract_items_id:\n\t\t\t\texposer(i.contract_items_id)\n\t\t\t,contract_items_name:\n\t\t\t\texposer(i.contract_items_name)\n\t\t\t,contract_items_description:\n\t\t\t\texposer(i.contract_items_description)\n\t\t\t,contract_items_client_reference:\n\t\t\t\texposer(i.contract_items_client_reference)\n\t\t\t,contract_items_rate:\n\t\t\t\texposer(i.contract_items_rate)\n\t\t\t,contract_items_budget:\n\t\t\t\texposer(i.contract_items_budget)\n\t\t\t,contract_items_service:\n\t\t\t\texposer(i.contract_items_service)\n\t\t\t,contract_items_depreciation:\n\t\t\t\texposer(i.contract_items_depreciation)\n\t\t\t,contract_items_appreciation:\n\t\t\t\texposer(i.contract_items_appreciation)\n\t\t\t,contract_items_uom:\n\t\t\t\texposer(i.contract_items_uom)\n\t\t\t,contract_items_damages_rate:\n\t\t\t\texposer(i.contract_items_damages_rate)\n\t\t\t,contract_items_damages_period:\n\t\t\t\texposer(i.contract_items_damages_period)\n\t\t\t,contract_items_applied:\n\t\t\t\texposer(i.contract_items_applied)\n\t\t\t,contract_items_recorded_reference:\n\t\t\t\texposer(i.contract_items_recorded_reference)\n\t\t\t,contract_items_recorded_reference_standard:\n\t\t\t\texposer(i.contract_items_recorded_reference_standard)\n\t\t}\n\t}\n\n\n\tfunction APIContractToContract(o){\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\to.organization_id\n\t\t\t,created:\n\t\t\t\tfalse\n\t\t\t// ,contractrecognitionid:\n\t\t\t\t// o.contract_id\n\t\t\t,contract_id:\n\t\t\t\to.contract_id\n\t\t\t,contract_name:\n\t\t\t\to.contract_name\n\t\t\t,contract_description:\n\t\t\t\to.contract_description\n\t\t\t,contract_payment_term:\n\t\t\t \to.contract_payment_term\n\t\t\t,contract_count_invoices:\n\t\t\t\to.contract_count_invoices\n\t\t\t,contract_start_date:\n\t\t\t\ttimestampToIsoUnsafe(o.contract_start_date)\n\t\t\t,contract_end_date:\n\t\t\t\ttimestampToIsoUnsafe(o.contract_end_date)\n\t\t\t,supplier_id:\n\t\t\t\to.supplier_id\n\t\t\t,supplier_name:\n\t\t\t\to.supplier_name\n\t\t\t,contract_items:\n\t\t\t\to.contract_items.map(APIContractItemToContractItem(o))\n\n\t\t\t,client_id: o.client_id\n\t\t\t,client_organization_name: o.client_organization_name\n\t\t\t,client_incorporation_no: o.client_incorporation_no\n\t\t\t,client_email: o.client_email\n\t\t\t,client_phone: o.client_phone\n\t\t\t,client_address: o.client_address\n\t\t\t,client_state: o.client_state\n\t\t\t,client_postcode: o.client_postcode\n\n\t\t\t,account_id: o.account_id\n\t\t\t,account_bsb: o.account_bsb\n\t\t\t,account_no: o.account_no\n\t\t\t,account_bank: o.account_bank\n\t\t\t,account_bic: o.account_bic\n\t\t\t,account_iban: o.account_iban\n\t\t\t,account_swift_code: o.account_swift_code\n\n\t\t\t,contract_terms: o.contract_terms\n\t\t\t,badcontractcount: o.badcontractcount\n\t\t\t,goodcontractcount: o.goodcontractcount\n\t\t}\n\t}\n\n\n\tconst APIContractItemToContractItem = (contract) => (i) => {\n\t\treturn {\n\t\t\tkey: Math.random().toString(15).slice(2, 8)\n\t\t\t,contract_name: contract.contract_name\n\t\t\t,contractStart: contract.contract_start_date\n\t\t\t,contractEnd: contract.contract_end_date\n\t\t\t,damagesEnd: new Date(contract.contract_end_date).getTime()\n\t\t\t\t+ i.contract_items_damages_period * milliperday\n\n\t\t\t,contractrecognitionname: i.contract_items_name + ' - ' + i.contract_items_description\n\t\t\t,contractrecognitiondescription: i.contract_items_description\n\t\t\t,contractrecognitionid:\n\t\t\t\ti.modules_id\n\t\t\t\t|| i.warehouse_id\n\t\t\t\t|| i.contractor_id\n\t\t\t\t|| i.project_id\n\t\t\t\t|| i.organizations_disciplines_id\n\t\t\t\t|| i.tools_id\n\t\t\t\t|| i.user_id\n\t\t\t\t|| i.crew_id\n\t\t\t\t|| i.crews_discipline_rates_id\n\t\t\t,created: false\n\n\t\t\t,organizations_disciplines_id: i.organizations_disciplines_id\n\t\t\t,crews_discipline_rates_id: i.crews_discipline_rates_id\n\t\t\t,contractor_id: i.contractor_id\n\t\t\t,crew_id: i.crew_id\n\t\t\t,modules_id: i.modules_id\n\t\t\t,project_id: i.project_id\n\t\t\t,tools_id: i.tools_id\n\t\t\t,user_id: i.user_id\n\t\t\t,warehouse_id: i.warehouse_id\n\n\t\t\t,organization_id:\n\t\t\t\tm.prop( i.organization_id )\n\t\t\t,contract_id:\n\t\t\t\tm.prop( i.contract_id )\n\t\t\t,contract_items_id:\n\t\t\t\tm.prop( i.contract_items_id )\n\t\t\t,contract_items_name:\n\t\t\t\tm.prop( i.contract_items_name )\n\t\t\t,contract_items_description:\n\t\t\t\tm.prop( i.contract_items_description )\n\t\t\t,contract_items_client_reference:\n\t\t\t\tm.prop( i.contract_items_client_reference )\n\t\t\t,contract_items_rate:\n\t\t\t\tm.prop( i.contract_items_rate )\n\t\t\t,contract_items_budget:\n\t\t\t\tm.prop( i.contract_items_budget )\n\t\t\t,contract_items_service:\n\t\t\t\tm.prop( i.contract_items_service )\n\t\t\t,contract_items_depreciation:\n\t\t\t\tm.prop( i.contract_items_depreciation )\n\t\t\t,contract_items_appreciation:\n\t\t\t\tm.prop( i.contract_items_appreciation )\n\t\t\t,contract_items_uom:\n\t\t\t\tm.prop( i.contract_items_uom )\n\t\t\t,contract_items_damages_rate:\n\t\t\t\tm.prop( i.contract_items_damages_rate )\n\t\t\t,contract_items_damages_period:\n\t\t\t\tm.prop( i.contract_items_damages_period )\n\t\t\t,contract_items_applied:\n\t\t\t\tm.prop( i.contract_items_applied )\n\t\t\t,contract_items_recorded_reference:\n\t\t\t\tm.prop( i.contract_items_recorded_reference )\n\t\t\t,contract_items_recorded_reference_standard:\n\t\t\t\tm.prop( i.contract_items_recorded_reference_standard )\n\t\t}\n\t}\n\n\tconst contracts = {\n\t\tpatch: {\n\t\t\tmany: function( list ) {\n\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/contracts']]\n\t\t\t\t\t,[ list\n\t\t\t\t\t, ContractToAPIContract\n\t\t\t\t\t, APIContractToContract\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,fetch: {\n\t\t\tall: function({props, depth, contracts, getorganizationoh}) {\n\t\t\t\tconst params = [\n\t\t\t\t\t['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t\t,['contracts', contracts || null]\n\t\t\t\t\t,['getorganizationoh', getorganizationoh || null]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/contracts', params]])\n\t\t\t\t.then( list => list.map( APIContractToContract ))\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/contracts/', id]])\n\t\t\t}\n\t\t}\n\t}\n\tconst contract_items = {\n\t\tremove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/contracts/contract_items/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst contracts_invoices_calculations = {\n\t\tfetch: {\n\t\t\tall: function(\n\t\t\t\tparamObj, {financialsubsets, ledgerdetails, getmatdata, specificproject}\n\t\t\t){\n\n\t\t\t\tconst params =\n\t\t\t\t\t[\n\t\t\t\t\t\t['scheduleList', paramObj.scheduleList.map(R.omit(['makeChart','chart', 'chartElement', 'tp']))]\n\t\t\t\t\t\t,['financialsubsets', financialsubsets]\n\t\t\t\t\t\t,['ledgerdetails', ledgerdetails]\n\t\t\t\t\t\t,['getmatdata', getmatdata]\n\t\t\t\t\t\t,['specificproject', specificproject]\n\t\t\t\t\t\t,['contracts', paramObj.contracts]\n\t\t\t\t\t\t,['invoices', paramObj.invoices]\n\t\t\t\t\t\t,['contract_items', paramObj.contract_items]\n\t\t\t\t\t\t,['items', paramObj.items]\n\t\t\t\t\t\t,['viewwindow', paramObj.viewwindow]\n\t\t\t\t\t\t,['nochildren', paramObj.nochildren]\n\t\t\t\t\t\t,['props', paramObj.props]\n\t\t\t\t\t\t,['sumtype', paramObj.sumtype]\n\t\t\t\t\t\t,['scheduleonly', paramObj.scheduleonly]\n\t\t\t\t\t\t,['getchartdata', paramObj.getchartdata]\n\t\t\t\t\t\t,['now', new Date().getTime()]\n\t\t\t\t\t\t,['endDate', paramObj.endDate]\n\t\t\t\t\t\t,['startDate', paramObj.startDate]\n\t\t\t\t\t\t,['currentRoute', paramObj.currentRoute]\n\t\t\t\t\t\t,['breakdown', paramObj.breakdown]\n\t\t\t\t\t]\n\n\t\t\t\tconst baseURL = process.env.HARTH_API_CALC_URL\n\t\t\t\treturn LIST_ATTRS(\n\t\t\t\t\tbaseURL\n\t\t\t\t\t, baseHeaders()\n\t\t\t\t\t, [\n\t\t\t\t\t\t'GET'\n\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t'/contracts_invoices_calculations'\n\t\t\t\t\t\t\t\t+ '/endDate/'\n\t\t\t\t\t\t\t\t+ paramObj.endDate\n\t\t\t\t\t\t\t\t+ '/startDate/'\n\t\t\t\t\t\t\t\t+ paramObj.startDate\n\t\t\t\t\t\t\t\t+ '/currentRoute/'\n\t\t\t\t\t\t\t\t+ paramObj.currentRoute\n\n\t\t\t\t\t\t\t, params\n\t\t\t\t\t\t]\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIInvoiceItemsToInvoiceItems(i){\n\t\treturn {\n\t\t\tproject_extras_id: i.project_extras_id\n\t\t\t,invoice_items_id: i.invoice_items_id\n\t\t\t,invoice_items_amount: i.invoice_items_amount\n\t\t\t,invoice_items_received_amount: i.invoice_items_received_amount\n\t\t\t,timesheets_id: i.timesheets_id\n\t\t\t,invoice_id: i.invoice_id\n\t\t}\n\t}\n\n\tfunction APIInvoiceToInvoice(i){\n\t\treturn {\n\t\t\tinvoice_type: m.prop(i.invoice_type)\n\t\t\t,allocation_id: m.prop(i.allocation_id)\n\t\t\t,organization_id: m.prop(i.organization_id)\n\t\t\t,contract_id: m.prop(i.contract_id)\n\t\t\t,contract_items_id: m.prop(i.contract_items_id)\n\t\t\t,invoice_id: m.prop(i.invoice_id)\n\t\t\t,invoice_inv_id: m.prop(i.invoice_inv_id)\n\t\t\t,invoice_date: m.prop(timestampToIsoUnsafe(i.invoice_date))\n\t\t\t,invoice_received_date: m.prop(timestampToIsoUnsafe(i.invoice_received_date))\n\t\t\t,invoice_due_date: m.prop(timestampToIsoUnsafe(i.invoice_due_date))\n\t\t\t,invoice_no: m.prop(i.invoice_no)\n\t\t\t,invoice_received: m.prop(i.invoice_received)\n\t\t\t,invoice_name: m.prop(i.invoice_name)\n\t\t\t,invoice_description: m.prop(i.invoice_description)\n\t\t\t,invoice_client_reference: m.prop(i.invoice_client_reference)\n\t\t\t,invoice_items_client_reference: m.prop(i.invoice_items_client_reference)\n\t\t\t,invoice_uom: m.prop(i.invoice_uom)\n\t\t\t,invoice_amount: m.prop(i.invoice_amount)\n\t\t\t,invoice_reversal: m.prop(false)\n\t\t\t,invoice_service_amount: m.prop(i.invoice_service_amount)\n\t\t\t,invoice_depreciation_amount: m.prop(i.invoice_depreciation_amount)\n\t\t\t,invoice_appreciation_amount: m.prop(i.invoice_appreciation_amount)\n\t\t\t,invoice_damages_amount: m.prop(i.invoice_damages_amount)\n\t\t\t,invoice_rate: m.prop(i.invoice_rate)\n\t\t\t,invoice_service_rate: m.prop(i.invoice_service_rate)\n\t\t\t,invoice_depreciation_rate: m.prop(i.invoice_depreciation_rate)\n\t\t\t,invoice_appreciation_rate: m.prop(i.invoice_appreciation_rate)\n\t\t\t,invoice_damages_rate: m.prop(i.invoice_damages_rate)\n\t\t\t,invoice_approval: m.prop(i.invoice_approval)\n\t\t\t,invoice_approver: m.prop(i.invoice_approver)\n\t\t\t// ,contractrecognitionid: i.invoice_id\n\t\t\t,supplier_name: m.prop(i.supplier_name)\n\t\t\t,supplier_id: m.prop(i.supplier_id)\n\t\t\t,user_id: m.prop(i.user_id)\n\t\t\t,project_id: m.prop(i.project_id)\n\t\t\t,project_name: m.prop(i.project_name)\n\t\t\t,created: false\n\t\t\t,contract_payment_term: i.contract_payment_term\n\t\t\t,invoice_amount_total: i.invoice_amount_total\n\t\t\t,invoice_items: i.invoice_items.map( APIInvoiceItemsToInvoiceItems )\n\t\t}\n\t}\n\n\tfunction InvoiceItemsToAPIInvoiceItems(i){\n\t\treturn {\n\t\t\tproject_extras_id: i.project_extras_id\n\t\t\t,invoice_items_id: i.invoice_items_id\n\t\t\t,invoice_items_amount: i.invoice_items_amount\n\t\t\t,invoice_items_received_amount: i.invoice_items_received_amount\n\t\t\t,timesheets_id: i.timesheets_id\n\t\t\t,invoice_id: i.invoice_id\n\t\t}\n\t}\n\n\n\tfunction InvoiceToAPIInvoice(i){\n\t\treturn {\n\t\t\tinvoice_type: i.invoice_type()\n\t\t\t,contract_id: i.contract_id()\n\t\t\t,contract_items_id: i.contract_items_id()\n\t\t\t,organization_id: i.organization_id()\n\t\t\t,invoice_date: timestampToIsoUnsafe(i.invoice_date())\n\t\t\t,invoice_received_date: timestampToIsoUnsafe(i.invoice_received_date())\n\t\t\t,invoice_due_date: timestampToIsoUnsafe(i.invoice_due_date())\n\t\t\t,invoice_id: i.invoice_id()\n\t\t\t,invoice_no: i.invoice_no()\n\t\t\t,allocation_id: i.allocation_id()\n\t\t\t,invoice_received: i.invoice_received()\n\t\t\t,invoice_name: i.invoice_name()\n\t\t\t,invoice_description: i.invoice_description()\n\t\t\t,invoice_client_reference: i.invoice_client_reference()\n\t\t\t,invoice_items_client_reference: i.invoice_items_client_reference()\n\t\t\t,invoice_uom: i.invoice_uom()\n\t\t\t,invoice_amount: i.invoice_amount()\n\t\t\t,invoice_reversal: i.invoice_reversal()\n\t\t\t,invoice_service_amount: i.invoice_service_amount()\n\t\t\t,invoice_depreciation_amount: i.invoice_depreciation_amount()\n\t\t\t,invoice_appreciation_amount: i.invoice_appreciation_amount()\n\t\t\t,invoice_damages_amount: i.invoice_damages_amount()\n\t\t\t,invoice_rate: i.invoice_rate()\n\t\t\t,invoice_service_rate: i.invoice_service_rate()\n\t\t\t,invoice_depreciation_rate: i.invoice_depreciation_rate()\n\t\t\t,invoice_appreciation_rate: i.invoice_appreciation_rate()\n\t\t\t,invoice_damages_rate: i.invoice_damages_rate()\n\t\t\t,invoice_approval: i.invoice_approval()\n\t\t\t,invoice_approver: i.invoice_approver()\n\t\t\t,supplier_name: i.supplier_name()\n\t\t\t,supplier_id: i.supplier_id()\n\t\t\t,project_id: i.project_id()\n\t\t\t,project_name: i.project_name()\n\t\t\t,user_id: i.user_id()\n\t\t\t,invoice_items: i.invoice_items.map( InvoiceItemsToAPIInvoiceItems )\n\t\t}\n\t}\n\n\n\n\tconst invoices = {\n\t\tpatch: {\n\t\t\tmany: function(list, disableList) {\n\t\t\t\tconst params = [['disableList', disableList]]\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/invoices/', params]]\n\t\t\t\t\t,[ list\n\t\t\t\t\t, InvoiceToAPIInvoice\n\t\t\t\t\t, APIInvoiceToInvoice\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,fetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(['GET', ['/invoices']])\n\t\t\t\t\t.then( list => list.map( APIInvoiceToInvoice ))\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/invoices/', id]])\n\t\t\t}\n\t\t}\n\t\t,itemsremove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/invoice_items/', id]])\n\t\t\t}\n\t\t}\n\t\t,generateqi({\n\t\t\ttype\n\t\t\t,project_extras\n\t\t\t,invoices\n\t\t\t,chargeDetails\n\t\t\t,contract_id\n\t\t\t,contacts\n\t\t\t,generateOnly\n\t\t}){\n\t\t\tconst body = {\n\t\t\t\ttype\n\t\t\t\t,project_extras\n\t\t\t\t,invoices\n\t\t\t\t,chargeDetails\n\t\t\t\t,contract_id\n\t\t\t\t,contacts: {\n\t\t\t\t\tphones: contacts.phones()\n\t\t\t\t\t\t,emails: contacts.emails()\n\t\t\t\t\t\t,message: contacts.message()\n\t\t\t\t}\n\t\t\t\t,generateOnly\n\t\t\t}\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/quote/']],\n\t\t\t\t[body, I, I]\n\t\t\t)\n\t\t}\n\t}\n\n\n\tfunction DisciplineToAPIDiscipline(d) {\n\n\t\treturn {\n\t\t\tdiscipline_name: d.discipline_name()\n\t\t\t,organizations_disciplines_id: d.organizations_disciplines_id()\n\t\t\t,discipline_description: d.discipline_description()\n\t\t\t,discipline_order: d.discipline_order()\n\t\t\t,discipline_priority: d.discipline_order()\n\t\t\t,discipline_contract_multiplier: d.discipline_contract_multiplier()\n\t\t\t,discipline_work: d.discipline_work()\n\t\t\t,discipline_planned: d.discipline_planned()\n\t\t\t,discipline_combination_limit: d.discipline_combination_limit()\n\t\t\t,discipline_combine: d.discipline_combine()\n\t\t\t,discipline_custom: d.discipline_custom()\n\t\t\t,discipline_completed: d.discipline_completed()\n\t\t\t,discipline_harshness: d.discipline_harshness()\n\t\t\t,discipline_percent: d.discipline_percent()\n\t\t\t,discipline_flow:\n\t\t\t\td.discipline_flow() == 'Workflows'\n\t\t\t\t\t? 'Conc'\n\t\t\t\t\t: 'Cons'\n\t\t\t,discipline_start_date:\n\t\t\t\ttimestampToIsoUnsafe(d.discipline_start_date())\n\t\t\t,discipline_end_date:\n\t\t\t\ttimestampToIsoUnsafe(d.discipline_end_date())\n\t\t\t,discipline_recovery: d.discipline_recovery()\n\t\t\t,discipline_auto_assign_tasks: d.discipline_auto_assign_tasks()\n\t\t\t,discipline_strict_end: d.discipline_strict_end()\n\t\t\t,discipline_strict_start: d.discipline_strict_start()\n\t\t\t,discipline_consistency: d.discipline_consistency()\n\t\t\t,discipline_consolidate_start: d.discipline_consolidate_start()\n\t\t\t,discipline_uom: d.discipline_uom()\n\t\t\t,disciplines_contractors: d.disciplines_contractors\n\t\t\t\t.map(DisciplinesContractorToAPIDisciplinesContractor)\n\t\t\t,project_id:\n\t\t\t\td.project_id() || undefined\n\t\t\t,discipline_id:\n\t\t\t\td.discipline_id() || undefined\n\t\t\t,organizations_disciplines_nominal_revenue_rate:\n\t\t\t\td.organizations_disciplines_nominal_revenue_rate() || 0\n\t\t\t,organizations_disciplines_nominal_expenditure_rate:\n\t\t\t\td.organizations_disciplines_nominal_expenditure_rate() || 0\n\t\t\t,contract_items_client_reference: d.contract_items_client_reference() || ''\n\t\t\t,organizations_disciplines_nominal_rate: d.organizations_disciplines_nominal_rate() || 0\n\t\t}\n\t}\n\n\tfunction DisciplinesContractorToAPIDisciplinesContractor(\n\t\tdc\n\t) {\n\t\treturn {\n\t\t\tdisciplines_contractors_common:\n\t\t\t\tdc.disciplines_contractors_common()\n\t\t\t,disciplines_contractors_mixed_crews:\n\t\t\t\tdc.disciplines_contractors_mixed_crews()\n\t\t\t,disciplines_contractors_name:\n\t\t\t\tdc.disciplines_contractors_name()\n\t\t\t,disciplines_contractors_quality_rating:\n\t\t\t\tdc.disciplines_contractors_quality_rating()\n\t\t\t,disciplines_contractors_total_rating:\n\t\t\t\tdc.disciplines_contractors_total_rating()\n\t\t\t,disciplines_contractors_utilized:\n\t\t\t\tdc.disciplines_contractors_utilized()\n\t\t\t,disciplines_contractors_crews:\n\t\t\t\tdc.disciplines_contractors_crews\n\t\t\t\t.map(\n\t\t\t\t\tDisciplinesContractorsCrewToAPIDisciplinesContractorsCrew\n\t\t\t\t)\n\t\t\t,disciplines_contractors_id:\n\t\t\t\tdc.disciplines_contractors_id()\n\t\t\t\t|| undefined\n\t\t\t,contractor_id:\n\t\t\t\tdc.contractor_id()\n\t\t\t\t|| undefined\n\t\t\t,discipline_id:\n\t\t\t\tdc.discipline_id()\n\t\t\t\t|| undefined\n\t\t\t,user_id:\n\t\t\t\tdc.user_id()\n\t\t\t\t|| undefined\n\t\t}\n\t}\n\n\tfunction DisciplinesContractorsCrewToAPIDisciplinesContractorsCrew(\n\t\tdcc\n\t) {\n\n\t\treturn {\n\t\t\tdisciplines_contractors_crews_common:\n\t\t\t\tdcc.disciplines_contractors_crews_common()\n\t\t\t,disciplines_contractors_crews_excess:\n\t\t\t\tdcc.disciplines_contractors_crews_excess()\n\t\t\t,disciplines_contractors_crews_invalid:\n\t\t\t\tdcc.disciplines_contractors_crews_invalid()\n\t\t\t,disciplines_contractors_crews_name:\n\t\t\t\tdcc.disciplines_contractors_crews_name()\n\t\t\t,disciplines_contractors_crews_contract_multiplier:\n\t\t\t\tdcc.disciplines_contractors_crews_contract_multiplier()\n\t\t\t,disciplines_contractors_crews_rating:\n\t\t\t\tdcc.disciplines_contractors_crews_rating()\n\t\t\t,disciplines_contractors_crews_utilized:\n\t\t\t\tdcc.disciplines_contractors_crews_utilized()\n\t\t\t,disciplines_contractors_crews_work_completed:\n\t\t\t\tdcc.disciplines_contractors_crews_work_completed()\n\t\t\t,crew_id:\n\t\t\t\tdcc.crew_id()\n\t\t\t\t|| undefined\n\t\t\t,disciplines_contractors_crews_id:\n\t\t\t\tdcc.disciplines_contractors_crews_id()\n\t\t\t\t|| undefined\n\t\t\t,disciplines_contractors_id:\n\t\t\t\tdcc.disciplines_contractors_id()\n\t\t\t\t|| undefined\n\t\t}\n\t}\n\n\tfunction APIScheduleToSchedule(o) {\n\t\treturn {\n\t\t\tschedule_id: o.schedule_id\n\t\t\t,eotSum: o.eotsum\n\t\t\t,nodSum: o.nodsum\n\t\t\t,varSum: o.varsum\n\t\t\t,lastAllocationDate: o.lastallocationdate\n\t\t\t,schedule_shared_resources: o.schedule_shared_resources\n\t\t\t,schedule_name: o.schedule_name\n\t\t\t,schedules_parameters_id: o.schedule_versions[0]\n\t\t\t\t.schedules_parameters_id\n\t\t\t,schedule_versions: o.schedule_versions\n\t\t\t\t.map(\n\t\t\t\t\tv => ({\n\t\t\t\t\t\tschedule_version_id:\n\t\t\t\t\t\t\tv.schedule_version_id\n\t\t\t\t\t\t,schedule_version_created:\n\t\t\t\t\t\t\tisoToTimeStampUnsafe(v.schedule_version_created)\n\t\t\t\t\t\t,schedule_id: v.schedule_id\n\t\t\t\t\t\t,schedule_version_old_id: v.schedule_version_old_id\n\t\t\t\t\t\t,schedule_priority: v.schedule_priority\n\t\t\t\t\t\t,schedules_parameters_id: v.schedules_parameters_id\n\t\t\t\t\t\t,scheduleNameVersion:\n\t\t\t\t\t\t\to.schedule_name\n\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t+ v.schedule_priority\n\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t+ moment(new Date(isoToTimeStampUnsafe(v.schedule_version_created))).format(\"lll\")\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction ScheduleToAPISchedule(o) {\n\t\treturn {\n\t\t\tschedule_name: o.schedule_name\n\t\t\t,schedule_id: o.schedule_id\n\t\t\t,schedule_parent: o.schedule_parent || null\n\t\t\t,schedule_shared_resources: o.schedule_shared_resources\n\t\t\t,schedule_versions: o.schedule_versions\n\t\t\t\t.map(\n\t\t\t\t\tv => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tschedule_version_created:\n\t\t\t\t\t\t\t\ttimestampToIsoUnsafe(v.schedule_version_created)\n\t\t\t\t\t\t\t,schedule_priority:\n\t\t\t\t\t\t\t\tv.schedule_priority\n\t\t\t\t\t\t\t,schedules_parameters_id:\n\t\t\t\t\t\t\t\tv.schedules_parameters_id\n\t\t\t\t\t\t\t,schedule_version_old_id:\n\t\t\t\t\t\t\t\tv.schedule_version_old_id\n\t\t\t\t\t\t\t,schedule_id:\n\t\t\t\t\t\t\t\tv.schedule_id || undefined\n\t\t\t\t\t\t\t,schedule_version_id:\n\t\t\t\t\t\t\t\tv.schedule_version_id || undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t,project_id:\n\t\t\t\to.project_id || undefined\n\t\t}\n\t}\n\n\n\tfunction APISchedulesParametersToUI(t) {\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\tm.prop(t.organization_id || null)\n\t\t\t,schedules_parameters_id:\n\t\t\t\tm.prop(t.schedules_parameters_id || null)\n\t\t\t,schedules_parameters_name:\n\t\t\t\tm.prop(t.schedules_parameters_name)\n\t\t\t,schedules_parameters_forward_limit:\n\t\t\t\tm.prop(t.schedules_parameters_forward_limit)\n\t\t\t,schedules_parameters_consolidate_limit:\n\t\t\t\tm.prop(t.schedules_parameters_consolidate_limit)\n\t\t\t,schedules_parameters_skip_consolidate_ratio:\n\t\t\t\tm.prop(t.schedules_parameters_skip_consolidate_ratio)\n\t\t\t,schedules_parameters_skip_consolidate_saving:\n\t\t\t\tm.prop(t.schedules_parameters_skip_consolidate_saving)\n\t\t\t,schedules_parameters_mobilisation_limit:\n\t\t\t\tm.prop(t.schedules_parameters_mobilisation_limit)\n\t\t\t,schedules_parameters_start_date_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_start_date_weighting)\n\t\t\t,schedules_parameters_mobilisation_distance_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_mobilisation_distance_weighting)\n\t\t\t,schedules_parameters_discipline_level_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_discipline_level_weighting)\n\t\t\t,schedules_parameters_business_level_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_business_level_weighting)\n\t\t\t,schedules_parameters_quality_rating_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_quality_rating_weighting)\n\t\t\t,schedules_parameters_comfort_zone_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_comfort_zone_weighting)\n\t\t\t,schedules_parameters_work_rates_weighting:\n\t\t\t\tm.prop(t.schedules_parameters_work_rates_weighting)\n\t\t\t,schedules_parameters_team_required_25:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_25)\n\t\t\t,schedules_parameters_team_required_5:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_5)\n\t\t\t,schedules_parameters_team_required_75:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_75)\n\t\t\t,schedules_parameters_team_required_10:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_10)\n\t\t\t,schedules_parameters_team_required_125:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_125)\n\t\t\t,schedules_parameters_team_required_100:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_100)\n\t\t\t,schedules_parameters_team_required_recovery_25:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_25)\n\t\t\t,schedules_parameters_team_required_recovery_5:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_5)\n\t\t\t,schedules_parameters_team_required_recovery_75:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_75)\n\t\t\t,schedules_parameters_team_required_recovery_10:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_10)\n\t\t\t,schedules_parameters_team_required_recovery_125:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_125)\n\t\t\t,schedules_parameters_team_required_recovery_100:\n\t\t\t\tm.prop(t.schedules_parameters_team_required_recovery_100)\n\t\t}\n\t}\n\n\tfunction SchedulesParametersToAPISchedulesParameters(t) {\n\t\treturn {\n\t\t\tschedules_parameters_name:\n\t\t\t\tt.schedules_parameters_name()\n\t\t\t,schedules_parameters_forward_limit:\n\t\t\t\tt.schedules_parameters_forward_limit()\n\t\t\t,schedules_parameters_consolidate_limit:\n\t\t\t\tt.schedules_parameters_consolidate_limit()\n\t\t\t,schedules_parameters_skip_consolidate_ratio:\n\t\t\t\tt.schedules_parameters_skip_consolidate_ratio()\n\t\t\t,schedules_parameters_skip_consolidate_saving:\n\t\t\t\tt.schedules_parameters_skip_consolidate_saving()\n\t\t\t,schedules_parameters_mobilisation_limit:\n\t\t\t\tt.schedules_parameters_mobilisation_limit()\n\t\t\t,schedules_parameters_start_date_weighting:\n\t\t\t\tt.schedules_parameters_start_date_weighting()\n\t\t\t,schedules_parameters_mobilisation_distance_weighting:\n\t\t\t\tt.schedules_parameters_mobilisation_distance_weighting()\n\t\t\t,schedules_parameters_discipline_level_weighting:\n\t\t\t\tt.schedules_parameters_discipline_level_weighting()\n\t\t\t,schedules_parameters_business_level_weighting:\n\t\t\t\tt.schedules_parameters_business_level_weighting()\n\t\t\t,schedules_parameters_quality_rating_weighting:\n\t\t\t\tt.schedules_parameters_quality_rating_weighting()\n\t\t\t,schedules_parameters_comfort_zone_weighting:\n\t\t\t\tt.schedules_parameters_comfort_zone_weighting()\n\t\t\t,schedules_parameters_work_rates_weighting:\n\t\t\t\tt.schedules_parameters_work_rates_weighting()\n\t\t\t,schedules_parameters_team_required_25:\n\t\t\t\tt.schedules_parameters_team_required_25()\n\t\t\t,schedules_parameters_team_required_5:\n\t\t\t\tt.schedules_parameters_team_required_5()\n\t\t\t,schedules_parameters_team_required_75:\n\t\t\t\tt.schedules_parameters_team_required_75()\n\t\t\t,schedules_parameters_team_required_10:\n\t\t\t\tt.schedules_parameters_team_required_10()\n\t\t\t,schedules_parameters_team_required_125:\n\t\t\t\tt.schedules_parameters_team_required_125()\n\t\t\t,schedules_parameters_team_required_100:\n\t\t\t\tt.schedules_parameters_team_required_100()\n\t\t\t,schedules_parameters_team_required_recovery_25:\n\t\t\t\tt.schedules_parameters_team_required_recovery_25()\n\t\t\t,schedules_parameters_team_required_recovery_5:\n\t\t\t\tt.schedules_parameters_team_required_recovery_5()\n\t\t\t,schedules_parameters_team_required_recovery_75:\n\t\t\t\tt.schedules_parameters_team_required_recovery_75()\n\t\t\t,schedules_parameters_team_required_recovery_10:\n\t\t\t\tt.schedules_parameters_team_required_recovery_10()\n\t\t\t,schedules_parameters_team_required_recovery_125:\n\t\t\t\tt.schedules_parameters_team_required_recovery_125()\n\t\t\t,schedules_parameters_team_required_recovery_100:\n\t\t\t\tt.schedules_parameters_team_required_recovery_100()\n\t\t\t,organization_id:\n\t\t\t\tt.organization_id()\n\t\t\t\t|| undefined\n\t\t\t,schedules_parameters_id:\n\t\t\t\tt.schedules_parameters_id()\n\t\t\t\t|| undefined\n\t\t}\n\t}\n\n\n\tconst schedules = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(['GET', ['/schedules']])\n\t\t\t\t\t.then( list => list.map(APIScheduleToSchedule) )\n\t\t\t}\n\t\t\t,allStats: function(){\n\t\t\t\treturn LIST(['GET', ['/schedules/statistics']])\n\t\t\t\t\t.then( function(list){\n\t\t\t\t\t\treturn list\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t,remove: function(schedule_id) {\n\t\t\treturn DELETE(['DELETE', ['/schedules/', schedule_id]])\n\t\t}\n\t\t,patch: function(schedules){\n\t\t\treturn PATCH_MANY(\n\t\t\t\t[ 'PATCH', ['/schedules'] ]\n\t\t\t\t,[\n\t\t\t\t\tschedules\n\t\t\t\t\t,ScheduleToAPISchedule\n\t\t\t\t\t,APIScheduleToSchedule\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t}\n\n\tconst schedules_parameters = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(['GET', ['/schedules_parameters']])\n\t\t\t\t\t.then( list => list.map(APISchedulesParametersToUI) )\n\t\t\t}\n\t\t}\n\n\t\t,patch: {\n\t\t\tmany: function(SchedulesParameters){\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/schedules_parameters']]\n\t\t\t\t\t,[ SchedulesParameters\n\t\t\t\t\t, SchedulesParametersToAPISchedulesParameters\n\t\t\t\t\t, APISchedulesParametersToUI\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\n\t\t,remove: {\n\t\t\tone: function(schedules_parameters_id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE'\n\t\t\t\t\t, ['/schedules_parameters/', schedules_parameters_id]\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t}\n\n\n\tconst projects = {\n\t\tfetch: {\n\t\t\tall: function({\n\t\t\t\tschedule_id\n\t\t\t\t, completedProjects\n\t\t\t\t, props\n\t\t\t\t, depth\n\t\t\t\t, project_id\n\t\t\t\t, gettemplates\n\t\t\t\t, taskcount\n\t\t\t}){\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['schedule_id', schedule_id]\n\t\t\t\t\t,['completedProjects', completedProjects]\n\t\t\t\t\t,['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t\t,['project_id', project_id]\n\t\t\t\t\t,['gettemplates', gettemplates]\n\t\t\t\t\t,['taskcount', taskcount]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/projects', params]])\n\t\t\t\t\t.then( (list) => list.map(APIProjectToProject) )\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t\t,bySchedule: function({\n\t\t\t\tschedule_id\n\t\t\t\t, completedProjects\n\t\t\t\t, props\n\t\t\t\t, depth\n\t\t\t\t, project_id\n\t\t\t\t, gettemplates\n\t\t\t\t, taskcount\n\t\t\t}) {\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['schedule_id', schedule_id]\n\t\t\t\t\t,['completedProjects', completedProjects]\n\t\t\t\t\t,['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t\t,['project_id', project_id]\n\t\t\t\t\t,['gettemplates', gettemplates]\n\t\t\t\t\t,['taskcount', taskcount]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/projects/schedule/', schedule_id, params ]]\n\t\t\t\t)\n\t\t\t\t\t.then( (list) => list.map(APIProjectToProject) )\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t\t,one_shallow({project_id, props, depth}){\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['project_id', project_id]\n\t\t\t\t\t,['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/projects', params]])\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list[0]\n\t\t\t\t\t)\n\t\t\t\t\t.then(t.addMetaData)\n\t\t\t}\n\t\t\t,one: function(project_id) {\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params =\n\t\t\t\t\t[['project_id', project_id]]\n\n\t\t\t\treturn LIST(['GET', ['/projects', params]])\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list[0]\n\t\t\t\t\t)\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t\t,zip: function({\n\t\t\t\tproject_id\n\t\t\t}) {\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/projects/zip/project_id/' + project_id]]\n\t\t\t\t)\n\t\t\t\t\t.then( I )\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t\t\t.then( R.map(R.evolve({\n\t\t\t\t\t\twatch(url){\n\t\t\t\t\t\t\tconst stream = prop()\n\t\t\t\t\t\t\tconst source = new window.EventSource(\n\t\t\t\t\t\t\t\tnew window.URL('.'+url, baseURL+'/')\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tsource.onmessage = (e) => {\n\t\t\t\t\t\t\t\tstream(JSON.parse(e.data))\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsource.onerror = () => {\n\t\t\t\t\t\t\t\tsource.close()\n\t\t\t\t\t\t\t\tstream.end(true)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn stream\n\t\t\t\t\t\t}\n\t\t\t\t\t})))\n\t\t\t}\n\t\t}\n\t\t,transfer({projects, schedule_id}){\n\t\t\tconst t = request.MetadataTracker()\n\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', [\n\t\t\t\t\t'/projects/schedule_id/'\n\t\t\t\t\t+ schedule_id\n\t\t\t\t\t+ '/transfer'\n\t\t\t\t]]\n\t\t\t\t,[ t.removeMetaData(projects)\n\t\t\t\t, I\n\t\t\t\t, I\n\t\t\t\t]\n\t\t\t)\n\t\t\t.then( t.addMetaData )\n\t\t}\n\t\t,patch({schedule_id, completedProjects, projects}){\n\n\t\t\tconst t = request.MetadataTracker()\n\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', [\n\t\t\t\t\t'/projects/schedule_id/'\n\t\t\t\t\t+ schedule_id\n\t\t\t\t\t+ '/completedProjects/'\n\t\t\t\t\t+ completedProjects\n\t\t\t\t]]\n\t\t\t\t,[ t.removeMetaData(projects)\n\t\t\t\t, ProjectToAPIProject\n\t\t\t\t, APIProjectToProject\n\t\t\t\t]\n\t\t\t)\n\t\t\t.then( t.addMetaData )\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(project_id){\n\t\t\t\tconst t = request.MetadataTracker()\n\t\t\t\treturn DELETE(['DELETE', ['/projects/', project_id]])\n\t\t\t\t\t.then(t.addMetaData)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIUserToUser(u) {\n\t\treturn {\n\t\t\tauth_permissions_read: m.prop(u.auth_permissions_read)\n\t\t\t,auth_permissions_write: m.prop(u.auth_permissions_write)\n\t\t\t,role_id: m.prop( u.role_id || null)\n\t\t\t,user_country: m.prop( u.user_country )\n\t\t\t,user_email: m.prop( u.user_email )\n\t\t\t,user_name: m.prop( u.user_name )\n\t\t\t,user_id: m.prop( u.user_id || null)\n\t\t\t,user_permissions: m.prop( u.user_permissions )\n\t\t\t,user_username: m.prop( u.user_username )\n\t\t\t,auth_token: m.prop( u.auth_token )\n\t\t\t,auth_permissions: m.prop( [] )\n\t\t\t,contractrecognitionid: u.contractrecognitionid\n\t\t\t,contractrecognitionname: u.contractrecognitionname\n\t\t\t,contractrecognitiondescription: u.contractrecognitiondescription\n\t\t\t,usersFullName: u.user_name + ' - ' + u.user_username\n\t\t}\n\t}\n\n\tconst users2 = {\n\t\tfetch: {\n\t\t\tall(){\n\t\t\t\treturn users.fetch.byOrganization({})\n\t\t\t}\n\t\t}\n\t}\n\n\tconst users = {\n\t\tfetch: {\n\n\t\t\tall: function() {\n\t\t\t\treturn users.fetch.byOrganization({})\n\t\t\t\t\t.then( xs => xs.map(APIUserToUser) )\n\t\t\t}\n\n\t\t\t,byOrganization({ organization_id }){\n\t\t\t\treturn LIST(['GET', ['/users']])\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\tu => u.user_username\n\t\t\t\t\t\t\t\t\t.indexOf( 'Scheduling Worker Task' ) == -1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,get: {\n\t\t\tby_search({ without_group_id, search, limit }){\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET'\n\t\t\t\t\t,[\n\t\t\t\t\t\t'/users/search/', search\n\t\t\t\t\t\t, [['limit', limit]]\n\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\twithout_group_id != null\n\t\t\t\t\t\t\t\t? [['without_group_id', without_group_id]]\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\t,patch: {\n\t\t\tpermissions(user_id, role_id, role_permissions, user_permissions){\n\t\t\t\tconst endpoint =\n\t\t\t\t\t['PATCH'\n\t\t\t\t\t, [ '/users/'\n\t\t\t\t\t\t, user_id\n\t\t\t\t\t\t, '/role_id/'\n\t\t\t\t\t\t, role_id\n\t\t\t\t\t\t, '/role_permissions/'\n\t\t\t\t\t\t, role_permissions\n\t\t\t\t\t\t, '/user_permissions/'\n\t\t\t\t\t\t, user_permissions\n\t\t\t\t\t]\n\t\t\t\t\t]\n\n\t\t\t\tconst [method, url] = endpoint\n\n\t\t\t\tconst r =\n\t\t\t\t\trequest.request(\n\t\t\t\t\t\tbaseURL\n\t\t\t\t\t\t,baseHeaders()\n\t\t\t\t\t\t,method\n\t\t\t\t\t\t,url.join('')\n\t\t\t\t\t)\n\t\t\t\t\t.then( r => r.list )\n\n\t\t\t\treturn r.then(\n\t\t\t\t\tlist => list.map(APIUserToUser)\n\t\t\t\t)\n\n\t\t\t}\n\t\t\t,password: function(auth_token, user_id, user_password) {\n\n\t\t\t\tconst r =\n\t\t\t\t\trequest.request(\n\t\t\t\t\t\tbaseURL\n\t\t\t\t\t\t,{}\n\t\t\t\t\t\t,'PATCH'\n\t\t\t\t\t\t,['/users/',user_id,'/user_password'].join('')\n\t\t\t\t\t\t,{ user_password, auth_token }\n\t\t\t\t\t)\n\n\t\t\t\treturn r.then(\n\t\t\t\t\tAPIUserToUser\n\t\t\t\t)\n\t\t\t}\n\t\t\t,verification_token ( user_verification_token, user_id ) {\n\t\t\t\treturn request.request(\n\t\t\t\t\tbaseURL\n\t\t\t\t\t,baseHeaders()\n\t\t\t\t\t,'PATCH'\n\t\t\t\t\t,[''\n\t\t\t\t\t, 'users'\n\t\t\t\t\t, user_id\n\t\t\t\t\t, 'user_verification_token'\n\t\t\t\t\t, user_verification_token\n\t\t\t\t\t]\n\t\t\t\t\t.join('/')\n\t\t\t\t)\n\t\t\t\t.then(\n\t\t\t\t\tAPIUserToUser\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id) {\n\t\t\t\treturn DELETE(['DELETE', ['/users/', id]])\n\t\t\t}\n\t\t}\n\t\t,create: {\n\t\t\tsignup ({\n\t\t\t\tuser_email\n\t\t\t\t,user_username\n\t\t\t\t,user_name\n\t\t\t\t,user_password\n\t\t\t}) {\n\n\t\t\t\tconst r =\n\t\t\t\t\trequest.request(\n\t\t\t\t\t\tbaseURL\n\t\t\t\t\t\t,baseHeaders()\n\t\t\t\t\t\t,'POST'\n\t\t\t\t\t\t,'/users'\n\t\t\t\t\t\t,{ user_email\n\t\t\t\t\t\t, user_username\n\t\t\t\t\t\t, user_name\n\t\t\t\t\t\t, user_password\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\treturn r.then(APIUserToUser)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APICrewsDisciplineRatesToCrewsDiscipineRates(\n\t\tc\n\t) {\n\t\treturn {\n\t\t\tcrew_id:\n\t\t\t\tm.prop( c.crew_id || null)\n\t\t\t,crews_discipline_rates_feedback_rate:\n\t\t\t\tm.prop( c.crews_discipline_rates_feedback_rate )\n\t\t\t,organizations_disciplines_id:\n\t\t\t\tm.prop( c.organizations_disciplines_id )\n\t\t\t,crews_discipline_rates_id:\n\t\t\t\tm.prop( c.crews_discipline_rates_id || null )\n\t\t\t,crews_discipline_rates_name:\n\t\t\t\tm.prop( c.crews_discipline_rates_name )\n\t\t\t,crews_discipline_rates_rate:\n\t\t\t\tm.prop( c.crews_discipline_rates_rate )\n\t\t\t,crews_discipline_rates_uom:\n\t\t\t\tm.prop( c.crews_discipline_rates_uom )\n\t\t\t,crews_discipline_rates_description:\n\t\t\t\tm.prop( c.crews_discipline_rates_description )\n\t\t\t,contractrecognitionid: c.contractrecognitionid\n\t\t\t,contractrecognitionname: c.contractrecognitionname\n\t\t\t,contractrecognitiondescription: c.contractrecognitiondescription\n\t\t\t,createcontracts: m.prop(false)\n\t\t\t,organizations_disciplines_nominal_expenditure_rate: m.prop( c.organizations_disciplines_nominal_expenditure_rate )\n\t\t}\n\t}\n\n\tconst APICrewsToCrews = (contractor_name) =>\n\t\tfunction (c) {\n\t\t\treturn {\n\t\t\t\tteamresourcename: c.teamresourcename\n\t\t\t\t,contractor_id: m.prop(c.contractor_id || null)\n\t\t\t\t,crew_common: m.prop(c.crew_common)\n\t\t\t\t,crew_excess: m.prop(c.crew_excess)\n\t\t\t\t,crew_id: m.prop(c.crew_id || null)\n\t\t\t\t,crew_invalid: m.prop(c.crew_invalid)\n\t\t\t\t,crew_name: m.prop(c.crew_name)\n\t\t\t\t,crew_rating: m.prop(c.crew_rating)\n\t\t\t\t,crew_utilized: m.prop(c.crew_utilized)\n\t\t\t\t,crew_work_completed: m.prop(c.crew_work_completed)\n\t\t\t\t,user_id: m.prop(c.user_id || null)\n\t\t\t\t,ParentRecognition: contractor_name + \" - \" + c.crew_name\n\t\t\t\t,CommonRecognition: c.crew_id || null\n\t\t\t\t,ParentRecognitionID: c.contractor_id || null\n\t\t\t\t,crews_discipline_rates: c.crews_discipline_rates.map(\n\t\t\t\t\tAPICrewsDisciplineRatesToCrewsDiscipineRates\n\t\t\t\t)\n\t\t\t\t,contractrecognitionid:\n\t\t\t\t\tc.contractrecognitionid\n\t\t\t\t,contractrecognitionname:\n\t\t\t\t\tc.contractrecognitionname\n\t\t\t\t,contractrecognitiondescription:\n\t\t\t\t\tc.contractrecognitiondescription\n\t\t\t}\n\t\t}\n\n\n\tfunction APIContractorToContractor(c) {\n\t\treturn R.merge(c,{\n\t\t\tcontractor_comfortable_work_zone: m.prop(\n\t\t\t\tc.contractor_comfortable_work_zone\n\t\t\t)\n\t\t\t,contractor_common: m.prop(c.contractor_common)\n\t\t\t,contractor_first_onsite_start_date: m.prop(\n\t\t\t\tisoToTimeStampUnsafe(\n\t\t\t\t\tc.contractor_first_onsite_start_date\n\t\t\t\t)\n\t\t\t)\n\t\t\t,contractor_id: m.prop(c.contractor_id || null)\n\t\t\t,contractor_mixed_crews: m.prop(c.contractor_mixed_crews)\n\t\t\t,contractor_name: m.prop(c.contractor_name)\n\t\t\t,contractor_quality_rating: m.prop(c.contractor_quality_rating)\n\t\t\t,contractor_total_rating: m.prop(c.contractor_total_rating)\n\t\t\t,contractor_utilized: m.prop(c.contractor_utilized)\n\t\t\t,contractor_yard: m.prop(c.contractor_yard)\n\t\t\t,user_id: m.prop( c.user_id || null)\n\t\t\t,ParentRecognition: c.contractor_name\n\t\t\t,CommonRecognition: c.contractor_id || null\n\t\t\t,crews: c.crews.map( APICrewsToCrews(c.contractor_name) )\n\t\t\t,organization_id: m.prop(c.organization_id || null)\n\t\t\t,contractrecognitionid: c.contractrecognitionid\n\t\t\t,contractrecognitionname: c.contractrecognitionname\n\t\t\t,contractrecognitiondescription: c.contractrecognitiondescription\n\t\t})\n\t}\n\n\tfunction ContractorToAPIContractor(c) {\n\t\treturn R.merge( c, {\n\t\t\tcontractor_comfortable_work_zone:\n\t\t\t\tc.contractor_comfortable_work_zone()\n\t\t\t,contractor_common:\n\t\t\t\tc.contractor_common()\n\t\t\t,contractor_first_onsite_start_date:\n\n\t\t\t\ttimestampToIsoSafe(\n\t\t\t\t\tc.contractor_first_onsite_start_date()\n\t\t\t\t\t|| new Date().getTime()\n\t\t\t\t)\n\t\t\t,contractor_mixed_crews:\n\t\t\t\tc.contractor_mixed_crews()\n\t\t\t,contractor_name:\n\t\t\t\tc.contractor_name()\n\t\t\t,contractor_quality_rating:\n\t\t\t\tc.contractor_quality_rating()\n\t\t\t,contractor_total_rating:\n\t\t\t\tc.contractor_total_rating()\n\t\t\t,contractor_utilized:\n\t\t\t\tc.contractor_utilized()\n\t\t\t,contractor_yard:\n\t\t\t\tc.contractor_yard()\n\t\t\t,crews:\n\t\t\t\tc.crews\n\t\t\t\t.map(\n\t\t\t\t\tc => ({\n\t\t\t\t\t\tteamresourcename: c.teamresourcename\n\t\t\t\t\t\t,contractor_id: c.contractor_id()\n\t\t\t\t\t\t,crew_common: c.crew_common()\n\t\t\t\t\t\t,crew_excess: c.crew_excess()\n\t\t\t\t\t\t,crew_id: c.crew_id()\n\t\t\t\t\t\t,user_id: c.user_id()\n\t\t\t\t\t\t,crew_invalid: c.crew_invalid()\n\t\t\t\t\t\t,crew_name: c.crew_name()\n\t\t\t\t\t\t,crew_rating: c.crew_rating()\n\t\t\t\t\t\t,crew_utilized: c.crew_utilized()\n\t\t\t\t\t\t,crew_work_completed: c.crew_work_completed()\n\t\t\t\t\t\t,crews_discipline_rates: c.crews_discipline_rates\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tc => ({\n\t\t\t\t\t\t\t\t\tcrew_id:\n\t\t\t\t\t\t\t\t\t\tc.crew_id()\n\t\t\t\t\t\t\t\t\t,organizations_disciplines_id:\n\t\t\t\t\t\t\t\t\t\tc.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_feedback_rate:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_feedback_rate()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_id:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_id()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_name:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_name()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_rate:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_rate()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_uom:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_uom()\n\t\t\t\t\t\t\t\t\t,crews_discipline_rates_description:\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates_description()\n\t\t\t\t\t\t\t\t\t,organizations_disciplines_nominal_expenditure_rate:\n\t\t\t\t\t\t\t\t\t\tc.organizations_disciplines_nominal_expenditure_rate() || 0\n\t\t\t\t\t\t\t\t\t,createcontracts: c.createcontracts\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t, organization_id: c.organization_id() || undefined\n\t\t\t, contractor_id: c.contractor_id() || undefined\n\t\t\t, user_id: c.user_id() || undefined\n\t\t\t, contract_id: c.contract_id\n\t\t})\n\t}\n\n\tconst contractors = {\n\t\tfetch: {\n\t\t\tall: function({props, depth, contractor_id, organizations_disciplines, exclusive}){\n\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params =\n\t\t\t\t\t[\n\t\t\t\t\t\t['contractor_id', contractor_id ]\n\t\t\t\t\t\t,['props', props]\n\t\t\t\t\t\t,['depth', depth]\n\t\t\t\t\t\t,['organizations_disciplines', organizations_disciplines]\n\t\t\t\t\t\t,['exclusive', exclusive]\n\t\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/contractors/', contractor_id, params]])\n\t\t\t\t\t.then( list => list.map(APIContractorToContractor) )\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t\t,workList: function({crew_id, contractor_id, schedule_id, schedule_versions_id}){\n\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['crew_id', crew_id ? crew_id() : null ]\n\t\t\t\t\t,['contractor_id', contractor_id ? contractor_id() : null ]\n\t\t\t\t\t,['schedule_id', schedule_id ]\n\t\t\t\t\t,['schedule_versions_id', schedule_versions_id]\n\t\t\t\t]\n\t\t\t\t.filter((a) => a[1])\n\n\t\t\t\treturn LIST(['GET', [\n\t\t\t\t\t'/contractors/workList/'\n\t\t\t\t\t+ (\n\t\t\t\t\t\tcrew_id\n\t\t\t\t\t\t? 'crew_id'\n\t\t\t\t\t\t: 'contractor_id'\n\t\t\t\t\t)\n\t\t\t\t\t+ '/', params\n\t\t\t\t\t]\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tone: function(contractor) {\n\n\t\t\t\tconst t = request.MetadataTracker()\n\n\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/contractors']]\n\t\t\t\t\t,[[t.removeMetaData(contractor)]\n\t\t\t\t\t, ContractorToAPIContractor\n\t\t\t\t\t, APIContractorToContractor\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t.then(t.addMetaData)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(contractor_id){\n\t\t\t\tconst t = request.MetadataTracker()\n\t\t\t\treturn DELETE(['DELETE', ['/contractors/', contractor_id]])\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIToolToTool(t){\n\t\treturn {\n\t\t\ttools_id: m.prop(t.tools_id || null)\n\t\t\t,tools_name: m.prop(t.tools_name)\n\t\t\t,tools_condition: m.prop(t.tools_condition)\n\t\t\t,tools_location: m.prop(t.tools_location)\n\t\t\t,tools_description: m.prop(t.tools_description)\n\t\t\t,tools_ownership: m.prop(t.tools_ownership)\n\t\t\t,tools_type: m.prop(t.tools_type)\n\t\t\t,teamresourcename: t.teamresourcename\n\t\t\t,crew_id: m.prop(t.crew_id)\n\t\t\t,assigneduser: t.assigneduser\n\t\t\t,contractrecognitionid: t.contractrecognitionid\n\t\t\t,contractrecognitionname: t.contractrecognitionname\n\t\t\t,contractrecognitionnametype: t.contractrecognitionnametype\n\t\t\t,contractrecognitiondescription: t.contractrecognitiondescription\n\t\t\t,organization_id: m.prop( t.organization_id || null)\n\t\t}\n\t}\n\n\tfunction ToolToAPITool(t){\n\n\t\treturn {\n\t\t\ttools_name: exposer( t.tools_name )\n\t\t\t,tools_condition: exposer( t.tools_condition )\n\t\t\t,tools_location: exposer( t.tools_location )\n\t\t\t,tools_description: exposer( t.tools_description )\n\t\t\t,tools_ownership: exposer( t.tools_ownership )\n\t\t\t,tools_type: exposer( t.tools_type )\n\t\t\t,teamresourcename: exposer( t.teamresourcename )\n\t\t\t,crew_id: exposer( t.crew_id )\n\t\t\t,organization_id: exposer( t.organization_id ) || undefined\n\t\t\t,tools_id: exposer( t.tools_id ) || undefined\n\t\t\t,location:\n\t\t\t\tt.location\n\t\t\t\t? {\n\t\t\t\t\tlatitude: t.location.latitude\n\t\t\t\t\t, longitude: t.location.longitude\n\t\t\t\t}\n\t\t\t\t: null\n\t\t}\n\t}\n\n\tconst tools = {\n\t\tfetch: {\n\t\t\tall: function({props, depth}) {\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/tools', params]])\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIToolToTool)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function( tools) {\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/tools']]\n\t\t\t\t\t, [\n\t\t\t\t\t\ttools\n\t\t\t\t\t\t,ToolToAPITool\n\t\t\t\t\t\t,APIToolToTool\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: function( id ){\n\t\t\treturn DELETE(['DELETE', ['/tools/', id]])\n\t\t}\n\t\t,presets: {\n\t\t\tremove: function( id ){\n\t\t\t\treturn DELETE(['DELETE', ['/tools_presets/', id]])\n\t\t\t}\n\t\t\t,patch: function(tps) {\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/tools_presets']]\n\t\t\t\t\t, [\n\t\t\t\t\t\ttps\n\t\t\t\t\t\t,I\n\t\t\t\t\t\t,I\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t\t,fetch: function({props, depth, perorganizatond, suggested, users}) {\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t\t,['perorganizatond', perorganizatond]\n\t\t\t\t\t,['suggested', suggested]\n\t\t\t\t\t,['users', users]\n\t\t\t\t]\n\t\t\t\t.filter((ar) => ar[0] && ar[1])\n\n\t\t\t\treturn LIST(['GET', ['/tools_presets', params]])\n\t\t\t\t\t.then( I )\n\t\t\t}\n\t\t}\n\t}\n\n\tconst geographies = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(['GET', ['/geographies']])\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tone: function( geography ){\n\t\t\t\t// todo this we can just dispatch to geographies.many( [g] )\n\t\t\t\t// I couldn't do it at time of writing because of:\n\t\t\t\t// https://github.com/Microsoft/TypeScript/issues/10641\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/geographies']]\n\t\t\t\t\t,[\n\t\t\t\t\t\t[geography], g => g, g => g\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t\t,many: function( geographies ) {\n\t\t\t\treturn PATCH_MANY (\n\t\t\t\t\t['PATCH', ['/geographies']]\n\t\t\t\t\t,[\n\t\t\t\t\t\tgeographies\n\t\t\t\t\t\t,g => g\n\t\t\t\t\t\t,g => g\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst suburbs = {\n\t\tfetch: {\n\t\t\tall: function(){\n\t\t\t\treturn LIST(['GET', ['/suburbs']])\n\t\t\t}\n\t\t\t,byTextInput: function(text){\n\t\t\t\tconst query = [['query', text], ['max', 15]]\n\t\t\t\tconst resource = ['/suburbs', query]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', resource]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,search(q){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t, baseHeaders()\n\t\t\t\t, 'GET'\n\t\t\t\t, `/suburbs/search`\n\t\t\t\t, { q }\n\t\t\t)\n\t\t}\n\t\t,here: {\n\t\t\tasync patch(data){\n\t\t\t\tconst out = await request.request(\n\t\t\t\t\tbaseURL\n\t\t\t\t\t, baseHeaders()\n\t\t\t\t\t, 'PATCH'\n\t\t\t\t\t, `/suburbs/here`\n\t\t\t\t\t, data\n\t\t\t\t)\n\t\t\t\treturn out\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tconst crews = {\n\t\tremove: {\n\t\t\tone: function(crew_id){\n\t\t\t\treturn DELETE(['DELETE', ['/crews/', crew_id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst crews_discipline_rates = {\n\t\tremove: {\n\t\t\tone: function(crews_discipline_rates_id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE'\n\t\t\t\t\t, ['/crews_discipline_rates/', crews_discipline_rates_id]\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(crews_discipline_rates) {\n\t\t\t\tconst t = request.MetadataTracker()\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/crews_discipline_rates']]\n\t\t\t\t\t,[crews_discipline_rates\n\t\t\t\t\t, I\n\t\t\t\t\t, I\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t.then(t.addMetaData)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIInterruptionToInterruption (\n\t\ti\n\t) {\n\t\treturn {\n\t\t\tinterruptions_weather:\n\t\t\t\tm.prop(i.interruptions_weather)\n\t\t\t,interruptions_start_date:\n\t\t\t\tm.prop(\n\t\t\t\t\tisoToTimeStampSafe( i.interruptions_start_date )\n\t\t\t\t)\n\t\t\t,interruptions_end_date:\n\t\t\t\tm.prop(\n\t\t\t\t\tisoToTimeStampSafe( i.interruptions_end_date )\n\t\t\t\t)\n\t\t\t,interruptions_name:\n\t\t\t\tm.prop(i.interruptions_name)\n\t\t\t,interruptions_repetition_mode:\n\t\t\t\tm.prop(i.interruptions_repetition_mode)\n\t\t\t,interruptions_duration:\n\t\t\t\tm.prop(i.interruptions_duration)\n\t\t\t,interruptions_id:\n\t\t\t\tm.prop(i.interruptions_id)\n\t\t\t,interruptions_affected:\n\t\t\t\ti.interruptions_affected.map(\n\t\t\t\t\tAPIInterruptionsAffectedToInterruptionsAffected\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction APIInterruptionsAffectedToInterruptionsAffected (\n\t\ti\n\t) {\n\t\treturn Object.assign({\n\t\t\tinterruptions_affected_id:\n\t\t\t\tm.prop(i.interruptions_affected_id || null)\n\t\t\t,interruptions_id:\n\t\t\t\tm.prop(i.interruptions_id || null)\n\t\t},\n\t\t\ttypeof i.interruptions_affected_entity_id != 'undefined'\n\t\t\t\t? { interruptions_affected_entity_id:\n\t\t\t\t\t\tm.prop(i.interruptions_affected_entity_id)\n\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t,typeof i.interruptions_affected_entity_name != 'undefined'\n\t\t\t\t? { interruptions_affected_entity_name:\n\t\t\t\t\t\tm.prop(i.interruptions_affected_entity_name)\n\t\t\t\t}\n\t\t\t\t: {}\n\t\t)\n\t}\n\n\tfunction InterruptionToAPIInterruption (\n\t\ti\n\t) {\n\t\treturn {\n\t\t\tinterruptions_weather:\n\t\t\t\ti.interruptions_weather()\n\t\t\t,interruptions_start_date:\n\t\t\t\ttimestampToIsoSafe( i.interruptions_start_date() )\n\t\t\t,interruptions_end_date:\n\t\t\t\ttimestampToIsoSafe( i.interruptions_end_date() )\n\t\t\t,interruptions_name:\n\t\t\t\ti.interruptions_name()\n\t\t\t,interruptions_repetition_mode:\n\t\t\t\ti.interruptions_repetition_mode()\n\t\t\t,interruptions_duration:\n\t\t\t\ti.interruptions_duration()\n\t\t\t,interruptions_affected:\n\t\t\t\ti.interruptions_affected.map(\n\t\t\t\t\tInterruptionsAffectedToAPIInterruptionsAffected\n\t\t\t\t)\n\t\t\t,interruptions_id: i.interruptions_id() || undefined\n\t\t}\n\t}\n\n\tfunction InterruptionsAffectedToAPIInterruptionsAffected (\n\t\ti\n\t) {\n\t\treturn {\n\t\t\tinterruptions_affected_id:\n\t\t\t\ti.interruptions_affected_id()\n\t\t\t,interruptions_id:\n\t\t\t\ti.interruptions_id()\n\t\t\t,interruptions_affected_entity_id:\n\t\t\t\ti.interruptions_affected_entity_id\n\t\t\t\t&& i.interruptions_affected_entity_id()\n\t\t\t,interruptions_affected_entity_name:\n\t\t\t\ti.interruptions_affected_entity_name\n\t\t\t\t&& i.interruptions_affected_entity_name()\n\t\t}\n\t}\n\n\tconst interruptions = {\n\t\tfetch: {\n\t\t\tall: function({schedule_id}) {\n\t\t\t\tconst params = [\n\t\t\t\t\t['schedule_id', schedule_id]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/interruptions', params]])\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIInterruptionToInterruption)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(interruptions, schedule_id) {\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/interruptions/schedule_id/' + schedule_id]]\n\t\t\t\t\t,[ interruptions\n\t\t\t\t\t, InterruptionToAPIInterruption\n\t\t\t\t\t, APIInterruptionToInterruption\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(interruption_id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/interruptions/',interruption_id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst interruptionsAffected = {\n\t\tremove: {\n\t\t\tone: function(interruptions_affected_id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE'\n\t\t\t\t\t, ['/interruptions_affected/'\n\t\t\t\t\t,interruptions_affected_id]\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction APIAllocationsVarToAllocationsVar(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:\n\t\t\t\tm.prop(a.allocation_id)\n\t\t\t,project_extras_id:\n\t\t\t\tm.prop(a.project_extras_id)\n\t\t\t,allocations_vars_amount:\n\t\t\t\tm.prop(a.allocations_vars_amount)\n\t\t\t,allocations_vars_clause:\n\t\t\t\tm.prop(a.allocations_vars_clause)\n\t\t\t,allocations_vars_description:\n\t\t\t\tm.prop(a.allocations_vars_description)\n\t\t\t,allocations_vars_escalated:\n\t\t\t\tm.prop(a.allocations_vars_escalated)\n\t\t\t,allocations_vars_id:\n\t\t\t\tm.prop(a.allocations_vars_id)\n\t\t\t,allocations_vars_approved:\n\t\t\t\tm.prop(a.allocations_vars_approved)\n\t\t\t,user_id:\n\t\t\t\tm.prop(a.user_id)\n\t\t}\n\t}\n\n\tfunction AllocationsVarToAPIAllocationVar(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id: a.allocation_id()\n\t\t\t,allocations_vars_id: a.allocations_vars_id()\n\t\t\t,project_extras_id: a.project_extras_id()\n\t\t\t,allocations_vars_amount: a.allocations_vars_amount()\n\t\t\t,allocations_vars_clause: a.allocations_vars_clause()\n\t\t\t,allocations_vars_description: a.allocations_vars_description()\n\t\t\t,allocations_vars_escalated: a.allocations_vars_escalated()\n\t\t\t,allocations_vars_approved: a.allocations_vars_approved()\n\t\t\t,user_id: a.user_id()\n\t\t}\n\t}\n\n\tfunction APIAllocationsNODToAllocationsNOD(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:\n\t\t\t\tm.prop(a.allocation_id)\n\t\t\t,allocations_nods_id:\n\t\t\t\tm.prop(a.allocations_nods_id)\n\t\t\t,project_extras_id:\n\t\t\t\tm.prop(a.project_extras_id)\n\t\t\t,allocations_nods_clause:\n\t\t\t\tm.prop(a.allocations_nods_clause)\n\t\t\t,allocations_nods_description:\n\t\t\t\tm.prop(a.allocations_nods_description)\n\t\t\t,allocations_nods_escalated:\n\t\t\t\tm.prop(a.allocations_nods_escalated)\n\t\t\t,allocations_nods_approved:\n\t\t\t\tm.prop(a.allocations_nods_approved)\n\t\t\t,user_id:\n\t\t\t\tm.prop(a.user_id)\n\t\t}\n\t}\n\n\tfunction AllocationsNODToAPIAllocationsNOD(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id: a.allocation_id()\n\t\t\t,allocations_nods_id: a.allocations_nods_id()\n\t\t\t,project_extras_id: a.project_extras_id()\n\t\t\t,allocations_nods_clause: a.allocations_nods_clause()\n\t\t\t,allocations_nods_description: a.allocations_nods_description()\n\t\t\t,allocations_nods_escalated: a.allocations_nods_escalated()\n\t\t\t,allocations_nods_approved: a.allocations_nods_approved()\n\t\t\t,user_id: a.user_id()\n\t\t}\n\t}\n\n\tfunction APIAllocationsEOTtoAllocationsEOT(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:\n\t\t\t\tm.prop(a.allocation_id)\n\t\t\t,project_extras_id:\n\t\t\t\tm.prop(a.project_extras_id)\n\t\t\t,allocations_eots_clause:\n\t\t\t\tm.prop(a.allocations_eots_clause)\n\t\t\t,allocations_eots_description:\n\t\t\t\tm.prop(a.allocations_eots_description)\n\t\t\t,allocations_eots_escalated:\n\t\t\t\tm.prop(a.allocations_eots_escalated)\n\t\t\t,allocations_eots_id:\n\t\t\t\tm.prop(a.allocations_eots_id)\n\t\t\t,allocations_eots_approved:\n\t\t\t\tm.prop(a.allocations_eots_approved)\n\t\t\t,user_id:\n\t\t\t\tm.prop(a.user_id)\n\t\t}\n\t}\n\n\tfunction AllocationsEOTtoAPIAllocationsEOT(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:a.allocation_id()\n\t\t\t,project_extras_id: a.project_extras_id()\n\t\t\t,allocations_eots_clause: a.allocations_eots_clause()\n\t\t\t,allocations_eots_description: a.allocations_eots_description()\n\t\t\t,allocations_eots_escalated: a.allocations_eots_escalated()\n\t\t\t,allocations_eots_id: a.allocations_eots_id()\n\t\t\t,allocations_eots_approved: a.allocations_eots_approved()\n\t\t\t,user_id: a.user_id()\n\t\t}\n\t}\n\n\n\tfunction APIACCToACC(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocations_contractors_crews_crew_common:\n\t\t\t\tm.prop(a.allocations_contractors_crews_crew_common)\n\t\t\t,allocations_contractors_crews_crew_rating:\n\t\t\t\tm.prop(a.allocations_contractors_crews_crew_rating)\n\t\t\t,allocations_contractors_crews_excess:\n\t\t\t\tm.prop(a.allocations_contractors_crews_excess)\n\t\t\t,allocations_contractors_crews_id:\n\t\t\t\tm.prop(a.allocations_contractors_crews_id)\n\t\t\t,allocations_contractors_crews_invalid:\n\t\t\t\tm.prop(a.allocations_contractors_crews_invalid)\n\t\t\t,allocations_contractors_crews_name:\n\t\t\t\tm.prop(a.allocations_contractors_crews_name)\n\t\t\t,allocations_contractors_crews_contract_multiplier:\n\t\t\t\tm.prop(a.allocations_contractors_crews_contract_multiplier)\n\t\t\t,allocations_contractors_crews_utilized:\n\t\t\t\tm.prop(a.allocations_contractors_crews_utilized)\n\t\t\t,allocations_contractors_crews_work_completed:\n\t\t\t\tm.prop(a.allocations_contractors_crews_work_completed)\n\t\t\t,allocations_contractors_crews_work_forecasted:\n\t\t\t\tm.prop(a.allocations_contractors_crews_work_forecasted)\n\t\t\t,allocations_contractors_crews_work_application:\n\t\t\t\tm.prop(a.allocations_contractors_crews_work_application)\n\t\t\t,allocations_contractors_id:\n\t\t\t\tm.prop(a.allocations_contractors_id)\n\t\t\t,crew_id:\n\t\t\t\tm.prop(a.crew_id)\n\t\t\t,user_id:\n\t\t\t\tm.prop(a.user_id)\n\t\t\t,crews_discipline_rates:\n\t\t\t\ta.crews_discipline_rates\n\t\t\t,teamratemultiplier:\n\t\t\t\ta.teamratemultiplier\n\t\t}\n\t}\n\n\tfunction ACCToAPIACC(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocations_contractors_crews_crew_common:\n\t\t\t\ta.allocations_contractors_crews_crew_common()\n\t\t\t,allocations_contractors_crews_crew_rating:\n\t\t\t\ta.allocations_contractors_crews_crew_rating()\n\t\t\t,allocations_contractors_crews_excess:\n\t\t\t\ta.allocations_contractors_crews_excess()\n\t\t\t,allocations_contractors_crews_id:\n\t\t\t\ta.allocations_contractors_crews_id()\n\t\t\t,allocations_contractors_crews_invalid:\n\t\t\t\ta.allocations_contractors_crews_invalid()\n\t\t\t,allocations_contractors_crews_name:\n\t\t\t\ta.allocations_contractors_crews_name()\n\t\t\t,allocations_contractors_crews_contract_multiplier:\n\t\t\t\ta.allocations_contractors_crews_contract_multiplier()\n\t\t\t,allocations_contractors_crews_utilized:\n\t\t\t\ta.allocations_contractors_crews_utilized()\n\t\t\t,allocations_contractors_crews_work_completed:\n\t\t\t\ta.allocations_contractors_crews_work_completed()\n\t\t\t,allocations_contractors_crews_work_forecasted:\n\t\t\t\ta.allocations_contractors_crews_work_forecasted()\n\t\t\t,allocations_contractors_crews_work_application:\n\t\t\t\ta.allocations_contractors_crews_work_application()\n\t\t\t,allocations_contractors_id:\n\t\t\t\ta.allocations_contractors_id()\n\t\t\t,crew_id:\n\t\t\t\ta.crew_id()\n\t\t\t,user_id:\n\t\t\t\ta.user_id()\n\t\t}\n\t}\n\n\tfunction APIAllocationsContractorToAllocationsContractor(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:\n\t\t\t\tm.prop(a.allocation_id)\n\t\t\t,allocations_contractors_common:\n\t\t\t\tm.prop(a.allocations_contractors_common)\n\t\t\t,allocations_contractors_id:\n\t\t\t\tm.prop(a.allocations_contractors_id)\n\t\t\t,allocations_contractors_mixed_crews:\n\t\t\t\tm.prop(a.allocations_contractors_mixed_crews)\n\t\t\t,allocations_contractors_name:\n\t\t\t\tm.prop(a.allocations_contractors_name)\n\t\t\t,allocations_contractors_quality_rating:\n\t\t\t\tm.prop(a.allocations_contractors_quality_rating)\n\t\t\t,allocations_contractors_total_rating:\n\t\t\t\tm.prop(a.allocations_contractors_total_rating)\n\t\t\t,allocations_contractors_utilized:\n\t\t\t\tm.prop(a.allocations_contractors_utilized)\n\t\t\t,contractor_id:\n\t\t\t\tm.prop(a.contractor_id)\n\t\t\t,user_id:\n\t\t\t\tm.prop(a.user_id)\n\t\t\t,allocations_contractors_crews:\n\t\t\t\ta.allocations_contractors_crews\n\t\t\t\t\t.map(APIACCToACC)\n\t\t}\n\t}\n\n\tfunction AllocationsContractorToAPIAllocationsContractor(\n\t\ta\n\t) {\n\t\treturn {\n\t\t\tallocation_id:\n\t\t\t\ta.allocation_id()\n\t\t\t,allocations_contractors_common:\n\t\t\t\ta.allocations_contractors_common()\n\t\t\t,allocations_contractors_id:\n\t\t\t\ta.allocations_contractors_id()\n\t\t\t,allocations_contractors_mixed_crews:\n\t\t\t\ta.allocations_contractors_mixed_crews()\n\t\t\t,allocations_contractors_name:\n\t\t\t\ta.allocations_contractors_name()\n\t\t\t,allocations_contractors_quality_rating:\n\t\t\t\ta.allocations_contractors_quality_rating()\n\t\t\t,allocations_contractors_total_rating:\n\t\t\t\ta.allocations_contractors_total_rating()\n\t\t\t,allocations_contractors_utilized:\n\t\t\t\ta.allocations_contractors_utilized()\n\t\t\t,contractor_id:\n\t\t\t\ta.contractor_id()\n\t\t\t,user_id:\n\t\t\t\ta.user_id()\n\t\t\t,allocations_contractors_crews:\n\t\t\t\ta.allocations_contractors_crews\n\t\t\t\t\t.map(ACCToAPIACC)\n\t\t}\n\t}\n\n\tfunction APIAllocationToAllocation( a ){\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\tm.prop(a.organization_id)\n\t\t\t,organizations_disciplines_id:\n\t\t\t\tm.prop(a.organizations_disciplines_id)\n\t\t\t,project_id:\n\t\t\t\tm.prop(a.project_id)\n\t\t\t,discipline_id:\n\t\t\t\tm.prop(a.discipline_id)\n\t\t\t,allocation_id:\n\t\t\t\tm.prop(a.allocation_id)\n\t\t\t,project_name: a.project_name\n\t\t\t,allocations_work_name:\n\t\t\t\tm.prop(a.allocations_work_name)\n\t\t\t,allocations_crew_required:\n\t\t\t\tm.prop(a.allocations_crew_required)\n\t\t\t,allocations_project_harshness:\n\t\t\t\tm.prop(a.allocations_project_harshness)\n\t\t\t,allocations_custom_status:\n\t\t\t\tm.prop(a.allocations_custom_status)\n\t\t\t,allocations_allocation_complete:\n\t\t\t\tm.prop(a.allocations_allocation_complete)\n\t\t\t,allocations_allocation_forecast:\n\t\t\t\tm.prop(a.allocations_allocation_forecast)\n\t\t\t,allocations_allocation_date:\n\t\t\t\tm.prop( isoToTimeStampSafe( a.allocations_allocation_date ) )\n\t\t\t,schedule_id:\n\t\t\t\tm.prop(a.schedule_id)\n\t\t\t,allocations_version_key:\n\t\t\t\tm.prop(a.allocations_version_key)\n\t\t\t,schedule_version_id:\n\t\t\t\tm.prop(a.schedule_version_id)\n\t\t\t,allocations_completion_comments:\n\t\t\t\tm.prop(a.allocations_completion_comments)\n\t\t\t,allocations_bad_day:\n\t\t\t\tm.prop(a.allocations_bad_day)\n\t\t\t,allocations_day_status:\n\t\t\t\tm.prop(a.allocations_day_status)\n\t\t\t,allocations_weather_status:\n\t\t\t\tm.prop(a.allocations_weather_status)\n\t\t\t,allocations_vars: a.allocations_vars\n\t\t\t\t.map(APIAllocationsVarToAllocationsVar)\n\t\t\t,allocations_nods: a.allocations_nods\n\t\t\t\t.map(APIAllocationsNODToAllocationsNOD)\n\t\t\t,allocations_eots: a.allocations_eots\n\t\t\t\t.map(APIAllocationsEOTtoAllocationsEOT)\n\t\t\t,allocations_contractors: a.allocations_contractors\n\t\t\t\t.map(APIAllocationsContractorToAllocationsContractor)\n\t\t\t,allocations_transposes: []\n\t\t\t,discplineNameDescription:\n\t\t\t\ta.allocations_work_name\n\t\t\t\t+ ' - '\n\t\t\t\t+ a.discipline_description\n\t\t\t,discipline_description: a.discipline_description\n\t\t\t,disciplineratemultiplier: a.disciplineratemultiplier\n\t\t\t// ,allocations_transposes: a.allocations_transposes\n\t\t\t// \t.map(APIAllocationsTransposeToAllocationsTranspose)\n\t\t}\n\t}\n\n\tfunction AllocationToAPIAllocation( a ){\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\ta.organization_id()\n\t\t\t,project_id:\n\t\t\t\ta.project_id()\n\t\t\t,discipline_id:\n\t\t\t\ta.discipline_id()\n\t\t\t,allocation_id:\n\t\t\t\ta.allocation_id()\n\t\t\t,project_name:\n\t\t\t\ta.project_name\n\t\t\t,allocations_work_name:\n\t\t\t\ta.allocations_work_name()\n\t\t\t,allocations_crew_required:\n\t\t\t\ta.allocations_crew_required()\n\t\t\t,allocations_project_harshness:\n\t\t\t\ta.allocations_project_harshness()\n\t\t\t,allocations_custom_status:\n\t\t\t\ta.allocations_custom_status()\n\t\t\t,allocations_allocation_complete:\n\t\t\t\ta.allocations_allocation_complete()\n\t\t\t,allocations_allocation_forecast:\n\t\t\t\ta.allocations_allocation_forecast()\n\t\t\t,allocations_allocation_date:\n\t\t\t\t timestampToIsoSafe( a.allocations_allocation_date() )\n\t\t\t,schedule_id:\n\t\t\t\ta.schedule_id()\n\t\t\t,allocations_version_key:\n\t\t\t\ta.allocations_version_key()\n\t\t\t,schedule_version_id:\n\t\t\t\ta.schedule_version_id()\n\t\t\t,allocations_completion_comments:\n\t\t\t\ta.allocations_completion_comments()\n\t\t\t,allocations_bad_day:\n\t\t\t\ta.allocations_bad_day()\n\t\t\t,allocations_day_status:\n\t\t\t\ta.allocations_day_status()\n\t\t\t,allocations_weather_status:\n\t\t\t\ta.allocations_weather_status()\n\t\t\t,allocations_vars: a.allocations_vars\n\t\t\t\t.map(AllocationsVarToAPIAllocationVar)\n\t\t\t,allocations_nods: a.allocations_nods\n\t\t\t\t.map(AllocationsNODToAPIAllocationsNOD)\n\t\t\t,allocations_eots: a.allocations_eots\n\t\t\t\t.map(AllocationsEOTtoAPIAllocationsEOT)\n\t\t\t,allocations_contractors: a.allocations_contractors\n\t\t\t\t.map(AllocationsContractorToAPIAllocationsContractor)\n\t\t\t,allocations_transposes: []\n\t\t\t// ,allocations_transposes: a.allocations_transposes\n\t\t\t// \t.map(AllocationsTransposeToAPIAllocationsTranspose)\n\t\t}\n\t}\n\n\tconst allocations = {\n\t\tfetch: {\n\t\t\tdisciplines(allocation_id){\n\t\t\t\tconst url =\n\t\t\t\t\t[ '/allocations/', allocation_id, '/disciplines' ]\n\t\t\t\treturn GET(\n\t\t\t\t\t['GET', url]\n\t\t\t\t)\n\t\t\t}\n\t\t\t,byAllocationScheduleVersionKey: {\n\t\t\t\tshallow: function({schedule_version_id, breadth, startDate, endDate, contractor_id}){\n\t\t\t\t\tconst params =\n\t\t\t\t\t\t[ ['schedule_version_id', schedule_version_id ]\n\t\t\t\t\t\t, ['depth', 1]\n\t\t\t\t\t\t, ['breadth', breadth]\n\t\t\t\t\t\t, ['startDate', startDate]\n\t\t\t\t\t\t, ['endDate', endDate]\n\t\t\t\t\t\t, ['contractor_id', contractor_id]\n\t\t\t\t\t\t]\n\n\t\t\t\t\tconst url =\n\t\t\t\t\t\t[ '/allocations', params]\n\n\t\t\t\t\treturn LIST(\n\t\t\t\t\t\t['GET', url]\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t,shallowUniq: function({schedule_version_id, uniqBy, breadth, pcomplete, startDate, endDate}){\n\t\t\t\t\tconst params =\n\t\t\t\t\t\t[ ['schedule_version_id', schedule_version_id ]\n\t\t\t\t\t\t, ['depth', 1]\n\t\t\t\t\t\t, ['uniqBy', uniqBy]\n\t\t\t\t\t\t, ['breadth', breadth]\n\t\t\t\t\t\t, ['pcomplete', pcomplete]\n\t\t\t\t\t\t, ['startDate', startDate]\n\t\t\t\t\t\t, ['endDate', endDate]\n\t\t\t\t\t\t]\n\n\t\t\t\t\tconst url =\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'GET'\n\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t'/allocations'\n\t\t\t\t\t\t\t\t, params\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\n\t\t\t\t\treturn LIST(url)\n\t\t\t\t\t\t.then((list) =>\n\t\t\t\t\t\t\tlist.map(\n\t\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tallocations_vars: []\n\t\t\t\t\t\t\t\t\t\t\t,allocations_nods: []\n\t\t\t\t\t\t\t\t\t\t\t,allocations_eots: []\n\t\t\t\t\t\t\t\t\t\t\t,allocations_contractors: []\n\t\t\t\t\t\t\t\t\t\t\t,allocations_transposes: []\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,APIAllocationToAllocation\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t,complete: function({schedule_version_id}){\n\t\t\t\t\tconst params =\n\t\t\t\t\t\t[ ['schedule_version_id', schedule_version_id ]\n\t\t\t\t\t\t]\n\n\t\t\t\t\tconst url =\n\t\t\t\t\t\t[ '/allocations', params]\n\n\t\t\t\t\treturn LIST(\n\t\t\t\t\t\t['GET', url]\n\t\t\t\t\t)\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t,byProjectAndScheduleVersion: function({\n\t\t\t\tproject_id\n\t\t\t\t,schedule_version_id\n\t\t\t\t,breadth\n\t\t\t\t,startDate\n\t\t\t\t,endDate\n\t\t\t\t,contractor_id\n\t\t\t}) {\n\n\n\t\t\t\tconst url =\n\t\t\t\t\t[ 'GET'\n\t\t\t\t\t\t,[ '/allocations'\n\t\t\t\t\t\t, \t[ ['project_id', project_id]\n\t\t\t\t\t\t\t, ['schedule_version_id', schedule_version_id]\n\t\t\t\t\t\t\t, ['breadth', breadth]\n\t\t\t\t\t\t\t, ['startDate', startDate]\n\t\t\t\t\t\t\t, ['endDate', endDate]\n\t\t\t\t\t\t\t, ['contractor_id', contractor_id]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t]\n\n\t\t\t\treturn LIST(url)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIAllocationToAllocation)\n\t\t\t\t\t)\n\t\t\t}\n\t\t\t,byScheduleVersion: function({schedule_version_id, startDate, endDate, project_id, contractor_id}){\n\n\t\t\t\tconst url =\n\t\t\t\t\t[ 'GET'\n\t\t\t\t\t\t,[ '/allocations'\n\t\t\t\t\t\t, \t[ ['schedule_version_id', schedule_version_id]\n\t\t\t\t\t\t\t, ['startDate', startDate]\n\t\t\t\t\t\t\t, ['endDate', endDate]\n\t\t\t\t\t\t\t, ['contractor_id', contractor_id]\n\t\t\t\t\t\t\t, ['project_id', project_id]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t]\n\n\t\t\t\treturn LIST(url)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIAllocationToAllocation)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: function(list, schedule_version_id, project_id, disableList ) {\n\n\t\t\tconst endpoint =\n\t\t\t\t['PATCH', ['/allocations']]\n\n\n\t\t\tconst [method, url] = endpoint\n\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders()\n\t\t\t\t, method\n\t\t\t\t, url.join('')\n\t\t\t\t,{ list: list.map(AllocationToAPIAllocation)\n\t\t\t\t, schedule_version_id\n\t\t\t\t, project_id\n\t\t\t\t, disableList\n\t\t\t\t, source: {name: ''}\n\t\t\t\t}\n\t\t\t)\n\t\t\t\t.then( r => r.list.map(APIAllocationToAllocation) )\n\t\t}\n\t}\n\n\tconst allocations_eots = {\n\t\tremove: {\n\t\t\tone: function(allocations_eots_id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/allocations_eots/',allocations_eots_id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst allocations_nods = {\n\t\tremove: {\n\t\t\tone: function(allocations_nods_id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE', ['/allocations_nods/',allocations_nods_id]\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst allocations_vars = {\n\t\tremove: {\n\t\t\tone: function(allocations_vars_id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE', ['/allocations_vars/',allocations_vars_id]\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst project_extras = {\n\t\tremove: {\n\t\t\tone: function(project_extras_id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE', ['/project_extras/',project_extras_id]\n\t\t\t\t])\n\t\t\t}\n\t\t\t,many: function(tasklist){\n\t\t\t\tconst taskDeletions = tasklist.join('--')\n\t\t\t\treturn DELETE(['DELETE', ['/project_extras/tasklist/' + taskDeletions]])\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(project_extras) {\n\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/project_extras']]\n\t\t\t\t\t,[\n\t\t\t\t\t\tproject_extras\n\t\t\t\t\t\t, ProjectDetailsToAPIProjectDetails\n\t\t\t\t\t\t, APIProjectToProject\n\t\t\t\t\t\t, {name: ''}\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t\t,fetch: function({\n\t\t\tproject_id\n\t\t\t,discipline_id\n\t\t\t,typesObj\n\t\t\t,uniqBy\n\t\t\t,pcomplete\n\t\t\t,shallowQuery\n\t\t\t,startDate\n\t\t\t,endDate\n\t\t\t,schedule_id\n\t\t}){\n\t\t\tconst typeparams =\n\t\t\t\t[\n\t\t\t\t\t['completed', typesObj.completed ]\n\t\t\t\t\t, ['invalid', typesObj.invalid ]\n\t\t\t\t\t, ['verified', typesObj.verified ]\n\t\t\t\t\t, ['assigned', typesObj.assigned ]\n\t\t\t\t\t, ['uniqBy', uniqBy]\n\t\t\t\t\t, ['pcomplete', pcomplete]\n\t\t\t\t\t, ['shallowQuery', shallowQuery]\n\t\t\t\t\t, ['startDate', startDate]\n\t\t\t\t\t, ['endDate', endDate]\n\t\t\t\t\t, ['schedule_id', schedule_id]\n\t\t\t\t]\n\n\t\t\tconst params =\n\t\t\t\tdiscipline_id\n\t\t\t\t? [['project_id', project_id]\n\t\t\t\t, ['discipline_id', discipline_id]]\n\t\t\t\t: project_id\n\t\t\t\t? [['project_id', project_id]]\n\t\t\t\t: []\n\n\t\t\tconst allparams = params.length\n\t\t\t\t? typeparams.concat(params)\n\t\t\t\t: typeparams\n\n\t\t\treturn LIST([\n\t\t\t\t'GET', ['/project_extras', allparams ]\n\t\t\t])\n\t\t\t\t.then(\n\t\t\t\t\tlist => list.map(APIProjectDetailsToProjectDetails)\n\t\t\t\t)\n\t\t}\n\t}\n\n\tconst disciplines = {\n\t\tremove: {\n\t\t\tone: function(discipline_id){\n\t\t\t\treturn DELETE(['DELETE', ['/disciplines/',discipline_id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst disciplines_contractors = {\n\t\tremove: {\n\t\t\tone(\n\t\t\t\t\tdisciplines_contractors_id\n\t\t\t\t\t, schedule_version_id\n\t\t\t\t\t, contractor_id\n\t\t\t\t\t, discipline_id\n\t\t\t\t\t, contractoruserid\n\t\t\t\t\t, crewuserid\n\t\t\t){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t[\n\t\t\t\t\t\t'DELETE'\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t'/disciplines_contractors/'\n\t\t\t\t\t\t\t, disciplines_contractors_id || uuid.v4()\n\t\t\t\t\t\t\t,'/schedule_version/'\n\t\t\t\t\t\t\t, schedule_version_id\n\t\t\t\t\t\t\t,'/contractor/'\n\t\t\t\t\t\t\t, contractor_id\n\t\t\t\t\t\t\t,'/discipline/'\n\t\t\t\t\t\t\t, discipline_id\n\t\t\t\t\t\t\t,'/contractoruserid/'\n\t\t\t\t\t\t\t, contractoruserid || uuid.v4()\n\t\t\t\t\t\t\t,'/crewuserid/'\n\t\t\t\t\t\t\t, crewuserid || uuid.v4()\n\t\t\t\t\t\t]\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst disciplines_contractors_crews = {\n\t\tremove: {\n\t\t\tone: function(\n\t\t\t\tdisciplines_contractors_crews_id\n\t\t\t\t, schedule_version_id\n\t\t\t\t, crew_id\n\t\t\t\t, discipline_id\n\t\t\t\t, crewuserid\n\t\t\t){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t[\n\t\t\t\t\t\t'DELETE'\n\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t'/disciplines_contractors_crews/'\n\t\t\t\t\t\t\t, disciplines_contractors_crews_id || uuid.v4()\n\t\t\t\t\t\t\t,'/schedule_version/'\n\t\t\t\t\t\t\t, schedule_version_id\n\t\t\t\t\t\t\t,'/crew/'\n\t\t\t\t\t\t\t, crew_id\n\t\t\t\t\t\t\t,'/discipline/'\n\t\t\t\t\t\t\t, discipline_id\n\t\t\t\t\t\t\t,'/crewuserid/'\n\t\t\t\t\t\t\t, crewuserid || uuid.v4()\n\t\t\t\t\t\t]\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction WarehouseToAPIWarehouse(w) {\n\t\treturn R.merge(w, {\n\t\t\twarehouse_delivery:\n\t\t\t\tw.warehouse_delivery()\n\t\t\t,warehouse_email:\n\t\t\t\tw.warehouse_email()\n\t\t\t,warehouse_location:\n\t\t\t\tw.warehouse_location()\n\t\t\t,warehouse_name:\n\t\t\t\tw.warehouse_name()\n\t\t\t,warehouse_operating_hours_public_holiday:\n\t\t\t\tw.warehouse_operating_hours_public_holiday()\n\t\t\t,warehouse_operating_hours_regular:\n\t\t\t\tw.warehouse_operating_hours_regular()\n\t\t\t,warehouse_operating_hours_weekend:\n\t\t\t\tw.warehouse_operating_hours_weekend()\n\t\t\t,warehouse_phone:\n\t\t\t\tw.warehouse_phone()\n\t\t\t,warehouse_items:\n\t\t\t\tw.warehouse_items\n\t\t\t\t\t.map(MaterialToAPIMaterial)\n\t\t\t,organization_id:\n\t\t\t\tw.organization_id() || undefined\n\t\t\t, warehouse_id:\n\t\t\t\tw.warehouse_id() || undefined\n\t\t})\n\t}\n\n\tfunction APIWarehouseToWarehouse (w){\n\t\treturn R.merge(w, {\n\t\t\twarehouse_delivery:\n\t\t\t\tm.prop(w.warehouse_delivery)\n\t\t\t,warehouse_email:\n\t\t\t\tm.prop(w.warehouse_email)\n\t\t\t,warehouse_location:\n\t\t\t\tm.prop(w.warehouse_location)\n\t\t\t,warehouse_name:\n\t\t\t\tm.prop(w.warehouse_name)\n\t\t\t,warehouse_operating_hours_public_holiday:\n\t\t\t\tm.prop(w.warehouse_operating_hours_public_holiday)\n\t\t\t,warehouse_operating_hours_regular:\n\t\t\t\tm.prop(w.warehouse_operating_hours_regular)\n\t\t\t,warehouse_operating_hours_weekend:\n\t\t\t\tm.prop(w.warehouse_operating_hours_weekend)\n\t\t\t,warehouse_phone:\n\t\t\t\tm.prop(w.warehouse_phone)\n\t\t\t,warehouse_items:\n\t\t\t\tw.warehouse_items.map(APIMaterialToMaterial)\n\t\t\t,organization_id:\n\t\t\t\tm.prop(w.organization_id || null)\n\t\t\t,warehouse_id:\n\t\t\t\tm.prop(w.warehouse_id || null)\n\t\t\t,contractrecognitionid:\n\t\t\t\tw.contractrecognitionid\n\t\t\t,contractrecognitionname:\n\t\t\t\tw.contractrecognitionname\n\t\t\t,contractrecognitiondescription:\n\t\t\t\tw.contractrecognitiondescription\n\t\t})\n\t}\n\n\tfunction MaterialToAPIMaterial(o){\n\t\treturn {\n\t\t\tdistribution_amount:\n\t\t\t\texposer(o.distribution_amount)\n\t\t\t,distribution_batch:\n\t\t\t\texposer(o.distribution_batch)\n\t\t\t,distribution_container_id:\n\t\t\t\texposer(o.distribution_container_id)\n\t\t\t,distribution_container_name:\n\t\t\t\texposer(o.distribution_container_name)\n\t\t\t,distribution_entity_name:\n\t\t\t\texposer(o.distribution_entity_name)\n\t\t\t,distribution_float:\n\t\t\t\texposer(o.distribution_float)\n\t\t\t,distribution_material_description:\n\t\t\t\texposer(o.distribution_material_description)\n\t\t\t,distribution_material_name:\n\t\t\t\texposer(o.distribution_material_name)\n\t\t\t,distribution_ordered:\n\t\t\t\texposer(o.distribution_ordered)\n\t\t\t,distribution_silo:\n\t\t\t\texposer(o.distribution_silo)\n\t\t\t,distribution_stocked:\n\t\t\t\texposer(o.distribution_stocked)\n\t\t\t,supplier_id:\n\t\t\t\texposer(o.supplier_id) || \"\"\n\t\t\t,distribution_entity_id:\n\t\t\t\texposer(o.distribution_entity_id) || undefined\n\t\t\t,distribution_id:\n\t\t\t\texposer(o.distribution_id) || undefined\n\t\t\t,organization_id:\n\t\t\t\texposer(o.organization_id) || undefined\n\t\t\t,supplier_items_id:\n\t\t\t\texposer(o.supplier_items_id) || undefined\n\t\t\t,supplier_name:\n\t\t\t\texposer(o.supplier_name) || undefined\n\t\t\t,supplier_items_cost:\n\t\t\t\texposer(o.supplier_items_cost) || undefined\n\t\t\t,supplier_items_batch_cost:\n\t\t\t\texposer(o.supplier_items_batch_cost) || undefined\n\t\t\t,autoorder: exposer(o.autoorder)\n\t\t\t,autoreceived: exposer(o.autoreceived)\n\t\t\t,transfers: o.transfers\n\t\t\t,combine: o.combine\n\t\t}\n\t}\n\n\tfunction APIMaterialToMaterial (o){\n\t\treturn {\n\t\t\tdistribution_amount:\n\t\t\t\tm.prop(o.distribution_amount)\n\t\t\t,distribution_batch:\n\t\t\t\tm.prop(o.distribution_batch)\n\t\t\t,distribution_container_id:\n\t\t\t\tm.prop(o.distribution_container_id || null)\n\t\t\t,distribution_container_name:\n\t\t\t\tm.prop(o.distribution_container_name)\n\t\t\t,distribution_entity_id:\n\t\t\t\tm.prop(o.distribution_entity_id || null)\n\t\t\t,distribution_entity_name:\n\t\t\t\tm.prop(o.distribution_entity_name)\n\t\t\t,distribution_float:\n\t\t\t\tm.prop(o.distribution_float)\n\t\t\t,distribution_id:\n\t\t\t\tm.prop(o.distribution_id || null)\n\t\t\t,distribution_material_description:\n\t\t\t\tm.prop(o.distribution_material_description)\n\t\t\t,distribution_material_name:\n\t\t\t\tm.prop(o.distribution_material_name)\n\t\t\t,distribution_ordered:\n\t\t\t\tm.prop(o.distribution_ordered)\n\t\t\t,distribution_silo:\n\t\t\t\tm.prop(o.distribution_silo)\n\t\t\t,distribution_stocked:\n\t\t\t\tm.prop(o.distribution_stocked)\n\t\t\t,organization_id:\n\t\t\t\tm.prop(o.organization_id || null)\n\t\t\t,supplier_id:\n\t\t\t\tm.prop(o.supplier_id || \"\")\n\t\t\t,supplier_items_id:\n\t\t\t\tm.prop(o.supplier_items_id || null)\n\t\t\t,order_eta: o.order_eta\n\t\t\t,order_name: o.order_name\n\t\t\t,order_received: o.order_received\n\t\t\t,requiredby: o.requiredby\n\t\t\t,project_start_date: o.project_start_date\n\t\t\t,discipline_start_date: o.discipline_start_date\n\t\t\t,project_id: o.project_id\n\t\t\t,warehouse_id: o.warehouse_id\n\t\t\t,discipline_id: o.discipline_id\n\t\t\t,fmgroupedbyitem: o.fmgroupedbyitem\n\t\t\t,currentqty: o.currentqty\n\t\t\t,requiredqty: o.requiredqty\n\t\t\t,wastediff: o.wastediff\n\t\t}\n\t}\n\n\tconst warehouses = {\n\t\tfetch: {\n\t\t\tall: function({props, depth}) {\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/warehouses', params]])\n\t\t\t\t\t.then( list => list.map(APIWarehouseToWarehouse) )\n\t\t\t\t\t.then(t.addMetaData)\n\t\t\t}\n\t\t}\n\t\t,patch(warehouses) {\n\n\t\t\tconst t = request.MetadataTracker()\n\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', ['/warehouses']]\n\t\t\t\t,[ t.removeMetaData(warehouses)\n\t\t\t\t, WarehouseToAPIWarehouse\n\t\t\t\t, APIWarehouseToWarehouse\n\t\t\t\t]\n\t\t\t)\n\t\t\t.then( t.addMetaData )\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\treturn DELETE(['DELETE', ['/warehouses/', id]])\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APISupplierItemToSupplierItem(\n\t\to\n\t) {\n\t\treturn R.merge(o, {\n\t\t\tsupplier_id:\n\t\t\t\tm.prop(o.supplier_id || null)\n\t\t\t,supplier_items_supply_time:\n\t\t\t\tm.prop(o.supplier_items_supply_time)\n\t\t\t,supplier_items_available:\n\t\t\t\tm.prop(o.supplier_items_available)\n\t\t\t,supplier_items_batch:\n\t\t\t\tm.prop(o.supplier_items_batch)\n\t\t\t,supplier_items_batch_cost:\n\t\t\t\tm.prop(o.supplier_items_batch_cost)\n\t\t\t,supplier_items_cost:\n\t\t\t\tm.prop(o.supplier_items_cost)\n\t\t\t,supplier_items_description:\n\t\t\t\tm.prop(o.supplier_items_description)\n\t\t\t,supplier_items_id:\n\t\t\t\tm.prop(o.supplier_items_id || null)\n\t\t\t,supplier_items_minimum_order:\n\t\t\t\tm.prop(o.supplier_items_minimum_order)\n\t\t\t,supplier_items_name:\n\t\t\t\tm.prop(o.supplier_items_name)\n\t\t\t,supplier_items_uom:\n\t\t\t\tm.prop(o.supplier_items_uom)\n\t\t})\n\t}\n\n\tfunction APISupplierLocationToSupplierLocation(\n\t\to\n\t) {\n\t\treturn {\n\t\t\tsupplier_id:\n\t\t\t\tm.prop(o.supplier_id || null)\n\t\t\t,supplier_locations_email:\n\t\t\t\tm.prop(o.supplier_locations_email)\n\t\t\t,supplier_locations_id:\n\t\t\t\tm.prop(o.supplier_locations_id || null)\n\t\t\t,supplier_locations_location:\n\t\t\t\tm.prop(o.supplier_locations_location)\n\t\t\t,supplier_locations_phone:\n\t\t\t\tm.prop(o.supplier_locations_phone)\n\t\t\t,supplier_locations_public_holiday_operating_hours:\n\t\t\t\tm.prop(o.supplier_locations_public_holiday_operating_hours)\n\t\t\t,supplier_locations_regular_operating_hours:\n\t\t\t\tm.prop(o.supplier_locations_regular_operating_hours)\n\t\t\t,supplier_locations_weekend_operating_hours:\n\t\t\t\tm.prop(o.supplier_locations_weekend_operating_hours)\n\t\t}\n\t}\n\n\tfunction APISupplierToSupplier(a){\n\t\treturn {\n\t\t\torganization_id: m.prop(a.organization_id || null)\n\t\t\t,supplier_id: m.prop(a.supplier_id || null)\n\t\t\t,supplier_delivery: m.prop(a.supplier_delivery)\n\t\t\t,supplier_name: m.prop(a.supplier_name)\n\t\t\t,supplier_items: a.supplier_items\n\t\t\t\t.map(APISupplierItemToSupplierItem)\n\t\t\t,supplier_locations: a.supplier_locations\n\t\t\t\t.map(APISupplierLocationToSupplierLocation)\n\t\t}\n\t}\n\n\n\tfunction SupplierItemToAPISupplierItem(o){\n\t\treturn {\n\t\t\tsupplier_items_available: o.supplier_items_available()\n\t\t\t,supplier_items_supply_time: o.supplier_items_supply_time()\n\t\t\t,supplier_items_batch: o.supplier_items_batch()\n\t\t\t,supplier_items_batch_cost: o.supplier_items_batch_cost()\n\t\t\t,supplier_items_cost: o.supplier_items_cost()\n\t\t\t,supplier_items_description: o.supplier_items_description()\n\t\t\t,supplier_items_minimum_order: o.supplier_items_minimum_order()\n\t\t\t,supplier_items_name: o.supplier_items_name()\n\t\t\t,supplier_items_uom: o.supplier_items_uom()\n\t\t\t,supplier_id: o.supplier_id() || undefined\n\t\t\t,supplier_items_id: o.supplier_items_id() || undefined\n\t\t}\n\t}\n\n\tfunction SupplierLocationToAPISupplierLocation(o){\n\t\treturn {\n\t\t\tsupplier_locations_email:\n\t\t\t\to.supplier_locations_email()\n\t\t\t,supplier_locations_location:\n\t\t\t\to.supplier_locations_location()\n\t\t\t,supplier_locations_phone:\n\t\t\t\to.supplier_locations_phone()\n\t\t\t,supplier_locations_public_holiday_operating_hours:\n\t\t\t\to.supplier_locations_public_holiday_operating_hours()\n\t\t\t,supplier_locations_regular_operating_hours:\n\t\t\t\to.supplier_locations_regular_operating_hours()\n\t\t\t,supplier_locations_weekend_operating_hours:\n\t\t\t\to.supplier_locations_weekend_operating_hours()\n\t\t\t,supplier_id:\n\t\t\t\to.supplier_id()\n\t\t\t,supplier_locations_id:\n\t\t\t\to.supplier_locations_id()\n\t\t}\n\t}\n\n\tfunction SupplierToAPISupplier(o){\n\t\treturn R.merge(o, {\n\t\t\torganization_id:\n\t\t\t\to.organization_id()\n\t\t\t\t|| undefined\n\t\t\t, supplier_id:\n\t\t\t\to.supplier_id()\n\t\t\t\t|| undefined\n\t\t\t,supplier_name:\n\t\t\t\to.supplier_name()\n\t\t\t,supplier_delivery:\n\t\t\t\to.supplier_delivery()\n\t\t\t,supplier_items:\n\t\t\t\to.supplier_items.map(SupplierItemToAPISupplierItem)\n\t\t\t,supplier_locations:\n\t\t\t\to.supplier_locations.map(SupplierLocationToAPISupplierLocation)\n\t\t})\n\t}\n\n\tconst suppliers = {\n\t\tpatch(list) {\n\t\t\tconst t = request.MetadataTracker()\n\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', ['/suppliers']]\n\t\t\t\t,[ t.removeMetaData(list)\n\t\t\t\t, SupplierToAPISupplier\n\t\t\t\t, APISupplierToSupplier\n\t\t\t\t]\n\t\t\t)\n\t\t\t.then( t.addMetaData )\n\t\t}\n\t\t,fetch: {\n\t\t\tall: function({props, depth}) {\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['props', props]\n\t\t\t\t\t,['depth', depth]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(['GET', ['/suppliers', params]])\n\t\t\t\t\t.then( list => list.map( APISupplierToSupplier ))\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\tconst t = request.MetadataTracker()\n\t\t\t\treturn DELETE(['DELETE', ['/suppliers/', id]])\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t}\n\n\tconst supplier_items = {\n\t\tremove: {\n\t\t\tone: function(id){\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\treturn DELETE(['DELETE', ['/suppliers/supplier_items/', id]])\n\t\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction PresetToAPIPreset ( o ) {\n\n\t\treturn {\n\t\t\tpresets_name:\n\t\t\t\to.presets_name()\n\t\t\t,distribution_material_name:\n\t\t\t\to.distribution_material_name()\n\t\t\t,distribution_material_description:\n\t\t\t\to.distribution_material_description()\n\t\t\t,distribution_amount:\n\t\t\t\to.distribution_amount()\n\t\t\t,distribution_batch:\n\t\t\t\to.distribution_batch()\n\t\t\t,distribution_container_name:\n\t\t\t\to.distribution_container_name()\n\t\t\t,distribution_container_id:\n\t\t\t\to.distribution_container_id()\n\t\t\t,distribution_silo:\n\t\t\t\to.distribution_silo()\n\t\t\t,distribution_ordered:\n\t\t\t\to.distribution_ordered()\n\t\t\t,distribution_stocked:\n\t\t\t\to.distribution_stocked()\n\t\t\t,distribution_float:\n\t\t\t\to.distribution_float()\n\t\t\t,distribution_entity_name:\n\t\t\t\to.distribution_entity_name()\n\t\t\t,supplier_id:\n\t\t\t\to.supplier_id()\n\t\t\t,presets_id:\n\t\t\t\to.presets_id()\n\t\t\t\t|| undefined\n\t\t\t,organization_id:\n\t\t\t\to.organization_id()\n\t\t\t\t|| undefined\n\t\t\t,supplier_items_id:\n\t\t\t\to.supplier_items_id()\n\t\t\t\t|| undefined\n\t\t\t,distribution_entity_id:\n\t\t\t\to.distribution_entity_id()\n\t\t\t\t|| undefined\n\t\t}\n\t}\n\n\tfunction APIPresetToPreset (o){\n\n\t\treturn {\n\t\t\tpresets_id:\n\t\t\t\tm.prop(o.presets_id || null)\n\t\t\t,presets_name:\n\t\t\t\tm.prop(o.presets_name)\n\t\t\t,organization_id:\n\t\t\t\tm.prop(o.organization_id || null)\n\t\t\t,distribution_entity_id:\n\t\t\t\tm.prop(o.distribution_entity_id || null)\n\t\t\t,supplier_items_id:\n\t\t\t\tm.prop(o.supplier_items_id || null)\n\t\t\t,distribution_material_name:\n\t\t\t\tm.prop(o.distribution_material_name)\n\t\t\t,distribution_material_description:\n\t\t\t\tm.prop(o.distribution_material_description)\n\t\t\t,distribution_amount:\n\t\t\t\tm.prop(o.distribution_amount)\n\t\t\t,distribution_batch:\n\t\t\t\tm.prop(o.distribution_batch)\n\t\t\t,distribution_container_name:\n\t\t\t\tm.prop(o.distribution_container_name)\n\t\t\t,distribution_container_id:\n\t\t\t\tm.prop(o.distribution_container_id || null)\n\t\t\t,distribution_silo:\n\t\t\t\tm.prop(o.distribution_silo)\n\t\t\t,distribution_ordered:\n\t\t\t\tm.prop(o.distribution_ordered)\n\t\t\t,distribution_stocked:\n\t\t\t\tm.prop(o.distribution_stocked)\n\t\t\t,distribution_float:\n\t\t\t\tm.prop(o.distribution_float)\n\t\t\t,distribution_entity_name:\n\t\t\t\tm.prop(o.distribution_entity_name)\n\t\t\t,supplier_id:\n\t\t\t\tm.prop(o.supplier_id)\n\t\t}\n\t}\n\n\tconst presets = {\n\t\tfetch: {\n\t\t\tall: function(){\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/presets']]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIPresetToPreset)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(presets){\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/presets']]\n\t\t\t\t\t,[ presets\n\t\t\t\t\t, PresetToAPIPreset\n\t\t\t\t\t, APIPresetToPreset\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/presets/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst materials = {\n\t\tfetch: {\n\t\t\tall: function({projects, warehouse_id, completedProjects}){\n\n\t\t\t\tconst params =\n\t\t\t\t\t[['projects', projects ]\n\t\t\t\t\t,['warehouse_id', warehouse_id]\n\t\t\t\t\t,['completedProjects', completedProjects]]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/materials', params]]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIMaterialToMaterial)\n\t\t\t\t\t)\n\t\t\t}\n\t\t\t,suggested: function({projects, warehouse_id, tasks}){\n\n\t\t\t\tconst params =\n\t\t\t\t\t[['projects', projects ]\n\t\t\t\t\t,['warehouse_id', warehouse_id]\n\t\t\t\t\t,['tasks', tasks]]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/materials/suggested', params]]\n\t\t\t\t)\n\t\t\t\t\t.then(list => list.map(R.identity))\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(materials){\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/materials']]\n\t\t\t\t\t,[ materials\n\t\t\t\t\t, MaterialToAPIMaterial\n\t\t\t\t\t, APIMaterialToMaterial\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/materials/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst supplier_locations = {\n\t\tremove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE', ['/suppliers/supplier_locations/', id]\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction OrderToAPIOrder ( o ) {\n\n\t\treturn {\n\t\t\torder_name:\n\t\t\t\to.order_name()\n\t\t\t,order_items_name:\n\t\t\t\to.order_items_name()\n\t\t\t,order_items_description:\n\t\t\t\to.order_items_description()\n\t\t\t,order_amount:\n\t\t\t\to.order_amount()\n\t\t\t,order_notes:\n\t\t\t\to.order_notes()\n\t\t\t,order_received:\n\t\t\t\to.order_received()\n\t\t\t,order_items_cost:\n\t\t\t\to.order_items_cost()\n\t\t\t,order_supplier_name:\n\t\t\t\to.order_supplier_name()\n\t\t\t,order_stock_location:\n\t\t\t\to.order_stock_location()\n\t\t\t,order_submission_date:\n\t\t\t\tisoToTimeStampSafe( o.order_submission_date() )\n\t\t\t,order_eta:\n\t\t\t\tisoToTimeStampUnsafe( o.order_eta() )\n\t\t\t,order_id: o.order_id() || undefined\n\t\t\t,organization_id: o.organization_id() || undefined\n\t\t\t,distribution_id: o.distribution_id() || undefined\n\t\t\t,supplier_id: o.supplier_id() || undefined\n\t\t\t,supplier_items_id: o.supplier_items_id() || undefined\n\t\t}\n\t}\n\n\tfunction APIOrderToOrder ( o ) {\n\n\t\treturn {\n\t\t\torder_id:\n\t\t\t\tm.prop(o.order_id || null)\n\t\t\t,organization_id:\n\t\t\t\tm.prop(o.organization_id || null)\n\t\t\t,distribution_id:\n\t\t\t\tm.prop(o.distribution_id || null)\n\t\t\t,supplier_id:\n\t\t\t\tm.prop(o.supplier_id || null)\n\t\t\t,supplier_items_id:\n\t\t\t\tm.prop(o.supplier_items_id || null)\n\t\t\t,order_name:\n\t\t\t\tm.prop(o.order_name)\n\t\t\t,order_items_name:\n\t\t\t\tm.prop(o.order_items_name)\n\t\t\t,order_items_description:\n\t\t\t\tm.prop(o.order_items_description)\n\t\t\t,order_amount:\n\t\t\t\tm.prop(o.order_amount)\n\t\t\t,order_notes:\n\t\t\t\tm.prop(o.order_notes)\n\t\t\t,order_received:\n\t\t\t\tm.prop(o.order_received)\n\t\t\t,order_items_cost:\n\t\t\t\tm.prop(o.order_items_cost)\n\t\t\t,order_supplier_name:\n\t\t\t\tm.prop(o.order_supplier_name)\n\t\t\t,order_stock_location:\n\t\t\t\tm.prop(o.order_stock_location)\n\t\t\t,order_submission_date:\n\t\t\t\tm.prop( timestampToIsoSafe( o.order_submission_date ) )\n\t\t\t,order_eta:\n\t\t\t\tm.prop( timestampToIsoUnsafe( o.order_eta ))\n\t\t\t,filecount: o.filecount\n\t\t}\n\t}\n\n\tconst orders = {\n\t\tfetch: {\n\t\t\tall: function({project_id, warehouse_id, completedProjects}) {\n\n\t\t\t\tconst params =\n\t\t\t\t\t[['project_id', project_id ]\n\t\t\t\t\t,['warehouse_id', warehouse_id]\n\t\t\t\t\t,['completedProjects', completedProjects]]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/orders', params]]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIOrderToOrder)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(orders){\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/orders']]\n\t\t\t\t\t,[ orders\n\t\t\t\t\t, OrderToAPIOrder\n\t\t\t\t\t, APIOrderToOrder\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/orders/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction ContainerToAPIContainer ( o ){\n\n\t\treturn {\n\t\t\tcontainer_name: o.container_name()\n\t\t\t,container_silo: o.container_silo()\n\t\t\t,organization_id: o.organization_id() || undefined\n\t\t\t,container_id: o.container_id() || undefined\n\t\t}\n\t}\n\n\tfunction APIContainerToContainer ( o ) {\n\n\t\treturn {\n\t\t\torganization_id: m.prop(o.organization_id || null)\n\t\t\t,container_id: m.prop(o.container_id || null)\n\t\t\t,container_name: m.prop(o.container_name)\n\t\t\t,container_silo: m.prop(o.container_silo)\n\t\t\t,holdings: null\n\t\t\t,capacity: null\n\t\t\t,containerIsFull: null\n\t\t}\n\t}\n\n\tconst containers = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/containers']]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIContainerToContainer)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(containers) {\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/containers']]\n\t\t\t\t\t,[ containers\n\t\t\t\t\t, ContainerToAPIContainer\n\t\t\t\t\t, APIContainerToContainer\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/containers/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIRoleToRole ( o ){\n\n\t\treturn {\n\t\t\trole_name: m.prop(o.role_name)\n\t\t\t,role_description: m.prop(o.role_description)\n\t\t\t,role_permissions: m.prop(o.role_permissions)\n\t\t\t,role_id: m.prop(o.role_id)\n\t\t}\n\t}\n\n\tconst groups2 = {\n\t\tfetch: {\n\t\t\tbyOrganization({ organization_id }){\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/groups/', organization_id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t, update(group){\n\t\t\treturn POST(\n\t\t\t\t['PATCH', ['/groups/', group.group_id]]\n\t\t\t\t, [group, I, I]\n\t\t\t)\n\t\t}\n\t\t, create(group){\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/groups']]\n\t\t\t\t, [group, I, I]\n\t\t\t)\n\t\t}\n\t\t,delete(group){\n\t\t\treturn DELETE(\n\t\t\t\t['DELETE', ['/groups/', group.group_id]]\n\t\t\t)\n\t\t}\n\t}\n\n\tconst roles = {\n\t\tfetch: {\n\t\t\tall() {\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/roles']]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIRoleToRole)\n\t\t\t\t\t)\n\t\t\t}\n\t\t\t,byOrganization({ organization_id }){\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/roles/', organization_id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,reqParser: I\n\t\t,resParser: I\n\t\t,update(role){\n\t\t\treturn POST(\n\t\t\t\t['PATCH', ['/roles/', role.role_id]]\n\t\t\t\t, [role, roles.reqParser, roles.resParser]\n\t\t\t)\n\t\t}\n\t\t,create(role){\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/roles']]\n\t\t\t\t, [role, roles.reqParser, roles.resParser]\n\t\t\t)\n\t\t}\n\t\t,delete(role){\n\t\t\treturn DELETE(\n\t\t\t\t['DELETE', ['/roles/', role.role_id]]\n\t\t\t)\n\t\t}\n\t}\n\n\tfunction InviteToAPIInvite ( o ){\n\n\t\treturn {\n\t\t\tinvite_id: o.invite_id()\n\t\t\t,invite_email: o.invite_email()\n\t\t\t,invite_creation_time:\n\t\t\t\ttimestampToIsoUnsafe(o.invite_creation_time())\n\t\t\t,role_id: o.role_id()\n\t\t\t,organization_id: o.organization_id()\n\t\t\t,invite_groups: o.invite_groups()\n\t\t}\n\t}\n\n\tfunction APIInviteToInvite ( o ){\n\n\t\treturn {\n\t\t\tinvite_id:\n\t\t\t\tm.prop(o.invite_id || null)\n\t\t\t,invite_email:\n\t\t\t\tm.prop(o.invite_email)\n\t\t\t,invite_creation_time:\n\t\t\t\tm.prop( isoToTimeStampUnsafe(o.invite_creation_time) )\n\t\t\t,role_id:\n\t\t\t\tm.prop(o.role_id || null)\n\t\t\t,organization_id:\n\t\t\t\tm.prop(o.organization_id || null)\n\t\t}\n\t}\n\n\tconst invites = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/invites']]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APIInviteToInvite)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,ok({ invite_email, invite_id, user_id }){\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/invites/ok?']]\n\t\t\t\t,[ user_id\n\t\t\t\t\t? { invite_email, invite_id, user_id }\n\t\t\t\t\t: { invite_email, invite_id }\n\t\t\t\t\t, I, I\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t\t,post: {\n\t\t\tone: function(invite) {\n\t\t\t\treturn POST(\n\t\t\t\t\t['POST', ['/invites']]\n\t\t\t\t\t,[ invite\n\t\t\t\t\t, InviteToAPIInvite\n\t\t\t\t\t, APIInviteToInvite\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,accept({\n\t\t\tinvite_id\n\t\t\t, user_username\n\t\t\t, user_email\n\t\t\t, user_name\n\t\t\t, user_password\n\t\t}){\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/users/invites/', invite_id ]]\n\t\t\t\t,[ { user_username\n\t\t\t\t, user_email\n\t\t\t\t, user_name\n\t\t\t\t, user_password\n\t\t\t\t}\n\t\t\t\t, I\n\t\t\t\t, I\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/invites/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction TimesheetToAPITimesheet ( o ){\n\n\t\treturn {\n\t\t\tuser_id: o.user_id()\n\t\t\t,user_name: o.user_name()\n\t\t\t,crew_id: o.crew_id()\n\t\t\t,crew_name: o.crew_name()\n\t\t\t,crew_hours: o.crew_hours()\n\t\t\t,crew_work: o.crew_work()\n\t\t\t,crew_performance: o.crew_performance()\n\t\t\t,work_conditions: o.work_conditions()\n\t\t\t,timesheets_id: o.timesheets_id() || undefined\n\t\t\t,organization_id: o.organization_id() || undefined\n\t\t\t,allocation_id: o.allocation_id() || undefined\n\t\t}\n\t}\n\n\tfunction APITimesheetToTimesheet ( o ){\n\n\t\treturn {\n\t\t\ttimesheets_id: m.prop(o.timesheets_id || null)\n\t\t\t,organization_id: m.prop(o.organization_id || null)\n\t\t\t,allocation_id: m.prop(o.allocation_id || null)\n\t\t\t,user_id: m.prop(o.user_id || null)\n\t\t\t,crew_id: m.prop(o.crew_id || null)\n\t\t\t,user_name: m.prop(o.user_name || null)\n\t\t\t,crew_name: m.prop(o.crew_name || null)\n\t\t\t,crew_hours: m.prop(Number(o.crew_hours).toFixed(2))\n\t\t\t,crew_work: m.prop(Number(o.crew_work).toFixed(2))\n\t\t\t,crew_performance: m.prop(o.crew_performance)\n\t\t\t,work_conditions: m.prop(o.work_conditions)\n\t\t\t,owner_id: o.crew_id || o.user_id\n\t\t\t,organizations_disciplines_id: o.organizations_disciplines_id\n\t\t\t,sharedtimesheet: o.sharedtimesheet\n\t\t}\n\t}\n\n\tconst timesheets = {\n\t\tfetch: {\n\t\t\tall: function() {\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/timesheets']]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APITimesheetToTimesheet)\n\t\t\t\t\t)\n\t\t\t}\n\t\t\t,byAllocationId: function({allocation_id, sharedtimesheet}) {\n\t\t\t\tconst params =\n\t\t\t\t\t[['allocation_id', allocation_id ]\n\t\t\t\t\t,['sharedtimesheet', sharedtimesheet]\n\t\t\t\t\t]\n\n\t\t\t\tconst url =\n\t\t\t\t\t[ '/timesheets', params]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', url]\n\t\t\t\t)\n\t\t\t\t\t.then(function(list){\n\t\t\t\t\t\treturn list.map(APITimesheetToTimesheet)\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t,byProjectId: function({project_id}) {\n\t\t\t\tconst params =\n\t\t\t\t\t[ ['project_id', project_id ]\n\t\t\t\t\t]\n\n\t\t\t\tconst url =\n\t\t\t\t\t[ '/timesheets', params]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', url]\n\t\t\t\t)\n\t\t\t\t\t.then(function(list){\n\t\t\t\t\t\treturn list.map(APITimesheetToTimesheet)\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t,byScheduleVersionId: function(schedule_version_id) {\n\t\t\t\tconst params = [\n\t\t\t\t\t['schedule_version_id', schedule_version_id ]\n\t\t\t\t]\n\n\t\t\t\tconst url =\n\t\t\t\t\t[ '/timesheets', params]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', url]\n\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(APITimesheetToTimesheet)\n\t\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(timesheets, disableList, aligntimesheets){\n\n\t\t\t\tconst paramst =\n\t\t\t\t\t'disableList/'\n\t\t\t\t\t+ disableList\n\t\t\t\t\t+ '/aligntimesheets/'\n\t\t\t\t\t+ aligntimesheets\n\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/timesheets/' + paramst]]\n\t\t\t\t\t,[ timesheets\n\t\t\t\t\t, TimesheetToAPITimesheet\n\t\t\t\t\t, APITimesheetToTimesheet\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,remove: {\n\t\t\tone: function(id){\n\t\t\t\treturn DELETE(['DELETE', ['/timesheets/', id]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst organizations = {\n\n\t\tcreate: function({\n\t\t\torganization_name\n\t\t\t, organization_id\n\t\t\t, organization_incorporation_no\n\t\t\t, organizations_details_id\n\t\t\t, organizations_details_phone\n\t\t\t, organizations_details_address\n\t\t\t, organizations_details_state\n\t\t\t, organizations_details_postcode\n\t\t}){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t, baseHeaders()\n\t\t\t\t,'POST'\n\t\t\t\t,'/organizations'\n\t\t\t\t,{\n\t\t\t\t\torganization_name\n\t\t\t\t\t, _organization_id: organization_id\n\t\t\t\t\t, organization_incorporation_no\n\t\t\t\t\t, organizations_details:\n\t\t\t\t\t\torganizations_details_phone\n\t\t\t\t\t\t|| organizations_details_address\n\t\t\t\t\t\t|| organizations_details_state\n\t\t\t\t\t\t|| organizations_details_postcode\n\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\torganizations_details_id\n\t\t\t\t\t\t\t, organizations_details_phone\n\t\t\t\t\t\t\t, organizations_details_address\n\t\t\t\t\t\t\t, organizations_details_state\n\t\t\t\t\t\t\t, organizations_details_postcode\n\t\t\t\t\t\t}]\n\t\t\t\t\t\t: []\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\t,update: function({\n\t\t\torganization_name\n\t\t\t, organization_id\n\t\t\t, organization_incorporation_no\n\t\t\t, organizations_details_id\n\t\t\t, organizations_details_phone\n\t\t\t, organizations_details_address\n\t\t\t, organizations_details_state\n\t\t\t, organizations_details_postcode\n\t\t }){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t, baseHeaders()\n\t\t\t\t,'PATCH'\n\t\t\t\t,'/organizations/'+organization_id\n\t\t\t\t,{\n\t\t\t\t\torganization_id\n\t\t\t\t\t, organization_name\n\t\t\t\t\t, organization_incorporation_no\n\t\t\t\t\t, organizations_details:\n\t\t\t\t\t\torganizations_details_phone\n\t\t\t\t\t\t|| organizations_details_address\n\t\t\t\t\t\t|| organizations_details_state\n\t\t\t\t\t\t|| organizations_details_postcode\n\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\torganizations_details_id\n\t\t\t\t\t\t\t, organizations_details_phone\n\t\t\t\t\t\t\t, organizations_details_address\n\t\t\t\t\t\t\t, organizations_details_state\n\t\t\t\t\t\t\t, organizations_details_postcode\n\t\t\t\t\t\t}]\n\t\t\t\t\t\t: []\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\t,delete({ organization_id }){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t, baseHeaders()\n\t\t\t\t,'DELETE'\n\t\t\t\t,'/organizations/'+organization_id\n\t\t\t\t,{}\n\t\t\t)\n\t\t}\n\n\t\t,get({ organization_id }){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t, baseHeaders()\n\t\t\t\t,'GET'\n\t\t\t\t,'/organizations/'+organization_id\n\t\t\t\t,{ organization_id }\n\t\t\t)\n\t\t}\n\t}\n\n\tconst auths = {\n\n\t\tcreate: function(a) {\n\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,{}\n\t\t\t\t,'POST'\n\t\t\t\t,'/auths'\n\t\t\t\t, a\n\t\t\t)\n\t\t}\n\n\t\t,magicLink(a) {\n\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,{}\n\t\t\t\t,'POST'\n\t\t\t\t,'/auths/magic'\n\t\t\t\t, a\n\t\t\t)\n\t\t}\n\n\t\t,ping(){\n\t\t\treturn GET(\n\t\t\t\t['GET', ['/auths/ok']]\n\t\t\t)\n\t\t}\n\n\t\t,get(){\n\t\t\treturn GET(\n\t\t\t\t['GET', ['/auths']]\n\t\t\t)\n\t\t}\n\n\t\t,async refresh(){\n\t\t\treturn await request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,{}\n\t\t\t\t,'POST'\n\t\t\t\t,'/auths/jwt/refresh'\n\t\t\t\t, {}\n\t\t\t)\n\t\t}\n\n\t\t, async logout(){\n\t\t\tawait request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,{}\n\t\t\t\t,'POST'\n\t\t\t\t,'/auths/jwt/logout'\n\t\t\t\t, {}\n\t\t\t)\n\t\t}\n\t}\n\n\tconst mail = {\n\t\tcreate: {\n\t\t\tforgottenPassword (o) {\n\n\t\t\t\treturn request.request(\n\t\t\t\t\tbaseURL\n\t\t\t\t\t,{}\n\t\t\t\t\t,'POST'\n\t\t\t\t\t,'/mail/forgotten_password'\n\t\t\t\t\t,o\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction APIFlowDependentsToFlowDependents(f){\n\t\treturn {\n\t\t\torganization_id: f.organization_id || null\n\t\t\t,flow_id: f.flow_id || null\n\t\t\t,organizations_disciplines_id: f.organizations_disciplines_id\n\t\t\t,flows_dependent_activity_id: f.flows_dependent_activity_id || null\n\t\t\t,discipline_name: f.discipline_name\n\t\t\t\t+ (\n\t\t\t\t\tf.discipline_description\n\t\t\t\t\t\t? ' - ' + f.discipline_description\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t,flow_dependent_activity_name: f.discipline_name\n\t\t}\n\t}\n\n\n\tfunction FlowDependentsToAPIFlowDependents(o){\n\n\t\treturn {\n\t\t\torganization_id: o.organization_id\n\t\t\t,flow_id: o.flow_id\n\t\t\t,organizations_disciplines_id: o.organizations_disciplines_id\n\t\t\t,flows_dependent_activity_id: o.flows_dependent_activity_id\n\t\t\t,discipline_name: o.discipline_name\n\t\t}\n\t}\n\n\n\tfunction APIFlowPrimarysToFlowPrimarys(f){\n\t\treturn {\n\t\t\torganization_id: f.organization_id || null\n\t\t\t,flow_id: f.flow_id || null\n\t\t\t,organizations_disciplines_id: f.organizations_disciplines_id\n\t\t\t,flows_primary_activity_id: f.flows_primary_activity_id || null\n\t\t\t,discipline_name: f.discipline_name\n\t\t\t\t+ (\n\t\t\t\t\tf.discipline_description\n\t\t\t\t\t\t? ' - ' + f.discipline_description\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t,flow_primary_activity_name: f.discipline_name\n\t\t}\n\t}\n\n\n\tfunction FlowPrimarysToAPIFlowPrimarys(o) {\n\t\treturn {\n\t\t\torganization_id: o.organization_id\n\t\t\t,flow_id: o.flow_id\n\t\t\t,organizations_disciplines_id: o.organizations_disciplines_id\n\t\t\t,flows_primary_activity_id: o.flows_primary_activity_id\n\t\t\t,discipline_name: o.discipline_name\n\t\t}\n\t}\n\n\tfunction APIFlowToFlow(o){\n\t\treturn {\n\t\t\torganization_id:\n\t\t\t\tm.prop(o.organization_id || null)\n\t\t\t,schedule_id:\n\t\t\t\tm.prop(o.schedule_id || null)\n\t\t\t,flow_id:\n\t\t\t\tm.prop(o.flow_id || null)\n\t\t\t,flow_delay_in_days:\n\t\t\t\tm.prop(o.flow_delay_in_days)\n\t\t\t,flow_delay_type:\n\t\t\t\tm.prop(o.flow_delay_type)\n\t\t\t,flow_dependency_relationship:\n\t\t\t\tm.prop(o.flow_dependency_relationship)\n\t\t\t,flow_dependent_activity:\n\t\t\t\to.flow_dependent_activity\n\t\t\t\t\t.map(APIFlowDependentsToFlowDependents)\n\t\t\t,flow_primary_activity:\n\n\t\t\t\to.flow_primary_activity\n\t\t\t\t\t.map(APIFlowPrimarysToFlowPrimarys)\n\t\t\t,flow_safety_ratio:\n\t\t\t\tm.prop(o.flow_safety_ratio)\n\t\t\t,flow_name:\n\t\t\t\tm.prop(o.flow_name)\n\t\t}\n\t}\n\n\tfunction FlowToAPIFlow(o) {\n\n\t\treturn {\n\t\t\tflow_delay_in_days: o.flow_delay_in_days()\n\t\t\t,flow_delay_type: o.flow_delay_type()\n\t\t\t,flow_dependency_relationship: o.flow_dependency_relationship()\n\t\t\t,flow_dependent_activity:\n\t\t\t\to.flow_dependent_activity\n\t\t\t\t\t.map(FlowDependentsToAPIFlowDependents)\n\t\t\t,flow_primary_activity:\n\t\t\t\to.flow_primary_activity\n\t\t\t\t\t.map(FlowPrimarysToAPIFlowPrimarys)\n\t\t\t,flow_safety_ratio: o.flow_safety_ratio()\n\t\t\t,flow_name: o.flow_name()\n\t\t\t,organization_id: o.organization_id() || undefined\n\t\t\t,schedule_id: o.schedule_id() || undefined\n\t\t\t,flow_id: o.flow_id() || undefined\n\t\t}\n\t}\n\n\tconst flows = {\n\t\tfetch: {\n\t\t\tbySchedule(id) {\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/flows/schedule/', id]]\n\t\t\t\t)\n\t\t\t\t.then(\n\t\t\t\t\tlist => list.map(APIFlowToFlow)\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,patch (flows) {\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', ['/flows']]\n\t\t\t\t,[\n\t\t\t\t\tflows\n\t\t\t\t\t,FlowToAPIFlow\n\t\t\t\t\t,APIFlowToFlow\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t\t,remove: {\n\t\t\tone (id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/flows/', id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tconst flows_dependent_activities = {\n\t\tremove: {\n\t\t\tone (id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/flows_dependent_activities/', id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst flows_primary_activities = {\n\t\tremove: {\n\t\t\tone (id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/flows_primary_activities/', id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst organizations_disciplines = {\n\t\tfetch: function({props, depth}) {\n\n\t\t\tconst params = [\n\t\t\t\t['props', props]\n\t\t\t\t,['depth', depth]\n\t\t\t]\n\n\t\t\treturn LIST(\n\t\t\t\t['GET', ['/organizations_disciplines', params]]\n\t\t\t)\n\t\t\t\t.then(\n\t\t\t\t\tlist => list.map(\n\t\t\t\t\t\tAPIOrganizationsDisciplineToOrganizationsDiscipline\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t}\n\t\t,patch (organizations_disciplines) {\n\t\t\treturn PATCH_MANY(\n\t\t\t\t['PATCH', ['/organizations_disciplines']]\n\t\t\t\t,[\n\t\t\t\t\torganizations_disciplines\n\t\t\t\t\t,OrganizationsDisciplineToAPIOrganizationsDiscipline\n\t\t\t\t\t,APIOrganizationsDisciplineToOrganizationsDiscipline\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t\t,remove: {\n\t\t\tone (id){\n\t\t\t\treturn DELETE(\n\t\t\t\t\t['DELETE', ['/organizations_disciplines/', id]]\n\t\t\t\t)\n\t\t\t}\n\t\t\t,many (ids){\n\t\t\t\tconst disciplinelist = ids.join('--')\n\t\t\t\treturn DELETE(['DELETE', ['/organizations_disciplines/disciplinelist/' + disciplinelist]])\n\t\t\t}\n\t\t}\n\t}\n\n\tconst tasks = {\n\t\tfetch: {\n\t\t\tsince( since ){\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/schedule_tasks/since/', since.getTime()]]\n\t\t\t\t)\n\t\t\t}\n\t\t\t,async inProgress() {\n\t\t\t\tconst xs = await LIST(\n\t\t\t\t\t['GET', ['/schedule_tasks/in_progress']]\n\t\t\t\t)\n\n\t\t\t\treturn xs\n\t\t\t}\n\t\t\t,byScheduleVersion(id) {\n\t\t\t\treturn GET(\n\t\t\t\t\t['GET', ['/schedule_tasks/', id]]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst project_contacts = {\n\t\tremove: {\n\t\t\tone: function(project_contacts_id){\n\t\t\t\treturn DELETE([\n\t\t\t\t\t'DELETE', ['/project_contacts/',project_contacts_id]\n\t\t\t\t])\n\t\t\t}\n\t\t\t,many: function(tasklist){\n\t\t\t\tconst contactDeletions = tasklist.join('--')\n\t\t\t\treturn DELETE(['DELETE', ['/project_contacts/contactlist/' + contactDeletions]])\n\t\t\t}\n\t\t}\n\t\t,patch: {\n\t\t\tmany: function(project_contacts) {\n\n\t\t\t\tconst t = request.MetadataTracker()\n\n\t\t\t\treturn PATCH_MANY(\n\t\t\t\t\t['PATCH', ['/project_contacts']]\n\t\t\t\t\t,[\n\t\t\t\t\t\tproject_contacts\n\t\t\t\t\t\t, ProjectContactsToAPIProjectContacts\n\t\t\t\t\t\t, APIProjectContactsToProjectContacts\n\t\t\t\t\t\t, {name: ''}\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t.then( t.addMetaData )\n\t\t\t}\n\t\t}\n\t\t,fetch: function({\n\t\t\tproject_id, getOptions\n\t\t}){\n\n\t\t\tconst params =\n\t\t\t\t[['project_id', project_id]\n\t\t\t\t,['getOptions', getOptions]]\n\n\t\t\treturn LIST([\n\t\t\t\t'GET', ['/project_contacts', params ]\n\t\t\t])\n\t\t\t\t.then(\n\t\t\t\t\tlist => list.map(APIProjectContactsToProjectContacts)\n\t\t\t\t)\n\t\t}\n\t}\n\tconst template_schedules = {\n\t\tfetch: function(){\n\t\t\treturn LIST(\n\t\t\t\t['GET', ['/template_schedules']]\n\t\t\t)\n\t\t}\n\t\t,post: function(templates_type){\n\t\t\tlet headers = { ...baseHeaders() }\n\t\t\tdelete headers['X-Odin-Organization']\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t// sending an org id when creating an org can confuse\n\t\t\t\t// the api\n\t\t\t\t, headers\n\t\t\t\t, 'PATCH'\n\t\t\t\t, ['/template_schedules/' + templates_type].join('')\n\t\t\t)\n\t\t}\n\t}\n\n\tfunction Session(){\n\t\t/* globals XMLHttpRequest */\n\n\t\tconst after = Date.now()\n\n\t\tlet aborted = false;\n\t\tconst { DONE } = XMLHttpRequest\n\n\t\tfunction active(){\n\t\t\treturn Object.keys(request.requests).map(function(id){\n\t\t\t\treturn request.requests[id]\n\t\t\t})\n\t\t\t.filter( x => x.transport.readyState != DONE )\n\t\t\t.filter( x => x.when > after )\n\t\t}\n\n\t\tfunction onerror(f){\n\t\t\treturn function receiver(e){\n\t\t\t\tif( !aborted ){\n\t\t\t\t\treturn f(e)\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t}\n\n\t\tfunction abort(){\n\n\t\t\taborted = true\n\n\t\t\tactive()\n\t\t\t.forEach( x => {\n\t\t\t\tdelete request.requests[x.id]\n\t\t\t\tx.transport.abort()\n\n\t\t\t} )\n\n\t\t}\n\n\t\treturn {\n\t\t\tabort\n\t\t\t,active\n\t\t\t,onerror\n\t\t}\n\n\t}\n\n\tconst xero = {\n\t\tfetch:\n\t\t\t({\n\t\t\t\tsheets\n\t\t\t\t,organization_id\n\t\t\t\t,xeroexport\n\t\t\t\t,sales\n\t\t\t\t,bills\n\t\t\t\t,startDate\n\t\t\t\t,endDate\n\t\t\t\t,contract_items\n\t\t\t\t,invoices\n\t\t\t}) => {\n\t\t\t\t// const t =\n\t\t\t\t\trequest.MetadataTracker()\n\n\t\t\t\tconst params = [\n\t\t\t\t\t['sheets', sheets]\n\t\t\t\t\t,['organization_id', organization_id]\n\t\t\t\t\t,['xeroexport', xeroexport]\n\t\t\t\t\t,['sales', sales]\n\t\t\t\t\t,['bills', bills]\n\t\t\t\t\t,['startDate', startDate]\n\t\t\t\t\t,['endDate', endDate]\n\t\t\t\t\t,['contract_items', contract_items]\n\t\t\t\t\t,['invoices', invoices]\n\t\t\t\t]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/exports/xero/', params]]\n\t\t\t\t\t// ,[bodydata, R.identity, R.identity]\n\t\t\t\t)\n\t\t\t}\n\t\t,xero_auths_fetch:\n\t\t\t() => {\n\t\t\t\t// const t =\n\t\t\t\t\trequest.MetadataTracker()\n\n\t\t\t\t// const params = [\n\t\t\t\t// \t['user_id', user_id]\n\t\t\t\t// \t,['organization_id', organization_id]\n\t\t\t\t// ]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/invoices/xero_auths']]\n\t\t\t\t\t// ,[bodydata, R.identity, R.identity]\n\t\t\t\t)\n\t\t\t}\n\t\t,xero_tenants_fetch:\n\t\t\t() => {\n\t\t\t\t// const t =\n\t\t\t\t\trequest.MetadataTracker()\n\n\t\t\t\t// const params = [\n\t\t\t\t// \t['user_id', user_id]\n\t\t\t\t// \t,['organization_id', organization_id]\n\t\t\t\t// ]\n\n\t\t\t\treturn LIST(\n\t\t\t\t\t['GET', ['/invoices/xero_tenants']]\n\t\t\t\t\t// ,[bodydata, R.identity, R.identity]\n\t\t\t\t)\n\t\t\t}\n\t\t,xero_tenants_import:\n\t\t\t({tenantName, tenantId, imports}) => {\n\t\t\t\t// const t =\n\t\t\t\t\trequest.MetadataTracker()\n\n\t\t\t\tconst body = {\n\t\t\t\t\t'tenantName': tenantName\n\t\t\t\t\t,'tenantId': tenantId\n\t\t\t\t\t,'imports': imports\n\t\t\t\t}\n\n\t\t\t\treturn POST(\n\t\t\t\t\t['POST', ['/invoices/xero_tenants']]\n\t\t\t\t\t,[body, R.identity, R.identity]\n\t\t\t\t)\n\t\t\t}\n\t}\n\n\tconst files = {\n\n\t\tSIGN(filename, filetype, associations){\n\t\t\treturn POST(['POST', ['/files']], [Object.assign({\n\t\t\t\tfilename\n\t\t\t\t,filetype\n\t\t\t}, associations), I, I])\n\t\t}\n\t\t,getTransLoaditSignature(body){\n\n\t\t\treturn POST(\n\t\t\t\t['POST', ['/files/transloadit/signature']]\n\t\t\t\t,[ body, I, I ]\n\t\t\t)\n\t\t}\n\t\t,LIST({\n\t\t\tallocation_id\n\t\t\t, user_id\n\t\t\t, project_id\n\t\t\t, project_extras_id\n\t\t\t, schedule_id\n\t\t\t, contractor_id\n\t\t\t, discipline_id\n\t\t\t, organizations_disciplines_id\n\t\t\t, crew_id\n\t\t\t, file_id\n\t\t\t, urls_only\n\t\t\t, file_error\n\t\t\t, file_processed=true\n\t\t\t, organization_id\n\t\t\t, invoice_id\n\t\t\t, tools_id\n\t\t\t, supplier_items_id\n\t\t\t, order_id\n\t\t}){\n\t\t\tconst params =\n\t\t\t\tR.reject( R.isNil, {\n\t\t\t\t\tallocation_id\n\t\t\t\t\t, user_id\n\t\t\t\t\t, project_id\n\t\t\t\t\t, project_extras_id\n\t\t\t\t\t, schedule_id\n\t\t\t\t\t, contractor_id\n\t\t\t\t\t, discipline_id\n\t\t\t\t\t, organizations_disciplines_id\n\t\t\t\t\t, crew_id\n\t\t\t\t\t, file_id\n\t\t\t\t\t, file_error\n\t\t\t\t\t, file_processed\n\t\t\t\t\t, urls_only\n\t\t\t\t\t, invoice_id\n\t\t\t\t\t, tools_id\n\t\t\t\t\t, supplier_items_id\n\t\t\t\t\t, order_id\n\t\t\t\t})\n\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders({ organization_id })\n\t\t\t\t, 'GET'\n\t\t\t\t, '/files'\n\t\t\t\t, params\n\t\t\t)\n\t\t}\n\n\t\t,DELETE(files){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders()\n\t\t\t\t, 'DELETE', '/files'\n\t\t\t\t, { files: files.map( f => f.file_id ) }\n\t\t\t)\n\t\t}\n\n\t\t,UNDELETE(files){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders()\n\t\t\t\t, 'PATCH', '/files/undelete'\n\t\t\t\t, { files: files.map( f => f.file_id ) }\n\t\t\t)\n\t\t}\n\t}\n\n\treturn {\n\t\ttasks\n\t\t,files\n\t\t,Session\n\t\t,organizations_disciplines\n\t\t,APISchedulesParametersToUI\n\t\t,SchedulesParametersToAPISchedulesParameters\n\t\t,schedules\n\t\t,schedules_parameters\n\t\t,projects\n\t\t,users\n\t\t,users2\n\t\t,contractors\n\t\t,tools\n\t\t,geographies\n\t\t,suburbs\n\t\t,crews\n\t\t,crews_discipline_rates\n\t\t,interruptions\n\t\t,interruptionsAffected\n\t\t,allocations\n\t\t,allocations_eots\n\t\t,allocations_nods\n\t\t,allocations_vars\n\t\t,disciplines\n\t\t,disciplines_contractors\n\t\t,disciplines_contractors_crews\n\t\t,warehouses\n\t\t,suppliers\n\t\t,supplier_items\n\t\t,presets\n\t\t,materials\n\t\t,supplier_locations\n\t\t,orders\n\t\t,containers\n\t\t,roles\n\t\t,groups2\n\t\t,invites\n\t\t,timesheets\n\t\t,organizations\n\t\t,auths\n\t\t,mail\n\t\t,flows\n\t\t,flows_dependent_activities\n\t\t,flows_primary_activities\n\t\t,contracts\n\t\t,template_schedules\n\t\t,contract_items\n\t\t,contracts_invoices_calculations\n\t\t,invoices\n\t\t,project_extras\n\t\t,APIProjectToProject\n\t\t,APIProjectContactsToProjectContacts\n\t\t,requests: request.requests\n\t\t,project_contacts\n\t\t,xero\n\t\t,buildRequest(method, url, params={}){\n\t\t\treturn request.buildRequest(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders()\n\t\t\t\t, method\n\t\t\t\t, url\n\t\t\t\t, params\n\t\t\t)\n\t\t}\n\t\t,request(method, url, params={}){\n\t\t\treturn request.request(\n\t\t\t\tbaseURL\n\t\t\t\t,baseHeaders()\n\t\t\t\t, method\n\t\t\t\t, url\n\t\t\t\t, params\n\t\t\t\t, () => {}\n\t\t\t)\n\t\t}\n\t}\n}","/*\n @@@@@@@ @@@@@@@ @@\n @@ @@ @@ @@ @@@\n @@ @@@ @@ @@ @@ @@@ @@ @@ @@@@@@ @@ @@@ @@ @@@ @@@@\n @@ @@ @@@ @@ @@ @@ @@@ @@ @@@ @@ @@@ @@@ @@ @@@ @@\n @@ @@ @@@ @@ @@ @@ @@@ @@ @@@ @@ @@@ @@@ @@ @@@@@@@@\n @@ @@ @@@ @@ @@ @@ @@@ @@ @@@ @@ @@@ @@@ @@ @@@\n @@ @@@ @@@@@ @@ @@@ @@@@@ @@@ @@@ @@ @@@@@@ @@@@@\n @@ @@ @@ @@\n @@@@@@@ @@@@@@@ @@@@@ @@\n */\n//. # sanctuary-type-identifiers\n//.\n//. A type is a set of values. Boolean, for example, is the type comprising\n//. `true` and `false`. A value may be a member of multiple types (`42` is a\n//. member of Number, PositiveNumber, Integer, and many other types).\n//.\n//. In certain situations it is useful to divide JavaScript values into\n//. non-overlapping types. The language provides two constructs for this\n//. purpose: the [`typeof`][1] operator and [`Object.prototype.toString`][2].\n//. Each has pros and cons, but neither supports user-defined types.\n//.\n//. This package specifies an [algorithm][3] for deriving a _type identifier_\n//. from any JavaScript value, and exports an implementation of the algorithm.\n//. Authors of algebraic data types may follow this specification in order to\n//. make their data types compatible with the algorithm.\n//.\n//. ### Algorithm\n//.\n//. 1. Take any JavaScript value `x`.\n//.\n//. 2. If `x` is `null` or `undefined`, go to step 6.\n//.\n//. 3. If `x.constructor` evaluates to `null` or `undefined`, go to step 6.\n//.\n//. 4. If `x.constructor.prototype === x`, go to step 6. This check prevents a\n//. prototype object from being considered a member of its associated type.\n//.\n//. 5. If `typeof x.constructor['@@type']` evaluates to `'string'`, return\n//. the value of `x.constructor['@@type']`.\n//.\n//. 6. Return the [`Object.prototype.toString`][2] representation of `x`\n//. without the leading `'[object '` and trailing `']'`.\n//.\n//. ### Compatibility\n//.\n//. For an algebraic data type to be compatible with the [algorithm][3]:\n//.\n//. - every member of the type must have a `constructor` property pointing\n//. to an object known as the _type representative_;\n//.\n//. - the type representative must have a `@@type` property; and\n//.\n//. - the type representative's `@@type` property (the _type identifier_)\n//. must be a string primitive, ideally `'/'`.\n//.\n//. For example:\n//.\n//. ```javascript\n//. // Identity :: a -> Identity a\n//. function Identity(x) {\n//. if (!(this instanceof Identity)) return new Identity(x);\n//. this.value = x;\n//. }\n//.\n//. Identity['@@type'] = 'my-package/Identity';\n//. ```\n//.\n//. Note that by using a constructor function the `constructor` property is set\n//. implicitly for each value created. Constructor functions are convenient for\n//. this reason, but are not required. This definition is also valid:\n//.\n//. ```javascript\n//. // IdentityTypeRep :: TypeRep Identity\n//. var IdentityTypeRep = {\n//. '@@type': 'my-package/Identity'\n//. };\n//.\n//. // Identity :: a -> Identity a\n//. function Identity(x) {\n//. return {constructor: IdentityTypeRep, value: x};\n//. }\n//. ```\n//.\n//. ### Usage\n//.\n//. ```javascript\n//. var Identity = require('my-package').Identity;\n//. var type = require('sanctuary-type-identifiers');\n//.\n//. type(null); // => 'Null'\n//. type(true); // => 'Boolean'\n//. type([1, 2, 3]); // => 'Array'\n//. type(Identity); // => 'Function'\n//. type(Identity(0)); // => 'my-package/Identity'\n//. ```\n//.\n//.\n//. [1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof\n//. [2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n//. [3]: #algorithm\n\n(function(f) {\n\n 'use strict';\n\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd != null) {\n define([], f);\n } else {\n self.sanctuaryTypeIdentifiers = f();\n }\n\n}(function() {\n\n 'use strict';\n\n // $$type :: String\n var $$type = '@@type';\n\n // type :: Any -> String\n function type(x) {\n return x != null &&\n x.constructor != null &&\n x.constructor.prototype !== x &&\n typeof x.constructor[$$type] === 'string' ?\n x.constructor[$$type] :\n Object.prototype.toString.call(x).slice('[object '.length, -']'.length);\n }\n\n return type;\n\n}));\n","/*\n ############ #\n ############ ###\n ##### #####\n ##### ####################\n ##### ######################\n ##### ###########\n ##### ######################\n ##### ####################\n ##### #####\n ############ ###\n ############ */\n\n//. # sanctuary-type-classes\n//.\n//. The [Fantasy Land Specification][FL] \"specifies interoperability of common\n//. algebraic structures\" by defining a number of type classes. For each type\n//. class, it states laws which every member of a type must obey in order for\n//. the type to be a member of the type class. In order for the Maybe type to\n//. be considered a [Functor][], for example, every `Maybe a` value must have\n//. a `fantasy-land/map` method which obeys the identity and composition laws.\n//.\n//. This project provides:\n//.\n//. - [`TypeClass`](#TypeClass), a function for defining type classes;\n//. - one `TypeClass` value for each Fantasy Land type class;\n//. - lawful Fantasy Land methods for JavaScript's built-in types;\n//. - one function for each Fantasy Land method; and\n//. - several functions derived from these functions.\n//.\n//. ## Type-class hierarchy\n//.\n//.
\n//:  Setoid   Semigroup   Foldable        Functor\n//: (equals)   (concat)   (reduce)         (map)\n//:               |           \\         / | | | | \\\n//:               |            \\       /  | | | |  \\\n//:               |             \\     /   | | | |   \\\n//:               |              \\   /    | | | |    \\\n//:               |               \\ /     | | | |     \\\n//:            Monoid         Traversable | | | |      \\\n//:            (empty)        (traverse)  / | | \\       \\\n//:                                      /  | |  \\       \\\n//:                                     /   / \\   \\       \\\n//:                             Profunctor /   \\ Bifunctor \\\n//:                              (promap) /     \\ (bimap)   \\\n//:                                      /       \\           \\\n//:                                     /         \\           \\\n//:                                   Alt        Apply      Extend\n//:                                  (alt)        (ap)     (extend)\n//:                                   /           / \\           \\\n//:                                  /           /   \\           \\\n//:                                 /           /     \\           \\\n//:                                /           /       \\           \\\n//:                               /           /         \\           \\\n//:                             Plus    Applicative    Chain      Comonad\n//:                            (zero)       (of)      (chain)    (extract)\n//:                               \\         / \\         / \\\n//:                                \\       /   \\       /   \\\n//:                                 \\     /     \\     /     \\\n//:                                  \\   /       \\   /       \\\n//:                                   \\ /         \\ /         \\\n//:                               Alternative    Monad     ChainRec\n//:                                                       (chainRec)\n//. 
\n//.\n//. ## API\n\n(function(f) {\n\n 'use strict';\n\n /* istanbul ignore else */\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = f(require('sanctuary-type-identifiers'));\n } else if (typeof define === 'function' && define.amd != null) {\n define(['sanctuary-type-identifiers'], f);\n } else {\n self.sanctuaryTypeClasses = f(self.sanctuaryTypeIdentifiers);\n }\n\n}(function(type) {\n\n 'use strict';\n\n // concat_ :: Array a -> Array a -> Array a\n function concat_(xs) {\n return function(ys) {\n return xs.concat(ys);\n };\n }\n\n // constant :: a -> b -> a\n function constant(x) {\n return function(y) {\n return x;\n };\n }\n\n // has :: (String, Object) -> Boolean\n function has(k, o) {\n return Object.prototype.hasOwnProperty.call(o, k);\n }\n\n // identity :: a -> a\n function identity(x) { return x; }\n\n // pair :: a -> b -> Pair a b\n function pair(x) {\n return function(y) {\n return [x, y];\n };\n }\n\n // type Iteration a = { value :: a, done :: Boolean }\n\n // iterationNext :: a -> Iteration a\n function iterationNext(x) { return {value: x, done: false}; }\n\n // iterationDone :: a -> Iteration a\n function iterationDone(x) { return {value: x, done: true}; }\n\n //# TypeClass :: (String, Array TypeClass, a -> Boolean) -> TypeClass\n //.\n //. The arguments are:\n //.\n //. - the name of the type class, prefixed by its npm package name;\n //. - an array of dependencies; and\n //. - a predicate which accepts any JavaScript value and returns `true`\n //. if the value satisfies the requirements of the type class; `false`\n //. otherwise.\n //.\n //. Example:\n //.\n //. ```javascript\n //. // hasMethod :: String -> a -> Boolean\n //. const hasMethod = name => x => x != null && typeof x[name] == 'function';\n //.\n //. // Foo :: TypeClass\n //. const Foo = Z.TypeClass('my-package/Foo', [], hasMethod('foo'));\n //.\n //. // Bar :: TypeClass\n //. const Bar = Z.TypeClass('my-package/Bar', [Foo], hasMethod('bar'));\n //. ```\n //.\n //. Types whose values have a `foo` method are members of the Foo type class.\n //. Members of the Foo type class whose values have a `bar` method are also\n //. members of the Bar type class.\n //.\n //. Each `TypeClass` value has a `test` field: a function which accepts\n //. any JavaScript value and returns `true` if the value satisfies the\n //. type class's predicate and the predicates of all the type class's\n //. dependencies; `false` otherwise.\n //.\n //. `TypeClass` values may be used with [sanctuary-def][type-classes]\n //. to define parametrically polymorphic functions which verify their\n //. type-class constraints at run time.\n function TypeClass(name, dependencies, test) {\n if (!(this instanceof TypeClass)) {\n return new TypeClass(name, dependencies, test);\n }\n this.name = name;\n this.test = function(x) {\n return dependencies.every(function(d) { return d.test(x); }) && test(x);\n };\n }\n\n TypeClass['@@type'] = 'sanctuary-type-classes/TypeClass';\n\n // data Location = Constructor | Value\n\n // Constructor :: Location\n var Constructor = 'Constructor';\n\n // Value :: Location\n var Value = 'Value';\n\n // _funcPath :: (Boolean, Array String, a) -> Nullable Function\n function _funcPath(allowInheritedProps, path, _x) {\n var x = _x;\n for (var idx = 0; idx < path.length; idx += 1) {\n var k = path[idx];\n if (x == null || !(allowInheritedProps || has(k, x))) return null;\n x = x[k];\n }\n return typeof x === 'function' ? x : null;\n }\n\n // funcPath :: (Array String, a) -> Nullable Function\n function funcPath(path, x) {\n return _funcPath(true, path, x);\n }\n\n // implPath :: Array String -> Nullable Function\n function implPath(path) {\n return _funcPath(false, path, implementations);\n }\n\n // $ :: (String, Array TypeClass, StrMap (Array Location)) -> TypeClass\n function $(_name, dependencies, requirements) {\n function getBoundMethod(_name) {\n var name = 'fantasy-land/' + _name;\n return requirements[_name] === Constructor ?\n function(typeRep) {\n return funcPath([name], typeRep) ||\n implPath([/function (\\w*)/.exec(typeRep)[1], name]);\n } :\n function(x) {\n var isPrototype = x != null &&\n x.constructor != null &&\n x.constructor.prototype === x;\n var m = null;\n if (!isPrototype) m = funcPath([name], x);\n if (m == null) m = implPath([type(x), 'prototype', name]);\n return m && m.bind(x);\n };\n }\n\n var name = 'sanctuary-type-classes/' + _name;\n var keys = Object.keys(requirements);\n\n var typeClass = TypeClass(name, dependencies, function(x) {\n return keys.every(function(_name) {\n var arg = requirements[_name] === Constructor ? x.constructor : x;\n return getBoundMethod(_name)(arg) != null;\n });\n });\n\n typeClass.methods = keys.reduce(function(methods, _name) {\n methods[_name] = getBoundMethod(_name);\n return methods;\n }, {});\n\n return typeClass;\n }\n\n //# Setoid :: TypeClass\n //.\n //. `TypeClass` value for [Setoid][].\n //.\n //. ```javascript\n //. > Setoid.test(null)\n //. true\n //. ```\n var Setoid = $('Setoid', [], {equals: Value});\n\n //# Semigroup :: TypeClass\n //.\n //. `TypeClass` value for [Semigroup][].\n //.\n //. ```javascript\n //. > Semigroup.test('')\n //. true\n //.\n //. > Semigroup.test(0)\n //. false\n //. ```\n var Semigroup = $('Semigroup', [], {concat: Value});\n\n //# Monoid :: TypeClass\n //.\n //. `TypeClass` value for [Monoid][].\n //.\n //. ```javascript\n //. > Monoid.test('')\n //. true\n //.\n //. > Monoid.test(0)\n //. false\n //. ```\n var Monoid = $('Monoid', [Semigroup], {empty: Constructor});\n\n //# Functor :: TypeClass\n //.\n //. `TypeClass` value for [Functor][].\n //.\n //. ```javascript\n //. > Functor.test([])\n //. true\n //.\n //. > Functor.test('')\n //. false\n //. ```\n var Functor = $('Functor', [], {map: Value});\n\n //# Bifunctor :: TypeClass\n //.\n //. `TypeClass` value for [Bifunctor][].\n //.\n //. ```javascript\n //. > Bifunctor.test(Tuple('foo', 64))\n //. true\n //.\n //. > Bifunctor.test([])\n //. false\n //. ```\n var Bifunctor = $('Bifunctor', [Functor], {bimap: Value});\n\n //# Profunctor :: TypeClass\n //.\n //. `TypeClass` value for [Profunctor][].\n //.\n //. ```javascript\n //. > Profunctor.test(Math.sqrt)\n //. true\n //.\n //. > Profunctor.test([])\n //. false\n //. ```\n var Profunctor = $('Profunctor', [Functor], {promap: Value});\n\n //# Apply :: TypeClass\n //.\n //. `TypeClass` value for [Apply][].\n //.\n //. ```javascript\n //. > Apply.test([])\n //. true\n //.\n //. > Apply.test({})\n //. false\n //. ```\n var Apply = $('Apply', [Functor], {ap: Value});\n\n //# Applicative :: TypeClass\n //.\n //. `TypeClass` value for [Applicative][].\n //.\n //. ```javascript\n //. > Applicative.test([])\n //. true\n //.\n //. > Applicative.test({})\n //. false\n //. ```\n var Applicative = $('Applicative', [Apply], {of: Constructor});\n\n //# Chain :: TypeClass\n //.\n //. `TypeClass` value for [Chain][].\n //.\n //. ```javascript\n //. > Chain.test([])\n //. true\n //.\n //. > Chain.test({})\n //. false\n //. ```\n var Chain = $('Chain', [Apply], {chain: Value});\n\n //# ChainRec :: TypeClass\n //.\n //. `TypeClass` value for [ChainRec][].\n //.\n //. ```javascript\n //. > ChainRec.test([])\n //. true\n //.\n //. > ChainRec.test({})\n //. false\n //. ```\n var ChainRec = $('ChainRec', [Chain], {chainRec: Constructor});\n\n //# Monad :: TypeClass\n //.\n //. `TypeClass` value for [Monad][].\n //.\n //. ```javascript\n //. > Monad.test([])\n //. true\n //.\n //. > Monad.test({})\n //. false\n //. ```\n var Monad = $('Monad', [Applicative, Chain], {});\n\n //# Alt :: TypeClass\n //.\n //. `TypeClass` value for [Alt][].\n //.\n //. ```javascript\n //. > Alt.test({})\n //. true\n //.\n //. > Alt.test('')\n //. false\n //. ```\n var Alt = $('Alt', [Functor], {alt: Value});\n\n //# Plus :: TypeClass\n //.\n //. `TypeClass` value for [Plus][].\n //.\n //. ```javascript\n //. > Plus.test({})\n //. true\n //.\n //. > Plus.test('')\n //. false\n //. ```\n var Plus = $('Plus', [Alt], {zero: Constructor});\n\n //# Alternative :: TypeClass\n //.\n //. `TypeClass` value for [Alternative][].\n //.\n //. ```javascript\n //. > Alternative.test([])\n //. true\n //.\n //. > Alternative.test({})\n //. false\n //. ```\n var Alternative = $('Alternative', [Applicative, Plus], {});\n\n //# Foldable :: TypeClass\n //.\n //. `TypeClass` value for [Foldable][].\n //.\n //. ```javascript\n //. > Foldable.test({})\n //. true\n //.\n //. > Foldable.test('')\n //. false\n //. ```\n var Foldable = $('Foldable', [], {reduce: Value});\n\n //# Traversable :: TypeClass\n //.\n //. `TypeClass` value for [Traversable][].\n //.\n //. ```javascript\n //. > Traversable.test([])\n //. true\n //.\n //. > Traversable.test({})\n //. false\n //. ```\n var Traversable = $('Traversable', [Functor, Foldable], {traverse: Value});\n\n //# Extend :: TypeClass\n //.\n //. `TypeClass` value for [Extend][].\n //.\n //. ```javascript\n //. > Extend.test([])\n //. true\n //.\n //. > Extend.test({})\n //. false\n //. ```\n var Extend = $('Extend', [Functor], {extend: Value});\n\n //# Comonad :: TypeClass\n //.\n //. `TypeClass` value for [Comonad][].\n //.\n //. ```javascript\n //. > Comonad.test(Identity(0))\n //. true\n //.\n //. > Comonad.test([])\n //. false\n //. ```\n var Comonad = $('Comonad', [Extend], {extract: Value});\n\n // Null$prototype$toString :: Null ~> () -> String\n function Null$prototype$toString() {\n return 'null';\n }\n\n // Null$prototype$equals :: Null ~> Null -> Boolean\n function Null$prototype$equals(other) {\n return true;\n }\n\n // Undefined$prototype$toString :: Undefined ~> () -> String\n function Undefined$prototype$toString() {\n return 'undefined';\n }\n\n // Undefined$prototype$equals :: Undefined ~> Undefined -> Boolean\n function Undefined$prototype$equals(other) {\n return true;\n }\n\n // Boolean$prototype$toString :: Boolean ~> () -> String\n function Boolean$prototype$toString() {\n return typeof this === 'object' ?\n 'new Boolean(' + toString(this.valueOf()) + ')' :\n this.toString();\n }\n\n // Boolean$prototype$equals :: Boolean ~> Boolean -> Boolean\n function Boolean$prototype$equals(other) {\n return typeof other === typeof this && other.valueOf() === this.valueOf();\n }\n\n // Number$prototype$toString :: Number ~> () -> String\n function Number$prototype$toString() {\n return typeof this === 'object' ?\n 'new Number(' + toString(this.valueOf()) + ')' :\n 1 / this === -Infinity ? '-0' : this.toString(10);\n }\n\n // Number$prototype$equals :: Number ~> Number -> Boolean\n function Number$prototype$equals(other) {\n return typeof other === 'object' ?\n typeof this === 'object' &&\n equals(this.valueOf(), other.valueOf()) :\n isNaN(other) && isNaN(this) ||\n other === this && 1 / other === 1 / this;\n }\n\n // Date$prototype$toString :: Date ~> () -> String\n function Date$prototype$toString() {\n var x = isNaN(this.valueOf()) ? NaN : this.toISOString();\n return 'new Date(' + toString(x) + ')';\n }\n\n // Date$prototype$equals :: Date ~> Date -> Boolean\n function Date$prototype$equals(other) {\n return equals(this.valueOf(), other.valueOf());\n }\n\n // RegExp$prototype$equals :: RegExp ~> RegExp -> Boolean\n function RegExp$prototype$equals(other) {\n return other.source === this.source &&\n other.global === this.global &&\n other.ignoreCase === this.ignoreCase &&\n other.multiline === this.multiline &&\n other.sticky === this.sticky &&\n other.unicode === this.unicode;\n }\n\n // String$empty :: () -> String\n function String$empty() {\n return '';\n }\n\n // String$prototype$toString :: String ~> () -> String\n function String$prototype$toString() {\n return typeof this === 'object' ?\n 'new String(' + toString(this.valueOf()) + ')' :\n '\"' + this.replace(/\\\\/g, '\\\\\\\\')\n .replace(/[\\b]/g, '\\\\b') // \\b matches word boundary;\n .replace(/\\f/g, '\\\\f') // [\\b] matches backspace\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\v/g, '\\\\v')\n .replace(/\\0/g, '\\\\0')\n .replace(/\"/g, '\\\\\"') + '\"';\n }\n\n // String$prototype$equals :: String ~> String -> Boolean\n function String$prototype$equals(other) {\n return typeof other === typeof this && other.valueOf() === this.valueOf();\n }\n\n // String$prototype$concat :: String ~> String -> String\n function String$prototype$concat(other) {\n return this + other;\n }\n\n // Array$empty :: () -> Array a\n function Array$empty() {\n return [];\n }\n\n // Array$of :: a -> Array a\n function Array$of(x) {\n return [x];\n }\n\n // Array$chainRec :: ((a -> c, b -> c, a) -> Array c, a) -> Array b\n function Array$chainRec(f, x) {\n var $todo = [x];\n var $done = [];\n while ($todo.length > 0) {\n var xs = f(iterationNext, iterationDone, $todo.shift());\n var $more = [];\n for (var idx = 0; idx < xs.length; idx += 1) {\n (xs[idx].done ? $done : $more).push(xs[idx].value);\n }\n Array.prototype.unshift.apply($todo, $more);\n }\n return $done;\n }\n\n // Array$zero :: () -> Array a\n function Array$zero() {\n return [];\n }\n\n // Array$prototype$toString :: Array a ~> () -> String\n function Array$prototype$toString() {\n var reprs = this.map(toString);\n var keys = Object.keys(this).sort();\n for (var idx = 0; idx < keys.length; idx += 1) {\n var k = keys[idx];\n if (!/^\\d+$/.test(k)) {\n reprs.push(toString(k) + ': ' + toString(this[k]));\n }\n }\n return '[' + reprs.join(', ') + ']';\n }\n\n // Array$prototype$equals :: Array a ~> Array a -> Boolean\n function Array$prototype$equals(other) {\n if (other.length !== this.length) return false;\n for (var idx = 0; idx < this.length; idx += 1) {\n if (!equals(this[idx], other[idx])) return false;\n }\n return true;\n }\n\n // Array$prototype$concat :: Array a ~> Array a -> Array a\n function Array$prototype$concat(other) {\n return this.concat(other);\n }\n\n // Array$prototype$map :: Array a ~> (a -> b) -> Array b\n function Array$prototype$map(f) {\n return this.map(function(x) { return f(x); });\n }\n\n // Array$prototype$ap :: Array a ~> Array (a -> b) -> Array b\n function Array$prototype$ap(fs) {\n var result = [];\n for (var idx = 0; idx < fs.length; idx += 1) {\n for (var idx2 = 0; idx2 < this.length; idx2 += 1) {\n result.push(fs[idx](this[idx2]));\n }\n }\n return result;\n }\n\n // Array$prototype$chain :: Array a ~> (a -> Array b) -> Array b\n function Array$prototype$chain(f) {\n var result = [];\n this.forEach(function(x) { Array.prototype.push.apply(result, f(x)); });\n return result;\n }\n\n // Array$prototype$alt :: Array a ~> Array a -> Array a\n var Array$prototype$alt = Array$prototype$concat;\n\n // Array$prototype$reduce :: Array a ~> ((b, a) -> b, b) -> b\n function Array$prototype$reduce(f, initial) {\n return this.reduce(function(acc, x) { return f(acc, x); }, initial);\n }\n\n // Array$prototype$traverse :: Applicative f => Array a ~> (a -> f b, c -> f c) -> f (Array b)\n function Array$prototype$traverse(f, of) {\n var xs = this;\n function go(idx, n) {\n switch (n) {\n case 0: return of([]);\n case 2: return lift2(pair, f(xs[idx]), f(xs[idx + 1]));\n default:\n var m = Math.floor(n / 4) * 2;\n return lift2(concat_, go(idx, m), go(idx + m, n - m));\n }\n }\n return this.length % 2 === 1 ?\n lift2(concat_, map(Array$of, f(this[0])), go(1, this.length - 1)) :\n go(0, this.length);\n }\n\n // Array$prototype$extend :: Array a ~> (Array a -> b) -> Array b\n function Array$prototype$extend(f) {\n return [f(this)];\n }\n\n // Arguments$prototype$toString :: Arguments ~> String\n function Arguments$prototype$toString() {\n var args = Array.prototype.map.call(this, toString).join(', ');\n return '(function () { return arguments; }(' + args + '))';\n }\n\n // Arguments$prototype$equals :: Arguments ~> Arguments -> Boolean\n function Arguments$prototype$equals(other) {\n return Array$prototype$equals.call(this, other);\n }\n\n // Error$prototype$toString :: Error ~> () -> String\n function Error$prototype$toString() {\n return 'new ' + this.name + '(' + toString(this.message) + ')';\n }\n\n // Error$prototype$equals :: Error ~> Error -> Boolean\n function Error$prototype$equals(other) {\n return equals(this.name, other.name) &&\n equals(this.message, other.message);\n }\n\n // Object$empty :: () -> StrMap a\n function Object$empty() {\n return {};\n }\n\n // Object$zero :: () -> StrMap a\n function Object$zero() {\n return {};\n }\n\n // Object$prototype$toString :: StrMap a ~> () -> String\n function Object$prototype$toString() {\n var reprs = [];\n var keys = Object.keys(this).sort();\n for (var idx = 0; idx < keys.length; idx += 1) {\n var k = keys[idx];\n reprs.push(toString(k) + ': ' + toString(this[k]));\n }\n return '{' + reprs.join(', ') + '}';\n }\n\n // Object$prototype$equals :: StrMap a ~> StrMap a -> Boolean\n function Object$prototype$equals(other) {\n var self = this;\n var keys = Object.keys(this).sort();\n return equals(keys, Object.keys(other).sort()) &&\n keys.every(function(k) { return equals(self[k], other[k]); });\n }\n\n // Object$prototype$concat :: StrMap a ~> StrMap a -> StrMap a\n function Object$prototype$concat(other) {\n var result = {};\n for (var k in this) result[k] = this[k];\n for (k in other) result[k] = other[k];\n return result;\n }\n\n // Object$prototype$map :: StrMap a ~> (a -> b) -> StrMap b\n function Object$prototype$map(f) {\n var result = {};\n for (var k in this) result[k] = f(this[k]);\n return result;\n }\n\n // Object$prototype$alt :: StrMap a ~> StrMap a -> StrMap a\n var Object$prototype$alt = Object$prototype$concat;\n\n // Object$prototype$reduce :: StrMap a ~> ((b, a) -> b, b) -> b\n function Object$prototype$reduce(f, initial) {\n var result = initial;\n for (var k in this) result = f(result, this[k]);\n return result;\n }\n\n // Function$of :: b -> (a -> b)\n function Function$of(x) {\n return function(_) { return x; };\n }\n\n // Function$chainRec :: ((a -> c, b -> c, a) -> (z -> c), a) -> (z -> b)\n function Function$chainRec(f, x) {\n return function(a) {\n var step = iterationNext(x);\n while (!step.done) {\n step = f(iterationNext, iterationDone, step.value)(a);\n }\n return step.value;\n };\n }\n\n // Function$prototype$equals :: Function ~> Function -> Boolean\n function Function$prototype$equals(other) {\n return other === this;\n }\n\n // Function$prototype$map :: (a -> b) ~> (b -> c) -> (a -> c)\n function Function$prototype$map(f) {\n var functor = this;\n return function(x) { return f(functor(x)); };\n }\n\n // Function$prototype$promap :: (b -> c) ~> (a -> b, c -> d) -> (a -> d)\n function Function$prototype$promap(f, g) {\n var profunctor = this;\n return function(x) { return g(profunctor(f(x))); };\n }\n\n // Function$prototype$ap :: (a -> b) ~> (a -> b -> c) -> (a -> c)\n function Function$prototype$ap(f) {\n var apply = this;\n return function(x) { return f(x)(apply(x)); };\n }\n\n // Function$prototype$chain :: (a -> b) ~> (b -> a -> c) -> (a -> c)\n function Function$prototype$chain(f) {\n var chain = this;\n return function(x) { return f(chain(x))(x); };\n }\n\n /* eslint-disable key-spacing */\n var implementations = {\n Null: {\n prototype: {\n toString: Null$prototype$toString,\n 'fantasy-land/equals': Null$prototype$equals\n }\n },\n Undefined: {\n prototype: {\n toString: Undefined$prototype$toString,\n 'fantasy-land/equals': Undefined$prototype$equals\n }\n },\n Boolean: {\n prototype: {\n toString: Boolean$prototype$toString,\n 'fantasy-land/equals': Boolean$prototype$equals\n }\n },\n Number: {\n prototype: {\n toString: Number$prototype$toString,\n 'fantasy-land/equals': Number$prototype$equals\n }\n },\n Date: {\n prototype: {\n toString: Date$prototype$toString,\n 'fantasy-land/equals': Date$prototype$equals\n }\n },\n RegExp: {\n prototype: {\n 'fantasy-land/equals': RegExp$prototype$equals\n }\n },\n String: {\n 'fantasy-land/empty': String$empty,\n prototype: {\n toString: String$prototype$toString,\n 'fantasy-land/equals': String$prototype$equals,\n 'fantasy-land/concat': String$prototype$concat\n }\n },\n Array: {\n 'fantasy-land/empty': Array$empty,\n 'fantasy-land/of': Array$of,\n 'fantasy-land/chainRec': Array$chainRec,\n 'fantasy-land/zero': Array$zero,\n prototype: {\n toString: Array$prototype$toString,\n 'fantasy-land/equals': Array$prototype$equals,\n 'fantasy-land/concat': Array$prototype$concat,\n 'fantasy-land/map': Array$prototype$map,\n 'fantasy-land/ap': Array$prototype$ap,\n 'fantasy-land/chain': Array$prototype$chain,\n 'fantasy-land/alt': Array$prototype$alt,\n 'fantasy-land/reduce': Array$prototype$reduce,\n 'fantasy-land/traverse': Array$prototype$traverse,\n 'fantasy-land/extend': Array$prototype$extend\n }\n },\n Arguments: {\n prototype: {\n toString: Arguments$prototype$toString,\n 'fantasy-land/equals': Arguments$prototype$equals\n }\n },\n Error: {\n prototype: {\n toString: Error$prototype$toString,\n 'fantasy-land/equals': Error$prototype$equals\n }\n },\n Object: {\n 'fantasy-land/empty': Object$empty,\n 'fantasy-land/zero': Object$zero,\n prototype: {\n toString: Object$prototype$toString,\n 'fantasy-land/equals': Object$prototype$equals,\n 'fantasy-land/concat': Object$prototype$concat,\n 'fantasy-land/map': Object$prototype$map,\n 'fantasy-land/alt': Object$prototype$alt,\n 'fantasy-land/reduce': Object$prototype$reduce\n }\n },\n Function: {\n 'fantasy-land/of': Function$of,\n 'fantasy-land/chainRec': Function$chainRec,\n prototype: {\n 'fantasy-land/equals': Function$prototype$equals,\n 'fantasy-land/map': Function$prototype$map,\n 'fantasy-land/promap': Function$prototype$promap,\n 'fantasy-land/ap': Function$prototype$ap,\n 'fantasy-land/chain': Function$prototype$chain\n }\n }\n };\n /* eslint-enable key-spacing */\n\n //# toString :: a -> String\n //.\n //. Returns a useful string representation of its argument.\n //.\n //. Dispatches to the argument's `toString` method if appropriate.\n //.\n //. Where practical, `equals(eval(toString(x)), x) = true`.\n //.\n //. `toString` implementations are provided for the following built-in types:\n //. Null, Undefined, Boolean, Number, Date, String, Array, Arguments, Error,\n //. and Object.\n //.\n //. ```javascript\n //. > toString(-0)\n //. '-0'\n //.\n //. > toString(['foo', 'bar', 'baz'])\n //. '[\"foo\", \"bar\", \"baz\"]'\n //.\n //. > toString({x: 1, y: 2, z: 3})\n //. '{\"x\": 1, \"y\": 2, \"z\": 3}'\n //.\n //. > toString(Cons(1, Cons(2, Cons(3, Nil))))\n //. 'Cons(1, Cons(2, Cons(3, Nil)))'\n //. ```\n var toString = (function() {\n // $seen :: Array Any\n var $seen = [];\n\n function call(method, x) {\n $seen.push(x);\n try { return method.call(x); } finally { $seen.pop(); }\n }\n\n return function toString(x) {\n if ($seen.indexOf(x) >= 0) return '';\n\n var xType = type(x);\n if (xType === 'Object') {\n var result;\n try { result = call(x.toString, x); } catch (err) {}\n if (result != null && result !== '[object Object]') return result;\n }\n\n return call(implPath([xType, 'prototype', 'toString']) || x.toString, x);\n };\n }());\n\n //# equals :: (a, b) -> Boolean\n //.\n //. Returns `true` if its arguments are of the same type and equal according\n //. to the type's [`fantasy-land/equals`][] method; `false` otherwise.\n //.\n //. `fantasy-land/equals` implementations are provided for the following\n //. built-in types: Null, Undefined, Boolean, Number, Date, RegExp, String,\n //. Array, Arguments, Error, Object, and Function.\n //.\n //. The algorithm supports circular data structures. Two arrays are equal\n //. if they have the same index paths and for each path have equal values.\n //. Two arrays which represent `[1, [1, [1, [1, [1, ...]]]]]`, for example,\n //. are equal even if their internal structures differ. Two objects are equal\n //. if they have the same property paths and for each path have equal values.\n //.\n //. ```javascript\n //. > equals(0, -0)\n //. false\n //.\n //. > equals(NaN, NaN)\n //. true\n //.\n //. > equals(Cons('foo', Cons('bar', Nil)), Cons('foo', Cons('bar', Nil)))\n //. true\n //.\n //. > equals(Cons('foo', Cons('bar', Nil)), Cons('bar', Cons('foo', Nil)))\n //. false\n //. ```\n var equals = (function() {\n // $pairs :: Array (Pair Any Any)\n var $pairs = [];\n\n return function equals(x, y) {\n if (type(x) !== type(y)) {\n return false;\n }\n\n // This algorithm for comparing circular data structures was\n // suggested in .\n if ($pairs.some(function(p) { return p[0] === x && p[1] === y; })) {\n return true;\n }\n\n $pairs.push([x, y]);\n try {\n return Setoid.test(x) && Setoid.test(y) && Setoid.methods.equals(x)(y);\n } finally {\n $pairs.pop();\n }\n };\n }());\n\n //# concat :: Semigroup a => (a, a) -> a\n //.\n //. Function wrapper for [`fantasy-land/concat`][].\n //.\n //. `fantasy-land/concat` implementations are provided for the following\n //. built-in types: String, Array, and Object.\n //.\n //. ```javascript\n //. > concat('abc', 'def')\n //. 'abcdef'\n //.\n //. > concat([1, 2, 3], [4, 5, 6])\n //. [1, 2, 3, 4, 5, 6]\n //.\n //. > concat({x: 1, y: 2}, {y: 3, z: 4})\n //. {x: 1, y: 3, z: 4}\n //.\n //. > concat(Cons('foo', Cons('bar', Cons('baz', Nil))), Cons('quux', Nil))\n //. Cons('foo', Cons('bar', Cons('baz', Cons('quux', Nil))))\n //. ```\n function concat(x, y) {\n return Semigroup.methods.concat(x)(y);\n }\n\n //# empty :: Monoid m => TypeRep m -> m\n //.\n //. Function wrapper for [`fantasy-land/empty`][].\n //.\n //. `fantasy-land/empty` implementations are provided for the following\n //. built-in types: String, Array, and Object.\n //.\n //. ```javascript\n //. > empty(String)\n //. ''\n //.\n //. > empty(Array)\n //. []\n //.\n //. > empty(Object)\n //. {}\n //.\n //. > empty(List)\n //. Nil\n //. ```\n function empty(typeRep) {\n return Monoid.methods.empty(typeRep)();\n }\n\n //# map :: Functor f => (a -> b, f a) -> f b\n //.\n //. Function wrapper for [`fantasy-land/map`][].\n //.\n //. `fantasy-land/map` implementations are provided for the following\n //. built-in types: Array, Object, and Function.\n //.\n //. ```javascript\n //. > map(Math.sqrt, [1, 4, 9])\n //. [1, 2, 3]\n //.\n //. > map(Math.sqrt, {x: 1, y: 4, z: 9})\n //. {x: 1, y: 2, z: 3}\n //.\n //. > map(Math.sqrt, s => s.length)('Sanctuary')\n //. 3\n //.\n //. > map(Math.sqrt, Tuple('foo', 64))\n //. Tuple('foo', 8)\n //.\n //. > map(Math.sqrt, Nil)\n //. Nil\n //.\n //. > map(Math.sqrt, Cons(1, Cons(4, Cons(9, Nil))))\n //. Cons(1, Cons(2, Cons(3, Nil)))\n //. ```\n function map(f, functor) {\n return Functor.methods.map(functor)(f);\n }\n\n //# bimap :: Bifunctor f => (a -> b, c -> d, f a c) -> f b d\n //.\n //. Function wrapper for [`fantasy-land/bimap`][].\n //.\n //. ```javascript\n //. > bimap(s => s.toUpperCase(), Math.sqrt, Tuple('foo', 64))\n //. Tuple('FOO', 8)\n //. ```\n function bimap(f, g, bifunctor) {\n return Bifunctor.methods.bimap(bifunctor)(f, g);\n }\n\n //# promap :: Profunctor p => (a -> b, c -> d, p b c) -> p a d\n //.\n //. Function wrapper for [`fantasy-land/promap`][].\n //.\n //. `fantasy-land/promap` implementations are provided for the following\n //. built-in types: Function.\n //.\n //. ```javascript\n //. > promap(Math.abs, x => x + 1, Math.sqrt)(-100)\n //. 11\n //. ```\n function promap(f, g, profunctor) {\n return Profunctor.methods.promap(profunctor)(f, g);\n }\n\n //# ap :: Apply f => (f (a -> b), f a) -> f b\n //.\n //. Function wrapper for [`fantasy-land/ap`][].\n //.\n //. `fantasy-land/ap` implementations are provided for the following\n //. built-in types: Array and Function.\n //.\n //. ```javascript\n //. > ap([Math.sqrt, x => x * x], [1, 4, 9, 16, 25])\n //. [1, 2, 3, 4, 5, 1, 16, 81, 256, 625]\n //.\n //. > ap(s => n => s.slice(0, n), s => Math.ceil(s.length / 2))('Haskell')\n //. 'Hask'\n //.\n //. > ap(Identity(Math.sqrt), Identity(64))\n //. Identity(8)\n //.\n //. > ap(Cons(Math.sqrt, Cons(x => x * x, Nil)), Cons(16, Cons(100, Nil)))\n //. Cons(4, Cons(10, Cons(256, Cons(10000, Nil))))\n //. ```\n function ap(applyF, applyX) {\n return Apply.methods.ap(applyX)(applyF);\n }\n\n //# lift2 :: Apply f => (a -> b -> c, f a, f b) -> f c\n //.\n //. Lifts `a -> b -> c` to `Apply f => f a -> f b -> f c` and returns the\n //. result of applying this to the given arguments.\n //.\n //. This function is derived from [`map`](#map) and [`ap`](#ap).\n //.\n //. See also [`lift3`](#lift3).\n //.\n //. ```javascript\n //. > lift2(x => y => Math.pow(x, y), [10], [1, 2, 3])\n //. [10, 100, 1000]\n //.\n //. > lift2(x => y => Math.pow(x, y), Identity(10), Identity(3))\n //. Identity(1000)\n //. ```\n function lift2(f, x, y) {\n return ap(map(f, x), y);\n }\n\n //# lift3 :: Apply f => (a -> b -> c -> d, f a, f b, f c) -> f d\n //.\n //. Lifts `a -> b -> c -> d` to `Apply f => f a -> f b -> f c -> f d` and\n //. returns the result of applying this to the given arguments.\n //.\n //. This function is derived from [`map`](#map) and [`ap`](#ap).\n //.\n //. See also [`lift2`](#lift2).\n //.\n //. ```javascript\n //. > lift3(x => y => z => x + z + y, ['<'], ['>'], ['foo', 'bar', 'baz'])\n //. ['', '', '']\n //.\n //. > lift3(x => y => z => x + z + y, Identity('<'), Identity('>'), Identity('baz'))\n //. Identity('')\n //. ```\n function lift3(f, x, y, z) {\n return ap(ap(map(f, x), y), z);\n }\n\n //# apFirst :: Apply f => (f a, f b) -> f a\n //.\n //. Combines two effectful actions, keeping only the result of the first.\n //. Equivalent to Haskell's `(<*)` function.\n //.\n //. This function is derived from [`lift2`](#lift2).\n //.\n //. See also [`apSecond`](#apSecond).\n //.\n //. ```javascript\n //. > apFirst([1, 2], [3, 4])\n //. [1, 1, 2, 2]\n //.\n //. > apFirst(Identity(1), Identity(2))\n //. Identity(1)\n //. ```\n function apFirst(x, y) {\n return lift2(constant, x, y);\n }\n\n //# apSecond :: Apply f => (f a, f b) -> f b\n //.\n //. Combines two effectful actions, keeping only the result of the second.\n //. Equivalent to Haskell's `(*>)` function.\n //.\n //. This function is derived from [`lift2`](#lift2).\n //.\n //. See also [`apFirst`](#apFirst).\n //.\n //. ```javascript\n //. > apSecond([1, 2], [3, 4])\n //. [3, 4, 3, 4]\n //.\n //. > apSecond(Identity(1), Identity(2))\n //. Identity(2)\n //. ```\n function apSecond(x, y) {\n return lift2(constant(identity), x, y);\n }\n\n //# of :: Applicative f => (TypeRep f, a) -> f a\n //.\n //. Function wrapper for [`fantasy-land/of`][].\n //.\n //. `fantasy-land/of` implementations are provided for the following\n //. built-in types: Array and Function.\n //.\n //. ```javascript\n //. > of(Array, 42)\n //. [42]\n //.\n //. > of(Function, 42)(null)\n //. 42\n //.\n //. > of(List, 42)\n //. Cons(42, Nil)\n //. ```\n function of(typeRep, x) {\n return Applicative.methods.of(typeRep)(x);\n }\n\n //# chain :: Chain m => (a -> m b, m a) -> m b\n //.\n //. Function wrapper for [`fantasy-land/chain`][].\n //.\n //. `fantasy-land/chain` implementations are provided for the following\n //. built-in types: Array and Function.\n //.\n //. ```javascript\n //. > chain(x => [x, x], [1, 2, 3])\n //. [1, 1, 2, 2, 3, 3]\n //.\n //. > chain(x => x % 2 == 1 ? of(List, x) : Nil, Cons(1, Cons(2, Cons(3, Nil))))\n //. Cons(1, Cons(3, Nil))\n //.\n //. > chain(n => s => s.slice(0, n), s => Math.ceil(s.length / 2))('Haskell')\n //. 'Hask'\n //. ```\n function chain(f, chain_) {\n return Chain.methods.chain(chain_)(f);\n }\n\n //# join :: Chain m => m (m a) -> m a\n //.\n //. Removes one level of nesting from a nested monadic structure.\n //.\n //. This function is derived from [`chain`](#chain).\n //.\n //. ```javascript\n //. > join([[1], [2], [3]])\n //. [1, 2, 3]\n //.\n //. > join([[[1, 2, 3]]])\n //. [[1, 2, 3]]\n //.\n //. > join(Identity(Identity(1)))\n //. Identity(1)\n //. ```\n function join(chain_) {\n return chain(identity, chain_);\n }\n\n //# chainRec :: ChainRec m => (TypeRep m, (a -> c, b -> c, a) -> m c, a) -> m b\n //.\n //. Function wrapper for [`fantasy-land/chainRec`][].\n //.\n //. `fantasy-land/chainRec` implementations are provided for the following\n //. built-in types: Array.\n //.\n //. ```javascript\n //. > chainRec(\n //. . Array,\n //. . (next, done, s) => s.length == 2 ? [s + '!', s + '?'].map(done)\n //. . : [s + 'o', s + 'n'].map(next),\n //. . ''\n //. . )\n //. ['oo!', 'oo?', 'on!', 'on?', 'no!', 'no?', 'nn!', 'nn?']\n //. ```\n function chainRec(typeRep, f, x) {\n return ChainRec.methods.chainRec(typeRep)(f, x);\n }\n\n //# filter :: (Applicative f, Foldable f, Monoid (f a)) => (a -> Boolean, f a) -> f a\n //.\n //. Filters its second argument in accordance with the given predicate.\n //.\n //. This function is derived from [`empty`](#empty), [`of`](#of), and\n //. [`reduce`](#reduce).\n //.\n //. See also [`filterM`](#filterM).\n //.\n //. ```javascript\n //. > filter(x => x % 2 == 1, [1, 2, 3])\n //. [1, 3]\n //.\n //. > filter(x => x % 2 == 1, Cons(1, Cons(2, Cons(3, Nil))))\n //. Cons(1, Cons(3, Nil))\n //. ```\n function filter(pred, m) {\n var M = m.constructor;\n return reduce(function(m, x) { return pred(x) ? concat(m, of(M, x)) : m; },\n empty(M),\n m);\n }\n\n //# filterM :: (Monad m, Monoid (m a)) => (a -> Boolean, m a) -> m a\n //.\n //. Filters its second argument in accordance with the given predicate.\n //.\n //. This function is derived from [`empty`](#empty), [`of`](#of), and\n //. [`chain`](#chain).\n //.\n //. See also [`filter`](#filter).\n //.\n //. ```javascript\n //. > filterM(x => x % 2 == 1, [1, 2, 3])\n //. [1, 3]\n //.\n //. > filterM(x => x % 2 == 1, Cons(1, Cons(2, Cons(3, Nil))))\n //. Cons(1, Cons(3, Nil))\n //. ```\n function filterM(pred, m) {\n var M = m.constructor;\n var e = empty(M);\n return chain(function(x) { return pred(x) ? of(M, x) : e; }, m);\n }\n\n //# alt :: Alt f => (f a, f a) -> f a\n //.\n //. Function wrapper for [`fantasy-land/alt`][].\n //.\n //. `fantasy-land/alt` implementations are provided for the following\n //. built-in types: Array and Object.\n //.\n //. ```javascript\n //. > alt([1, 2, 3], [4, 5, 6])\n //. [1, 2, 3, 4, 5, 6]\n //.\n //. > alt(Nothing, Nothing)\n //. Nothing\n //.\n //. > alt(Nothing, Just(1))\n //. Just(1)\n //.\n //. > alt(Just(2), Just(3))\n //. Just(2)\n //. ```\n function alt(x, y) {\n return Alt.methods.alt(x)(y);\n }\n\n //# zero :: Plus f => TypeRep f -> f a\n //.\n //. Function wrapper for [`fantasy-land/zero`][].\n //.\n //. `fantasy-land/zero` implementations are provided for the following\n //. built-in types: Array and Object.\n //.\n //. ```javascript\n //. > zero(Array)\n //. []\n //.\n //. > zero(Object)\n //. {}\n //.\n //. > zero(Maybe)\n //. Nothing\n //. ```\n function zero(typeRep) {\n return Plus.methods.zero(typeRep)();\n }\n\n //# reduce :: Foldable f => ((b, a) -> b, b, f a) -> b\n //.\n //. Function wrapper for [`fantasy-land/reduce`][].\n //.\n //. `fantasy-land/reduce` implementations are provided for the following\n //. built-in types: Array and Object.\n //.\n //. ```javascript\n //. > reduce((xs, x) => [x].concat(xs), [], [1, 2, 3])\n //. [3, 2, 1]\n //.\n //. > reduce(concat, '', Cons('foo', Cons('bar', Cons('baz', Nil))))\n //. 'foobarbaz'\n //. ```\n function reduce(f, x, foldable) {\n return Foldable.methods.reduce(foldable)(f, x);\n }\n\n //# traverse :: (Applicative f, Traversable t) => (a -> f a, b -> f c, t b) -> f (t c)\n //.\n //. Function wrapper for [`fantasy-land/traverse`][].\n //.\n //. `fantasy-land/traverse` implementations are provided for the following\n //. built-in types: Array.\n //.\n //. See also [`sequence`](#sequence).\n //.\n //. ```javascript\n //. > traverse(x => [x], x => x, [[1, 2, 3], [4, 5]])\n //. [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]\n //.\n //. > traverse(Identity, x => Identity(x + 1), [1, 2, 3])\n //. Identity([2, 3, 4])\n //. ```\n function traverse(of, f, traversable) {\n return Traversable.methods.traverse(traversable)(f, of);\n }\n\n //# sequence :: (Applicative f, Traversable t) => (a -> f a, t (f b)) -> f (t b)\n //.\n //. Inverts the given `t (f b)` to produce an `f (t b)`.\n //.\n //. This function is derived from [`traverse`](#traverse).\n //.\n //. ```javascript\n //. > sequence(x => [x], Identity([1, 2, 3]))\n //. [Identity(1), Identity(2), Identity(3)]\n //.\n //. > sequence(Identity, [Identity(1), Identity(2), Identity(3)])\n //. Identity([1, 2, 3])\n //. ```\n function sequence(of, traversable) {\n return traverse(of, identity, traversable);\n }\n\n //# extend :: Extend w => (w a -> b, w a) -> w b\n //.\n //. Function wrapper for [`fantasy-land/extend`][].\n //.\n //. `fantasy-land/extend` implementations are provided for the following\n //. built-in types: Array.\n //.\n //. ```javascript\n //. > extend(xs => xs.length, ['foo', 'bar', 'baz', 'quux'])\n //. [4]\n //. ```\n function extend(f, extend_) {\n return Extend.methods.extend(extend_)(f);\n }\n\n //# extract :: Comonad w => w a -> a\n //.\n //. Function wrapper for [`fantasy-land/extract`][].\n //.\n //. ```javascript\n //. > extract(Identity(42))\n //. 42\n //. ```\n function extract(comonad) {\n return Comonad.methods.extract(comonad)();\n }\n\n return {\n TypeClass: TypeClass,\n Setoid: Setoid,\n Semigroup: Semigroup,\n Monoid: Monoid,\n Functor: Functor,\n Bifunctor: Bifunctor,\n Profunctor: Profunctor,\n Apply: Apply,\n Applicative: Applicative,\n Chain: Chain,\n ChainRec: ChainRec,\n Monad: Monad,\n Alt: Alt,\n Plus: Plus,\n Alternative: Alternative,\n Foldable: Foldable,\n Traversable: Traversable,\n Extend: Extend,\n Comonad: Comonad,\n toString: toString,\n equals: equals,\n concat: concat,\n empty: empty,\n map: map,\n bimap: bimap,\n promap: promap,\n ap: ap,\n lift2: lift2,\n lift3: lift3,\n apFirst: apFirst,\n apSecond: apSecond,\n of: of,\n chain: chain,\n join: join,\n chainRec: chainRec,\n filter: filter,\n filterM: filterM,\n alt: alt,\n zero: zero,\n reduce: reduce,\n traverse: traverse,\n sequence: sequence,\n extend: extend,\n extract: extract\n };\n\n}));\n\n//. [Alt]: https://github.com/fantasyland/fantasy-land#alt\n//. [Alternative]: https://github.com/fantasyland/fantasy-land#alternative\n//. [Applicative]: https://github.com/fantasyland/fantasy-land#applicative\n//. [Apply]: https://github.com/fantasyland/fantasy-land#apply\n//. [Bifunctor]: https://github.com/fantasyland/fantasy-land#bifunctor\n//. [Chain]: https://github.com/fantasyland/fantasy-land#chain\n//. [ChainRec]: https://github.com/fantasyland/fantasy-land#chainrec\n//. [Comonad]: https://github.com/fantasyland/fantasy-land#comonad\n//. [Extend]: https://github.com/fantasyland/fantasy-land#extend\n//. [FL]: https://github.com/fantasyland/fantasy-land\n//. [Foldable]: https://github.com/fantasyland/fantasy-land#foldable\n//. [Functor]: https://github.com/fantasyland/fantasy-land#functor\n//. [Monad]: https://github.com/fantasyland/fantasy-land#monad\n//. [Monoid]: https://github.com/fantasyland/fantasy-land#monoid\n//. [Plus]: https://github.com/fantasyland/fantasy-land#plus\n//. [Profunctor]: https://github.com/fantasyland/fantasy-land#profunctor\n//. [Semigroup]: https://github.com/fantasyland/fantasy-land#semigroup\n//. [Setoid]: https://github.com/fantasyland/fantasy-land#setoid\n//. [Traversable]: https://github.com/fantasyland/fantasy-land#traversable\n//. [`fantasy-land/alt`]: https://github.com/fantasyland/fantasy-land#alt-method\n//. [`fantasy-land/ap`]: https://github.com/fantasyland/fantasy-land#ap-method\n//. [`fantasy-land/bimap`]: https://github.com/fantasyland/fantasy-land#bimap-method\n//. [`fantasy-land/chain`]: https://github.com/fantasyland/fantasy-land#chain-method\n//. [`fantasy-land/chainRec`]: https://github.com/fantasyland/fantasy-land#chainrec-method\n//. [`fantasy-land/concat`]: https://github.com/fantasyland/fantasy-land#concat-method\n//. [`fantasy-land/empty`]: https://github.com/fantasyland/fantasy-land#empty-method\n//. [`fantasy-land/equals`]: https://github.com/fantasyland/fantasy-land#equals-method\n//. [`fantasy-land/extend`]: https://github.com/fantasyland/fantasy-land#extend-method\n//. [`fantasy-land/extract`]: https://github.com/fantasyland/fantasy-land#extract-method\n//. [`fantasy-land/map`]: https://github.com/fantasyland/fantasy-land#map-method\n//. [`fantasy-land/of`]: https://github.com/fantasyland/fantasy-land#of-method\n//. [`fantasy-land/promap`]: https://github.com/fantasyland/fantasy-land#promap-method\n//. [`fantasy-land/reduce`]: https://github.com/fantasyland/fantasy-land#reduce-method\n//. [`fantasy-land/traverse`]: https://github.com/fantasyland/fantasy-land#traverse-method\n//. [`fantasy-land/zero`]: https://github.com/fantasyland/fantasy-land#zero-method\n//. [type-classes]: https://github.com/sanctuary-js/sanctuary-def#type-classes\n","/* ___ ______\n / /\\ / ___/\\\n ______/ / / _______ __/ /___\\/\n / ___ / / / ___ \\ /_ __/\\\n / /\\_/ / / / /__/ /\\ \\/ /\\_\\/\n / / // / / / ______/ / / / /\n / /_// / / / /______\\/ / / /\n \\_______/ / \\_______/\\ /__/ /\n \\______\\/ \\______\\/ \\__*/\n\n//. # sanctuary-def\n//.\n//. sanctuary-def is a run-time type system for JavaScript. It facilitates\n//. the definition of curried JavaScript functions which are explicit about\n//. the number of arguments to which they may be applied and the types of\n//. those arguments.\n//.\n//. It is conventional to import the package as `$`:\n//.\n//. ```javascript\n//. const $ = require('sanctuary-def');\n//. ```\n//.\n//. The next step is to define an environment. An environment is an array\n//. of [types][]. [`env`][] is an environment containing all the built-in\n//. JavaScript types. It may be used as the basis for environments which\n//. include custom types in addition to the built-in types:\n//.\n//. ```javascript\n//. // Integer :: Type\n//. const Integer = ...;\n//.\n//. // NonZeroInteger :: Type\n//. const NonZeroInteger = ...;\n//.\n//. // env :: Array Type\n//. const env = $.env.concat([Integer, NonZeroInteger]);\n//. ```\n//.\n//. The next step is to define a `def` function for the environment:\n//.\n//. ```javascript\n//. const def = $.create({checkTypes: true, env: env});\n//. ```\n//.\n//. The `checkTypes` option determines whether type checking is enabled.\n//. This allows one to only pay the performance cost of run-time type checking\n//. during development. For example:\n//.\n//. ```javascript\n//. const def = $.create({\n//. checkTypes: process.env.NODE_ENV === 'development',\n//. env: env,\n//. });\n//. ```\n//.\n//. `def` is a function for defining functions. For example:\n//.\n//. ```javascript\n//. // add :: Number -> Number -> Number\n//. const add =\n//. def('add', {}, [$.Number, $.Number, $.Number], (x, y) => x + y);\n//. ```\n//.\n//. `[$.Number, $.Number, $.Number]` specifies that `add` takes two arguments\n//. of type `Number` and returns a value of type `Number`.\n//.\n//. Applying `add` to two arguments gives the expected result:\n//.\n//. ```javascript\n//. add(2, 2);\n//. // => 4\n//. ```\n//.\n//. Applying `add` to greater than two arguments results in an exception being\n//. thrown:\n//.\n//. ```javascript\n//. add(2, 2, 2);\n//. // ! TypeError: ‘add’ requires two arguments; received three arguments\n//. ```\n//.\n//. Applying `add` to fewer than two arguments results in a function\n//. awaiting the remaining arguments. This is known as partial application.\n//. Partial application is convenient as it allows more specific functions\n//. to be defined in terms of more general ones:\n//.\n//. ```javascript\n//. // inc :: Number -> Number\n//. const inc = add(1);\n//.\n//. inc(7);\n//. // => 8\n//. ```\n//.\n//. JavaScript's implicit type coercion often obfuscates the source of type\n//. errors. Consider the following function:\n//.\n//. ```javascript\n//. // _add :: (Number, Number) -> Number\n//. const _add = (x, y) => x + y;\n//. ```\n//.\n//. The type signature indicates that `_add` takes two arguments of type\n//. `Number`, but this is not enforced. This allows type errors to be silently\n//. ignored:\n//.\n//. ```javascript\n//. _add('2', '2');\n//. // => '22'\n//. ```\n//.\n//. `add`, on the other hand, throws if applied to arguments of the wrong\n//. types:\n//.\n//. ```javascript\n//. add('2', '2');\n//. // ! TypeError: Invalid value\n//. //\n//. // add :: Number -> Number -> Number\n//. // ^^^^^^\n//. // 1\n//. //\n//. // 1) \"2\" :: String\n//. //\n//. // The value at position 1 is not a member of ‘Number’.\n//. ```\n//.\n//. Type checking is performed as arguments are provided (rather than once all\n//. arguments have been provided), so type errors are reported early:\n//.\n//. ```javascript\n//. add('X');\n//. // ! TypeError: Invalid value\n//. //\n//. // add :: Number -> Number -> Number\n//. // ^^^^^^\n//. // 1\n//. //\n//. // 1) \"X\" :: String\n//. //\n//. // The value at position 1 is not a member of ‘Number’.\n//. ```\n\n(function(f) {\n\n 'use strict';\n\n /* istanbul ignore else */\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = f(require('sanctuary-type-classes'),\n require('sanctuary-type-identifiers'));\n } else if (typeof define === 'function' && define.amd != null) {\n define(['sanctuary-type-classes', 'sanctuary-type-identifiers'], f);\n } else {\n self.sanctuaryDef = f(self.sanctuaryTypeClasses,\n self.sanctuaryTypeIdentifiers);\n }\n\n}(function(Z, type) {\n\n 'use strict';\n\n //# __ :: Placeholder\n //.\n //. The special placeholder value.\n //.\n //. One may wish to partially apply a function whose parameters are in the\n //. \"wrong\" order. Functions defined via sanctuary-def accommodate this by\n //. accepting placeholders for arguments yet to be provided. For example:\n //.\n //. ```javascript\n //. // concatS :: String -> String -> String\n //. const concatS =\n //. def('concatS', {}, [$.String, $.String, $.String], (x, y) => x + y);\n //.\n //. // exclaim :: String -> String\n //. const exclaim = concatS($.__, '!');\n //.\n //. exclaim('ahoy');\n //. // => 'ahoy!'\n //. ```\n var __ = {'@@functional/placeholder': true};\n\n var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n var MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n\n var slice = Array.prototype.slice;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n function Either(tag, value) {\n this.isLeft = tag === 'Left';\n this.isRight = tag === 'Right';\n this.value = value;\n }\n\n Either['@@type'] = 'sanctuary-def/Either';\n\n Either.prototype['fantasy-land/map'] = function(f) {\n return this.isLeft ? this : Right(f(this.value));\n };\n\n Either.prototype['fantasy-land/chain'] = function(f) {\n return this.isLeft ? this : f(this.value);\n };\n\n // Left :: a -> Either a b\n function Left(x) { return new Either('Left', x); }\n\n // Right :: b -> Either a b\n function Right(x) { return new Either('Right', x); }\n\n // K :: a -> b -> a\n function K(x) { return function(y) { return x; }; }\n\n // always :: a -> (-> a)\n function always(x) { return function() { return x; }; }\n\n // always2 :: a -> (b, c) -> a\n function always2(x) { return function(y, z) { return x; }; }\n\n // id :: a -> a\n function id(x) { return x; }\n\n // init :: Array a -> Array a\n function init(xs) { return xs.slice(0, -1); }\n\n // isEmpty :: Array a -> Boolean\n function isEmpty(xs) { return xs.length === 0; }\n\n // isPrefix :: Array a -> Array a -> Boolean\n function isPrefix(candidate) {\n return function(xs) {\n if (candidate.length > xs.length) return false;\n for (var idx = 0; idx < candidate.length; idx += 1) {\n if (candidate[idx] !== xs[idx]) return false;\n }\n return true;\n };\n }\n\n // last :: Array a -> a\n function last(xs) { return xs[xs.length - 1]; }\n\n // memberOf :: Array a -> a -> Boolean\n function memberOf(xs) {\n return function(y) {\n return xs.some(function(x) { return Z.equals(x, y); });\n };\n }\n\n // or :: (Array a, Array a) -> Array a\n function or(xs, ys) { return isEmpty(xs) ? ys : xs; }\n\n // range :: (Number, Number) -> Array Number\n function range(start, stop) {\n var result = [];\n for (var n = start; n < stop; n += 1) result.push(n);\n return result;\n }\n\n // strRepeat :: (String, Integer) -> String\n function strRepeat(s, times) {\n return Array(times + 1).join(s);\n }\n\n // r :: Char -> String -> String\n function r(c) {\n return function(s) {\n return strRepeat(c, s.length);\n };\n }\n\n // _ :: String -> String\n var _ = r(' ');\n\n // stripOutermostParens :: String -> String\n function stripOutermostParens(s) {\n return s.slice('('.length, -')'.length);\n }\n\n // trimTrailingSpaces :: String -> String\n function trimTrailingSpaces(s) {\n return s.replace(/[ ]+$/gm, '');\n }\n\n // unless :: (Boolean, (a -> a), a) -> a\n function unless(bool, f, x) {\n return bool ? x : f(x);\n }\n\n // when :: (Boolean, (a -> a), a) -> a\n function when(bool, f, x) {\n return bool ? f(x) : x;\n }\n\n // wrap :: String -> String -> String -> String\n function wrap(prefix) {\n return function(suffix) {\n return function(s) {\n return prefix + s + suffix;\n };\n };\n }\n\n // q :: String -> String\n var q = wrap('\\u2018')('\\u2019');\n\n // stripNamespace :: String -> String\n function stripNamespace(s) { return s.slice(s.indexOf('/') + 1); }\n\n // _Type :: ... -> Type\n function _Type(\n type, // :: String\n name, // :: String\n url, // :: String\n format, // :: (String -> String, String -> String -> String) -> String\n test, // :: Any -> Boolean\n keys, // :: Array String\n types // :: StrMap { extractor :: a -> Array b, type :: Type }\n ) {\n this._test = test;\n this.format = format;\n this.keys = keys;\n this.name = name;\n this.type = type;\n this.types = types;\n this.url = url;\n }\n\n _Type['@@type'] = 'sanctuary-def/Type';\n\n _Type.prototype.validate = function(x) {\n if (!this._test(x)) return Left({value: x, propPath: []});\n for (var idx = 0; idx < this.keys.length; idx += 1) {\n var k = this.keys[idx];\n var t = this.types[k];\n for (var idx2 = 0, ys = t.extractor(x); idx2 < ys.length; idx2 += 1) {\n var result = t.type.validate(ys[idx2]);\n if (result.isLeft) {\n var value = result.value.value;\n var propPath = Z.concat([k], result.value.propPath);\n return Left({value: value, propPath: propPath});\n }\n }\n }\n return Right(x);\n };\n\n _Type.prototype.toString = function() {\n return this.format(id, K(id));\n };\n\n var BINARY = 'BINARY';\n var FUNCTION = 'FUNCTION';\n var INCONSISTENT = 'INCONSISTENT';\n var NULLARY = 'NULLARY';\n var RECORD = 'RECORD';\n var UNARY = 'UNARY';\n var UNKNOWN = 'UNKNOWN';\n var VARIABLE = 'VARIABLE';\n\n // Inconsistent :: Type\n var Inconsistent =\n new _Type(INCONSISTENT, '', '', always2('???'), K(false), [], {});\n\n // typeEq :: String -> a -> Boolean\n function typeEq(name) {\n return function(x) {\n return type(x) === name;\n };\n }\n\n // typeofEq :: String -> a -> Boolean\n function typeofEq(typeof_) {\n return function(x) {\n return typeof x === typeof_;\n };\n }\n\n // functionUrl :: String -> String\n function functionUrl(name) {\n var version = '0.9.0'; // updated programmatically\n return 'https://github.com/sanctuary-js/sanctuary-def/tree/v' + version +\n '#' + stripNamespace(name);\n }\n\n // NullaryTypeWithUrl :: (String, Any -> Boolean) -> Type\n function NullaryTypeWithUrl(name, test) {\n return NullaryType(name, functionUrl(name), test);\n }\n\n // EnumTypeWithUrl :: (String, Array Any) -> Type\n function EnumTypeWithUrl(name, members) {\n return EnumType(name, functionUrl(name), members);\n }\n\n // UnaryTypeWithUrl ::\n // (String, Any -> Boolean, t a -> Array a) -> (Type -> Type)\n function UnaryTypeWithUrl(name, test, _1) {\n return UnaryType(name, functionUrl(name), test, _1);\n }\n\n // BinaryTypeWithUrl ::\n // (String, Any -> Boolean, t a b -> Array a, t a b -> Array b) ->\n // ((Type, Type) -> Type)\n function BinaryTypeWithUrl(name, test, _1, _2) {\n return BinaryType(name, functionUrl(name), test, _1, _2);\n }\n\n // applyParameterizedTypes :: Array Type -> Array Type\n function applyParameterizedTypes(types) {\n return Z.map(function(x) {\n return typeof x === 'function' ?\n x.apply(null, Z.map(K(Unknown), range(0, x.length))) :\n x;\n }, types);\n }\n\n //. ### Types\n //.\n //. Conceptually, a type is a set of values. One can think of a value of\n //. type `Type` as a function of type `Any -> Boolean` which tests values\n //. for membership in the set (though this is an oversimplification).\n\n //# Any :: Type\n //.\n //. Type comprising every JavaScript value.\n var Any = NullaryTypeWithUrl('sanctuary-def/Any', K(true));\n\n //# AnyFunction :: Type\n //.\n //. Type comprising every Function value.\n var AnyFunction = NullaryTypeWithUrl('Function', typeEq('Function'));\n\n //# Arguments :: Type\n //.\n //. Type comprising every [`arguments`][arguments] object.\n var Arguments = NullaryTypeWithUrl('Arguments', typeEq('Arguments'));\n\n //# Array :: Type -> Type\n //.\n //. Constructor for homogeneous Array types.\n var Array_ = UnaryTypeWithUrl('Array', typeEq('Array'), id);\n\n //# Boolean :: Type\n //.\n //. Type comprising `true` and `false`.\n var Boolean_ = NullaryTypeWithUrl('Boolean', typeofEq('boolean'));\n\n //# Date :: Type\n //.\n //. Type comprising every Date value.\n var Date_ = NullaryTypeWithUrl('Date', typeEq('Date'));\n\n //# Error :: Type\n //.\n //. Type comprising every Error value, including values of more specific\n //. constructors such as [`SyntaxError`][] and [`TypeError`][].\n var Error_ = NullaryTypeWithUrl('Error', typeEq('Error'));\n\n //# FiniteNumber :: Type\n //.\n //. Type comprising every [`ValidNumber`][] value except `Infinity` and\n //. `-Infinity`.\n var FiniteNumber = NullaryTypeWithUrl(\n 'sanctuary-def/FiniteNumber',\n function(x) { return ValidNumber._test(x) && isFinite(x); }\n );\n\n //# Function :: Array Type -> Type\n //.\n //. Constructor for Function types.\n //.\n //. Examples:\n //.\n //. - `$.Function([$.Date, $.String])` represents the `Date -> String`\n //. type; and\n //. - `$.Function([a, b, a])` represents the `(a, b) -> a` type.\n function Function_(types) {\n function format(outer, inner) {\n var xs = types.map(function(t, idx) {\n return unless(t.type === RECORD || isEmpty(t.keys),\n stripOutermostParens,\n inner('$' + String(idx + 1))(String(t)));\n });\n var parenthesize = wrap(outer('('))(outer(')'));\n return parenthesize(unless(types.length === 2,\n parenthesize,\n init(xs).join(outer(', '))) +\n outer(' -> ') +\n last(xs));\n }\n\n var test = AnyFunction._test;\n\n var $keys = [];\n var $types = {};\n types.forEach(function(t, idx) {\n var k = '$' + String(idx + 1);\n $keys.push(k);\n $types[k] = {extractor: K([]), type: t};\n });\n\n return new _Type(FUNCTION, '', '', format, test, $keys, $types);\n }\n\n //# GlobalRegExp :: Type\n //.\n //. Type comprising every [`RegExp`][] value whose `global` flag is `true`.\n //.\n //. See also [`NonGlobalRegExp`][].\n var GlobalRegExp = NullaryTypeWithUrl(\n 'sanctuary-def/GlobalRegExp',\n function(x) { return RegExp_._test(x) && x.global; }\n );\n\n //# Integer :: Type\n //.\n //. Type comprising every integer in the range\n //. [[`Number.MIN_SAFE_INTEGER`][min] .. [`Number.MAX_SAFE_INTEGER`][max]].\n var Integer = NullaryTypeWithUrl(\n 'sanctuary-def/Integer',\n function(x) {\n return ValidNumber._test(x) &&\n Math.floor(x) === x &&\n x >= MIN_SAFE_INTEGER &&\n x <= MAX_SAFE_INTEGER;\n }\n );\n\n //# NegativeFiniteNumber :: Type\n //.\n //. Type comprising every [`FiniteNumber`][] value less than zero.\n var NegativeFiniteNumber = NullaryTypeWithUrl(\n 'sanctuary-def/NegativeFiniteNumber',\n function(x) { return FiniteNumber._test(x) && x < 0; }\n );\n\n //# NegativeInteger :: Type\n //.\n //. Type comprising every [`Integer`][] value less than zero.\n var NegativeInteger = NullaryTypeWithUrl(\n 'sanctuary-def/NegativeInteger',\n function(x) { return Integer._test(x) && x < 0; }\n );\n\n //# NegativeNumber :: Type\n //.\n //. Type comprising every [`Number`][] value less than zero.\n var NegativeNumber = NullaryTypeWithUrl(\n 'sanctuary-def/NegativeNumber',\n function(x) { return Number_._test(x) && x < 0; }\n );\n\n //# NonGlobalRegExp :: Type\n //.\n //. Type comprising every [`RegExp`][] value whose `global` flag is `false`.\n //.\n //. See also [`GlobalRegExp`][].\n var NonGlobalRegExp = NullaryTypeWithUrl(\n 'sanctuary-def/NonGlobalRegExp',\n function(x) { return RegExp_._test(x) && !x.global; }\n );\n\n //# NonZeroFiniteNumber :: Type\n //.\n //. Type comprising every [`FiniteNumber`][] value except `0` and `-0`.\n var NonZeroFiniteNumber = NullaryTypeWithUrl(\n 'sanctuary-def/NonZeroFiniteNumber',\n function(x) { return FiniteNumber._test(x) && x !== 0; }\n );\n\n //# NonZeroInteger :: Type\n //.\n //. Type comprising every [`Integer`][] value except `0` and `-0`.\n var NonZeroInteger = NullaryTypeWithUrl(\n 'sanctuary-def/NonZeroInteger',\n function(x) { return Integer._test(x) && x !== 0; }\n );\n\n //# NonZeroValidNumber :: Type\n //.\n //. Type comprising every [`ValidNumber`][] value except `0` and `-0`.\n var NonZeroValidNumber = NullaryTypeWithUrl(\n 'sanctuary-def/NonZeroValidNumber',\n function(x) { return ValidNumber._test(x) && x !== 0; }\n );\n\n //# Null :: Type\n //.\n //. Type whose sole member is `null`.\n var Null = NullaryTypeWithUrl('Null', typeEq('Null'));\n\n //# Nullable :: Type -> Type\n //.\n //. Constructor for types which include `null` as a member.\n var Nullable = UnaryTypeWithUrl(\n 'sanctuary-def/Nullable',\n K(true),\n function(nullable) { return nullable === null ? [] : [nullable]; }\n );\n\n //# Number :: Type\n //.\n //. Type comprising every primitive Number value (including `NaN`).\n var Number_ = NullaryTypeWithUrl('Number', typeofEq('number'));\n\n //# Object :: Type\n //.\n //. Type comprising every \"plain\" Object value. Specifically, values\n //. created via:\n //.\n //. - object literal syntax;\n //. - [`Object.create`][]; or\n //. - the `new` operator in conjunction with `Object` or a custom\n //. constructor function.\n var Object_ = NullaryTypeWithUrl('Object', typeEq('Object'));\n\n //# Pair :: Type -> Type -> Type\n //.\n //. Constructor for tuple types of length 2. Arrays are said to represent\n //. tuples. `['foo', 42]` is a member of `Pair String Number`.\n var Pair = BinaryTypeWithUrl(\n 'sanctuary-def/Pair',\n function(x) { return typeEq('Array')(x) && x.length === 2; },\n function(pair) { return [pair[0]]; },\n function(pair) { return [pair[1]]; }\n );\n\n //# PositiveFiniteNumber :: Type\n //.\n //. Type comprising every [`FiniteNumber`][] value greater than zero.\n var PositiveFiniteNumber = NullaryTypeWithUrl(\n 'sanctuary-def/PositiveFiniteNumber',\n function(x) { return FiniteNumber._test(x) && x > 0; }\n );\n\n //# PositiveInteger :: Type\n //.\n //. Type comprising every [`Integer`][] value greater than zero.\n var PositiveInteger = NullaryTypeWithUrl(\n 'sanctuary-def/PositiveInteger',\n function(x) { return Integer._test(x) && x > 0; }\n );\n\n //# PositiveNumber :: Type\n //.\n //. Type comprising every [`Number`][] value greater than zero.\n var PositiveNumber = NullaryTypeWithUrl(\n 'sanctuary-def/PositiveNumber',\n function(x) { return Number_._test(x) && x > 0; }\n );\n\n //# RegExp :: Type\n //.\n //. Type comprising every RegExp value.\n var RegExp_ = NullaryTypeWithUrl('RegExp', typeEq('RegExp'));\n\n //# RegexFlags :: Type\n //.\n //. Type comprising the canonical RegExp flags:\n //.\n //. - `''`\n //. - `'g'`\n //. - `'i'`\n //. - `'m'`\n //. - `'gi'`\n //. - `'gm'`\n //. - `'im'`\n //. - `'gim'`\n var RegexFlags = EnumTypeWithUrl(\n 'sanctuary-def/RegexFlags',\n ['', 'g', 'i', 'm', 'gi', 'gm', 'im', 'gim']\n );\n\n //# StrMap :: Type -> Type\n //.\n //. Constructor for homogeneous Object types.\n //.\n //. `{foo: 1, bar: 2, baz: 3}`, for example, is a member of `StrMap Number`;\n //. `{foo: 1, bar: 2, baz: 'XXX'}` is not.\n var StrMap = UnaryTypeWithUrl(\n 'sanctuary-def/StrMap',\n Object_._test,\n function(strMap) {\n return Z.map(function(k) { return strMap[k]; },\n Object.keys(strMap).sort());\n }\n );\n\n //# String :: Type\n //.\n //. Type comprising every primitive String value.\n var String_ = NullaryTypeWithUrl('String', typeofEq('string'));\n\n //# Undefined :: Type\n //.\n //. Type whose sole member is `undefined`.\n var Undefined = NullaryTypeWithUrl('Undefined', typeEq('Undefined'));\n\n //# Unknown :: Type\n //.\n //. Type used internally to represent missing type information. The type of\n //. `[]`, for example, is `Array ???`. This type is exported solely for use\n //. by other Sanctuary packages.\n var Unknown = new _Type(UNKNOWN, '', '', always2('???'), K(true), [], {});\n\n //# ValidDate :: Type\n //.\n //. Type comprising every [`Date`][] value except `new Date(NaN)`.\n var ValidDate = NullaryTypeWithUrl(\n 'sanctuary-def/ValidDate',\n function(x) { return Date_._test(x) && !isNaN(x.valueOf()); }\n );\n\n //# ValidNumber :: Type\n //.\n //. Type comprising every [`Number`][] value except `NaN`.\n var ValidNumber = NullaryTypeWithUrl(\n 'sanctuary-def/ValidNumber',\n function(x) { return Number_._test(x) && !isNaN(x); }\n );\n\n //# env :: Array Type\n //.\n //. An array of [types][]:\n //.\n //. - [`AnyFunction`][]\n //. - [`Arguments`][]\n //. - [`Array`][]\n //. - [`Boolean`][]\n //. - [`Date`][]\n //. - [`Error`][]\n //. - [`Null`][]\n //. - [`Number`][]\n //. - [`Object`][]\n //. - [`RegExp`][]\n //. - [`StrMap`][]\n //. - [`String`][]\n //. - [`Undefined`][]\n var env = applyParameterizedTypes([\n AnyFunction,\n Arguments,\n Array_,\n Boolean_,\n Date_,\n Error_,\n Null,\n Number_,\n Object_,\n RegExp_,\n StrMap,\n String_,\n Undefined\n ]);\n\n // Type :: Type\n var Type = NullaryType(\n 'sanctuary-def/Type',\n '',\n typeEq('sanctuary-def/Type')\n );\n\n // TypeClass :: Type\n var TypeClass = NullaryType(\n 'sanctuary-type-classes/TypeClass',\n '',\n typeEq('sanctuary-type-classes/TypeClass')\n );\n\n // Unchecked :: String -> Type\n function Unchecked(s) { return NullaryType(s, '', K(true)); }\n\n var def = _create({checkTypes: true, env: env});\n\n // arity :: (Number, Function) -> Function\n function arity(n, f) {\n return (\n n === 0 ?\n function() {\n return f.apply(this, arguments);\n } :\n n === 1 ?\n function($1) {\n return f.apply(this, arguments);\n } :\n n === 2 ?\n function($1, $2) {\n return f.apply(this, arguments);\n } :\n n === 3 ?\n function($1, $2, $3) {\n return f.apply(this, arguments);\n } :\n n === 4 ?\n function($1, $2, $3, $4) {\n return f.apply(this, arguments);\n } :\n n === 5 ?\n function($1, $2, $3, $4, $5) {\n return f.apply(this, arguments);\n } :\n n === 6 ?\n function($1, $2, $3, $4, $5, $6) {\n return f.apply(this, arguments);\n } :\n n === 7 ?\n function($1, $2, $3, $4, $5, $6, $7) {\n return f.apply(this, arguments);\n } :\n n === 8 ?\n function($1, $2, $3, $4, $5, $6, $7, $8) {\n return f.apply(this, arguments);\n } :\n // else\n function($1, $2, $3, $4, $5, $6, $7, $8, $9) {\n return f.apply(this, arguments);\n }\n );\n }\n\n // numArgs :: Number -> String\n function numArgs(n) {\n switch (n) {\n case 0: return 'zero arguments';\n case 1: return 'one argument';\n case 2: return 'two arguments';\n case 3: return 'three arguments';\n case 4: return 'four arguments';\n case 5: return 'five arguments';\n case 6: return 'six arguments';\n case 7: return 'seven arguments';\n case 8: return 'eight arguments';\n case 9: return 'nine arguments';\n default: return n + ' arguments';\n }\n }\n\n // _determineActualTypes :: ... -> Array Type\n function _determineActualTypes(\n loose, // :: Boolean\n env, // :: Array Type\n types, // :: Array Type\n seen, // :: Array Object\n values // :: Array Any\n ) {\n var recur = _determineActualTypes;\n\n function refine(types, value) {\n var seen$;\n if (typeof value === 'object' && value != null ||\n typeof value === 'function') {\n // Abort if a circular reference is encountered; add the current\n // object to the array of seen objects otherwise.\n if (seen.indexOf(value) >= 0) return [];\n seen$ = Z.concat(seen, [value]);\n } else {\n seen$ = seen;\n }\n return Z.chain(function(t) {\n return (\n t.name === 'sanctuary-def/Nullable' || t.validate(value).isLeft ?\n [] :\n t.type === UNARY ?\n Z.map(fromUnaryType(t),\n recur(loose, env, env, seen$, t.types.$1.extractor(value))) :\n t.type === BINARY ?\n xprod(\n t,\n t.types.$1.type.type === UNKNOWN ?\n recur(loose, env, env, seen$, t.types.$1.extractor(value)) :\n [t.types.$1.type],\n t.types.$2.type.type === UNKNOWN ?\n recur(loose, env, env, seen$, t.types.$2.extractor(value)) :\n [t.types.$2.type]\n ) :\n // else\n [t]\n );\n }, types);\n }\n\n return isEmpty(values) ?\n [Unknown] :\n or(Z.reduce(refine, types, values), loose ? [Inconsistent] : []);\n }\n\n // rejectInconsistent :: Array Type -> Array Type\n function rejectInconsistent(types) {\n return types.filter(function(t) {\n return t.type !== INCONSISTENT && t.type !== UNKNOWN;\n });\n }\n\n // determineActualTypesStrict ::\n // (Array Type, Array Type, Array Any) -> Array Type\n function determineActualTypesStrict(env, types, values) {\n var types$ = _determineActualTypes(false, env, types, [], values);\n return rejectInconsistent(types$);\n }\n\n // determineActualTypesLoose ::\n // (Array Type, Array Type, Array Any) -> Array Type\n function determineActualTypesLoose(env, types, values) {\n var types$ = _determineActualTypes(true, env, types, [], values);\n return rejectInconsistent(types$);\n }\n\n // TypeInfo = { name :: String\n // , constraints :: StrMap (Array TypeClass)\n // , types :: Array Type }\n //\n // TypeVarMap = StrMap { types :: Array Type\n // , valuesByPath :: StrMap (Array Any) }\n //\n // PropPath = Array (Number | String)\n\n // updateTypeVarMap :: ... -> TypeVarMap\n function updateTypeVarMap(\n env, // :: Array Type\n typeVarMap, // :: TypeVarMap\n typeVar, // :: Type\n index, // :: Integer\n propPath, // :: PropPath\n values // :: Array Any\n ) {\n var $typeVarMap = {};\n for (var typeVarName in typeVarMap) {\n var entry = typeVarMap[typeVarName];\n var $entry = {types: entry.types.slice(), valuesByPath: {}};\n for (var k in entry.valuesByPath) {\n $entry.valuesByPath[k] = entry.valuesByPath[k].slice();\n }\n $typeVarMap[typeVarName] = $entry;\n }\n if (!hasOwnProperty.call($typeVarMap, typeVar.name)) {\n $typeVarMap[typeVar.name] = {types: env.slice(), valuesByPath: {}};\n }\n\n var key = JSON.stringify(Z.concat([index], propPath));\n if (!hasOwnProperty.call($typeVarMap[typeVar.name].valuesByPath, key)) {\n $typeVarMap[typeVar.name].valuesByPath[key] = [];\n }\n\n values.forEach(function(value) {\n $typeVarMap[typeVar.name].valuesByPath[key].push(value);\n $typeVarMap[typeVar.name].types = Z.chain(\n function(t) {\n var xs;\n var invalid = !test(env, t, value);\n return (\n invalid ?\n [] :\n typeVar.keys.length > 0 ?\n [t].filter(function(t) {\n return (\n t.type !== RECORD &&\n t.keys.length >= typeVar.keys.length &&\n t.keys.slice(-typeVar.keys.length).every(function(k) {\n var xs = t.types[k].extractor(value);\n return isEmpty(xs) ||\n !isEmpty(determineActualTypesStrict(env, env, xs));\n })\n );\n }) :\n t.type === UNARY ?\n t.types.$1.type.type === UNKNOWN &&\n !isEmpty(xs = t.types.$1.extractor(value)) ?\n Z.map(fromUnaryType(t),\n determineActualTypesStrict(env, env, xs)) :\n [t] :\n t.type === BINARY ?\n xprod(t,\n t.types.$1.type.type === UNKNOWN &&\n !isEmpty(xs = t.types.$1.extractor(value)) ?\n determineActualTypesStrict(env, env, xs) :\n [t.types.$1.type],\n t.types.$2.type.type === UNKNOWN &&\n !isEmpty(xs = t.types.$2.extractor(value)) ?\n determineActualTypesStrict(env, env, xs) :\n [t.types.$2.type]) :\n // else\n [t]\n );\n },\n $typeVarMap[typeVar.name].types\n );\n });\n\n return $typeVarMap;\n }\n\n // underlineTypeVars :: (TypeInfo, StrMap (Array Any)) -> String\n function underlineTypeVars(typeInfo, valuesByPath) {\n // Note: Sorting these keys lexicographically is not \"correct\", but it\n // does the right thing for indexes less than 10.\n var paths = Z.map(JSON.parse, Object.keys(valuesByPath).sort());\n return underline(\n typeInfo,\n K(K(_)),\n function(index) {\n return function(f) {\n return function(t) {\n return function(propPath) {\n var indexedPropPath = Z.concat([index], propPath);\n return function(s) {\n if (t.type === VARIABLE) {\n var key = JSON.stringify(indexedPropPath);\n var exists = hasOwnProperty.call(valuesByPath, key);\n return (exists && !isEmpty(valuesByPath[key]) ? f : _)(s);\n } else {\n return unless(paths.some(isPrefix(indexedPropPath)), _, s);\n }\n };\n };\n };\n };\n }\n );\n }\n\n // satisfactoryTypes ::\n // ... -> Either (() -> Error) { typeVarMap :: TypeVarMap\n // , types :: Array Type }\n function satisfactoryTypes(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n typeVarMap, // :: TypeVarMap\n expType, // :: Type\n index, // :: Integer\n propPath, // :: PropPath\n values // :: Array Any\n ) {\n var recur = satisfactoryTypes;\n\n for (var idx = 0; idx < values.length; idx += 1) {\n var result = expType.validate(values[idx]);\n if (result.isLeft) {\n return Left(function() {\n return invalidValue(env,\n typeInfo,\n index,\n result.value.propPath,\n result.value.value);\n });\n }\n }\n\n switch (expType.type) {\n\n case VARIABLE:\n var typeVarName = expType.name;\n var constraints = typeInfo.constraints;\n if (hasOwnProperty.call(constraints, typeVarName)) {\n var typeClasses = constraints[typeVarName];\n for (idx = 0; idx < values.length; idx += 1) {\n for (var idx2 = 0; idx2 < typeClasses.length; idx2 += 1) {\n if (!typeClasses[idx2].test(values[idx])) {\n return Left(function() {\n return typeClassConstraintViolation(\n env,\n typeInfo,\n typeClasses[idx2],\n index,\n propPath,\n values[idx],\n typeVarMap\n );\n });\n }\n }\n }\n }\n\n var typeVarMap$ = updateTypeVarMap(env,\n typeVarMap,\n expType,\n index,\n propPath,\n values);\n\n var okTypes = typeVarMap$[typeVarName].types;\n return isEmpty(okTypes) && !isEmpty(values) ?\n Left(function() {\n return typeVarConstraintViolation(\n env,\n typeInfo,\n index,\n propPath,\n typeVarMap$[typeVarName].valuesByPath\n );\n }) :\n Z.reduce(function(e, t) {\n return isEmpty(expType.keys) || isEmpty(t.keys) ?\n e :\n Z.chain(function(r) {\n var $1 = expType.types[expType.keys[0]].type;\n var k = last(t.keys);\n var innerValues = Z.chain(t.types[k].extractor, values);\n return Z.reduce(function(e, x) {\n return Z.chain(function(r) {\n return $1.type === VARIABLE || test(env, $1, x) ?\n Right(r) :\n Left(function() {\n return invalidValue(env,\n typeInfo,\n index,\n Z.concat(propPath, [k]),\n x);\n });\n }, e);\n }, Right(r), innerValues);\n }, e);\n }, Right({typeVarMap: typeVarMap$, types: okTypes}), okTypes);\n\n case UNARY:\n return Z.map(\n function(result) {\n return {\n typeVarMap: result.typeVarMap,\n types: Z.map(fromUnaryType(expType),\n or(result.types, [expType.types.$1.type]))\n };\n },\n recur(env,\n typeInfo,\n typeVarMap,\n expType.types.$1.type,\n index,\n Z.concat(propPath, ['$1']),\n Z.chain(expType.types.$1.extractor, values))\n );\n\n case BINARY:\n return Z.chain(\n function(result) {\n var $1s = result.types;\n return Z.map(\n function(result) {\n var $2s = result.types;\n return {\n typeVarMap: result.typeVarMap,\n types: xprod(expType,\n or($1s, [expType.types.$1.type]),\n or($2s, [expType.types.$2.type]))\n };\n },\n recur(env,\n typeInfo,\n result.typeVarMap,\n expType.types.$2.type,\n index,\n Z.concat(propPath, ['$2']),\n Z.chain(expType.types.$2.extractor, values))\n );\n },\n recur(env,\n typeInfo,\n typeVarMap,\n expType.types.$1.type,\n index,\n Z.concat(propPath, ['$1']),\n Z.chain(expType.types.$1.extractor, values))\n );\n\n case RECORD:\n return Z.reduce(function(e, k) {\n return Z.chain(function(r) {\n return recur(env,\n typeInfo,\n r.typeVarMap,\n expType.types[k].type,\n index,\n Z.concat(propPath, [k]),\n Z.chain(expType.types[k].extractor, values));\n }, e);\n }, Right({typeVarMap: typeVarMap, types: [expType]}), expType.keys);\n\n default:\n return Right({typeVarMap: typeVarMap, types: [expType]});\n }\n }\n\n //# test :: Array Type -> Type -> a -> Boolean\n //.\n //. Takes an environment, a type, and any value. Returns `true` if the value\n //. is a member of the type; `false` otherwise.\n //.\n //. The environment is only significant if the type contains\n //. [type variables][].\n //.\n //. One may define a more restrictive type in terms of a more general one:\n //.\n //. ```javascript\n //. // NonNegativeInteger :: Type\n //. const NonNegativeInteger = $.NullaryType(\n //. 'my-package/NonNegativeInteger',\n //. 'http://example.com/my-package#NonNegativeInteger',\n //. x => $.test([], $.Integer, x) && x >= 0\n //. );\n //. ```\n //.\n //. Using types as predicates is useful in other contexts too. One could,\n //. for example, define a [record type][] for each endpoint of a REST API\n //. and validate the bodies of incoming POST requests against these types.\n function test(_env, t, x) {\n var env = applyParameterizedTypes(_env);\n var typeInfo = {name: 'name', constraints: {}, types: [t]};\n return satisfactoryTypes(env, typeInfo, {}, t, 0, [], [x]).isRight;\n }\n\n //. ### Type constructors\n //.\n //. sanctuary-def provides several functions for defining types.\n\n //# NullaryType :: String -> String -> (Any -> Boolean) -> Type\n //.\n //. Type constructor for types with no type variables (such as [`Number`][]).\n //.\n //. To define a nullary type `t` one must provide:\n //.\n //. - the name of `t` (exposed as `t.name`);\n //.\n //. - the documentation URL of `t` (exposed as `t.url`); and\n //.\n //. - a predicate which accepts any JavaScript value and returns `true` if\n //. (and only if) the value is a member of `t`.\n //.\n //. For example:\n //.\n //. ```javascript\n //. // Integer :: Type\n //. const Integer = $.NullaryType(\n //. 'my-package/Integer',\n //. 'http://example.com/my-package#Integer',\n //. x => typeof x === 'number' &&\n //. Math.floor(x) === x &&\n //. x >= Number.MIN_SAFE_INTEGER &&\n //. x <= Number.MAX_SAFE_INTEGER\n //. );\n //.\n //. // NonZeroInteger :: Type\n //. const NonZeroInteger = $.NullaryType(\n //. 'my-package/NonZeroInteger',\n //. 'http://example.com/my-package#NonZeroInteger',\n //. x => $.test([], Integer, x) && x !== 0\n //. );\n //.\n //. // rem :: Integer -> NonZeroInteger -> Integer\n //. const rem =\n //. def('rem', {}, [Integer, NonZeroInteger, Integer], (x, y) => x % y);\n //.\n //. rem(42, 5);\n //. // => 2\n //.\n //. rem(0.5);\n //. // ! TypeError: Invalid value\n //. //\n //. // rem :: Integer -> NonZeroInteger -> Integer\n //. // ^^^^^^^\n //. // 1\n //. //\n //. // 1) 0.5 :: Number\n //. //\n //. // The value at position 1 is not a member of ‘Integer’.\n //.\n //. rem(42, 0);\n //. // ! TypeError: Invalid value\n //. //\n //. // rem :: Integer -> NonZeroInteger -> Integer\n //. // ^^^^^^^^^^^^^^\n //. // 1\n //. //\n //. // 1) 0 :: Number\n //. //\n //. // The value at position 1 is not a member of ‘NonZeroInteger’.\n //. ```\n function NullaryType(name, url, test) {\n function format(outer, inner) {\n return outer(stripNamespace(name));\n }\n return new _Type(NULLARY, name, url, format, test, [], {});\n }\n\n var CheckedNullaryType =\n def('NullaryType',\n {},\n [String_, String_, Function_([Any, Boolean_]), Type],\n NullaryType);\n\n //# UnaryType :: String -> String -> (Any -> Boolean) -> (t a -> Array a) -> (Type -> Type)\n //.\n //. Type constructor for types with one type variable (such as [`Array`][]).\n //.\n //. To define a unary type `t a` one must provide:\n //.\n //. - the name of `t` (exposed as `t.name`);\n //.\n //. - the documentation URL of `t` (exposed as `t.url`);\n //.\n //. - a predicate which accepts any JavaScript value and returns `true`\n //. if (and only if) the value is a member of `t x` for some type `x`;\n //.\n //. - a function which takes any value of type `t a` and returns an array\n //. of the values of type `a` contained in the `t` (exposed as\n //. `t.types.$1.extractor`); and\n //.\n //. - the type of `a` (exposed as `t.types.$1.type`).\n //.\n //. For example:\n //.\n //. ```javascript\n //. const type = require('sanctuary-type-identifiers');\n //.\n //. // maybeTypeIdent :: String\n //. const maybeTypeIdent = 'my-package/Maybe';\n //.\n //. // Maybe :: Type -> Type\n //. const Maybe = $.UnaryType(\n //. maybeTypeIdent,\n //. 'http://example.com/my-package#Maybe',\n //. x => type(x) === maybeTypeIdent,\n //. maybe => maybe.isJust ? [maybe.value] : []\n //. );\n //.\n //. // MaybeTypeRep :: TypeRep Maybe\n //. const MaybeTypeRep = {'@@type': maybeTypeIdent};\n //.\n //. // Nothing :: Maybe a\n //. const Nothing = {\n //. constructor: MaybeTypeRep,\n //. isJust: false,\n //. isNothing: true,\n //. toString: () => 'Nothing',\n //. };\n //.\n //. // Just :: a -> Maybe a\n //. const Just = x => ({\n //. constructor: MaybeTypeRep,\n //. isJust: true,\n //. isNothing: false,\n //. toString: () => 'Just(' + Z.toString(x) + ')',\n //. value: x,\n //. });\n //.\n //. // fromMaybe :: a -> Maybe a -> a\n //. const fromMaybe =\n //. def('fromMaybe', {}, [a, Maybe(a), a], (x, m) => m.isJust ? m.value : x);\n //.\n //. fromMaybe(0, Just(42));\n //. // => 42\n //.\n //. fromMaybe(0, Nothing);\n //. // => 0\n //.\n //. fromMaybe(0, Just('XXX'));\n //. // ! TypeError: Type-variable constraint violation\n //. //\n //. // fromMaybe :: a -> Maybe a -> a\n //. // ^ ^\n //. // 1 2\n //. //\n //. // 1) 0 :: Number\n //. //\n //. // 2) \"XXX\" :: String\n //. //\n //. // Since there is no type of which all the above values are members, the type-variable constraint has been violated.\n //. ```\n function UnaryType(name, url, test, _1) {\n return function($1) {\n function format(outer, inner) {\n return outer('(' + stripNamespace(name) + ' ') +\n inner('$1')(String($1)) + outer(')');\n }\n var types = {$1: {extractor: _1, type: $1}};\n return new _Type(UNARY, name, url, format, test, ['$1'], types);\n };\n }\n\n var CheckedUnaryType =\n def('UnaryType',\n {},\n [String_,\n String_,\n Function_([Any, Boolean_]),\n Function_([Unchecked('t a'), Array_(Unchecked('a'))]),\n Function_([Type, Type])],\n function(name, url, test, _1) {\n return def(stripNamespace(name),\n {},\n [Type, Type],\n UnaryType(name, url, test, _1));\n });\n\n // fromUnaryType :: Type -> (Type -> Type)\n function fromUnaryType(t) {\n return UnaryType(t.name, t.url, t._test, t.types.$1.extractor);\n }\n\n //# BinaryType :: String -> String -> (Any -> Boolean) -> (t a b -> Array a) -> (t a b -> Array b) -> (Type -> Type -> Type)\n //.\n //. Type constructor for types with two type variables (such as [`Pair`][]).\n //.\n //. To define a binary type `t a b` one must provide:\n //.\n //. - the name of `t` (exposed as `t.name`);\n //.\n //. - the documentation URL of `t` (exposed as `t.url`);\n //.\n //. - a predicate which accepts any JavaScript value and returns `true`\n //. if (and only if) the value is a member of `t x y` for some types\n //. `x` and `y`;\n //.\n //. - a function which takes any value of type `t a b` and returns an array\n //. of the values of type `a` contained in the `t` (exposed as\n //. `t.types.$1.extractor`);\n //.\n //. - a function which takes any value of type `t a b` and returns an array\n //. of the values of type `b` contained in the `t` (exposed as\n //. `t.types.$2.extractor`);\n //.\n //. - the type of `a` (exposed as `t.types.$1.type`); and\n //.\n //. - the type of `b` (exposed as `t.types.$2.type`).\n //.\n //. For example:\n //.\n //. ```javascript\n //. const type = require('sanctuary-type-identifiers');\n //.\n //. // pairTypeIdent :: String\n //. const pairTypeIdent = 'my-package/Pair';\n //.\n //. // $Pair :: Type -> Type -> Type\n //. const $Pair = $.BinaryType(\n //. pairTypeIdent,\n //. 'http://example.com/my-package#Pair',\n //. x => type(x) === pairTypeIdent,\n //. pair => [pair[0]],\n //. pair => [pair[1]]\n //. );\n //.\n //. // PairTypeRep :: TypeRep Pair\n //. const PairTypeRep = {'@@type': pairTypeIdent};\n //.\n //. // Pair :: a -> b -> Pair a b\n //. const Pair = def('Pair', {}, [a, b, $Pair(a, b)], (x, y) => ({\n //. '0': x,\n //. '1': y,\n //. constructor: PairTypeRep,\n //. length: 2,\n //. toString: () => 'Pair(' + Z.toString(x) + ', ' + Z.toString(y) + ')',\n //. }));\n //.\n //. // Rank :: Type\n //. const Rank = $.NullaryType(\n //. 'my-package/Rank',\n //. 'http://example.com/my-package#Rank',\n //. x => typeof x === 'string' && /^([A23456789JQK]|10)$/.test(x)\n //. );\n //.\n //. // Suit :: Type\n //. const Suit = $.NullaryType(\n //. 'my-package/Suit',\n //. 'http://example.com/my-package#Suit',\n //. x => typeof x === 'string' && /^[\\u2660\\u2663\\u2665\\u2666]$/.test(x)\n //. );\n //.\n //. // Card :: Type\n //. const Card = $Pair(Rank, Suit);\n //.\n //. // showCard :: Card -> String\n //. const showCard =\n //. def('showCard', {}, [Card, $.String], card => card[0] + card[1]);\n //.\n //. showCard(Pair('A', '♠'));\n //. // => 'A♠'\n //.\n //. showCard(Pair('X', '♠'));\n //. // ! TypeError: Invalid value\n //. //\n //. // showCard :: Pair Rank Suit -> String\n //. // ^^^^\n //. // 1\n //. //\n //. // 1) \"X\" :: String\n //. //\n //. // The value at position 1 is not a member of ‘Rank’.\n //. ```\n function BinaryType(name, url, test, _1, _2) {\n return function($1, $2) {\n function format(outer, inner) {\n return outer('(' + stripNamespace(name) + ' ') +\n inner('$1')(String($1)) + outer(' ') +\n inner('$2')(String($2)) + outer(')');\n }\n var types = {$1: {extractor: _1, type: $1},\n $2: {extractor: _2, type: $2}};\n return new _Type(BINARY, name, url, format, test, ['$1', '$2'], types);\n };\n }\n\n var CheckedBinaryType =\n def('BinaryType',\n {},\n [String_,\n String_,\n Function_([Any, Boolean_]),\n Function_([Unchecked('t a b'), Array_(Unchecked('a'))]),\n Function_([Unchecked('t a b'), Array_(Unchecked('b'))]),\n Function_([Type, Type, Type])],\n function(name, url, test, _1, _2) {\n return def(stripNamespace(name),\n {},\n [Type, Type, Type],\n BinaryType(name, url, test, _1, _2));\n });\n\n // xprod :: (Type, Array Type, Array Type) -> Array Type\n function xprod(t, $1s, $2s) {\n var specialize = BinaryType(t.name,\n t.url,\n t._test,\n t.types.$1.extractor,\n t.types.$2.extractor);\n var $types = [];\n $1s.forEach(function($1) {\n $2s.forEach(function($2) {\n $types.push(specialize($1, $2));\n });\n });\n return $types;\n }\n\n //# EnumType :: String -> String -> Array Any -> Type\n //.\n //. Type constructor for [enumerated types][] (such as [`RegexFlags`][]).\n //.\n //. To define an enumerated type `t` one must provide:\n //.\n //. - the name of `t` (exposed as `t.name`);\n //.\n //. - the documentation URL of `t` (exposed as `t.url`); and\n //.\n //. - an array of distinct values.\n //.\n //. For example:\n //.\n //. ```javascript\n //. // Denomination :: Type\n //. const Denomination = $.EnumType(\n //. 'my-package/Denomination',\n //. 'http://example.com/my-package#Denomination',\n //. [10, 20, 50, 100, 200]\n //. );\n //. ```\n function EnumType(name, url, members) {\n return NullaryType(name, url, memberOf(members));\n }\n\n var CheckedEnumType =\n def('EnumType', {}, [String_, String_, Array_(Any), Type], EnumType);\n\n //# RecordType :: StrMap Type -> Type\n //.\n //. `RecordType` is used to construct record types. The type definition\n //. specifies the name and type of each required field.\n //.\n //. To define a record type one must provide:\n //.\n //. - an object mapping field name to type.\n //.\n //. For example:\n //.\n //. ```javascript\n //. // Point :: Type\n //. const Point = $.RecordType({x: $.FiniteNumber, y: $.FiniteNumber});\n //.\n //. // dist :: Point -> Point -> FiniteNumber\n //. const dist =\n //. def('dist', {}, [Point, Point, $.FiniteNumber],\n //. (p, q) => Math.sqrt(Math.pow(p.x - q.x, 2) +\n //. Math.pow(p.y - q.y, 2)));\n //.\n //. dist({x: 0, y: 0}, {x: 3, y: 4});\n //. // => 5\n //.\n //. dist({x: 0, y: 0}, {x: 3, y: 4, color: 'red'});\n //. // => 5\n //.\n //. dist({x: 0, y: 0}, {x: NaN, y: NaN});\n //. // ! TypeError: Invalid value\n //. //\n //. // dist :: { x :: FiniteNumber, y :: FiniteNumber } -> { x :: FiniteNumber, y :: FiniteNumber } -> FiniteNumber\n //. // ^^^^^^^^^^^^\n //. // 1\n //. //\n //. // 1) NaN :: Number\n //. //\n //. // The value at position 1 is not a member of ‘FiniteNumber’.\n //.\n //. dist(0);\n //. // ! TypeError: Invalid value\n //. //\n //. // dist :: { x :: FiniteNumber, y :: FiniteNumber } -> { x :: FiniteNumber, y :: FiniteNumber } -> FiniteNumber\n //. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n //. // 1\n //. //\n //. // 1) 0 :: Number\n //. //\n //. // The value at position 1 is not a member of ‘{ x :: FiniteNumber, y :: FiniteNumber }’.\n //. ```\n function RecordType(fields) {\n var keys = Object.keys(fields).sort();\n\n function format(outer, inner) {\n return wrap(outer('{'))(outer(' }'))(Z.map(function(k) {\n var t = fields[k];\n return outer(' ' + k + ' :: ') +\n unless(t.type === RECORD || isEmpty(t.keys),\n stripOutermostParens,\n inner(k)(String(t)));\n }, keys).join(outer(',')));\n }\n\n function test(x) {\n return x != null &&\n keys.every(function(k) { return hasOwnProperty.call(x, k); });\n }\n\n var $types = {};\n keys.forEach(function(k) {\n $types[k] = {extractor: function(x) { return [x[k]]; }, type: fields[k]};\n });\n\n return new _Type(RECORD, '', '', format, test, keys, $types);\n }\n\n var CheckedRecordType =\n def('RecordType', {}, [StrMap(Type), Type], RecordType);\n\n //# TypeVariable :: String -> Type\n //.\n //. Polymorphism is powerful. Not being able to define a function for\n //. all types would be very limiting indeed: one couldn't even define the\n //. identity function!\n //.\n //. Before defining a polymorphic function one must define one or more type\n //. variables:\n //.\n //. ```javascript\n //. const a = $.TypeVariable('a');\n //. const b = $.TypeVariable('b');\n //.\n //. // id :: a -> a\n //. const id = def('id', {}, [a, a], x => x);\n //.\n //. id(42);\n //. // => 42\n //.\n //. id(null);\n //. // => null\n //. ```\n //.\n //. The same type variable may be used in multiple positions, creating a\n //. constraint:\n //.\n //. ```javascript\n //. // cmp :: a -> a -> Number\n //. const cmp =\n //. def('cmp', {}, [a, a, $.Number], (x, y) => x < y ? -1 : x > y ? 1 : 0);\n //.\n //. cmp(42, 42);\n //. // => 0\n //.\n //. cmp('a', 'z');\n //. // => -1\n //.\n //. cmp('z', 'a');\n //. // => 1\n //.\n //. cmp(0, '1');\n //. // ! TypeError: Type-variable constraint violation\n //. //\n //. // cmp :: a -> a -> Number\n //. // ^ ^\n //. // 1 2\n //. //\n //. // 1) 0 :: Number\n //. //\n //. // 2) \"1\" :: String\n //. //\n //. // Since there is no type of which all the above values are members, the type-variable constraint has been violated.\n //. ```\n function TypeVariable(name) {\n return new _Type(VARIABLE, name, '', always2(name), K(true), [], {});\n }\n\n var CheckedTypeVariable =\n def('TypeVariable', {}, [String_, Type], TypeVariable);\n\n //# UnaryTypeVariable :: String -> (Type -> Type)\n //.\n //. Combines [`UnaryType`][] and [`TypeVariable`][].\n //.\n //. To define a unary type variable `t a` one must provide:\n //.\n //. - a name (conventionally matching `^[a-z]$`); and\n //.\n //. - the type of `a` (exposed as `t.types.$1.type`).\n //.\n //. Consider the type of a generalized `map`:\n //.\n //. ```haskell\n //. map :: Functor f => (a -> b) -> f a -> f b\n //. ```\n //.\n //. `f` is a unary type variable. With two (nullary) type variables, one\n //. unary type variable, and one [type class][] it's possible to define a\n //. fully polymorphic `map` function:\n //.\n //. ```javascript\n //. const $ = require('sanctuary-def');\n //. const Z = require('sanctuary-type-classes');\n //.\n //. const a = $.TypeVariable('a');\n //. const b = $.TypeVariable('b');\n //. const f = $.UnaryTypeVariable('f');\n //.\n //. // map :: Functor f => (a -> b) -> f a -> f b\n //. const map =\n //. def('map',\n //. {f: [Z.Functor]},\n //. [$.Function([a, b]), f(a), f(b)],\n //. Z.map);\n //. ```\n //.\n //. Whereas a regular type variable is fully resolved (`a` might become\n //. `Array (Array String)`, for example), a unary type variable defers to\n //. its type argument, which may itself be a type variable. The type argument\n //. corresponds to the type argument of a unary type or the *second* type\n //. argument of a binary type. The second type argument of `Map k v`, for\n //. example, is `v`. One could replace `Functor => f` with `Map k` or with\n //. `Map Integer`, but not with `Map`.\n //.\n //. This shallow inspection makes it possible to constrain a value's \"outer\"\n //. and \"inner\" types independently.\n function UnaryTypeVariable(name) {\n return function($1) {\n function format(outer, inner) {\n return outer('(' + name + ' ') + inner('$1')(String($1)) + outer(')');\n }\n var types = {$1: {extractor: K([]), type: $1}};\n return new _Type(VARIABLE, name, '', format, K(true), ['$1'], types);\n };\n }\n\n var CheckedUnaryTypeVariable =\n def('UnaryTypeVariable',\n {},\n [String_, Function_([Type, Type])],\n function(name) {\n return def(name, {}, [Type, Type], UnaryTypeVariable(name));\n });\n\n //# BinaryTypeVariable :: String -> (Type -> Type -> Type)\n //.\n //. Combines [`BinaryType`][] and [`TypeVariable`][].\n //.\n //. To define a binary type variable `t a b` one must provide:\n //.\n //. - a name (conventionally matching `^[a-z]$`);\n //.\n //. - the type of `a` (exposed as `t.types.$1.type`); and\n //.\n //. - the type of `b` (exposed as `t.types.$2.type`).\n //.\n //. The more detailed explanation of [`UnaryTypeVariable`][] also applies to\n //. `BinaryTypeVariable`.\n function BinaryTypeVariable(name) {\n return function($1, $2) {\n function format(outer, inner) {\n return outer('(' + name + ' ') + inner('$1')(String($1)) + outer(' ') +\n inner('$2')(String($2)) + outer(')');\n }\n var keys = ['$1', '$2'];\n var types = {$1: {extractor: K([]), type: $1},\n $2: {extractor: K([]), type: $2}};\n return new _Type(VARIABLE, name, '', format, K(true), keys, types);\n };\n }\n\n var CheckedBinaryTypeVariable =\n def('BinaryTypeVariable',\n {},\n [String_, Function_([Type, Type, Type])],\n function(name) {\n return def(name, {}, [Type, Type, Type], BinaryTypeVariable(name));\n });\n\n //. ### Type classes\n //.\n //. `concatS`, defined earlier, is a function which concatenates two strings.\n //. This is overly restrictive, since other types support concatenation\n //. (Array, for example).\n //.\n //. One could use a type variable to define a polymorphic \"concat\" function:\n //.\n //. ```javascript\n //. // _concat :: a -> a -> a\n //. const _concat =\n //. def('_concat', {}, [a, a, a], (x, y) => x.concat(y));\n //.\n //. _concat('fizz', 'buzz');\n //. // => 'fizzbuzz'\n //.\n //. _concat([1, 2], [3, 4]);\n //. // => [1, 2, 3, 4]\n //.\n //. _concat([1, 2], 'buzz');\n //. // ! TypeError: Type-variable constraint violation\n //. //\n //. // _concat :: a -> a -> a\n //. // ^ ^\n //. // 1 2\n //. //\n //. // 1) [1, 2] :: Array Number\n //. //\n //. // 2) \"buzz\" :: String\n //. //\n //. // Since there is no type of which all the above values are members, the type-variable constraint has been violated.\n //. ```\n //.\n //. The type of `_concat` is misleading: it suggests that it can operate on\n //. any two values of *any* one type. In fact there's an implicit constraint,\n //. since the type must support concatenation (in [mathematical][semigroup]\n //. terms, the type must have a [semigroup][FL:Semigroup]). The run-time type\n //. errors that result when this constraint is violated are not particularly\n //. descriptive:\n //.\n //. ```javascript\n //. _concat({}, {});\n //. // ! TypeError: undefined is not a function\n //.\n //. _concat(null, null);\n //. // ! TypeError: Cannot read property 'concat' of null\n //. ```\n //.\n //. The solution is to constrain `a` by first defining a [`TypeClass`][]\n //. value, then specifying the constraint in the definition of the \"concat\"\n //. function:\n //.\n //. ```javascript\n //. const Z = require('sanctuary-type-classes');\n //.\n //. // Semigroup :: TypeClass\n //. const Semigroup = Z.TypeClass(\n //. 'my-package/Semigroup',\n //. [],\n //. x => x != null && typeof x.concat === 'function'\n //. );\n //.\n //. // concat :: Semigroup a => a -> a -> a\n //. const concat =\n //. def('concat', {a: [Semigroup]}, [a, a, a], (x, y) => x.concat(y));\n //.\n //. concat([1, 2], [3, 4]);\n //. // => [1, 2, 3, 4]\n //.\n //. concat({}, {});\n //. // ! TypeError: Type-class constraint violation\n //. //\n //. // concat :: Semigroup a => a -> a -> a\n //. // ^^^^^^^^^^^ ^\n //. // 1\n //. //\n //. // 1) {} :: Object, StrMap ???\n //. //\n //. // ‘concat’ requires ‘a’ to satisfy the Semigroup type-class constraint; the value at position 1 does not.\n //.\n //. concat(null, null);\n //. // ! TypeError: Type-class constraint violation\n //. //\n //. // concat :: Semigroup a => a -> a -> a\n //. // ^^^^^^^^^^^ ^\n //. // 1\n //. //\n //. // 1) null :: Null\n //. //\n //. // ‘concat’ requires ‘a’ to satisfy the Semigroup type-class constraint; the value at position 1 does not.\n //. ```\n //.\n //. Multiple constraints may be placed on a type variable by including\n //. multiple `TypeClass` values in the array (e.g. `{a: [Foo, Bar, Baz]}`).\n\n // checkValue :: ... -> Undefined\n function checkValue(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n $typeVarMapBox, // :: Box TypeVarMap\n index, // :: Integer\n propPath, // :: PropPath\n t, // :: Type\n value // :: Any\n ) {\n if (t.type === VARIABLE) {\n $typeVarMapBox[0] =\n updateTypeVarMap(env, $typeVarMapBox[0], t, index, propPath, [value]);\n if (isEmpty($typeVarMapBox[0][t.name].types)) {\n throw typeVarConstraintViolation(\n env,\n typeInfo,\n index,\n propPath,\n $typeVarMapBox[0][t.name].valuesByPath\n );\n }\n } else if (!test(env, t, value)) {\n throw invalidValue(env, typeInfo, index, propPath, value);\n }\n }\n\n // wrapFunction :: ... -> Function\n function wrapFunction(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n $typeVarMapBox, // :: Box TypeVarMap\n index, // :: Integer\n f // :: Function\n ) {\n return function() {\n var args = slice.call(arguments);\n var expType = typeInfo.types[index];\n var numArgsExpected = expType.keys.length - 1;\n if (args.length !== numArgsExpected) {\n throw invalidArgumentsLength(typeInfo, index, numArgsExpected, args);\n }\n function checkValue$(propPath, t, x) {\n checkValue(env,\n typeInfo,\n $typeVarMapBox,\n index,\n propPath,\n t,\n x);\n }\n init(expType.keys).forEach(function(k, idx) {\n checkValue$([k], expType.types[k].type, args[idx]);\n });\n\n var output = f.apply(this, arguments);\n var k = last(expType.keys);\n checkValue$([k], expType.types[k].type, output);\n return output;\n };\n }\n\n // wrapFunctions :: ... -> Array Any\n function wrapFunctions(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n $typeVarMapBox, // :: Box TypeVarMap\n values // :: Array Any\n ) {\n return values.map(function(value, idx) {\n return typeInfo.types[idx].type === FUNCTION ?\n wrapFunction(env,\n typeInfo,\n $typeVarMapBox,\n idx,\n value) :\n value;\n });\n }\n\n // tooManyArguments :: (TypeInfo, Integer) -> Error\n //\n // This function is used in `curry` when a function defined via `def`\n // is applied to too many arguments.\n function tooManyArguments(typeInfo, numArgsReceived) {\n var numArgsExpected = typeInfo.types.length - 1;\n return new TypeError(trimTrailingSpaces(\n 'Function applied to too many arguments\\n\\n' +\n typeSignature(typeInfo) + '\\n\\n' +\n q(typeInfo.name) + ' expected' +\n (numArgsExpected > 0 ? ' at most ' : ' ') + numArgs(numArgsExpected) +\n ' but received ' + numArgs(numArgsReceived) + '.\\n'\n ));\n }\n\n // constraintsRepr :: ... -> String\n function constraintsRepr(\n constraints, // :: StrMap (Array TypeClass)\n outer, // :: String -> String\n inner // :: String -> TypeClass -> String -> String\n ) {\n var $reprs = [];\n Object.keys(constraints).sort().forEach(function(k) {\n var f = inner(k);\n constraints[k].forEach(function(typeClass) {\n $reprs.push(f(typeClass)(stripNamespace(typeClass.name) + ' ' + k));\n });\n });\n return when($reprs.length > 0,\n function(s) { return s + outer(' => '); },\n when($reprs.length > 1,\n wrap(outer('('))(outer(')')),\n $reprs.join(outer(', '))));\n }\n\n // label :: String -> String -> String\n function label(label) {\n return function(s) {\n var delta = s.length - label.length;\n return strRepeat(' ', Math.floor(delta / 2)) + label +\n strRepeat(' ', Math.ceil(delta / 2));\n };\n }\n\n // showType :: Type -> String\n function showType(t) {\n return unless(t.type === FUNCTION || t.type === RECORD || isEmpty(t.keys),\n stripOutermostParens,\n String(t));\n }\n\n // showTypeQuoted :: Type -> String\n function showTypeQuoted(t) {\n return q(unless(t.type === RECORD || isEmpty(t.keys),\n stripOutermostParens,\n String(t)));\n }\n\n // showValuesAndTypes :: (Array Type, Array Any, Integer) -> String\n function showValuesAndTypes(env, values, pos) {\n return String(pos) + ') ' + Z.map(function(x) {\n var types = determineActualTypesLoose(env, env, [x]);\n return Z.toString(x) + ' :: ' + Z.map(showType, types).join(', ');\n }, values).join('\\n ');\n }\n\n // typeSignature :: TypeInfo -> String\n function typeSignature(typeInfo) {\n var reprs = Z.map(showType, typeInfo.types);\n var arity = reprs.length - 1;\n return typeInfo.name + ' :: ' +\n constraintsRepr(typeInfo.constraints, id, K(K(id))) +\n when(arity === 0,\n wrap('(')(')'),\n init(reprs).join(' -> ')) +\n ' -> ' + last(reprs);\n }\n\n // _underline :: ... -> String\n function _underline(\n t, // :: Type\n propPath, // :: PropPath\n formatType3 // :: Type -> Array String -> String -> String\n ) {\n return unless(t.type === RECORD ||\n isEmpty(t.keys) ||\n t.type === FUNCTION && isEmpty(propPath) ||\n !isEmpty(propPath),\n stripOutermostParens,\n formatType3(t)(propPath)(t.format(_, function(k) {\n return K(_underline(t.types[k].type,\n Z.concat(propPath, [k]),\n formatType3));\n })));\n }\n\n // underline :: ... -> String\n function underline(\n typeInfo, // :: TypeInfo\n underlineConstraint, // :: String -> TypeClass -> String -> String\n formatType5 // :: Integer -> (String -> String) -> Type ->\n // PropPath -> String -> String\n ) {\n var st = typeInfo.types.reduce(function(st, t, index) {\n var formatType4 = formatType5(index);\n var counter = st.counter;\n function replace(s) { return label(String(counter += 1))(s); }\n return {\n carets: Z.concat(st.carets, [_underline(t, [], formatType4(r('^')))]),\n numbers: Z.concat(st.numbers,\n [_underline(t, [], formatType4(replace))]),\n counter: counter\n };\n }, {carets: [], numbers: [], counter: 0});\n\n return typeSignature(typeInfo) + '\\n' +\n _(typeInfo.name + ' :: ') +\n constraintsRepr(typeInfo.constraints, _, underlineConstraint) +\n st.carets.join(_(' -> ')) + '\\n' +\n _(typeInfo.name + ' :: ') +\n constraintsRepr(typeInfo.constraints, _, K(K(_))) +\n st.numbers.join(_(' -> ')) + '\\n';\n }\n\n // resolvePropPath :: (Type, Array String) -> Type\n function resolvePropPath(t, propPath) {\n return Z.reduce(function(t, prop) { return t.types[prop].type; },\n t,\n propPath);\n }\n\n // formatType6 ::\n // PropPath -> Integer -> (String -> String) ->\n // Type -> PropPath -> String -> String\n function formatType6(indexedPropPath) {\n return function(index_) {\n return function(f) {\n return function(t) {\n return function(propPath_) {\n var indexedPropPath_ = Z.concat([index_], propPath_);\n var p = isPrefix(indexedPropPath_)(indexedPropPath);\n var q = isPrefix(indexedPropPath)(indexedPropPath_);\n return p && q ? f : p ? id : _;\n };\n };\n };\n };\n }\n\n // typeClassConstraintViolation :: ... -> Error\n function typeClassConstraintViolation(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n typeClass, // :: TypeClass\n index, // :: Integer\n propPath, // :: PropPath\n value, // :: Any\n typeVarMap // :: TypeVarMap\n ) {\n var expType = resolvePropPath(typeInfo.types[index], propPath);\n return new TypeError(trimTrailingSpaces(\n 'Type-class constraint violation\\n\\n' +\n underline(typeInfo,\n function(tvn) {\n return function(tc) {\n return tvn === expType.name && tc.name === typeClass.name ?\n r('^') :\n _;\n };\n },\n formatType6(Z.concat([index], propPath))) +\n '\\n' +\n showValuesAndTypes(env, [value], 1) + '\\n\\n' +\n q(typeInfo.name) + ' requires ' + q(expType.name) + ' to satisfy the ' +\n stripNamespace(typeClass.name) + ' type-class constraint; ' +\n 'the value at position 1 does not.\\n'\n ));\n }\n\n // typeVarConstraintViolation :: ... -> Error\n function typeVarConstraintViolation(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n index, // :: Integer\n propPath, // :: PropPath\n valuesByPath // :: StrMap (Array Any)\n ) {\n // If we apply an ‘a -> a -> a -> a’ function to Left('x'), Right(1), and\n // Right(null) we'd like to avoid underlining the first argument position,\n // since Left('x') is compatible with the other ‘a’ values.\n var key = JSON.stringify(Z.concat([index], propPath));\n var values = valuesByPath[key];\n\n // Note: Sorting these keys lexicographically is not \"correct\", but it\n // does the right thing for indexes less than 10.\n var keys = Object.keys(valuesByPath).sort().filter(function(k) {\n var values_ = valuesByPath[k];\n return (\n // Keep X, the position at which the violation was observed.\n k === key ||\n // Keep positions whose values are incompatible with the values at X.\n isEmpty(determineActualTypesStrict(env,\n env,\n Z.concat(values, values_)))\n );\n });\n\n return new TypeError(trimTrailingSpaces(\n 'Type-variable constraint violation\\n\\n' +\n underlineTypeVars(typeInfo,\n Z.reduce(function($valuesByPath, k) {\n $valuesByPath[k] = valuesByPath[k];\n return $valuesByPath;\n }, {}, keys)) +\n Z.reduce(function(st, k) {\n var values = valuesByPath[k];\n return isEmpty(values) ? st : {\n idx: st.idx + 1,\n s: st.s + '\\n' + showValuesAndTypes(env, values, st.idx + 1) + '\\n'\n };\n }, {idx: 0, s: ''}, keys).s + '\\n' +\n 'Since there is no type of which all the above values are ' +\n 'members, the type-variable constraint has been violated.\\n'\n ));\n }\n\n // invalidValue :: ... -> Error\n function invalidValue(\n env, // :: Array Type\n typeInfo, // :: TypeInfo\n index, // :: Integer\n propPath, // :: PropPath\n value // :: Any\n ) {\n var t = resolvePropPath(typeInfo.types[index], propPath);\n return new TypeError(trimTrailingSpaces(\n 'Invalid value\\n\\n' +\n underline(typeInfo,\n K(K(_)),\n formatType6(Z.concat([index], propPath))) +\n '\\n' +\n showValuesAndTypes(env, [value], 1) + '\\n\\n' +\n 'The value at position 1 is not a member of ' + showTypeQuoted(t) + '.' +\n '\\n' +\n (t.url &&\n '\\nSee ' + t.url + ' for information about the ' + t.name + ' type.\\n')\n ));\n }\n\n // invalidArgumentsLength :: ... -> Error\n //\n // This function is used in `wrapFunction` to ensure that higher-order\n // functions defined via `def` only ever apply a function argument to\n // the correct number of arguments.\n function invalidArgumentsLength(\n typeInfo, // :: TypeInfo\n index, // :: Integer\n numArgsExpected, // :: Integer\n args // :: Array Any\n ) {\n return new TypeError(trimTrailingSpaces(\n q(typeInfo.name) + ' applied ' + showTypeQuoted(typeInfo.types[index]) +\n ' to the wrong number of arguments\\n\\n' +\n underline(\n typeInfo,\n K(K(_)),\n function(index_) {\n return function(f) {\n return function(t) {\n return function(propPath) {\n return function(s) {\n return index_ === index ?\n String(t).replace(\n /^[(](.*) -> (.*)[)]$/,\n function(s, $1, $2) {\n return _('(') + f($1) + _(' -> ' + $2 + ')');\n }\n ) :\n _(s);\n };\n };\n };\n };\n }\n ) + '\\n' +\n 'Expected ' + numArgs(numArgsExpected) +\n ' but received ' + numArgs(args.length) +\n (args.length === 0 ?\n '.\\n' :\n Z.reduce(function(s, x) { return s + ' - ' + Z.toString(x) + '\\n'; },\n ':\\n\\n',\n args))\n ));\n }\n\n // assertRight :: Either (() -> Error) a -> a !\n function assertRight(either) {\n if (either.isLeft) throw either.value();\n return either.value;\n }\n\n // curry :: ... -> Function\n function curry(\n opts, // :: Options\n typeInfo, // :: TypeInfo\n _typeVarMap, // :: TypeVarMap\n _values, // :: Array Any\n _indexes, // :: Array Integer\n impl // :: Function\n ) {\n var n = typeInfo.types.length - 1;\n var curried = arity(_indexes.length, function() {\n if (opts.checkTypes) {\n var delta = _indexes.length - arguments.length;\n if (delta < 0) throw tooManyArguments(typeInfo, n - delta);\n }\n var typeVarMap = _typeVarMap;\n var values = _values.slice();\n var indexes = [];\n for (var idx = 0; idx < _indexes.length; idx += 1) {\n var index = _indexes[idx];\n\n if (idx < arguments.length &&\n !(typeof arguments[idx] === 'object' &&\n arguments[idx] != null &&\n arguments[idx]['@@functional/placeholder'] === true)) {\n\n var value = arguments[idx];\n if (opts.checkTypes) {\n var result = satisfactoryTypes(opts.env,\n typeInfo,\n typeVarMap,\n typeInfo.types[index],\n index,\n [],\n [value]);\n typeVarMap = assertRight(result).typeVarMap;\n }\n values[index] = value;\n } else {\n indexes.push(index);\n }\n }\n if (isEmpty(indexes)) {\n if (opts.checkTypes) {\n var returnValue = impl.apply(this,\n wrapFunctions(opts.env,\n typeInfo,\n [typeVarMap],\n values));\n assertRight(satisfactoryTypes(opts.env,\n typeInfo,\n typeVarMap,\n typeInfo.types[n],\n n,\n [],\n [returnValue]));\n return returnValue;\n } else {\n return impl.apply(this, values);\n }\n } else {\n return curry(opts, typeInfo, typeVarMap, values, indexes, impl);\n }\n });\n curried.inspect = curried.toString = always(typeSignature(typeInfo));\n return curried;\n }\n\n function _create(opts) {\n function def(name, constraints, expTypes, impl) {\n var values = new Array(expTypes.length - 1);\n if (values.length > 9) {\n throw new RangeError(q(def.name) + ' cannot define a function ' +\n 'with arity greater than nine');\n }\n return curry({checkTypes: opts.checkTypes,\n env: applyParameterizedTypes(opts.env)},\n {name: name, constraints: constraints, types: expTypes},\n {},\n values,\n range(0, values.length),\n impl);\n }\n return def(def.name,\n {},\n [String_,\n StrMap(Array_(TypeClass)),\n Array_(Type),\n AnyFunction,\n AnyFunction],\n def);\n }\n\n var create =\n def('create',\n {},\n [RecordType({checkTypes: Boolean_, env: Array_(Any)}),\n Function_([String_,\n StrMap(Array_(TypeClass)),\n Array_(Type),\n AnyFunction,\n AnyFunction])],\n _create);\n\n // fromUncheckedUnaryType :: (Type -> Type) -> (Type -> Type)\n function fromUncheckedUnaryType(typeConstructor) {\n var t = typeConstructor(Unknown);\n var _1 = t.types.$1.extractor;\n return CheckedUnaryType(t.name, t.url, t._test, _1);\n }\n\n // fromUncheckedBinaryType :: ((Type, Type) -> Type) ->\n // (Type -> Type -> Type)\n function fromUncheckedBinaryType(typeConstructor) {\n var t = typeConstructor(Unknown, Unknown);\n var _1 = t.types.$1.extractor;\n var _2 = t.types.$2.extractor;\n return CheckedBinaryType(t.name, t.url, t._test, _1, _2);\n }\n\n return {\n __: __,\n Any: Any,\n AnyFunction: AnyFunction,\n Arguments: Arguments,\n Array: fromUncheckedUnaryType(Array_),\n Boolean: Boolean_,\n Date: Date_,\n Error: Error_,\n FiniteNumber: FiniteNumber,\n Function: def('Function', {}, [Array_(Type), Type], Function_),\n GlobalRegExp: GlobalRegExp,\n Integer: Integer,\n NegativeFiniteNumber: NegativeFiniteNumber,\n NegativeInteger: NegativeInteger,\n NegativeNumber: NegativeNumber,\n NonGlobalRegExp: NonGlobalRegExp,\n NonZeroFiniteNumber: NonZeroFiniteNumber,\n NonZeroInteger: NonZeroInteger,\n NonZeroValidNumber: NonZeroValidNumber,\n Null: Null,\n Nullable: fromUncheckedUnaryType(Nullable),\n Number: Number_,\n Object: Object_,\n Pair: fromUncheckedBinaryType(Pair),\n PositiveFiniteNumber: PositiveFiniteNumber,\n PositiveInteger: PositiveInteger,\n PositiveNumber: PositiveNumber,\n RegExp: RegExp_,\n RegexFlags: RegexFlags,\n StrMap: fromUncheckedUnaryType(StrMap),\n String: String_,\n Undefined: Undefined,\n Unknown: Unknown,\n ValidDate: ValidDate,\n ValidNumber: ValidNumber,\n env: env,\n create: create,\n test: def('test', {}, [Array_(Type), Type, Any, Boolean_], test),\n NullaryType: CheckedNullaryType,\n UnaryType: CheckedUnaryType,\n BinaryType: CheckedBinaryType,\n EnumType: CheckedEnumType,\n RecordType: CheckedRecordType,\n TypeVariable: CheckedTypeVariable,\n UnaryTypeVariable: CheckedUnaryTypeVariable,\n BinaryTypeVariable: CheckedBinaryTypeVariable\n };\n\n}));\n\n//. [FL:Semigroup]: https://github.com/fantasyland/fantasy-land#semigroup\n//. [`AnyFunction`]: #AnyFunction\n//. [`Arguments`]: #Arguments\n//. [`Array`]: #Array\n//. [`BinaryType`]: #BinaryType\n//. [`Boolean`]: #Boolean\n//. [`Date`]: #Date\n//. [`Error`]: #Error\n//. [`FiniteNumber`]: #FiniteNumber\n//. [`GlobalRegExp`]: #GlobalRegExp\n//. [`Integer`]: #Integer\n//. [`NonGlobalRegExp`]: #NonGlobalRegExp\n//. [`Null`]: #Null\n//. [`Number`]: #Number\n//. [`Object`]: #Object\n//. [`Object.create`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n//. [`Pair`]: #Pair\n//. [`RegExp`]: #RegExp\n//. [`RegexFlags`]: #RegexFlags\n//. [`StrMap`]: #StrMap\n//. [`String`]: #String\n//. [`SyntaxError`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n//. [`TypeClass`]: https://github.com/sanctuary-js/sanctuary-type-classes#TypeClass\n//. [`TypeError`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n//. [`TypeVariable`]: #TypeVariable\n//. [`UnaryType`]: #UnaryType\n//. [`UnaryTypeVariable`]: #UnaryTypeVariable\n//. [`Undefined`]: #Undefined\n//. [`ValidNumber`]: #ValidNumber\n//. [`env`]: #env\n//. [arguments]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n//. [enumerated types]: https://en.wikipedia.org/wiki/Enumerated_type\n//. [max]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n//. [min]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n//. [record type]: #RecordType\n//. [semigroup]: https://en.wikipedia.org/wiki/Semigroup\n//. [type class]: #type-classes\n//. [type variables]: #TypeVariable\n//. [types]: #types\n","module.exports = function _isPlaceholder(a) {\n return a != null &&\n typeof a === 'object' &&\n a['@@functional/placeholder'] === true;\n};\n","var _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n};\n","var _curry1 = require('./_curry1');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2\n : _curry1(function(_b) { return fn(a, _b); });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2\n : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b); })\n : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b); })\n : fn(a, b);\n }\n };\n};\n","module.exports = function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n","var _curry2 = require('./internal/_curry2');\n\n\n/**\n * Returns true if its arguments are identical, false otherwise. Values are\n * identical if they reference the same memory. `NaN` is identical to `NaN`;\n * `0` and `-0` are not identical.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * var o = {};\n * R.identical(o, o); //=> true\n * R.identical(1, 1); //=> true\n * R.identical(1, '1'); //=> false\n * R.identical([], []); //=> false\n * R.identical(0, -0); //=> false\n * R.identical(NaN, NaN); //=> true\n */\nmodule.exports = _curry2(function identical(a, b) {\n // SameValue algorithm\n if (a === b) { // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return a !== 0 || 1 / a === 1 / b;\n } else {\n // Step 6.a: NaN == NaN\n return a !== a && b !== b;\n }\n});\n","var _has = require('./_has');\n\n\nmodule.exports = (function() {\n var toString = Object.prototype.toString;\n return toString.call(arguments) === '[object Arguments]' ?\n function _isArguments(x) { return toString.call(x) === '[object Arguments]'; } :\n function _isArguments(x) { return _has('callee', x); };\n}());\n","var _curry1 = require('./internal/_curry1');\nvar _has = require('./internal/_has');\nvar _isArguments = require('./internal/_isArguments');\n\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nmodule.exports = (function() {\n // cover IE < 9 keys issues\n var hasEnumBug = !({toString: null}).propertyIsEnumerable('toString');\n var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n // Safari bug\n var hasArgsEnumBug = (function() {\n 'use strict';\n return arguments.propertyIsEnumerable('length');\n }());\n\n var contains = function contains(list, item) {\n var idx = 0;\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n idx += 1;\n }\n return false;\n };\n\n return typeof Object.keys === 'function' && !hasArgsEnumBug ?\n _curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n }) :\n _curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n var prop, nIdx;\n var ks = [];\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n nIdx -= 1;\n }\n }\n return ks;\n });\n}());\n","var _curry1 = require('./internal/_curry1');\n\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n */\nmodule.exports = _curry1(function type(val) {\n return val === null ? 'Null' :\n val === undefined ? 'Undefined' :\n Object.prototype.toString.call(val).slice(8, -1);\n});\n","var _arrayFromIterator = require('./_arrayFromIterator');\nvar _functionName = require('./_functionName');\nvar _has = require('./_has');\nvar identical = require('../identical');\nvar keys = require('../keys');\nvar type = require('../type');\n\n\nmodule.exports = function _equals(a, b, stackA, stackB) {\n if (identical(a, b)) {\n return true;\n }\n\n if (type(a) !== type(b)) {\n return false;\n }\n\n if (a == null || b == null) {\n return false;\n }\n\n if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n return typeof a.equals === 'function' && a.equals(b) &&\n typeof b.equals === 'function' && b.equals(a);\n }\n\n switch (type(a)) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n if (typeof a.constructor === 'function' &&\n _functionName(a.constructor) === 'Promise') {\n return a === b;\n }\n break;\n case 'Boolean':\n case 'Number':\n case 'String':\n if (!(typeof a === typeof b && identical(a.valueOf(), b.valueOf()))) {\n return false;\n }\n break;\n case 'Date':\n if (!identical(a.valueOf(), b.valueOf())) {\n return false;\n }\n break;\n case 'Error':\n return a.name === b.name && a.message === b.message;\n case 'RegExp':\n if (!(a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.sticky === b.sticky &&\n a.unicode === b.unicode)) {\n return false;\n }\n break;\n case 'Map':\n case 'Set':\n if (!_equals(_arrayFromIterator(a.entries()), _arrayFromIterator(b.entries()), stackA, stackB)) {\n return false;\n }\n break;\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n break;\n case 'ArrayBuffer':\n break;\n default:\n // Values of other types are only equal if identical.\n return false;\n }\n\n var keysA = keys(a);\n if (keysA.length !== keys(b).length) {\n return false;\n }\n\n var idx = stackA.length - 1;\n while (idx >= 0) {\n if (stackA[idx] === a) {\n return stackB[idx] === b;\n }\n idx -= 1;\n }\n\n stackA.push(a);\n stackB.push(b);\n idx = keysA.length - 1;\n while (idx >= 0) {\n var key = keysA[idx];\n if (!(_has(key, b) && _equals(b[key], a[key], stackA, stackB))) {\n return false;\n }\n idx -= 1;\n }\n stackA.pop();\n stackB.pop();\n return true;\n};\n","module.exports = function _arrayFromIterator(iter) {\n var list = [];\n var next;\n while (!(next = iter.next()).done) {\n list.push(next.value);\n }\n return list;\n};\n","module.exports = function _functionName(f) {\n // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n var match = String(f).match(/^function (\\w*)/);\n return match == null ? '' : match[1];\n};\n","var _curry2 = require('./internal/_curry2');\nvar _equals = require('./internal/_equals');\n\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * R.equals(1, 1); //=> true\n * R.equals(1, '1'); //=> false\n * R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n * var a = {}; a.v = a;\n * var b = {}; b.v = b;\n * R.equals(a, b); //=> true\n */\nmodule.exports = _curry2(function equals(a, b) {\n return _equals(a, b, [], []);\n});\n","var equals = require('../equals');\n\n\nmodule.exports = function _indexOf(list, a, idx) {\n var inf, item;\n // Array.prototype.indexOf doesn't exist below IE9\n if (typeof list.indexOf === 'function') {\n switch (typeof a) {\n case 'number':\n if (a === 0) {\n // manually crawl the list to distinguish between +0 and -0\n inf = 1 / a;\n while (idx < list.length) {\n item = list[idx];\n if (item === 0 && 1 / item === inf) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n } else if (a !== a) {\n // NaN\n while (idx < list.length) {\n item = list[idx];\n if (typeof item === 'number' && item !== item) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n }\n // non-zero numbers can utilise Set\n return list.indexOf(a, idx);\n\n // all these types can utilise Set\n case 'string':\n case 'boolean':\n case 'function':\n case 'undefined':\n return list.indexOf(a, idx);\n\n case 'object':\n if (a === null) {\n // null can utilise Set\n return list.indexOf(a, idx);\n }\n }\n }\n // anything else not covered above, defer to R.equals\n while (idx < list.length) {\n if (equals(list[idx], a)) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n};\n","var _indexOf = require('./_indexOf');\n\n\nmodule.exports = function _contains(a, list) {\n return _indexOf(list, a, 0) >= 0;\n};\n","module.exports = function _map(fn, functor) {\n var idx = 0;\n var len = functor.length;\n var result = Array(len);\n while (idx < len) {\n result[idx] = fn(functor[idx]);\n idx += 1;\n }\n return result;\n};\n","/**\n * Polyfill from .\n */\nmodule.exports = (function() {\n var pad = function pad(n) { return (n < 10 ? '0' : '') + n; };\n\n return typeof Date.prototype.toISOString === 'function' ?\n function _toISOString(d) {\n return d.toISOString();\n } :\n function _toISOString(d) {\n return (\n d.getUTCFullYear() + '-' +\n pad(d.getUTCMonth() + 1) + '-' +\n pad(d.getUTCDate()) + 'T' +\n pad(d.getUTCHours()) + ':' +\n pad(d.getUTCMinutes()) + ':' +\n pad(d.getUTCSeconds()) + '.' +\n (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z'\n );\n };\n}());\n","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nmodule.exports = Array.isArray || function _isArray(val) {\n return (val != null &&\n val.length >= 0 &&\n Object.prototype.toString.call(val) === '[object Array]');\n};\n","var _isArray = require('./_isArray');\nvar _isTransformer = require('./_isTransformer');\nvar _slice = require('./_slice');\n\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with [methodname], it will execute that\n * function (functor case). Otherwise, if it is a transformer, uses transducer\n * [xf] to return a new transformer (transducer case). Otherwise, it will\n * default to executing [fn].\n *\n * @private\n * @param {String} methodname property to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nmodule.exports = function _dispatchable(methodname, xf, fn) {\n return function() {\n var length = arguments.length;\n if (length === 0) {\n return fn();\n }\n var obj = arguments[length - 1];\n if (!_isArray(obj)) {\n var args = _slice(arguments, 0, length - 1);\n if (typeof obj[methodname] === 'function') {\n return obj[methodname].apply(obj, args);\n }\n if (_isTransformer(obj)) {\n var transducer = xf.apply(null, args);\n return transducer(obj);\n }\n }\n return fn.apply(this, arguments);\n };\n};\n","module.exports = function _isTransformer(obj) {\n return typeof obj['@@transducer/step'] === 'function';\n};\n","/**\n * An optimized, private array `slice` implementation.\n *\n * @private\n * @param {Arguments|Array} args The array or arguments object to consider.\n * @param {Number} [from=0] The array index to slice from, inclusive.\n * @param {Number} [to=args.length] The array index to slice to, exclusive.\n * @return {Array} A new, sliced array.\n * @example\n *\n * _slice([1, 2, 3, 4, 5], 1, 3); //=> [2, 3]\n *\n * var firstThreeArgs = function(a, b, c, d) {\n * return _slice(arguments, 0, 3);\n * };\n * firstThreeArgs(1, 2, 3, 4); //=> [1, 2, 3]\n */\nmodule.exports = function _slice(args, from, to) {\n switch (arguments.length) {\n case 1: return _slice(args, 0, args.length);\n case 2: return _slice(args, from, args.length);\n default:\n var list = [];\n var idx = 0;\n var len = Math.max(0, Math.min(args.length, to) - from);\n while (idx < len) {\n list[idx] = args[from + idx];\n idx += 1;\n }\n return list;\n }\n};\n","module.exports = (function() {\n function XWrap(fn) {\n this.f = fn;\n }\n XWrap.prototype['@@transducer/init'] = function() {\n throw new Error('init not implemented on XWrap');\n };\n XWrap.prototype['@@transducer/result'] = function(acc) { return acc; };\n XWrap.prototype['@@transducer/step'] = function(acc, x) {\n return this.f(acc, x);\n };\n\n return function _xwrap(fn) { return new XWrap(fn); };\n}());\n","module.exports = function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0: return function() { return fn.apply(this, arguments); };\n case 1: return function(a0) { return fn.apply(this, arguments); };\n case 2: return function(a0, a1) { return fn.apply(this, arguments); };\n case 3: return function(a0, a1, a2) { return fn.apply(this, arguments); };\n case 4: return function(a0, a1, a2, a3) { return fn.apply(this, arguments); };\n case 5: return function(a0, a1, a2, a3, a4) { return fn.apply(this, arguments); };\n case 6: return function(a0, a1, a2, a3, a4, a5) { return fn.apply(this, arguments); };\n case 7: return function(a0, a1, a2, a3, a4, a5, a6) { return fn.apply(this, arguments); };\n case 8: return function(a0, a1, a2, a3, a4, a5, a6, a7) { return fn.apply(this, arguments); };\n case 9: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8) { return fn.apply(this, arguments); };\n case 10: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { return fn.apply(this, arguments); };\n default: throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n};\n","var _arity = require('./internal/_arity');\nvar _curry2 = require('./internal/_curry2');\n\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n * var log = R.bind(console.log, console);\n * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n * // logs {a: 2}\n */\nmodule.exports = _curry2(function bind(fn, thisObj) {\n return _arity(fn.length, function() {\n return fn.apply(thisObj, arguments);\n });\n});\n","var _curry1 = require('./internal/_curry1');\nvar _isArray = require('./internal/_isArray');\nvar _isString = require('./internal/_isString');\n\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n * R.isArrayLike([]); //=> true\n * R.isArrayLike(true); //=> false\n * R.isArrayLike({}); //=> false\n * R.isArrayLike({length: 10}); //=> false\n * R.isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n */\nmodule.exports = _curry1(function isArrayLike(x) {\n if (_isArray(x)) { return true; }\n if (!x) { return false; }\n if (typeof x !== 'object') { return false; }\n if (_isString(x)) { return false; }\n if (x.nodeType === 1) { return !!x.length; }\n if (x.length === 0) { return true; }\n if (x.length > 0) {\n return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n }\n return false;\n});\n","module.exports = function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n};\n","var _xwrap = require('./_xwrap');\nvar bind = require('../bind');\nvar isArrayLike = require('../isArrayLike');\n\n\nmodule.exports = (function() {\n function _arrayReduce(xf, acc, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n acc = xf['@@transducer/step'](acc, list[idx]);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n idx += 1;\n }\n return xf['@@transducer/result'](acc);\n }\n\n function _iterableReduce(xf, acc, iter) {\n var step = iter.next();\n while (!step.done) {\n acc = xf['@@transducer/step'](acc, step.value);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n step = iter.next();\n }\n return xf['@@transducer/result'](acc);\n }\n\n function _methodReduce(xf, acc, obj) {\n return xf['@@transducer/result'](obj.reduce(bind(xf['@@transducer/step'], xf), acc));\n }\n\n var symIterator = (typeof Symbol !== 'undefined') ? Symbol.iterator : '@@iterator';\n return function _reduce(fn, acc, list) {\n if (typeof fn === 'function') {\n fn = _xwrap(fn);\n }\n if (isArrayLike(list)) {\n return _arrayReduce(fn, acc, list);\n }\n if (typeof list.reduce === 'function') {\n return _methodReduce(fn, acc, list);\n }\n if (list[symIterator] != null) {\n return _iterableReduce(fn, acc, list[symIterator]());\n }\n if (typeof list.next === 'function') {\n return _iterableReduce(fn, acc, list);\n }\n throw new TypeError('reduce: list must be array or iterable');\n };\n}());\n","module.exports = {\n init: function() {\n return this.xf['@@transducer/init']();\n },\n result: function(result) {\n return this.xf['@@transducer/result'](result);\n }\n};\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n function XFilter(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XFilter.prototype['@@transducer/init'] = _xfBase.init;\n XFilter.prototype['@@transducer/result'] = _xfBase.result;\n XFilter.prototype['@@transducer/step'] = function(result, input) {\n return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n };\n\n return _curry2(function _xfilter(f, xf) { return new XFilter(f, xf); });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _filter = require('./internal/_filter');\nvar _isObject = require('./internal/_isObject');\nvar _reduce = require('./internal/_reduce');\nvar _xfilter = require('./internal/_xfilter');\nvar keys = require('./keys');\n\n\n/**\n * Takes a predicate and a \"filterable\", and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n * var isEven = n => n % 2 === 0;\n *\n * R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nmodule.exports = _curry2(_dispatchable('filter', _xfilter, function(pred, filterable) {\n return (\n _isObject(filterable) ?\n _reduce(function(acc, key) {\n if (pred(filterable[key])) {\n acc[key] = filterable[key];\n }\n return acc;\n }, {}, keys(filterable)) :\n // else\n _filter(pred, filterable)\n );\n}));\n","module.exports = function _filter(fn, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n\n while (idx < len) {\n if (fn(list[idx])) {\n result[result.length] = list[idx];\n }\n idx += 1;\n }\n return result;\n};\n","module.exports = function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n};\n","var _complement = require('./internal/_complement');\nvar _curry2 = require('./internal/_curry2');\nvar filter = require('./filter');\n\n\n/**\n * The complement of `filter`.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.filter, R.transduce, R.addIndex\n * @example\n *\n * var isOdd = (n) => n % 2 === 1;\n *\n * R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nmodule.exports = _curry2(function reject(pred, filterable) {\n return filter(_complement(pred), filterable);\n});\n","module.exports = function _complement(f) {\n return function() {\n return !f.apply(this, arguments);\n };\n};\n","var _contains = require('./_contains');\nvar _map = require('./_map');\nvar _quote = require('./_quote');\nvar _toISOString = require('./_toISOString');\nvar keys = require('../keys');\nvar reject = require('../reject');\n\n\nmodule.exports = function _toString(x, seen) {\n var recur = function recur(y) {\n var xs = seen.concat([x]);\n return _contains(y, xs) ? '' : _toString(y, xs);\n };\n\n // mapPairs :: (Object, [String]) -> [String]\n var mapPairs = function(obj, keys) {\n return _map(function(k) { return _quote(k) + ': ' + recur(obj[k]); }, keys.slice().sort());\n };\n\n switch (Object.prototype.toString.call(x)) {\n case '[object Arguments]':\n return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';\n case '[object Array]':\n return '[' + _map(recur, x).concat(mapPairs(x, reject(function(k) { return /^\\d+$/.test(k); }, keys(x)))).join(', ') + ']';\n case '[object Boolean]':\n return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();\n case '[object Date]':\n return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';\n case '[object Null]':\n return 'null';\n case '[object Number]':\n return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);\n case '[object String]':\n return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);\n case '[object Undefined]':\n return 'undefined';\n default:\n if (typeof x.toString === 'function') {\n var repr = x.toString();\n if (repr !== '[object Object]') {\n return repr;\n }\n }\n return '{' + mapPairs(x, keys(x)).join(', ') + '}';\n }\n};\n","module.exports = function _quote(s) {\n var escaped = s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/[\\b]/g, '\\\\b') // \\b matches word boundary; [\\b] matches backspace\n .replace(/\\f/g, '\\\\f')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\v/g, '\\\\v')\n .replace(/\\0/g, '\\\\0');\n\n return '\"' + escaped.replace(/\"/g, '\\\\\"') + '\"';\n};\n","var _curry1 = require('./internal/_curry1');\nvar _toString = require('./internal/_toString');\n\n\n/**\n * Returns the string representation of the given value. `eval`'ing the output\n * should result in a value equivalent to the input value. Many of the built-in\n * `toString` methods do not satisfy this requirement.\n *\n * If the given value is an `[object Object]` with a `toString` method other\n * than `Object.prototype.toString`, this method is invoked with no arguments\n * to produce the return value. This means user-defined constructor functions\n * can provide a suitable `toString` method. For example:\n *\n * function Point(x, y) {\n * this.x = x;\n * this.y = y;\n * }\n *\n * Point.prototype.toString = function() {\n * return 'new Point(' + this.x + ', ' + this.y + ')';\n * };\n *\n * R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category String\n * @sig * -> String\n * @param {*} val\n * @return {String}\n * @example\n *\n * R.toString(42); //=> '42'\n * R.toString('abc'); //=> '\"abc\"'\n * R.toString([1, 2, 3]); //=> '[1, 2, 3]'\n * R.toString({foo: 1, bar: 2, baz: 3}); //=> '{\"bar\": 2, \"baz\": 3, \"foo\": 1}'\n * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date(\"2001-02-03T04:05:06.000Z\")'\n */\nmodule.exports = _curry1(function toString(val) { return _toString(val, []); });\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n function XMap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XMap.prototype['@@transducer/init'] = _xfBase.init;\n XMap.prototype['@@transducer/result'] = _xfBase.result;\n XMap.prototype['@@transducer/step'] = function(result, input) {\n return this.xf['@@transducer/step'](result, this.f(input));\n };\n\n return _curry2(function _xmap(f, xf) { return new XMap(f, xf); });\n}());\n","var _arity = require('./_arity');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curryN(length, received, fn) {\n return function() {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n if (combinedIdx < received.length &&\n (!_isPlaceholder(received[combinedIdx]) ||\n argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n combined[combinedIdx] = result;\n if (!_isPlaceholder(result)) {\n left -= 1;\n }\n combinedIdx += 1;\n }\n return left <= 0 ? fn.apply(this, combined)\n : _arity(left, _curryN(length, combined, fn));\n };\n};\n","var _arity = require('./internal/_arity');\nvar _curry1 = require('./internal/_curry1');\nvar _curry2 = require('./internal/_curry2');\nvar _curryN = require('./internal/_curryN');\n\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value `R.__` may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is `R.__`, the\n * following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * var sumArgs = (...args) => R.sum(args);\n *\n * var curriedAddFourNumbers = R.curryN(4, sumArgs);\n * var f = curriedAddFourNumbers(1, 2);\n * var g = f(3);\n * g(4); //=> 10\n */\nmodule.exports = _curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n return _arity(length, _curryN(length, [], fn));\n});\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _map = require('./internal/_map');\nvar _reduce = require('./internal/_reduce');\nvar _xmap = require('./internal/_xmap');\nvar curryN = require('./curryN');\nvar keys = require('./keys');\n\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex\n * @example\n *\n * var double = x => x * 2;\n *\n * R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n */\nmodule.exports = _curry2(_dispatchable('map', _xmap, function map(fn, functor) {\n switch (Object.prototype.toString.call(functor)) {\n case '[object Function]':\n return curryN(functor.length, function() {\n return fn.call(this, functor.apply(this, arguments));\n });\n case '[object Object]':\n return _reduce(function(acc, key) {\n acc[key] = fn(functor[key]);\n return acc;\n }, {}, keys(functor));\n default:\n return _map(fn, functor);\n }\n}));\n","/* global Symbol,module */\r\nconst R = {\r\n toString: require('ramda/src/toString')\r\n ,map: require('ramda/src/map')\r\n ,curryN: require('ramda/src/curryN')\r\n}\r\n\r\nconst _ = {\r\n unapply: f => (...xs) => f(xs)\r\n ,mergeAll: xs =>\r\n Object.assign({}, ...xs)\r\n ,values: x =>\r\n Object.keys(x).map( k => x[k] )\r\n ,range: (n) =>\r\n [...Array(n).keys()]\r\n ,zipObj: a => b =>\r\n a.reduce(function(p, k, i){\r\n return Object.assign(p , { [k]: b[i] })\r\n }, {})\r\n}\r\n\r\n\r\nconst B = (f,g) => (...args) =>\r\n f(g(...args))\r\n\r\nfunction Setup(T, { checkTypes , _env=[] }){\r\n const env = T.env.slice()\r\n\r\n function AutoPredicate(f) {\r\n return T.NullaryType('['+f.toString()+']','', f)\r\n }\r\n\r\n function mapConstrToFn(constr) {\r\n return (\r\n constr === String\r\n ? T.String\r\n : constr === Number\r\n ? T.Number\r\n : constr === Boolean\r\n ? T.Boolean\r\n : constr === Object\r\n ? T.Object\r\n : constr === Array\r\n ? T.Array(T.Any)\r\n : constr === Function\r\n ? T.AnyFunction\r\n : constr\r\n )\r\n };\r\n\r\n function BuiltInType(t){\r\n\r\n const mapped = mapConstrToFn(t)\r\n\r\n if(mapped != t){\r\n return mapped\r\n } else if( typeof t == 'function') {\r\n return AutoPredicate(t)\r\n } else {\r\n return t\r\n }\r\n }\r\n\r\n const a = T.Any\r\n\r\n function createIterator() {\r\n /* eslint-disable immutable/no-this */\r\n return {\r\n idx: 0\r\n\r\n ,val: this\r\n\r\n ,next () {\r\n const keys = this.val._keys;\r\n\r\n return this.idx === keys.length\r\n ? {done: true}\r\n : {value: this.val[keys[this.idx++]]};\r\n }\r\n }\r\n /* eslint-enable immutable/no-this */\r\n }\r\n\r\n const staticCaseT = T => function staticCase(options, b, ...args){\r\n const f = options[b._name]\r\n\r\n if ( !T._test(b) ) {\r\n throw new TypeError(\r\n 'Value '+R.toString(b)+' is not of type: '\r\n + T.name\r\n )\r\n } else if( f ){\r\n const values = b._keys.map( k => b[k] )\r\n return f(...[...values,...args])\r\n } else if (options._) {\r\n return options._(b)\r\n } else {\r\n // caseOn is untyped\r\n // so this is possible\r\n throw new TypeError(\r\n 'Non exhaustive case statement Found: '\r\n + Object.keys(options)\r\n +' Needed: '+b._name\r\n )\r\n }\r\n }\r\n\r\n function CaseRecordType(keys, enums){\r\n return T.RecordType(\r\n _.mergeAll(\r\n keys.map(\r\n k => ({\r\n [k]: T.Function(_.values(enums[k]).concat(a))\r\n })\r\n )\r\n )\r\n )\r\n }\r\n\r\n function ObjConstructorOf(prototype){\r\n\r\n return function objConstructorOf(keys, name){\r\n return r =>\r\n Object.assign(\r\n Object.create(prototype)\r\n , r\r\n ,{ _keys: keys\r\n , _name: name\r\n , [Symbol.iterator]: createIterator\r\n }\r\n )\r\n }\r\n }\r\n\r\n const processRawCases =\r\n (Type, rawCases) =>\r\n R.map(\r\n R.map(\r\n B(\r\n BuiltInType\r\n , v => typeof v == 'undefined'\r\n ? Type\r\n : v\r\n )\r\n )\r\n , rawCases\r\n )\r\n\r\n function CreateCaseConstructor(def, prototype, typeName, cases){\r\n\r\n const objConstructorOf =\r\n ObjConstructorOf(prototype)\r\n\r\n return function createCaseConstructor(k){\r\n\r\n const type = cases[k]\r\n\r\n const isArray =\r\n Array.isArray(type)\r\n\r\n const [keys, types] =\r\n isArray\r\n ? [ _.range(type.length), type ]\r\n : [ Object.keys(type), _.values(type) ]\r\n\r\n const recordType =\r\n isArray\r\n ? T.RecordType(\r\n _.zipObj(keys)(types)\r\n )\r\n : T.RecordType(type)\r\n\r\n const r = {\r\n [k+'Of']:\r\n def(\r\n typeName+'.'+k+'Of'\r\n ,{}\r\n ,[recordType, recordType]\r\n ,objConstructorOf(keys, k)\r\n )\r\n ,[k]:\r\n def(\r\n typeName+'.'+k\r\n ,{}\r\n ,types.concat(recordType)\r\n ,B(\r\n objConstructorOf(keys, k)\r\n ,_.unapply(_.zipObj(keys))\r\n )\r\n )\r\n }\r\n\r\n return r\r\n }\r\n }\r\n\r\n env.push(..._env)\r\n\r\n const def =\r\n T.create({\r\n checkTypes: checkTypes\r\n ,env\r\n })\r\n\r\n\r\n function CreateUnionType(typeName, rawCases, prototype={}){\r\n\r\n /* eslint-disable immutable/no-mutation,immutable/no-let */\r\n let Type = T.NullaryType(\r\n typeName\r\n ,''\r\n ,a => a != null && a['@@type'] == typeName\r\n )\r\n /* eslint-enable immutable/no-mutation,immutable/no-let */\r\n\r\n const keys =\r\n Object.keys(rawCases)\r\n\r\n env.push(Type)\r\n\r\n const staticCase = staticCaseT(Type)\r\n\r\n function boundStaticCase(options){\r\n /* eslint-disable immutable/no-this */\r\n return staticCase(options, this)\r\n /* eslint-enable immutable/no-this */\r\n }\r\n\r\n\r\n const def = T.create({ checkTypes: checkTypes, env })\r\n\r\n const cases =\r\n processRawCases(Type,rawCases)\r\n\r\n const createCaseConstructor =\r\n CreateCaseConstructor(\r\n def\r\n , prototype\r\n , typeName\r\n , cases\r\n )\r\n\r\n const constructors =\r\n keys.map(createCaseConstructor)\r\n\r\n const caseRecordType =\r\n CaseRecordType(keys,cases)\r\n\r\n const instanceCaseDef =\r\n def(\r\n typeName+'::case'\r\n ,{}\r\n ,[ caseRecordType, a ]\r\n ,boundStaticCase\r\n )\r\n\r\n const flexibleInstanceCase = function(o, ...args){\r\n if (o._){\r\n\r\n //eslint-disable-next-line immutable/no-this\r\n return boundStaticCase.apply(this, [o, ...args]);\r\n } else {\r\n //eslint-disable-next-line immutable/no-this\r\n return instanceCaseDef.apply(this, [o, ...args]);\r\n }\r\n };\r\n\r\n /* eslint-disable immutable/no-mutation */\r\n Type.prototype = Object.assign(\r\n prototype\r\n ,{\r\n '@@type': typeName\r\n , case: flexibleInstanceCase\r\n , env\r\n }\r\n )\r\n\r\n Type.prototype.case.toString =\r\n Type.prototype.case.inspect =\r\n instanceCaseDef.toString\r\n\r\n /* eslint-enable immutable/no-mutation */\r\n const staticCaseDef =\r\n def(\r\n typeName+'.case'\r\n ,{}\r\n ,[ caseRecordType, Type, a]\r\n ,staticCase\r\n )\r\n\r\n function flexibleStaticCase(o, ...args){\r\n if (o._){\r\n //eslint-disable-next-line immutable/no-this\r\n return R.curryN(2, staticCase).apply(this, [o, ...args]);\r\n } else {\r\n //eslint-disable-next-line immutable/no-this\r\n return staticCaseDef.apply(this, [o, ...args]);\r\n }\r\n };\r\n\r\n /* eslint-disable immutable/no-mutation */\r\n Type.case = R.curryN(2, flexibleStaticCase)\r\n\r\n Type.case.toString =\r\n Type.case.inspect =\r\n staticCaseDef.toString\r\n\r\n // caseOn opts out of typing because I'm\r\n // not smart enough to do it efficiently\r\n Type.caseOn = R.curryN(3, staticCase)\r\n /* eslint-enable immutable/no-mutation */\r\n\r\n return Object.assign(\r\n Type\r\n ,...constructors\r\n )\r\n }\r\n\r\n const Named =\r\n def(\r\n 'UnionType.Named'\r\n , {}\r\n , [T.String, T.StrMap(T.Any), T.Any]\r\n , CreateUnionType\r\n )\r\n\r\n const Anonymous =\r\n def(\r\n 'UnionType.Anonymous'\r\n ,{}\r\n ,[T.StrMap(T.Any), T.Any]\r\n ,function(enums){\r\n return CreateUnionType(\r\n '('+Object.keys(enums).join(' | ')+')'\r\n , enums\r\n )\r\n }\r\n )\r\n\r\n const Class =\r\n def(\r\n 'UnionType.Class'\r\n ,{}\r\n ,[T.String, T.StrMap(T.Any), T.Object, T.Any]\r\n ,CreateUnionType\r\n )\r\n\r\n return {\r\n Anonymous\r\n ,Named\r\n ,Class\r\n }\r\n}\r\n\r\n/* eslint-disable immutable/no-mutation */\r\nmodule.exports = Setup","import $ from 'sanctuary-def'\n\nconst UUID_PATTERN =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nconst $UUID = $.NullaryType(\n\t'defunctzombie/node-uuid'\n\t, 'https://github.com/defunctzombie/node-uuid'\n\t, s => UUID_PATTERN.test(s)\n)\n\nexport default $UUID","import $UUID from './uuid'\nimport $ from 'sanctuary-def'\n\nexport default $.RecordType({\n\torganization_id: $UUID\n\t,organization_name: $.String\n\t,auth_permissions_read: $.Integer\n\t,auth_permissions_write: $.Integer\n})","//eslint-disable-next-line no-undef\nconst checkTypes = !!process.env.CHECK_TYPES\n\nimport $ from 'sanctuary-def'\nimport SumType from 'sum-type-legacy'\nimport { prop as stream } from '../../../stream'\nimport $AuthPermission from '../../../types/auth_permissions'\n\nconst Type = SumType($, { checkTypes, env: $.env })\n\nconst $T = $.RecordType(\n\t{ auth_token: $.String\n\t, user_id: $.String\n\t, auth_permissions: $.Array($AuthPermission)\n})\n\nconst $Auth = Type.Named('Auth', {\n\tLoggedOut: {}\n\t,LoggedIn:\n\t\t{ auth_token: $.String\n\t\t, user_id: $.String\n\t\t, auth_permissions: $.Array($AuthPermission)\n\t\t}\n\t,Refresh: {}\n\n})\n\nconst auth = stream($Auth.Refresh({}))\n\nexport const isRefresh = () => auth()._name == 'Refresh'\nexport const isLoggedOut = () => auth()._name == 'LoggedOut'\nexport const isLoggedIn = () => auth()._name == 'LoggedIn'\n\nexport default {\n\tstream: auth\n\t, type: $Auth\n\t, recordType: $T\n\t, isRefresh\n\t, isLoggedOut\n\t, isLoggedIn\n}","\r\nmodule.exports = {\r\n valueOf: function valueOf(){\r\n return NaN\r\n }\r\n ,toString: function toString(){\r\n return 'never'\r\n }\r\n ,inspect: function inspect(){\r\n return 'never'\r\n }\r\n}","/* globals setTimeout clearTimeout */\n\nimport {\n\tview\n\t, set\n\t, concat\n\t, equals\n\t, lensPath\n\t, merge\n} from 'ramda'\n\nimport { prop } from '../../../stream'\nimport never from 'never-never'\nimport m from 'bacta'\n\nfunction Driver({\n\tbasePath\n\t, pathParts\n\t, paths\n\t, update\n\t, urlInterpreter\n\t, effects\n\t, Main\n\t, withData\n\t, getURL\n\t, getAdapters\n}){\n\n\treturn function UIDriver$data(data){\n\n\t\tconst href = HREF(basePath)\n\t\tconst initial =\n\t\t\turlInterpreter(\n\t\t\t\thref.from(\n\t\t\t\t\tpathParts\n\t\t\t\t\t,getURL()\n\t\t\t\t)\n\t\t\t)\n\n\n\t\tconst write = prop()\n\t\tconst read = prop.scan(update, initial, write)\n\t\tconst manager = Manager(read, write)\n\n\t\tconst router = Router(href, manager)\n\n\t\tconst streams =\n\t\t\tpaths\n\t\t\t.map( a => [ a.slice(-1)[0], a ])\n\t\t\t.reduce(\n\t\t\t\t(streams, [name, path]) => {\n\t\t\t\t\treturn merge(\n\t\t\t\t\t\tstreams\n\t\t\t\t\t\t,{ [name+'$']: manager.streamFromPath(path) }\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t,{}\n\t\t\t)\n\n\n\t\tconst adapters =\n\t\t\tgetAdapters(\n\t\t\t\tread\n\t\t\t\t,write\n\t\t\t)\n\n\t\teffects({\n\t\t\tdata\n\t\t\t,write\n\t\t\t,read\n\t\t\t,router\n\t\t\t,streams\n\t\t\t,adapters\n\t\t})\n\n\t\tconst o = Main({\n\t\t\tread\n\t\t\t,write\n\t\t\t,streams\n\t\t\t,router\n\t\t\t,manager\n\t\t\t,adapters\n\t\t\t,withData: withData( data )\n\t\t})\n\n\t\treturn Object.assign(o, {\n\t\t\tonremove: () => prop.end(write)\n\t\t})\n\t}\n\n}\n\nfunction Manager(readState, writeState, identifier){\n\n\tconst streamFromPath = path => {\n\n\t\tconst lens = lensPath(path)\n\n\t\tconst s =\n\t\t\tprop()\n\n\t\tprop.scan(function(p,n){\n\n\t\t\tidentifier, path, s, lens, readState, writeState\n\n\t\t\tconst v = view(lens)\n\n\t\t\tconst reducerIntendedToChangeValue =\n\t\t\t\t!equals(v(p),v(n))\n\n\t\t\tconst streamIsOutOfDateWithReducer =\n\t\t\t\t!equals(v(n), s())\n\n\t\t\tif( reducerIntendedToChangeValue ){\n\t\t\t\tif( streamIsOutOfDateWithReducer ){\n\t\t\t\t\ts(v(n))\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn n\n\t\t}, never, readState)\n\n\t\ts.map(function(n){\n\t\t\tidentifier, path, s, lens, readState, writeState\n\n\t\t\tconst state =\n\t\t\t\tset(\n\t\t\t\t\tlens\n\t\t\t\t\t,n\n\t\t\t\t\t,readState()\n\t\t\t\t)\n\n\t\t\twriteState({\n\t\t\t\tstate\n\t\t\t\t,action: path\n\t\t\t})\n\n\t\t\treturn null\n\t\t})\n\n\t\ts.end.map(function(){\n\t\t\treturn prop.end(readState)\n\t\t})\n\n\t\t//eslint-disable-next-line\n\t\ts.lens = lens\n\t\t//eslint-disable-next-line\n\t\ts.path = path\n\n\t\treturn s\n\n\t}\n\n\treturn {\n\t\tstreamFromPath\n\t\t, readState\n\t\t, writeState\n\t}\n}\n\n\nconst toMaybe = x => x == null ? [] : [x]\n\nconst HREF = (baseURL) => ({\n\n\tfrom(pathKeys, href){\n\n\t\tconst [path, search] =\n\t\t\thref.replace(baseURL, '').split('?')\n\n\t\tconst pathValues =\n\t\t\tpath\n\t\t\t.split('/')\n\t\t\t.filter(Boolean)\n\n\t\tconst newPathObj =\n\t\t\tpathKeys\n\t\t\t\t.reduce(function(p, n, i){\n\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\tp[n] = pathValues[i]\n\t\t\t\t\treturn p\n\t\t\t\t}, {})\n\n\t\tconst newSearchObj =\n\t\t\tm.route.parseQueryString(search)\n\n\t\treturn {\n\t\t\tpath: newPathObj\n\t\t\t,search: newSearchObj\n\t\t}\n\t}\n\n\t,to(state){\n\n\t\tconst { path, search } = state\n\t\tconst values = Object.keys(path)\n\t\t\t.filter( k => k[0] != '_' )\n\t\t\t.map( k => path[k])\n\n\t\tconst qs = m.route.buildQueryString(\n\n\t\t\tObject.keys(search)\n\t\t\t\t.sort()\n\t\t\t\t.reduce((p,n) => Object.assign(p, { [n]: search[n] }),{})\n\t\t)\n\n\t\tconst modePrefix = ''\n\n\t\treturn (\n\t\t\tmodePrefix\n\t\t\t+ [ baseURL ]\n\t\t\t.concat( values )\n\t\t\t.map( toMaybe )\n\t\t\t.reduce( concat )\n\t\t\t.join('/')\n\t\t\t+'/'\n\t\t\t+ ( qs ? '?' + qs : '')\n\t\t)\n\n\t}\n})\n\nfunction Router(href, manager) {\n\n\tconst createPathStream = () => {\n\n\t\tconst $href =\n\t\t\tmanager.readState.map(href.to)\n\n\t\treturn prop.afterSilence(0, $href)\n\t}\n\n\tconst anchor = (text, sets, attrs) => {\n\n\t\tconst statePreview = sets.reduce(function(state, [f,x]){\n\t\t\treturn set( f.lens, x, state)\n\t\t}, manager.readState())\n\n\t\treturn m(\n\t\t\t'a'\n\t\t\t,Object.assign(\n\t\t\t\t{ href: href.to(statePreview)\n\t\t\t\t, onclick (e) {\n\t\t\t\t\tsets.forEach(function([f,x]){\n\n\t\t\t\t\t\tmanager.writeState(\n\t\t\t\t\t\t\t{ state: set( f.lens, x, manager.readState() )\n\t\t\t\t\t\t\t, action: f.path\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\n\t\t\t\t\te.preventDefault()\n\t\t\t\t}\n\t\t\t}, attrs)\n\t\t, text )\n\n\t}\n\n\treturn {\n\t\tcreatePathStream\n\t\t, anchor\n\t\t, href\n\t\t, manager\n\t}\n}\n\n\nconst LensWriter = (read, write) => actionPath => lens => value => {\n\n\treturn write({\n\t\tstate:\n\t\t\tset(\n\t\t\t\tlens\n\t\t\t\t, value\n\t\t\t\t, read()\n\t\t\t)\n\t\t,action: actionPath\n\t})\n}\n\nconst LensReader = read => lens => {\n\n\treturn () => {\n\t\treturn view( lens, read() )\n\t}\n}\n\nconst LensAdapter = ( read, write ) => actionPath => writePath => {\n\n\tconst lens = lensPath(writePath)\n\n\tconst writer = LensWriter( read, write )(actionPath)(lens)\n\tconst reader = LensReader( read )( lens )\n\n\n\treturn (...args) => {\n\t\tif( args.length ){\n\t\t\twriter( args[0] )\n\t\t}\n\n\t\treturn reader()\n\t}\n}\n\nconst ThrottledLensAdapter = (read, write) => actionPath => writePath => {\n\n\tconst getParent =\n\t\twritePath.length > 1\n\t\t? view(lensPath(writePath.slice(0, -1)))\n\t\t: () => read()[ writePath[0] ]\n\n\tconst key =\n\t\twritePath.slice(-1)[0]\n\n\tconst lens = lensPath(writePath)\n\n\tconst writer = LensWriter( read, write )(actionPath)(lens)\n\tconst reader = LensReader( read )( lens )\n\n\t// eslint-disable-next-line no-var\n\tvar debounceId;\n\n\n\treturn (...args) => {\n\n\t\tif( args.length ){\n\n\t\t\tif( debounceId != null ) {\n\t\t\t\tclearTimeout( debounceId )\n\t\t\t}\n\n\t\t\t// Send latest value through the update function\n\t\t\t// to be processed when we stop receiving values\n\n\t\t\tdebounceId = setTimeout(function(){\n\t\t\t\twriter( args[0] )\n\t\t\t}, 500)\n\n\t\t\t// directly mutate the current state immediately\n\n\t\t\tgetParent(read())[key] = args[0]\n\t\t}\n\n\t\treturn reader()\n\t}\n}\n\nexport\n\t{ Manager\n\t, HREF\n\t, Router\n\t, LensWriter\n\t, LensReader\n\t, LensAdapter\n\t, ThrottledLensAdapter\n\t, Driver\n\t}","import $ from 'sanctuary-def'\nimport SumType from 'sum-type-legacy'\n\nconst Sum = SumType($, { checkTypes: false, env: $.env }).Named\n\nconst a = $.TypeVariable('a')\nconst b = $.TypeVariable('b')\n\nconst T = (a, f) => f(a)\nconst I = x => x\nconst K = a => () => a\nconst B = (f,g) => x => f(g(x))\nconst C = f => x => y => f(y)(x)\n\nconst NominalMaybe = ({ name, Just, Nothing }) => {\n\n\tconst $T = Sum('harth/'+name, {\n\t\t[Just]: { value: a }\n\t\t,[Nothing]: {}\n\t})\n\n\tconst Y = $T[Just]\n\tconst N = $T[Nothing]\n\n\t$T.$Type =\n\t\t$.UnaryType(\n\t\t\t'harth/'+name\n\t\t\t,''\n\t\t\t, Ma => [Ma]\n\t\t\t\t.filter( x => x != null)\n\t\t\t\t.map( Ma => Ma._name )\n\t\t\t\t.filter( a => [Just, Nothing].find( b => b == a) )\n\t\t\t\t.some( () => true )\n\t\t\t, x => x._name == Just ? [x.value] : []\n\t\t)\n\n\t$T.fold = (b, f) =>\n\t\t$T.case({\n\t\t\t[Just]: a => f(a)\n\t\t\t,[Nothing]: () => b\n\t\t})\n\n\t$T.discard = (b,a) =>\n\t\t$T.fold(\n\t\t\tb\n\t\t\t,K(a)\n\t\t)\n\n\t$T['is'+Just] =\n\t\t$T.fold( false, () => true )\n\n\t$T.map = f =>\n\t\t$T.fold(\n\t\t\tN()\n\t\t\t,a => Y(f(a))\n\t\t)\n\n\t$T.chain = f =>\n\t\t$T.fold(\n\t\t\tN()\n\t\t\t,f\n\t\t)\n\n\t$T.assert = f => a =>\n\t\tf(a)\n\t\t? Y(a)\n\t\t: N()\n\n\t$T.filter = f =>\n\t\t$T.chain($T.assert(f))\n\n\t$T.alt = (Ma, Na) =>\n\t\t$T.fold(\n\t\t\t// we use fold for type checking\n\t\t\t// could just be a `Na` otherwise\n\t\t\t$T.fold( Na, () => Na )(Na)\n\t\t\t,() => Ma\n\t\t)(Ma)\n\n\t$T.and = (Ma, Na) =>\n\t\t$T.chain( K(Na) )(Ma)\n\n\n\tif( name != 'Maybe'){\n\t\t$T.toMaybe =\n\t\t\t$T.fold(\n\t\t\t\tMaybe.Nothing()\n\t\t\t\t,Maybe.Just\n\t\t\t)\n\t}\n\n\t$T.toBoolean =\n\t\t$T.fold( false, () => true )\n\n\t$T['to'+name] = Unknown =>\n\t\tUnknown != null\n\t\t? Y( Unknown )\n\t\t: N()\n\n\t$T['from'+name] = b =>\n\t\t$T.fold( b, i => i )\n\n\t$T.swap = b =>\n\t\t$T.fold(\n\t\t\tY(b)\n\t\t\t,() => N()\n\t\t)\n\n\t$T.toNullable =\n\t\t$T.fold( null, i => i )\n\n\t$T.zero = $T[Nothing]()\n\t$T.empty = $T[Just]()\n\n\n\t$T.join =\n\t\t$T.fold(\n\t\t\t$T.zero\n\t\t\t,$T.fold( $T.zero, i => Y(i) )\n\t\t)\n\n\t$T.nominal = { Just, Nothing }\n\n\t$T.all = (Ms) =>\n\t\tMs.some( M => M._name == Nothing )\n\t\t? $T.zero\n\t\t: $T[Just](\n\t\t\tMs.map( M => M.value )\n\t\t)\n\n\treturn {\n\t\t[name]: $T\n\t\t, [Just] : Y\n\t\t, [Nothing]: N\n\t}\n}\n\nconst {Maybe} = NominalMaybe({\n\tname: 'Maybe'\n\t, Just: 'Just'\n\t, Nothing: 'Nothing'\n})\n\nconst NominalEither = ({name, Left, Right}) => {\n\n\tconst $T = Sum('harth/'+name, {\n\t\t[Left]: { value: $.Any }\n\t\t,[Right]: { value: $.Any }\n\t})\n\n\tconst Y = $T[Right]\n\tconst N = $T[Left]\n\n\t$T.tagBy = f => x => f(x)\n\t\t? Y(x)\n\t\t: N(x)\n\n\t$T.fold = (Fac, Fbc) =>\n\t\t$T.case({\n\t\t\t[Left]: Fac\n\t\t\t,[Right]: Fbc\n\t\t})\n\n\t$T.chain = FbEc =>\n\t\t$T.fold(\n\t\t\tN\n\t\t\t,FbEc\n\t\t)\n\n\t$T.swap =\n\t\t$T.fold( Y, N )\n\n\t$T['from'+name] =\n\t\t$T.fold(I,I)\n\n\t$T.both = (f) =>\n\t\t$T.bimap(f,f)\n\n\t$T.bimap = (Fac, Fbc) =>\n\t\t$T.fold(\n\t\t\ta => N( Fac(a) )\n\t\t\t,b => Y( Fbc(b) )\n\t\t)\n\n\t$T.map = (Fbc) =>\n\t\t$T.bimap( i => i, Fbc)\n\n\t$T.toMaybe = $T.fold( () => Maybe.Nothing(), Maybe.Just )\n\n\t$T.swapToMaybe = $T.fold( Maybe.Just, () => Maybe.Nothing() )\n\n\t$T.nominal = { Left, Right }\n\n\t$T.$Type = $.BinaryType(\n\t\t'harth/'+name\n\t\t,''\n\t\t, Ma => [Ma]\n\t\t\t.filter( x => x != null)\n\t\t\t.map( Ma => Ma._name )\n\t\t\t.filter( a => [Left, Right].find( b => b == a) )\n\t\t\t.some( () => true )\n\t\t, e => e != null\n\t\t\t&& e._name === Left ? [e.value] : []\n\t\t, e => e != null\n\t\t\t&& e._name === Right ? [e.value] : []\n\t)\n\n\t$T.toBoolean = $T.fold(\n\t\t() => false\n\t\t,() => true\n\t)\n\n\t$T.toBoolean =\n\t\t$T.fold(\n\t\t\tK(false)\n\t\t\t,K(true)\n\t\t)\n\n\treturn {\n\t\t[name]: $T\n\t\t, [Left]: $T[Left]\n\t\t, [Right]: $T[Right]\n\t}\n}\n\nconst {Either} = NominalEither({\n\tname: 'Either'\n\t, Left: 'Left'\n\t, Right: 'Right'\n})\n\nconst MaybeToMaybe = (T1, T2) => a =>\n\tT1.case({\n\t\t[T1.nominal.just]: T2[T2.nominal.just]\n\t\t,[T1.nominal.nothing]: () => T2[T2.nominal.nothing]()\n\t}, a)\n\nconst EitherToEither = (T1, T2) => a =>\n\tT1.case({\n\t\t[T1.nominal.left]: T2[T2.nominal.left]\n\t\t,[T1.nominal.right]: T2[T2.nominal.right]\n\t}, a)\n\nconst get = k => o => Maybe.toMaybe(o[k])\nconst head = xs => Maybe.toMaybe(xs[0])\nconst find = f => xs =>\n\tMaybe.toMaybe(xs.find( x => f(x) ))\n\nconst apply2 = f => ([x,y]) => f(x)(y)\n\n\nconst caseIs = ($T, caseName) => Ta =>\n\t$T.case({\n\t\t[caseName]: () => Maybe.Just(Ta)\n\t\t,_: () => Maybe.Nothing()\n\t}, Ta)\n\nconst caseIsNot = ($T, caseName) => Ta =>\n\t$T.case({\n\t\t[caseName]: () => Maybe.Nothing()\n\t\t,_: () => Maybe.Just( Ta )\n\t}, Ta)\n\n\nconst diff = x => y =>\n\tx === y ? Maybe.Nothing() : Maybe.Just(y)\n\n//eslint-disable-next-line\nexport {\n\tMaybe\n\t,Either\n\t,NominalMaybe\n\t,NominalEither\n\t,MaybeToMaybe\n\t,EitherToEither\n\t,caseIs\n\t,caseIsNot\n\t,get\n\t,head\n\t,find\n\t,T\n\t,I\n\t,K\n\t,B\n\t,C\n\t,diff\n\t,a\n\t,apply2\n\t,b\n}","import { NominalMaybe } from '../ui/src/utils/safe'\n\nconst { Loadable, Loaded, Loading } =\n\tNominalMaybe({\n\t\tname: 'Loadable'\n\t\t, Just: 'Loaded'\n\t\t, Nothing: 'Loading'\n\t})\n\nexport { Loadable, Loaded, Loading }","/* globals process */\n\nimport $ from 'sanctuary-def'\nimport SumType from 'sum-type-legacy'\n\nconst Type = SumType(\n\t$, {\n\t\tcheckTypes:!!process.env.CHECK_TYPES\n\t\t, env: $.env\n\t}\n)\n\nconst Functor =\n\t$.NullaryType(\n\t\t'Functor'\n\t\t, ''\n\t\t, list => list != null && typeof list.map == 'function'\n\t)\n\nconst ScheduleTask =\n\t$.RecordType({\n\t\tschedule_id: $.String\n\t\t,schedule_version_id: $.String\n\t\t,organization_id: $.String\n\t\t,task_message: $.String\n\t\t,task_progress: $.Number\n\t\t,task_failed: $.Boolean\n\t\t,task_cancelled: $.Boolean\n\t\t,schedule_name: $.String\n\t\t,schedule_priority: $.String\n\t})\n\nconst TaskState =\n\tType.Named('TaskState', {\n\t\tTaskComplete: { task: ScheduleTask }\n\t\t,TaskFailed: { task: ScheduleTask }\n\t\t,TaskRunning: { task: ScheduleTask }\n\t\t,TaskStarted: { task: ScheduleTask }\n\t\t,TaskCancelled: { task: ScheduleTask }\n\t})\n\nconst NotificationButton =\n\t$.RecordType({\n\t\tlabel: $.String\n\t\t,action: $.AnyFunction\n\t})\n\nconst Notification =\n\t$.RecordType({\n\t\terror: $.Boolean\n\t\t,message: $.String\n\t\t,buttons: $.Array(NotificationButton)\n\t})\n\nconst NotificationRequest =\n\tType.Named('NotificationRequest', {\n\t\tTaskComplete: { task: ScheduleTask }\n\t\t,TaskFailed: { task: ScheduleTask }\n\t\t,TaskStarted: { task: ScheduleTask }\n\t\t,TaskCancelled: { task: ScheduleTask }\n\t})\n\nconst Request =\n\tType.Named('Request', {\n\t\tNotificationRequest: [NotificationRequest]\n\t\t,Task: { schedule_version_id: String, delay: Number }\n\t\t,RedirectGantt: { task: ScheduleTask }\n\t\t,Nothing: {}\n\t})\n\nconst Response =\n\tType.Named('Response', {\n\t\tTask: { task: ScheduleTask }\n\t\t,TaskStarted: { task: ScheduleTask }\n\t})\n\nconst Sources =\n\t$.RecordType({ responses: Functor })\n\nconst Sinks =\n\t$.RecordType({ requests: Functor })\n\nexport const env = Response.prototype.env\n\n\nexport {\n\tSinks\n\t, Sources\n\t, Response\n\t, Request\n\t, TaskState\n\t, ScheduleTask\n\t, Functor\n\t, $\n\t, Type\n\t, NotificationRequest\n\t, Notification\n}","\nimport { map, compose } from 'ramda'\n\nimport {\n\t$\n\t,env\n\t,ScheduleTask\n\t,TaskState\n\t,Response\n\t,Request\n\t,Sources\n\t,Sinks\n\t,NotificationRequest\n} from './types'\n\n//eslint-disable-next-line no-undef\nconst checkTypes = !!process.env.CHECK_TYPES\nconst def =\n\t$.create({ checkTypes , env })\n\nconst taskPrefix = task => `${task.schedule_name} (${task.schedule_priority})`\n\nconst taskMessage =\n\t{\n\t\tStarted: `has started`\n\t\t,Failed: `failed to generate`\n\t\t,Complete: `completed successfully`\n\t\t,Cancelled: `successfully cancelled`\n}\n\nconst taskRoute = task =>\n\t[ ''\n\t, 'dashboard'\n\t, task.organization_id\n\t, task.schedule_id\n\t, task.schedule_version_id\n\t]\n\t\t.join('/')\n\nconst processNotificationRequest = (requests, notify) =>\n\tNotificationRequest.case({\n\t\tTaskStarted: task =>\n\t\t\tnotify({\n\t\t\t\terror: false\n\t\t\t\t, message: taskPrefix(task) +' '+ taskMessage.Started\n\t\t\t\t, buttons: [{\n\t\t\t\t\tlabel: 'Okay'\n\t\t\t\t\t,action: () => void 0\n\t\t\t\t}]\n\t\t\t\t})\n\t\t,TaskFailed: task =>\n\t\t\tnotify({\n\t\t\t\terror: true\n\t\t\t\t, message: taskPrefix(task) +' '+ taskMessage.Failed\n\t\t\t\t, buttons: [{\n\t\t\t\t\tlabel: 'Okay'\n\t\t\t\t\t,action: () => void 0\n\t\t\t\t}]\n\t\t\t})\n\t\t,TaskComplete: task =>\n\t\t\tnotify({\n\t\t\t\terror: false\n\t\t\t\t, message: taskPrefix(task) +' '+ taskMessage.Complete\n\t\t\t\t, buttons: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Okay'\n\t\t\t\t\t\t,action: () => void 0\n\t\t\t\t\t}\n\t\t\t\t\t,{\n\t\t\t\t\tlabel: 'View'\n\t\t\t\t\t,action: () =>\n\t\t\t\t\t\trequests(Request.RedirectGantt(task))\n\t\t\t\t}]\n\t\t\t})\n\t\t,TaskCancelled: task =>\n\t\t\tnotify({\n\t\t\t\terror: false\n\t\t\t\t, message: taskPrefix(task) +' '+ taskMessage.Cancelled\n\t\t\t\t, buttons: [{\n\t\t\t\t\tlabel: 'Okay'\n\t\t\t\t\t,action: () => void 0\n\t\t\t\t}]\n\t\t\t})\n\t})\n\nconst processTask =\n\tdef('processTask', {}, [ScheduleTask, TaskState]\n\t\t,function(task){\n\t\t\treturn task.task_failed\n\t\t\t\t? TaskState.TaskFailed(task)\n\t\t\t: task.task_progress == 100\n\t\t\t\t? TaskState.TaskComplete(task)\n\t\t\t: task.task_cancelled\n\t\t\t\t? TaskState.TaskCancelled(task)\n\t\t\t\t: TaskState.TaskRunning(task)\n\t\t}\n\t)\n\nconst processResponse =\n\tfunction(response){\n\n\t\tconst taskState =\n\t\t\tResponse.case({\n\t\t\t\tTask: processTask\n\t\t\t\t,TaskStarted: TaskState.TaskStarted\n\t\t\t}, response)\n\n\t\tconst request =\n\t\t\tTaskState.case({\n\t\t\t\tTaskRunning: () => Request.Nothing()\n\t\t\t\t,TaskFailed:\n\t\t\t\t\tcompose(\n\t\t\t\t\t\tRequest.NotificationRequest\n\t\t\t\t\t\t, NotificationRequest.TaskFailed\n\t\t\t\t\t)\n\n\t\t\t\t,TaskComplete:\n\t\t\t\t\tcompose(\n\t\t\t\t\t\tRequest.NotificationRequest\n\t\t\t\t\t\t, NotificationRequest.TaskComplete\n\t\t\t\t\t)\n\t\t\t\t,TaskStarted:\n\t\t\t\t\tcompose(\n\t\t\t\t\t\tRequest.NotificationRequest\n\t\t\t\t\t\t, NotificationRequest.TaskStarted\n\t\t\t\t\t)\n\t\t\t\t,TaskCancelled:\n\t\t\t\t\tcompose(\n\t\t\t\t\t\tRequest.NotificationRequest\n\t\t\t\t\t\t, NotificationRequest.TaskCancelled\n\t\t\t\t\t)\n\t\t\t}, taskState)\n\n\n\t\treturn request\n\t}\n\nconst Main =\n\tdef('Main', {}, [ Sources, Sinks ]\n\n\t\t, function Main({responses}){\n\n\t\t\tconst requests =\n\t\t\t\tmap(\n\t\t\t\t\tprocessResponse\n\t\t\t\t\t,responses\n\t\t\t\t)\n\n\t\t\treturn {requests}\n\t\t}\n\t)\n\n//eslint-disable-next-line\nexport {\n\tMain\n\t, processNotificationRequest\n\t, taskMessage\n\t, taskPrefix\n\t, taskRoute\n\t, processTask\n\t}\n\nexport default {\n\tMain\n\t, processNotificationRequest\n\t, taskMessage\n\t, taskPrefix\n\t, taskRoute\n\t, processTask\n\t}","import tasks from './index'\nimport { Response, TaskState } from './types'\nimport { prop as stream } from '../../../../stream'\nimport { merge } from 'ramda'\nimport { Maybe } from '../../utils/safe'\nimport {o, pipe, prop} from 'ramda'\n\nconst Y = Maybe.Just\nconst N = () => Maybe.Nothing()\n\nconst extractProgress =\n\n\tpipe (\n\n\t\tResponse.case ({\n\t\t\tTask: o (Y) (tasks.processTask)\n\t\t\t,_: N\n\t\t})\n\n\t\t, Maybe.chain (\n\n\t\t\tTaskState.case ({\n\n\t\t\t\tTaskRunning: o (Y) (prop ('task_progress'))\n\t\t\t\t,TaskStarted: o (Y) (prop ('task_progress'))\n\t\t\t\t,_: N\n\n\t\t\t})\n\t\t)\n\t\t, Maybe.map( String )\n\t\t, Maybe.fold ('', s => s + '%' )\n\t)\n\nfunction update (p, r){\n\treturn merge(\n\t\tp\n\t\t, {[r.task.schedule_version_id]:\n\t\t\textractProgress(r)\n\t\t})\n}\n\nfunction main (responses) {\n\tconst obj$ = stream.scan(update, {}, responses)\n\n\treturn stream.dropRepeats(obj$)\n}\n\n\nexport default main\n\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.7.2\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o 0) {\n _drainQueueStep(queue);\n }\n}\n\nfunction _drainQueueStep(queue) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n } else {\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n}\n\nAsync.prototype._drainQueues = function () {\n _drainQueue(this._normalQueue);\n this._reset();\n this._haveDrainedQueues = true;\n _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (((this._bitField & 50397184) === 0)) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n if (!calledBind) {\n calledBind = true;\n Promise.prototype._propagateFrom = debug.propagateFromFunction();\n Promise.prototype._boundValue = debug.boundValueFunction();\n }\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, undefined, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, undefined, ret, context);\n ret._setOnCancel(maybePromise);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 2097152;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~2097152);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n try { if (Promise === bluebird) Promise = old; }\n catch (e) {}\n return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n return new Function(\"ensureMethod\", \" \\n\\\n return function(obj) { \\n\\\n 'use strict' \\n\\\n var len = this.length; \\n\\\n ensureMethod(obj, 'methodName'); \\n\\\n switch(len) { \\n\\\n case 1: return obj.methodName(this[0]); \\n\\\n case 2: return obj.methodName(this[0], this[1]); \\n\\\n case 3: return obj.methodName(this[0], this[1], this[2]); \\n\\\n case 0: return obj.methodName(); \\n\\\n default: \\n\\\n return obj.methodName.apply(obj, this); \\n\\\n } \\n\\\n }; \\n\\\n \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n return new Function(\"obj\", \" \\n\\\n 'use strict'; \\n\\\n return obj.propertyName; \\n\\\n \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n var ret = cache[name];\n if (typeof ret !== \"function\") {\n if (!isIdentifier(name)) {\n return null;\n }\n ret = compiler(name);\n cache[name] = ret;\n cache[\" size\"]++;\n if (cache[\" size\"] > 512) {\n var keys = Object.keys(cache);\n for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n cache[\" size\"] = keys.length - 256;\n }\n }\n return ret;\n};\n\ngetMethodCaller = function(name) {\n return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var args = [].slice.call(arguments, 1);;\n if (!true) {\n if (canEvaluate) {\n var maybeCaller = getMethodCaller(methodName);\n if (maybeCaller !== null) {\n return this._then(\n maybeCaller, undefined, undefined, args, undefined);\n }\n }\n }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n var promise = this;\n var child = promise;\n while (promise._isCancellable()) {\n if (!promise._cancelBy(child)) {\n if (child._isFollowing()) {\n child._followee().cancel();\n } else {\n child._cancelBranched();\n }\n break;\n }\n\n var parent = promise._cancellationParent;\n if (parent == null || !parent._isCancellable()) {\n if (promise._isFollowing()) {\n promise._followee().cancel();\n } else {\n promise._cancelBranched();\n }\n break;\n } else {\n if (promise._isFollowing()) promise._followee().cancel();\n promise._setWillBeCancelled();\n child = promise;\n promise = parent;\n }\n }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n return this._branchesRemainingToCancel === undefined ||\n this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n if (canceller === this) {\n this._branchesRemainingToCancel = 0;\n this._invokeOnCancel();\n return true;\n } else {\n this._branchHasCancelled();\n if (this._enoughBranchesHaveCancelled()) {\n this._invokeOnCancel();\n return true;\n }\n }\n return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n if (this._enoughBranchesHaveCancelled()) {\n this._cancel();\n }\n};\n\nPromise.prototype._cancel = function() {\n if (!this._isCancellable()) return;\n this._setCancelled();\n async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n if (util.isArray(onCancelCallback)) {\n for (var i = 0; i < onCancelCallback.length; ++i) {\n this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n }\n } else if (onCancelCallback !== undefined) {\n if (typeof onCancelCallback === \"function\") {\n if (!internalOnly) {\n var e = tryCatch(onCancelCallback).call(this._boundValue());\n if (e === errorObj) {\n this._attachExtraTrace(e.e);\n async.throwLater(e.e);\n }\n }\n } else {\n onCancelCallback._resultCancelled(this);\n }\n }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n var onCancelCallback = this._onCancel();\n this._unsetOnCancel();\n async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n if (this._isCancellable()) {\n this._doInvokeOnCancel(this._onCancel(), true);\n this._unsetOnCancel();\n }\n};\n\nPromise.prototype._resultCancelled = function() {\n this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n return function(e) {\n var boundTo = promise._boundValue();\n predicateLoop: for (var i = 0; i < instances.length; ++i) {\n var item = instances[i];\n\n if (item === Error ||\n (item != null && item.prototype instanceof Error)) {\n if (e instanceof item) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (typeof item === \"function\") {\n var matchesPredicate = tryCatch(item).call(boundTo, e);\n if (matchesPredicate === errorObj) {\n return matchesPredicate;\n } else if (matchesPredicate) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (util.isObject(e)) {\n var keys = getKeys(item);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n if (item[key] != e[key]) {\n continue predicateLoop;\n }\n }\n return tryCatch(cb).call(boundTo, e);\n }\n }\n return NEXT_FILTER;\n };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (this._trace !== undefined) {\n this._trace._promiseCreated = null;\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (this._trace !== undefined) {\n var trace = contextStack.pop();\n var ret = trace._promiseCreated;\n trace._promiseCreated = null;\n return ret;\n }\n return null;\n};\n\nfunction createContext() {\n if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n var Promise_pushContext = Promise.prototype._pushContext;\n var Promise_popContext = Promise.prototype._popContext;\n var Promise_PeekContext = Promise._peekContext;\n var Promise_peekContext = Promise.prototype._peekContext;\n var Promise_promiseCreated = Promise.prototype._promiseCreated;\n Context.deactivateLongStackTraces = function() {\n Promise.prototype._pushContext = Promise_pushContext;\n Promise.prototype._popContext = Promise_popContext;\n Promise._peekContext = Promise_PeekContext;\n Promise.prototype._peekContext = Promise_peekContext;\n Promise.prototype._promiseCreated = Promise_promiseCreated;\n longStackTraces = false;\n };\n longStackTraces = true;\n Promise.prototype._pushContext = Context.prototype._pushContext;\n Promise.prototype._popContext = Context.prototype._popContext;\n Promise._peekContext = Promise.prototype._peekContext = peekContext;\n Promise.prototype._promiseCreated = function() {\n var ctx = this._peekContext();\n if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context,\n enableAsyncHooks, disableAsyncHooks) {\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n (true ||\n util.env(\"BLUEBIRD_DEBUG\") ||\n util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nvar deferUnhandledRejectionCheck;\n(function() {\n var promises = [];\n\n function unhandledRejectionCheck() {\n for (var i = 0; i < promises.length; ++i) {\n promises[i]._notifyUnhandledRejection();\n }\n unhandledRejectionClear();\n }\n\n function unhandledRejectionClear() {\n promises.length = 0;\n }\n\n deferUnhandledRejectionCheck = function(promise) {\n promises.push(promise);\n setTimeout(unhandledRejectionCheck, 1);\n };\n\n es5.defineProperty(Promise, \"_unhandledRejectionCheck\", {\n value: unhandledRejectionCheck\n });\n es5.defineProperty(Promise, \"_unhandledRejectionClear\", {\n value: unhandledRejectionClear\n });\n})();\n\nPromise.prototype.suppressUnhandledRejections = function() {\n var target = this._target();\n target._bitField = ((target._bitField & (~1048576)) |\n 524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 524288) !== 0) return;\n this._setRejectionIsUnhandled();\n deferUnhandledRejectionCheck(this);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._settledValue();\n this._setUnhandledRejectionIsNotified();\n fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~1048576);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var context = Promise._getContext();\n possiblyUnhandledRejection = util.contextBind(context, fn);\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var context = Promise._getContext();\n unhandledRejectionHandled = util.contextBind(context, fn);\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (!config.longStackTraces && longStackTracesIsSupported()) {\n var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n config.longStackTraces = true;\n disableLongStackTraces = function() {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n Context.deactivateLongStackTraces();\n config.longStackTraces = false;\n };\n Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n Context.activateLongStackTraces();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return config.longStackTraces && longStackTracesIsSupported();\n};\n\n\nvar legacyHandlers = {\n unhandledrejection: {\n before: function() {\n var ret = util.global.onunhandledrejection;\n util.global.onunhandledrejection = null;\n return ret;\n },\n after: function(fn) {\n util.global.onunhandledrejection = fn;\n }\n },\n rejectionhandled: {\n before: function() {\n var ret = util.global.onrejectionhandled;\n util.global.onrejectionhandled = null;\n return ret;\n },\n after: function(fn) {\n util.global.onrejectionhandled = fn;\n }\n }\n};\n\nvar fireDomEvent = (function() {\n var dispatch = function(legacy, e) {\n if (legacy) {\n var fn;\n try {\n fn = legacy.before();\n return !util.global.dispatchEvent(e);\n } finally {\n legacy.after(fn);\n }\n } else {\n return !util.global.dispatchEvent(e);\n }\n };\n try {\n if (typeof CustomEvent === \"function\") {\n var event = new CustomEvent(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var eventData = {\n detail: event,\n cancelable: true\n };\n var domEvent = new CustomEvent(name, eventData);\n es5.defineProperty(\n domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(\n domEvent, \"reason\", {value: event.reason});\n\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else if (typeof Event === \"function\") {\n var event = new Event(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = new Event(name, {\n cancelable: true\n });\n domEvent.detail = event;\n es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = document.createEvent(\"CustomEvent\");\n domEvent.initCustomEvent(name, false, true,\n event);\n return dispatch(legacyHandlers[name], domEvent);\n };\n }\n } catch (e) {}\n return function() {\n return false;\n };\n})();\n\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function() {\n return process.emit.apply(process, arguments);\n };\n } else {\n if (!util.global) {\n return function() {\n return false;\n };\n }\n return function(name) {\n var methodName = \"on\" + name.toLowerCase();\n var method = util.global[methodName];\n if (!method) return false;\n method.apply(util.global, [].slice.call(arguments, 1));\n return true;\n };\n }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n promiseCreated: generatePromiseLifecycleEventObject,\n promiseFulfilled: generatePromiseLifecycleEventObject,\n promiseRejected: generatePromiseLifecycleEventObject,\n promiseResolved: generatePromiseLifecycleEventObject,\n promiseCancelled: generatePromiseLifecycleEventObject,\n promiseChained: function(name, promise, child) {\n return {promise: promise, child: child};\n },\n warning: function(name, warning) {\n return {warning: warning};\n },\n unhandledRejection: function (name, reason, promise) {\n return {reason: reason, promise: promise};\n },\n rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent.apply(null, arguments);\n } catch (e) {\n async.throwLater(e);\n globalEventFired = true;\n }\n\n var domEventFired = false;\n try {\n domEventFired = fireDomEvent(name,\n eventToObjectGenerator[name].apply(null, arguments));\n } catch (e) {\n async.throwLater(e);\n domEventFired = true;\n }\n\n return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n opts = Object(opts);\n if (\"longStackTraces\" in opts) {\n if (opts.longStackTraces) {\n Promise.longStackTraces();\n } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n disableLongStackTraces();\n }\n }\n if (\"warnings\" in opts) {\n var warningsOption = opts.warnings;\n config.warnings = !!warningsOption;\n wForgottenReturn = config.warnings;\n\n if (util.isObject(warningsOption)) {\n if (\"wForgottenReturn\" in warningsOption) {\n wForgottenReturn = !!warningsOption.wForgottenReturn;\n }\n }\n }\n if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n if (async.haveItemsQueued()) {\n throw new Error(\n \"cannot enable cancellation after promises are in use\");\n }\n Promise.prototype._clearCancellationData =\n cancellationClearCancellationData;\n Promise.prototype._propagateFrom = cancellationPropagateFrom;\n Promise.prototype._onCancel = cancellationOnCancel;\n Promise.prototype._setOnCancel = cancellationSetOnCancel;\n Promise.prototype._attachCancellationCallback =\n cancellationAttachCancellationCallback;\n Promise.prototype._execute = cancellationExecute;\n propagateFromFunction = cancellationPropagateFrom;\n config.cancellation = true;\n }\n if (\"monitoring\" in opts) {\n if (opts.monitoring && !config.monitoring) {\n config.monitoring = true;\n Promise.prototype._fireEvent = activeFireEvent;\n } else if (!opts.monitoring && config.monitoring) {\n config.monitoring = false;\n Promise.prototype._fireEvent = defaultFireEvent;\n }\n }\n if (\"asyncHooks\" in opts && util.nodeSupportsAsyncResource) {\n var prev = config.asyncHooks;\n var cur = !!opts.asyncHooks;\n if (prev !== cur) {\n config.asyncHooks = cur;\n if (cur) {\n enableAsyncHooks();\n } else {\n disableAsyncHooks();\n }\n }\n }\n return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n try {\n executor(resolve, reject);\n } catch (e) {\n return e;\n }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n ;\n ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n var promise = this;\n try {\n executor(resolve, reject, function(onCancel) {\n if (typeof onCancel !== \"function\") {\n throw new TypeError(\"onCancel must be a function, got: \" +\n util.toString(onCancel));\n }\n promise._attachCancellationCallback(onCancel);\n });\n } catch (e) {\n return e;\n }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n if (!this._isCancellable()) return this;\n\n var previousOnCancel = this._onCancel();\n if (previousOnCancel !== undefined) {\n if (util.isArray(previousOnCancel)) {\n previousOnCancel.push(onCancel);\n } else {\n this._setOnCancel([previousOnCancel, onCancel]);\n }\n } else {\n this._setOnCancel(onCancel);\n }\n}\n\nfunction cancellationOnCancel() {\n return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n this._cancellationParent = undefined;\n this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n if ((flags & 1) !== 0) {\n this._cancellationParent = parent;\n var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n if (branchesRemainingToCancel === undefined) {\n branchesRemainingToCancel = 0;\n }\n parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n }\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n if (canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n}\n\nfunction longStackTracesDereferenceTrace() {\n this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n parent) {\n if (returnValue === undefined && promiseCreated !== null &&\n wForgottenReturn) {\n if (parent !== undefined && parent._returnedNonUndefined()) return;\n if ((promise._bitField & 65535) === 0) return;\n\n if (name) name = name + \" \";\n var handlerLine = \"\";\n var creatorLine = \"\";\n if (promiseCreated._trace) {\n var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n var stack = cleanStack(traceLines);\n for (var i = stack.length - 1; i >= 0; --i) {\n var line = stack[i];\n if (!nodeFramePattern.test(line)) {\n var lineMatches = line.match(parseLinePattern);\n if (lineMatches) {\n handlerLine = \"at \" + lineMatches[1] +\n \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n }\n break;\n }\n }\n\n if (stack.length > 0) {\n var firstUserLine = stack[0];\n for (var i = 0; i < traceLines.length; ++i) {\n\n if (traceLines[i] === firstUserLine) {\n if (i > 0) {\n creatorLine = \"\\n\" + traceLines[i - 1];\n }\n break;\n }\n }\n\n }\n }\n var msg = \"a promise was created in a \" + name +\n \"handler \" + handlerLine + \"but was not returned from it, \" +\n \"see http://goo.gl/rRqMUw\" +\n creatorLine;\n promise._warn(msg, true, promiseCreated);\n }\n}\n\nfunction deprecated(name, replacement) {\n var message = name +\n \" is deprecated and will be removed in a future version.\";\n if (replacement) message += \" Use \" + replacement + \" instead.\";\n return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n if (!config.warnings) return;\n var warning = new Warning(message);\n var ctx;\n if (shouldUseOwnTrace) {\n promise._attachExtraTrace(warning);\n } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n\n if (!activeFireEvent(\"warning\", warning)) {\n formatAndLogError(warning, \"\", true);\n }\n}\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = \" (No stack trace)\" === line ||\n stackFramePattern.test(line);\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0 && error.name != \"SyntaxError\") {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nfunction parseStackAndMessage(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n if (typeof console !== \"undefined\") {\n var message;\n if (util.isObject(error)) {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof printWarning === \"function\") {\n printWarning(message, isSoft);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n if (name === \"unhandledRejection\") {\n if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n formatAndLogError(reason, \"Unhandled rejection \");\n }\n } else {\n activeFireEvent(name, promise);\n }\n}\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj && typeof obj.toString === \"function\"\n ? obj.toString() : util.toString(obj);\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n if (!longStackTracesIsSupported()) return;\n var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n this._promisesCreated = 0;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit += 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit += 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit -= 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit += 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit -= 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n printWarning = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n printWarning = function(message, isSoft) {\n var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n console.warn(color + message + \"\\u001b[0m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n printWarning = function(message, isSoft) {\n console.warn(\"%c\" + message,\n isSoft ? \"color: darkorange\" : \"color: red\");\n };\n }\n}\n\nvar config = {\n warnings: warnings,\n longStackTraces: false,\n cancellation: false,\n monitoring: false,\n asyncHooks: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n asyncHooks: function() {\n return config.asyncHooks;\n },\n longStackTraces: function() {\n return config.longStackTraces;\n },\n warnings: function() {\n return config.warnings;\n },\n cancellation: function() {\n return config.cancellation;\n },\n monitoring: function() {\n return config.monitoring;\n },\n propagateFromFunction: function() {\n return propagateFromFunction;\n },\n boundValueFunction: function() {\n return boundValueFunction;\n },\n checkForgottenReturns: checkForgottenReturns,\n setBounds: setBounds,\n warn: warn,\n deprecated: deprecated,\n CapturedTrace: CapturedTrace,\n fireDomEvent: fireDomEvent,\n fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n return this.value;\n}\nfunction thrower() {\n throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n return this._then(\n thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n if (arguments.length <= 1) {\n return this._then(\n undefined, thrower, undefined, {reason: reason}, undefined);\n } else {\n var _reason = arguments[1];\n var handler = function() {throw _reason;};\n return this.caught(reason, handler);\n }\n};\n\nPromise.prototype.catchReturn = function (value) {\n if (arguments.length <= 1) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n undefined, returner, undefined, {value: value}, undefined);\n } else {\n var _value = arguments[1];\n if (_value instanceof Promise) _value.suppressUnhandledRejections();\n var handler = function() {return _value;};\n return this.caught(value, handler);\n }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n value: errorTypes,\n writable: false,\n enumerable: false,\n configurable: false\n });\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n this.promise = promise;\n this.type = type;\n this.handler = handler;\n this.called = false;\n this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n if (ctx.cancelPromise != null) {\n if (arguments.length > 1) {\n ctx.cancelPromise._reject(reason);\n } else {\n ctx.cancelPromise._cancel();\n }\n ctx.cancelPromise = null;\n return true;\n }\n return false;\n}\n\nfunction succeed() {\n return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n if (checkCancel(this, reason)) return;\n errorObj.e = reason;\n return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n if (!this.called) {\n this.called = true;\n var ret = this.isFinallyHandler()\n ? handler.call(promise._boundValue())\n : handler.call(promise._boundValue(), reasonOrValue);\n if (ret === NEXT_FILTER) {\n return ret;\n } else if (ret !== undefined) {\n promise._setReturnedNonUndefined();\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n if (this.cancelPromise != null) {\n if (maybePromise._isCancelled()) {\n var reason =\n new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n errorObj.e = reason;\n return errorObj;\n } else if (maybePromise.isPending()) {\n maybePromise._attachCancellationCallback(\n new FinallyHandlerCancelReaction(this));\n }\n }\n return maybePromise._then(\n succeed, fail, undefined, this, undefined);\n }\n }\n }\n\n if (promise.isRejected()) {\n checkCancel(this);\n errorObj.e = reasonOrValue;\n return errorObj;\n } else {\n checkCancel(this);\n return reasonOrValue;\n }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n if (typeof handler !== \"function\") return this.then();\n return this._then(success,\n fail,\n undefined,\n new PassThroughHandlerContext(this, type, handler),\n undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThrough(handler,\n 0,\n finallyHandler,\n finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n var len = arguments.length;\n if(len === 1) {\n return this._passThrough(handlerOrPredicate,\n 1,\n undefined,\n finallyHandler);\n } else {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return Promise.reject(new TypeError(\n \"tapCatch statement predicate: \"\n + \"expecting an object but got \" + util.classString(item)\n ));\n }\n }\n catchInstances.length = j;\n var handler = arguments[i];\n return this._passThrough(catchFilter(catchInstances, handler, this),\n 1,\n undefined,\n finallyHandler);\n }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise,\n Proxyable,\n debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n if (debug.cancellation()) {\n var internal = new Promise(INTERNAL);\n var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n this._promise = internal.lastly(function() {\n return _finallyPromise;\n });\n internal._captureStackTrace();\n internal._setOnCancel(this);\n } else {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n }\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n this._yieldedPromise = null;\n this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n this._promise = this._generator = null;\n if (debug.cancellation() && this._finallyPromise !== null) {\n this._finallyPromise._fulfill();\n this._finallyPromise = null;\n }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n if (this._isResolved()) return;\n var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n var result;\n if (!implementsReturn) {\n var reason = new Promise.CancellationError(\n \"generator .return() sentinel\");\n Promise.coroutine.returnSentinel = reason;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n reason);\n this._promise._popContext();\n } else {\n this._promise._pushContext();\n result = tryCatch(this._generator[\"return\"]).call(this._generator,\n undefined);\n this._promise._popContext();\n }\n this._cancellationPhase = true;\n this._yieldedPromise = null;\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n this._yieldedPromise = null;\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n this._yieldedPromise = null;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n if (this._yieldedPromise instanceof Promise) {\n var promise = this._yieldedPromise;\n this._yieldedPromise = null;\n promise.cancel();\n }\n};\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n var promise = this._promise;\n if (result === errorObj) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._rejectCallback(result.e, false);\n }\n }\n\n var value = result.value;\n if (result.done === true) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._resolveCallback(value);\n }\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._promiseRejected(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n this._yieldedPromise = maybePromise;\n maybePromise._proxy(this, null);\n } else if (((bitField & 33554432) !== 0)) {\n Promise._async.invoke(\n this._promiseFulfilled, this, maybePromise._value()\n );\n } else if (((bitField & 16777216) !== 0)) {\n Promise._async.invoke(\n this._promiseRejected, this, maybePromise._reason()\n );\n } else {\n this._promiseCancelled();\n }\n }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n var ret = spawn.promise();\n spawn._generator = generator;\n spawn._promiseFulfilled(undefined);\n return ret;\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n var thenCallback = function(i) {\n return new Function(\"value\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = value; \\n\\\n holder.checkFulfillment(this); \\n\\\n \".replace(/Index/g, i));\n };\n\n var promiseSetter = function(i) {\n return new Function(\"promise\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = promise; \\n\\\n \".replace(/Index/g, i));\n };\n\n var generateHolderClass = function(total) {\n var props = new Array(total);\n for (var i = 0; i < props.length; ++i) {\n props[i] = \"this.p\" + (i+1);\n }\n var assignment = props.join(\" = \") + \" = null;\";\n var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n return \" \\n\\\n promise = \" + prop + \"; \\n\\\n if (promise instanceof Promise) { \\n\\\n promise.cancel(); \\n\\\n } \\n\\\n \";\n }).join(\"\\n\");\n var passedArguments = props.join(\", \");\n var name = \"Holder$\" + total;\n\n\n var code = \"return function(tryCatch, errorObj, Promise, async) { \\n\\\n 'use strict'; \\n\\\n function [TheName](fn) { \\n\\\n [TheProperties] \\n\\\n this.fn = fn; \\n\\\n this.asyncNeeded = true; \\n\\\n this.now = 0; \\n\\\n } \\n\\\n \\n\\\n [TheName].prototype._callFunction = function(promise) { \\n\\\n promise._pushContext(); \\n\\\n var ret = tryCatch(this.fn)([ThePassedArguments]); \\n\\\n promise._popContext(); \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(ret.e, false); \\n\\\n } else { \\n\\\n promise._resolveCallback(ret); \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype.checkFulfillment = function(promise) { \\n\\\n var now = ++this.now; \\n\\\n if (now === [TheTotal]) { \\n\\\n if (this.asyncNeeded) { \\n\\\n async.invoke(this._callFunction, this, promise); \\n\\\n } else { \\n\\\n this._callFunction(promise); \\n\\\n } \\n\\\n \\n\\\n } \\n\\\n }; \\n\\\n \\n\\\n [TheName].prototype._resultCancelled = function() { \\n\\\n [CancellationCode] \\n\\\n }; \\n\\\n \\n\\\n return [TheName]; \\n\\\n }(tryCatch, errorObj, Promise, async); \\n\\\n \";\n\n code = code.replace(/\\[TheName\\]/g, name)\n .replace(/\\[TheTotal\\]/g, total)\n .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n .replace(/\\[TheProperties\\]/g, assignment)\n .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n (tryCatch, errorObj, Promise, async);\n };\n\n var holderClasses = [];\n var thenCallbacks = [];\n var promiseSetters = [];\n\n for (var i = 0; i < 8; ++i) {\n holderClasses.push(generateHolderClass(i + 1));\n thenCallbacks.push(thenCallback(i + 1));\n promiseSetters.push(promiseSetter(i + 1));\n }\n\n reject = function (reason) {\n this._reject(reason);\n };\n}}\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (!true) {\n if (last <= 8 && canEvaluate) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var HolderClass = holderClasses[last - 1];\n var holder = new HolderClass(fn);\n var callbacks = thenCallbacks;\n\n for (var i = 0; i < last; ++i) {\n var maybePromise = tryConvertToPromise(arguments[i], ret);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n maybePromise._then(callbacks[i], reject,\n undefined, ret, holder);\n promiseSetters[i](maybePromise, holder);\n holder.asyncNeeded = false;\n } else if (((bitField & 33554432) !== 0)) {\n callbacks[i].call(ret,\n maybePromise._value(), holder);\n } else if (((bitField & 16777216) !== 0)) {\n ret._reject(maybePromise._reason());\n } else {\n ret._cancel();\n }\n } else {\n callbacks[i].call(ret, maybePromise, holder);\n }\n }\n\n if (!ret._isFateSealed()) {\n if (holder.asyncNeeded) {\n var context = Promise._getContext();\n holder.fn = util.contextBind(context, holder.fn);\n }\n ret._setAsyncGuaranteed();\n ret._setOnCancel(holder);\n }\n return ret;\n }\n }\n }\n var args = [].slice.call(arguments);;\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var context = Promise._getContext();\n this._callback = util.contextBind(context, fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = [];\n async.invoke(this._asyncInit, this, undefined);\n if (util.isArray(promises)) {\n for (var i = 0; i < promises.length; ++i) {\n var maybePromise = promises[i];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n }\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n\n if (index < 0) {\n index = (index * -1) - 1;\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return true;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return false;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var promise = this._promise;\n var callback = this._callback;\n var receiver = promise._boundValue();\n promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n promise\n );\n if (ret === errorObj) {\n this._reject(ret.e);\n return true;\n }\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n if (limit >= 1) this._inFlight++;\n values[index] = maybePromise;\n maybePromise._proxy(this, (index + 1) * -1);\n return false;\n } else if (((bitField & 33554432) !== 0)) {\n ret = maybePromise._value();\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(maybePromise._reason());\n return true;\n } else {\n this._cancel();\n return true;\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n return true;\n }\n return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n\n var limit = 0;\n if (options !== undefined) {\n if (typeof options === \"object\" && options !== null) {\n if (typeof options.concurrency !== \"number\") {\n return Promise.reject(\n new TypeError(\"'concurrency' must be a number but it is \" +\n util.classString(options.concurrency)));\n }\n limit = options.concurrency;\n } else {\n return Promise.reject(new TypeError(\n \"options argument must be an object but it is \" +\n util.classString(options)));\n }\n }\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.method\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value;\n if (arguments.length > 1) {\n debug.deprecated(\"calling Promise.try with more than 1 argument\");\n var arg = arguments[1];\n var ctx = arguments[2];\n value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n : tryCatch(fn).call(ctx, arg);\n } else {\n value = tryCatch(fn)();\n }\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.try\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n return function(err, value) {\n if (promise === null) return;\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (!multiArgs) {\n promise._fulfill(value);\n } else {\n var args = [].slice.call(arguments, 1);;\n promise._fulfill(args);\n }\n promise = null;\n };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var newReason = new Error(reason + \"\");\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\nutil.setReflectHandler(reflectHandler);\n\nvar getDomain = function() {\n var domain = process.domain;\n if (domain === undefined) {\n return null;\n }\n return domain;\n};\nvar getContextDefault = function() {\n return null;\n};\nvar getContextDomain = function() {\n return {\n domain: getDomain(),\n async: null\n };\n};\nvar AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?\n _dereq_(\"async_hooks\").AsyncResource : null;\nvar getContextAsyncHooks = function() {\n return {\n domain: getDomain(),\n async: new AsyncResource(\"Bluebird::Promise\")\n };\n};\nvar getContext = util.isNode ? getContextDomain : getContextDefault;\nutil.notEnumerableProp(Promise, \"_getContext\", getContext);\nvar enableAsyncHooks = function() {\n getContext = getContextAsyncHooks;\n util.notEnumerableProp(Promise, \"_getContext\", getContextAsyncHooks);\n};\nvar disableAsyncHooks = function() {\n getContext = getContextDomain;\n util.notEnumerableProp(Promise, \"_getContext\", getContextDomain);\n};\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n _dereq_(\"./promise_array\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\n\nvar debug = _dereq_(\"./debuggability\")(Promise, Context,\n enableAsyncHooks, disableAsyncHooks);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n if (self == null || self.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (typeof executor !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n }\n\n}\n\nfunction Promise(executor) {\n if (executor !== INTERNAL) {\n check(this, executor);\n }\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._resolveFromExecutor(executor);\n this._promiseCreated();\n this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return apiRejection(\"Catch statement predicate: \" +\n \"expecting an object but got \" + util.classString(item));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n\n if (typeof fn !== \"function\") {\n throw new TypeError(\"The last argument to .catch() \" +\n \"must be a function, got \" + util.toString(fn));\n }\n return this.then(undefined, catchFilter(catchInstances, fn, this));\n }\n return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflectHandler,\n reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n if (debug.warnings() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n var promise =\n this._then(didFulfill, didReject, undefined, undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n if (arguments.length > 0) {\n this._warn(\".all() was passed arguments but it does not take any\");\n }\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n : false;\n var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true);\n }\n if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._setFulfilled();\n ret._rejectionHandler0 = obj;\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n _, receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n var target = this._target();\n var bitField = target._bitField;\n\n if (!haveInternalData) {\n promise._propagateFrom(this, 3);\n promise._captureStackTrace();\n if (receiver === undefined &&\n ((this._bitField & 2097152) !== 0)) {\n if (!((bitField & 50397184) === 0)) {\n receiver = this._boundValue();\n } else {\n receiver = target === this ? undefined : this._boundTo;\n }\n }\n this._fireEvent(\"promiseChained\", this, promise);\n }\n\n var context = getContext();\n if (!((bitField & 50397184) === 0)) {\n var handler, value, settler = target._settlePromiseCtx;\n if (((bitField & 33554432) !== 0)) {\n value = target._rejectionHandler0;\n handler = didFulfill;\n } else if (((bitField & 16777216) !== 0)) {\n value = target._fulfillmentHandler0;\n handler = didReject;\n target._unsetRejectionIsUnhandled();\n } else {\n settler = target._settlePromiseLateCancellationObserver;\n value = new CancellationError(\"late cancellation observer\");\n target._attachExtraTrace(value);\n handler = didReject;\n }\n\n async.invoke(settler, target, {\n handler: util.contextBind(context, handler),\n promise: promise,\n receiver: receiver,\n value: value\n });\n } else {\n target._addCallbacks(didFulfill, didReject, promise,\n receiver, context);\n }\n\n return promise;\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -65536) |\n (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 33554432;\n this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 16777216;\n this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 67108864;\n this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n this._bitField = this._bitField | 65536;\n this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n if (async.hasCustomScheduler()) return;\n var bitField = this._bitField;\n this._bitField = bitField |\n (((bitField & 536870912) >> 2) ^\n 134217728);\n};\n\nPromise.prototype._setNoAsyncGuarantee = function() {\n this._bitField = (this._bitField | 536870912) &\n (~134217728);\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0 ? this._receiver0 : this[\n index * 4 - 4 + 3];\n if (ret === UNDEFINED_BINDING) {\n return undefined;\n } else if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return this[\n index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n var bitField = follower._bitField;\n var fulfill = follower._fulfillmentHandler0;\n var reject = follower._rejectionHandler0;\n var promise = follower._promise0;\n var receiver = follower._receiverAt(0);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n promise,\n receiver,\n context\n) {\n var index = this._length();\n\n if (index >= 65535 - 4) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n this._receiver0 = receiver;\n if (typeof fulfill === \"function\") {\n this._fulfillmentHandler0 = util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 = util.contextBind(context, reject);\n }\n } else {\n var base = index * 4 - 4;\n this[base + 2] = promise;\n this[base + 3] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n util.contextBind(context, reject);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (((this._bitField & 117506048) !== 0)) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n\n var promise = maybePromise._target();\n\n if (promise === this) {\n this._reject(makeSelfResolutionError());\n return;\n }\n\n var bitField = promise._bitField;\n if (((bitField & 50397184) === 0)) {\n var len = this._length();\n if (len > 0) promise._migrateCallback0(this);\n for (var i = 1; i < len; ++i) {\n promise._migrateCallbackAt(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(maybePromise);\n } else if (((bitField & 33554432) !== 0)) {\n this._fulfill(promise._value());\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(promise._reason());\n } else {\n var reason = new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n this._reject(reason);\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n var message = \"a promise was rejected with a non-error: \" +\n util.classString(reason);\n this._warn(message, true);\n }\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n if (executor === INTERNAL) return;\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = this._execute(executor, function(value) {\n promise._resolveCallback(value);\n }, function (reason) {\n promise._rejectCallback(reason, synchronous);\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined) {\n promise._rejectCallback(r, true);\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n var bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY) {\n if (!value || typeof value.length !== \"number\") {\n x = errorObj;\n x.e = new TypeError(\"cannot .spread() a non-array: \" +\n util.classString(value));\n } else {\n x = tryCatch(handler).apply(this._boundValue(), value);\n }\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n var promiseCreated = promise._popContext();\n bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n\n if (x === NEXT_FILTER) {\n promise._reject(value);\n } else if (x === errorObj) {\n promise._rejectCallback(x.e, false);\n } else {\n debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n var isPromise = promise instanceof Promise;\n var bitField = this._bitField;\n var asyncGuaranteed = ((bitField & 134217728) !== 0);\n if (((bitField & 65536) !== 0)) {\n if (isPromise) promise._invokeInternalOnCancel();\n\n if (receiver instanceof PassThroughHandlerContext &&\n receiver.isFinallyHandler()) {\n receiver.cancelPromise = promise;\n if (tryCatch(handler).call(receiver, value) === errorObj) {\n promise._reject(errorObj.e);\n }\n } else if (handler === reflectHandler) {\n promise._fulfill(reflectHandler.call(receiver));\n } else if (receiver instanceof Proxyable) {\n receiver._promiseCancelled(promise);\n } else if (isPromise || promise instanceof PromiseArray) {\n promise._cancel();\n } else {\n receiver.cancel();\n }\n } else if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof Proxyable) {\n if (!receiver._isResolved()) {\n if (((bitField & 33554432) !== 0)) {\n receiver._promiseFulfilled(value, promise);\n } else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n if (((bitField & 33554432) !== 0)) {\n promise._fulfill(value);\n } else {\n promise._reject(value);\n }\n }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n var handler = ctx.handler;\n var promise = ctx.promise;\n var receiver = ctx.receiver;\n var value = ctx.value;\n if (typeof handler === \"function\") {\n if (!(promise instanceof Promise)) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (promise instanceof Promise) {\n promise._reject(value);\n }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n var promise = this._promise0;\n var receiver = this._receiverAt(0);\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n var base = index * 4 - 4;\n this[base + 2] =\n this[base + 3] =\n this[base + 0] =\n this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._reject(err);\n }\n this._setFulfilled();\n this._rejectionHandler0 = value;\n\n if ((bitField & 65535) > 0) {\n if (((bitField & 134217728) !== 0)) {\n this._settlePromises();\n } else {\n async.settlePromises(this);\n }\n this._dereferenceTrace();\n }\n};\n\nPromise.prototype._reject = function (reason) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n this._setRejected();\n this._fulfillmentHandler0 = reason;\n\n if (this._isFinal()) {\n return async.fatalError(reason, util.isNode);\n }\n\n if ((bitField & 65535) > 0) {\n async.settlePromises(this);\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n for (var i = 1; i < len; i++) {\n var handler = this._fulfillmentHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, value);\n }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n for (var i = 1; i < len; i++) {\n var handler = this._rejectionHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, reason);\n }\n};\n\nPromise.prototype._settlePromises = function () {\n var bitField = this._bitField;\n var len = (bitField & 65535);\n\n if (len > 0) {\n if (((bitField & 16842752) !== 0)) {\n var reason = this._fulfillmentHandler0;\n this._settlePromise0(this._rejectionHandler0, reason, bitField);\n this._rejectPromises(len, reason);\n } else {\n var value = this._rejectionHandler0;\n this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n this._fulfillPromises(len, value);\n }\n this._setLength(0);\n }\n this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n var bitField = this._bitField;\n if (((bitField & 33554432) !== 0)) {\n return this._rejectionHandler0;\n } else if (((bitField & 16777216) !== 0)) {\n return this._fulfillmentHandler0;\n }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n get: function () {\n return \"Object\";\n }\n });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n debug.deprecated(\"Promise.defer\", \"new Promise\");\n var promise = new Promise(INTERNAL);\n return {\n promise: promise,\n resolve: deferResolve,\n reject: deferReject\n };\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);\nPromise.Promise = Promise;\nPromise.version = \"3.7.2\";\n_dereq_('./call_get.js')(Promise);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n debug.setBounds(Async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36,\"async_hooks\":undefined}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n case -6: return new Map();\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n if (values instanceof Promise) {\n promise._propagateFrom(values, 3);\n values.suppressUnhandledRejections();\n }\n promise._setOnCancel(this);\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n var bitField = values._bitField;\n ;\n this._values = values;\n\n if (((bitField & 50397184) === 0)) {\n this._promise._setAsyncGuaranteed();\n return values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n } else if (((bitField & 33554432) !== 0)) {\n values = values._value();\n } else if (((bitField & 16777216) !== 0)) {\n return this._reject(values._reason());\n } else {\n return this._cancel();\n }\n }\n values = util.asArray(values);\n if (values === null) {\n var err = apiRejection(\n \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n this._promise._rejectCallback(err, false);\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var result = this._promise;\n var isResolved = false;\n var bitField = null;\n for (var i = 0; i < len; ++i) {\n var maybePromise = tryConvertToPromise(values[i], result);\n\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n bitField = maybePromise._bitField;\n } else {\n bitField = null;\n }\n\n if (isResolved) {\n if (bitField !== null) {\n maybePromise.suppressUnhandledRejections();\n }\n } else if (bitField !== null) {\n if (((bitField & 50397184) === 0)) {\n maybePromise._proxy(this, i);\n this._values[i] = maybePromise;\n } else if (((bitField & 33554432) !== 0)) {\n isResolved = this._promiseFulfilled(maybePromise._value(), i);\n } else if (((bitField & 16777216) !== 0)) {\n isResolved = this._promiseRejected(maybePromise._reason(), i);\n } else {\n isResolved = this._promiseCancelled(i);\n }\n } else {\n isResolved = this._promiseFulfilled(maybePromise, i);\n }\n }\n if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n if (this._isResolved() || !this._promise._isCancellable()) return;\n this._values = null;\n this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n this._cancel();\n return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n this._totalResolved++;\n this._reject(reason);\n return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n if (this._isResolved()) return;\n var values = this._values;\n this._cancel();\n if (values instanceof Promise) {\n values.cancel();\n } else {\n for (var i = 0; i < values.length; ++i) {\n if (values[i] instanceof Promise) {\n values[i].cancel();\n }\n }\n }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n var ret = [likelyArgumentCount];\n var min = Math.max(0, likelyArgumentCount - 1 - 3);\n for(var i = likelyArgumentCount - 1; i >= min; --i) {\n ret.push(i);\n }\n for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n ret.push(i);\n }\n return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n return util.filledRange(\n Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n if (typeof fn.length === \"number\") {\n return Math.max(Math.min(fn.length, 1023 + 1), 0);\n }\n return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n function generateCallForArgumentCount(count) {\n var args = argumentSequence(count).join(\", \");\n var comma = count > 0 ? \", \" : \"\";\n var ret;\n if (shouldProxyThis) {\n ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n } else {\n ret = receiver === undefined\n ? \"ret = callback({{args}}, nodeback); break;\\n\"\n : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n }\n return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n }\n\n function generateArgumentSwitchCase() {\n var ret = \"\";\n for (var i = 0; i < argumentOrder.length; ++i) {\n ret += \"case \" + argumentOrder[i] +\":\" +\n generateCallForArgumentCount(argumentOrder[i]);\n }\n\n ret += \" \\n\\\n default: \\n\\\n var args = new Array(len + 1); \\n\\\n var i = 0; \\n\\\n for (var i = 0; i < len; ++i) { \\n\\\n args[i] = arguments[i]; \\n\\\n } \\n\\\n args[i] = nodeback; \\n\\\n [CodeForCall] \\n\\\n break; \\n\\\n \".replace(\"[CodeForCall]\", (shouldProxyThis\n ? \"ret = callback.apply(this, args);\\n\"\n : \"ret = callback.apply(receiver, args);\\n\"));\n return ret;\n }\n\n var getFunctionCode = typeof callback === \"string\"\n ? (\"this != null ? this['\"+callback+\"'] : fn\")\n : \"fn\";\n var body = \"'use strict'; \\n\\\n var ret = function (Parameters) { \\n\\\n 'use strict'; \\n\\\n var len = arguments.length; \\n\\\n var promise = new Promise(INTERNAL); \\n\\\n promise._captureStackTrace(); \\n\\\n var nodeback = nodebackForPromise(promise, \" + multiArgs + \"); \\n\\\n var ret; \\n\\\n var callback = tryCatch([GetFunctionCode]); \\n\\\n switch(len) { \\n\\\n [CodeForSwitchCase] \\n\\\n } \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n } \\n\\\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \\n\\\n return promise; \\n\\\n }; \\n\\\n notEnumerableProp(ret, '__isPromisified__', true); \\n\\\n return ret; \\n\\\n \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n .replace(\"[GetFunctionCode]\", getFunctionCode);\n body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n return new Function(\"Promise\",\n \"fn\",\n \"receiver\",\n \"withAppended\",\n \"maybeWrapAsError\",\n \"nodebackForPromise\",\n \"tryCatch\",\n \"errorObj\",\n \"notEnumerableProp\",\n \"INTERNAL\",\n body)(\n Promise,\n fn,\n receiver,\n withAppended,\n maybeWrapAsError,\n nodebackForPromise,\n util.tryCatch,\n util.errorObj,\n util.notEnumerableProp,\n INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise, multiArgs);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n if (promisifier === makeNodePromisified) {\n obj[promisifiedKey] =\n makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n } else {\n var promisified = promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key,\n fn, suffix, multiArgs);\n });\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n obj[promisifiedKey] = promisified;\n }\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n return makeNodePromisified(callback, receiver, undefined,\n callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n if (isPromisified(fn)) {\n return fn;\n }\n options = Object(options);\n var receiver = options.context === undefined ? THIS : options.context;\n var multiArgs = !!options.multiArgs;\n var ret = promisify(fn, receiver, multiArgs);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n options = Object(options);\n var multiArgs = !!options.multiArgs;\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier,\n multiArgs);\n promisifyAll(value, suffix, filter, promisifier, multiArgs);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n var index = 0;\n var size = 0;\n\n function extractEntry(value, key) {\n this[index] = value;\n this[index + size] = key;\n index++;\n }\n\n return function mapToEntries(map) {\n size = map.size;\n index = 0;\n var ret = new Array(map.size * 2);\n map.forEach(extractEntry, ret);\n return ret;\n };\n})();\n\nvar entriesToMap = function(entries) {\n var ret = new Es6Map();\n var length = entries.length / 2 | 0;\n for (var i = 0; i < length; ++i) {\n var key = entries[length + i];\n var value = entries[i];\n ret.set(key, value);\n }\n return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n var isMap = false;\n var entries;\n if (Es6Map !== undefined && obj instanceof Es6Map) {\n entries = mapToEntries(obj);\n isMap = true;\n } else {\n var keys = es5.keys(obj);\n var len = keys.length;\n entries = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n entries[i] = obj[key];\n entries[i + len] = key;\n }\n }\n this.constructor$(entries);\n this._isMap = isMap;\n this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val;\n if (this._isMap) {\n val = entriesToMap(this._values);\n } else {\n val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n }\n this._resolve(val);\n return true;\n }\n return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 2);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else {\n promises = util.asArray(promises);\n if (promises === null)\n return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 3);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n this.constructor$(promises);\n var context = Promise._getContext();\n this._fn = util.contextBind(context, fn);\n if (initialValue !== undefined) {\n initialValue = Promise.resolve(initialValue);\n initialValue._attachCancellationCallback(this);\n }\n this._initialValue = initialValue;\n this._currentCancellable = null;\n if(_each === INTERNAL) {\n this._eachValues = Array(this._length);\n } else if (_each === 0) {\n this._eachValues = null;\n } else {\n this._eachValues = undefined;\n }\n this._promise._captureStackTrace();\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n if (this._eachValues !== undefined &&\n this._eachValues !== null &&\n accum !== INTERNAL) {\n this._eachValues.push(accum);\n }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n if (this._eachValues !== null) {\n this._eachValues.push(value);\n }\n return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n this._resolve(this._eachValues !== undefined ? this._eachValues\n : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n this._promise._resolveCallback(value);\n this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n if (sender === this._initialValue) return this._cancel();\n if (this._isResolved()) return;\n this._resultCancelled$();\n if (this._currentCancellable instanceof Promise) {\n this._currentCancellable.cancel();\n }\n if (this._initialValue instanceof Promise) {\n this._initialValue.cancel();\n }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n this._values = values;\n var value;\n var i;\n var length = values.length;\n if (this._initialValue !== undefined) {\n value = this._initialValue;\n i = 0;\n } else {\n value = Promise.resolve(values[0]);\n i = 1;\n }\n\n this._currentCancellable = value;\n\n for (var j = i; j < length; ++j) {\n var maybePromise = values[j];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n\n if (!value.isRejected()) {\n for (; i < length; ++i) {\n var ctx = {\n accum: null,\n value: values[i],\n index: i,\n length: length,\n array: this\n };\n\n value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n\n if ((i & 127) === 0) {\n value._setNoAsyncGuarantee();\n }\n }\n }\n\n if (this._eachValues !== undefined) {\n value = value\n ._then(this._eachComplete, undefined, undefined, this, undefined);\n }\n value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n if (this.isFulfilled()) {\n array._resolve(valueOrReason);\n } else {\n array._reject(valueOrReason);\n }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nfunction gotAccum(accum) {\n this.accum = accum;\n this.array._gotAccum(accum);\n var value = tryConvertToPromise(this.value, this.array._promise);\n if (value instanceof Promise) {\n this.array._currentCancellable = value;\n return value._then(gotValue, undefined, undefined, this, undefined);\n } else {\n return gotValue.call(this, value);\n }\n}\n\nfunction gotValue(value) {\n var array = this.array;\n var promise = array._promise;\n var fn = tryCatch(array._fn);\n promise._pushContext();\n var ret;\n if (array._eachValues !== undefined) {\n ret = fn.call(promise._boundValue(), value, this.index, this.length);\n } else {\n ret = fn.call(promise._boundValue(),\n this.accum, value, this.index, this.length);\n }\n if (ret instanceof Promise) {\n array._currentCancellable = ret;\n }\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n promise\n );\n return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n typeof NativePromise.resolve === \"function\") {\n var nativePromise = NativePromise.resolve();\n schedule = function(fn) {\n nativePromise.then(fn);\n };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n (window.navigator.standalone || window.cordova)) &&\n (\"classList\" in document.documentElement)) {\n schedule = (function() {\n var div = document.createElement(\"div\");\n var opts = {attributes: true};\n var toggleScheduled = false;\n var div2 = document.createElement(\"div\");\n var o2 = new MutationObserver(function() {\n div.classList.toggle(\"foo\");\n toggleScheduled = false;\n });\n o2.observe(div2, opts);\n\n var scheduleToggle = function() {\n if (toggleScheduled) return;\n toggleScheduled = true;\n div2.classList.toggle(\"foo\");\n };\n\n return function schedule(fn) {\n var o = new MutationObserver(function() {\n o.disconnect();\n fn();\n });\n o.observe(div, opts);\n scheduleToggle();\n };\n })();\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 33554432;\n ret._settledValueField = value;\n return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 16777216;\n ret._settledValueField = reason;\n return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n debug.deprecated(\".settle()\", \".reflect()\");\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.allSettled = function (promises) {\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n return true;\n }\n return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n if (this._values instanceof Promise || this._values == null) {\n return this._cancel();\n }\n this._addRejected(CANCELLATION);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n if (this._values[i] !== CANCELLATION) {\n e.push(this._values[i]);\n }\n }\n if (e.length > 0) {\n this._reject(e);\n } else {\n this._cancel();\n }\n return true;\n }\n return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValueField = promise._isFateSealed()\n ? promise._settledValue() : undefined;\n }\n else {\n this._bitField = 0;\n this._settledValueField = undefined;\n }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n target._unsetRejectionIsUnhandled();\n return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) return obj;\n var then = getThen(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfill,\n ret._reject,\n undefined,\n ret,\n null\n );\n return ret;\n }\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction doGetThen(obj) {\n return obj.then;\n}\n\nfunction getThen(obj) {\n try {\n return doGetThen(obj);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n try {\n return hasProp.call(obj, \"_promise0\");\n } catch (e) {\n return false;\n }\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x, resolve, reject);\n synchronous = false;\n\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolve(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function reject(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle) {\n this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n var ret;\n var handle;\n if (value !== undefined) {\n ret = Promise.resolve(value)\n ._then(afterValue, null, null, ms, undefined);\n if (debug.cancellation() && value instanceof Promise) {\n ret._setOnCancel(value);\n }\n } else {\n ret = new Promise(INTERNAL);\n handle = setTimeout(function() { ret._fulfill(); }, +ms);\n if (debug.cancellation()) {\n ret._setOnCancel(new HandleWrapper(handle));\n }\n ret._captureStackTrace();\n }\n ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n var err;\n if (typeof message !== \"string\") {\n if (message instanceof Error) {\n err = message;\n } else {\n err = new TimeoutError(\"operation timed out\");\n }\n } else {\n err = new TimeoutError(message);\n }\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._reject(err);\n\n if (parent != null) {\n parent.cancel();\n }\n};\n\nfunction successClear(value) {\n clearTimeout(this.handle);\n return value;\n}\n\nfunction failureClear(reason) {\n clearTimeout(this.handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret, parent;\n\n var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n if (ret.isPending()) {\n afterTimeout(ret, message, parent);\n }\n }, ms));\n\n if (debug.cancellation()) {\n parent = this.then();\n ret = parent._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n ret._setOnCancel(handleWrapper);\n } else {\n ret = this._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n }\n\n return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext, INTERNAL, debug) {\n var util = _dereq_(\"./util\");\n var TypeError = _dereq_(\"./errors\").TypeError;\n var inherits = _dereq_(\"./util\").inherits;\n var errorObj = util.errorObj;\n var tryCatch = util.tryCatch;\n var NULL = {};\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = new Promise(INTERNAL);\n function iterator() {\n if (i >= len) return ret._fulfill();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret;\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return NULL;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== NULL\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n function ResourceList(length) {\n this.length = length;\n this.promise = null;\n this[length-1] = null;\n }\n\n ResourceList.prototype._resultCancelled = function() {\n var len = this.length;\n for (var i = 0; i < len; ++i) {\n var item = this[i];\n if (item instanceof Promise) {\n item.cancel();\n }\n }\n };\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var input;\n var spreadArgs = true;\n if (len === 2 && Array.isArray(arguments[0])) {\n input = arguments[0];\n len = input.length;\n spreadArgs = false;\n } else {\n input = arguments;\n len--;\n }\n var resources = new ResourceList(len);\n for (var i = 0; i < len; ++i) {\n var resource = input[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var reflectedResources = new Array(resources.length);\n for (var i = 0; i < reflectedResources.length; ++i) {\n reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n }\n\n var resultPromise = Promise.all(reflectedResources)\n .then(function(inspections) {\n for (var i = 0; i < inspections.length; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n errorObj.e = inspection.error();\n return errorObj;\n } else if (!inspection.isFulfilled()) {\n resultPromise.cancel();\n return;\n }\n inspections[i] = inspection.value();\n }\n promise._pushContext();\n\n fn = tryCatch(fn);\n var ret = spreadArgs\n ? fn.apply(undefined, inspections) : fn(inspections);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret, promiseCreated, \"Promise.using\", promise);\n return ret;\n });\n\n var promise = resultPromise.lastly(function() {\n var inspection = new Promise.PromiseInspection(resultPromise);\n return dispose(resources, inspection);\n });\n resources.promise = promise;\n promise._setOnCancel(resources);\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 131072;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 131072) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~131072);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n typeof global !== \"undefined\" ? global :\n this !== undefined ? this : null;\n\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return typeof value === \"function\" ||\n typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function FakeConstructor() {}\n FakeConstructor.prototype = obj;\n var receiver = new FakeConstructor();\n function ic() {\n return typeof receiver.foo;\n }\n ic();\n ic();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction isError(obj) {\n return obj instanceof Error ||\n (obj !== null &&\n typeof obj === \"object\" &&\n typeof obj.message === \"string\" &&\n typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n }\n return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n return Array.from(v);\n } : function(v) {\n var ret = [];\n var it = v[Symbol.iterator]();\n var itResult;\n while (!((itResult = it.next()).done)) {\n ret.push(itResult.value);\n }\n return ret;\n };\n\n asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n return ArrayFrom(v);\n }\n return null;\n };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\";\n\nfunction env(key) {\n return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n if (typeof Promise === \"function\") {\n try {\n var promise = new Promise(function(){});\n if (classString(promise) === \"[object Promise]\") {\n return Promise;\n }\n } catch (e) {}\n }\n}\n\nvar reflectHandler;\nfunction contextBind(ctx, cb) {\n if (ctx === null ||\n typeof cb !== \"function\" ||\n cb === reflectHandler) {\n return cb;\n }\n\n if (ctx.domain !== null) {\n cb = ctx.domain.bind(cb);\n }\n\n var async = ctx.async;\n if (async !== null) {\n var old = cb;\n cb = function() {\n var args = (new Array(2)).concat([].slice.call(arguments));;\n args[0] = old;\n args[1] = this;\n return async.runInAsyncScope.apply(async, args);\n };\n }\n return cb;\n}\n\nvar ret = {\n setReflectHandler: function(fn) {\n reflectHandler = fn;\n },\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n asArray: asArray,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n isError: isError,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n isNode: isNode,\n hasEnvVariables: hasEnvVariables,\n env: env,\n global: globalObject,\n getNativePromise: getNativePromise,\n contextBind: contextBind\n};\nret.isRecentNode = ret.isNode && (function() {\n var version;\n if (process.versions && process.versions.node) {\n version = process.versions.node.split(\".\").map(Number);\n } else if (process.version) {\n version = process.version.split(\".\").map(Number);\n }\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\nret.nodeSupportsAsyncResource = ret.isNode && (function() {\n var supportsAsync = false;\n try {\n var res = _dereq_(\"async_hooks\").AsyncResource;\n supportsAsync = typeof res.prototype.runInAsyncScope === \"function\";\n } catch (e) {\n supportsAsync = false;\n }\n return supportsAsync;\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13,\"async_hooks\":undefined}]},{},[4])(4)\n}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }","/* globals document, clearTimeout, setTimeout, requestAnimationFrame */\nimport m from 'bacta'\nimport Promise from 'bluebird'\nimport { prop as stream } from '../../../stream'\nconst delay = Promise.delay\n\nconst transform = (el,x,y) => () => {\n\trequestAnimationFrame(\n\n\t\t()\t=> el.style.transform = `translate(${x}, ${y})`\n\t)\n\n}\nconst transformX = (el, x) => transform(el, x, '0px')\nconst transformY = (el, y) => transform(el, '0px', y)\n\nconst notifications = []\nconst notification = stream()\n\nconst style = (() => {\n\n\tconst thinRoundSolidWhiteBorder =\n\t\t' br2 b--white b--solid bw1'\n\n\tconst interactive =\n\t\t' dim'\n\n\tconst breathingRoom =\n\t\t' ml3 ph2'\n\n\tconst baseNotification =\n\t\t' f3 absolute w-100 pv2 overflow-hidden'\n\n\tconst errorNotification =\n\t\tbaseNotification\n\t\t+ ' washed-blue bg-red'\n\n\tconst standardNotification =\n\t\tbaseNotification\n\t\t+ ' bg-blue light-gray'\n\n\tconst button =\n\t\tthinRoundSolidWhiteBorder\n\t\t+ interactive\n\t\t+ breathingRoom\n\t\t+ ' border-box lh-title'\n\n\tconst buttonHash =\n\t\t{ backgroundColor: 'inherit'\n\t\t, minWidth: '3em'\n\t\t, transition: '0.2s'\n\t\t, fontSize: '1em'\n\t\t}\n\n\tconst container =\n\t\t'div.notification-container'\n\t\t+'.absolute.overflow-hidden.top-0.left-0.w-100.h-100'\n\n\tconst containerHash =\n\t\t{ pointerEvents: 'none'\n\t\t}\n\n\tconst notificationHash =\n\t\t{ top: '-2em'\n\t\t, left: '0px'\n\t\t, minHeight: '2em'\n\t\t, transform: 'translate(0px, 110vh)'\n\t\t, pointerEvents: 'all'\n\t\t, transition: '1s'\n\t\t}\n\n\tconst notificationContentHash = {\n\t\ttransform: 'translate(0px, 0px)'\n\t\t,transition: '1s'\n\t\t// sidebar closed width +/- padding\n\t\t,paddingLeft: '2.3em'\n\t}\n\n\treturn {\n\t\tbutton\n\t\t,buttonHash\n\t\t,standardNotification\n\t\t,errorNotification\n\t\t,notificationHash\n\t\t,container\n\t\t,containerHash\n\t\t,notificationContentHash\n\t}\n\n})()\n\n\nfunction busyWhile(busy){\n\t//eslint-disable-next-line no-var\n\tvar running = true;\n\n\tbusy()\n\t\t.then(function(){\n\n\t\t\trunning = false\n\t\t\t//eslint-disable-next-line no-param-reassign\n\t\t\tbusy = null\n\t\t})\n\n\treturn function(){\n\t\treturn running\n\t}\n}\n\nconst component = function Notification(container){\n\n\tconst el = stream()\n\tconst elContent = stream()\n\tconst elMessage = stream()\n\tconst elButtons = stream()\n\n\t//eslint-disable-next-line no-var\n\tvar last\n\n\tconst clearNotificationHTML = () => {\n\n\t\telMessage().innerText = elButtons().innerHTML = \"\"\n\t}\n\t/**\n\t * A: if there is a new notification\n\t * if the text is not empty\n\t * \t\tclear it\n\t * \tif the bar is hidden\n\t * \t\tshow it\n\t * if the content is not the right of the screen\n\t * \t\tmove it to the right\n\t * \tpopulate the content el with the new notification message manually\n\t * \tslide the message in\n\t *\n\t * B: if a notification is removed\n\t *\tslide out the current notification to the left\n\t\tempty the content\n\t\tslide to the right to prep for future notifications\n\t\tif there are no more notifications\n\t\t\thide the bar\n\t\tif there are more notifications\n\t\t\tgo to A\n\t*\n\t*/\n\t\tconst newNotification = () => {\n\t\t\tclearNotificationHTML()\n\n\t\t\ttransformX(elContent(), '100vw')()\n\t\t\treturn delay(1000)\n\t\t\t\t.then(showBar)\n\t\t\t\t.then(\n\t\t\t\t\t() => manuallyRenderNotification(notifications[0])\n\t\t\t\t)\n\t\t\t\t.then(transformX(elContent(), '0px'))\n\t\t\t\t.then( () => delay(1000) )\n\t\t}\n\n\t\tconst notificationRemoved = () => {\n\t\t\treturn showBar()\n\t\t\t\t.then( transformX( elContent(), '-100vw') )\n\t\t\t\t.then( () => delay(1000) )\n\t\t\t\t.then(clearNotificationHTML)\n\t\t\t\t.then(\n\t\t\t\t\ttransformX( elContent(), '100vw' )\n\t\t\t\t)\n\t\t\t\t.then( () => delay( 1000) )\n\t\t\t\t.then(function(){\n\t\t\t\t\trenderError(notifications[1] || {})\n\t\t\t\t\tif(notifications.length){\n\t\t\t\t\t\treturn newNotification()\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn hideBar()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\tconst renderError = (notification) => {\n\n\t\tel().className =\n\t\t\tnotification.error\n\t\t\t? el().className\n\t\t\t\t.replace(style.standardNotification, style.errorNotification)\n\t\t\t: el().className\n\t\t\t\t.replace(style.errorNotification, style.standardNotification)\n\t}\n\n\tconst manuallyRenderNotification = (notification) => {\n\t\trequestAnimationFrame(function(){\n\n\n\t\t\telMessage().innerText = notification.message\n\t\t\trenderError(notification)\n\n\t\t\tconst timeoutID = setTimeout(\n\t\t\t\tnext, notification.timeout || 30 * 1000\n\t\t\t)\n\n\t\t\tfunction next(){\n\t\t\t\tclearTimeout(timeoutID)\n\t\t\t\tnotifications.shift()\n\t\t\t\tredraw()\n\t\t\t}\n\n\n\t\t\tArray.from(elButtons().children).forEach(function(el){\n\t\t\t\t//should remove old listeners too\n\t\t\t\tel.remove()\n\t\t\t})\n\n\t\t\telButtons().innerHTML = \"\"\n\t\t\tnotification.buttons.forEach(\n\t\t\t\tb => {\n\n\t\t\t\t\tconst button = document.createElement('button')\n\n\t\t\t\t\tbutton.innerText = b.label\n\n\t\t\t\t\tbutton.className = style.button\n\n\t\t\t\t\tbutton.onclick = () => {\n\t\t\t\t\t\tb.action()\n\t\t\t\t\t\tnext()\n\t\t\t\t\t}\n\t\t\t\t\tObject.assign(button.style, style.buttonHash)\n\t\t\t\t\telButtons().appendChild(button)\n\t\t\t\t}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction MoveBarY(vh){\n\t\treturn function(){\n\t\t\tif(el().style.transform.includes(vh)){\n\t\t\t\treturn Promise.resolve()\n\t\t\t} else {\n\t\t\t\ttransformY(el(), vh)()\n\t\t\t\treturn delay(1000)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst hideBar = MoveBarY('110vh')\n\tconst showBar = MoveBarY('100vh')\n\n\tfunction setupEls({ dom: node }){\n\n\t\t\tel(node)\n\t\t\telContent(node.children[0])\n\t\t\telMessage(node.children[0].children[0])\n\t\t\telButtons(node.children[0].children[1])\n\n\t}\n\n\n\t/**\n\t *\tRedraw Logic\n\t* ------------\n\t*\n\t*\tif animating\n\t*\t\tredraw again when animation completed\n\t*\tif not animating\n\t*\n\t*\t\tif last != notifications[0] //something has happened this frame\n\t*\n\t*\t\t\tif last && notifications[0] //remove notification\n\t*\t\t\tif !last && notifications[0] //new notification\n\t*\n\t*\t\tif last == notifications[0] //most redraws, noop\n\t*/\n\n\t//eslint-disable-next-line no-var\n\tvar animating = busyWhile( () => Promise.resolve() )\n\n\tfunction transitions(){\n\t\tif( animating() ){\n\t\t} else {\n\t\t\tconst something_happened = last != notifications[0]\n\n\t\t\tif (something_happened) {\n\t\t\t\tconst notification_removed = last && !notifications[0]\n\t\t\t\tconst notification_added = !last && notifications[0]\n\t\t\t\tconst notification_queued = last && notifications[0]\n\t\t\t\tif(notification_removed || notification_queued){\n\n\t\t\t\t\tanimating = busyWhile(notificationRemoved)\n\t\t\t\t} else if ( notification_added){\n\n\t\t\t\t\tanimating = busyWhile(newNotification)\n\t\t\t\t} else {}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction redraw(){\n\t\ttransitions()\n\n\t\tlast = notifications[0]\n\t}\n\n\tnotification.map(function(notification){\n\t\tnotifications.push(notification)\n\t\tredraw()\n\n\t\treturn notification\n\t})\n\n\trequestAnimationFrame(function(){\n\n\t\tcontainer.className = 'absolute w-100 h-100 top-0 left-0'\n\t\t// get the zIndex from some module that has all the zIndexes\n\t\t// sidebar + 1 instead of 3\n\n\t\tcontainer.style.zIndex = '3'\n\n\t\tcontainer.style.pointerEvents = \"none\"\n\t})\n\n\tm.render(\n\t\tcontainer\n\t\t,m(style.container\n\n\t\t\t,m('div.notification'\n\t\t\t\t,{ oncreate: setupEls\n\t\t\t\t, style: style.notificationHash\n\t\t\t\t, className: style.standardNotification\n\t\t\t\t}\n\t\t\t\t,m('.notification-content.relative'\n\t\t\t\t\t,{ style: style.notificationContentHash }\n\t\t\t\t\t,m('span')\n\t\t\t\t\t,m('.notification-buttons.di.pl2')\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t)\n}\n\nconst Notifications = {\n\tScheduleGenerated: () => ({\n\t\tmessage: 'A schedule is currently being generated. '\n\t\t\t+ 'It will complete in approximately 5 minutes.'\n\t\t,buttons: [\n\t\t\t{\n\t\t\t\tlabel: 'Ok'\n\t\t\t\t,action: () => {}\n\t\t\t}\n\t\t]\n\t})\n\t,ErrorNotification: () => ({\n\t\tmessage: 'This is an error'\n\t\t,error: true\n\t\t,buttons: [\n\t\t\t{\n\t\t\t\tlabel: 'Ok'\n\t\t\t\t,action: () => {}\n\t\t\t}\n\t\t]\n\t})\n\t,alert: (message) => notification({\n\t\tmessage\n\t\t,buttons: [{ label: 'Ok', action: (I) => I }]\n\t})\n\t,alertError: function(message){\n\t\treturn notification({\n\t\t\tmessage\n\t\t\t,error: true\n\t\t\t,buttons: [{ label: 'Ok', action: (I) => I }]\n\t\t})\n\t}\n}\n\n\nexport { Notifications, notification, component }\nexport default { Notifications, notification, component }","/* global console, setInterval, setTimeout, process */\n\nimport Auth from '../auth'\n\nimport max_time from './max-time.json'\nimport m, { Stream as stream } from 'bacta'\nimport { notification } from '../../components/notification'\n\nimport {\n\tResponse\n\t,Request\n\t,Notification\n\t,$\n\t,env\n} from './types'\nimport { Main, processNotificationRequest, taskRoute } from './index'\n\n\nconst min_poll_time = 1000 * 10\nconst def =\n\t$.create({\n\t\tcheckTypes: !!process.env.CHECK_TYPES\n\t\t, env\n\t})\n\nconst notify =\n\tdef('notify', {}, [Notification, $.Any]\n\t\t,notification\n\t)\n\n\nfunction start(data){\n\n\tconst processTaskRequest = responses =>\n\t\tfunction (schedule_version_id, delay) {\n\n\t\t\tfunction loop() {\n\t\t\t\tdata.organization()\n\t\t\t\t&& data.api.tasks.fetch.byScheduleVersion(\n\t\t\t\t\tschedule_version_id\n\t\t\t\t)\n\t\t\t\t.then(function(task){\n\t\t\t\t\tresponses(\n\t\t\t\t\t\tResponse.Task(task)\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t}\n\n\t\t\tsetTimeout(loop, Math.max( delay, min_poll_time ) )\n\t\t}\n\n\tconst processRequests = (requests, responses) =>\n\t\tRequest.case({\n\t\t\tNotificationRequest:\n\t\t\t\tprocessNotificationRequest(requests, notify)\n\n\t\t\t,Task: processTaskRequest(responses)\n\n\t\t\t,RedirectGantt: task => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst route = taskRoute(task)\n\t\t\t\t\tm.route.set(route)\n\t\t\t\t})\n\t\t\t}\n\t\t\t,Nothing: () => void 0\n\t\t})\n\n\n\tfunction pollScheduleTasks(responses, max_time) {\n\n\t\t// eslint-disable-next-line\n\t\tvar lastResponseTime = Date.now()\n\n\t\tasync function loop( p ){\n\n\t\t\tif ( Auth.stream().auth_token ) {\n\t\t\t\ttry {\n\t\t\t\t\tlet xs = await p( new Date(lastResponseTime) )\n\t\t\t\t\tfor( let x of xs ) {\n\t\t\t\t\t\tconst task = Response.Task(x)\n\t\t\t\t\t\tresponses(task)\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t} finally {\n\t\t\t\t\tlastResponseTime = Date.now()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// first we want all tasks that are running\n\t\tloop(\n\t\t\t() => data.organization()\n\t\t\t? data.api.tasks.fetch.inProgress()\n\t\t\t: []\n\t\t)\n\n\t\t// from then on we want tasks in any state\n\t\t// since lastResponseTime\n\t\tsetInterval(\n\t\t\tloop\n\t\t\t, max_time\n\t\t\t, lastResponseTime => data.organization()\n\t\t\t\t? data.api.tasks.fetch.since( lastResponseTime )\n\t\t\t\t: []\n\t\t)\n\t}\n\n\tfunction Interpreter(component, max_time){\n\n\t\tconst responses = stream()\n\n\t\tconst {requests} = component({ responses })\n\n\t\tpollScheduleTasks(responses, max_time )\n\n\t\trequests.map(\n\t\t\tprocessRequests(requests, responses)\n\t\t)\n\n\t\treturn responses\n\n\t}\n\n\treturn Interpreter(Main, max_time )\n}\n\n// eslint-disable-next-line\nexport default {\n\tstart: start\n}","\"use strict\";\n\nvar flagon = function flagon(A) {\n return {\n contains: function contains(B) {\n return flagon.contains(A, B);\n },\n merge: function merge(B) {\n return flagon(flagon.merge(A, B));\n },\n toggle: function toggle(B) {\n return flagon(flagon.toggle(A, B));\n },\n value: function value() {\n return A;\n },\n toString: function toString() {\n return A.toString(2);\n }\n };\n};\nflagon.contains = function (A, B) {\n return (A & B) == B;\n};\nflagon.merge = function (A, B) {\n return A | B;\n};\nflagon.toggle = function (A, B) {\n return A ^ B;\n};\n\nif (typeof module !== \"undefined\") {\n module.exports = flagon;\n} else {\n window.flagon = flagon;\n}\n\n","\nimport flagon from 'flagon'\nimport * as R from 'ramda'\n\nimport permissions from '../../../api/permissions.json'\n\nconst nameIndex =\n\tR.indexBy( (p) => p.permission_name, permissions )\n\nfunction hasWrite(auth_permissions, permission_name, user){\n\n\tconst permission = nameIndex[permission_name]\n\n\treturn permission != null\n\t\t&& flagon(\n\t\t\tuser\n\t\t\t\t? user.auth_permissions_write()\n\n\t\t\t\t: auth_permissions.auth_permissions_write\n\t\t)\n\t\t.contains(permission.permission_flag)\n}\n\nfunction hasRead(auth_permissions, permission_name, user){\n\n\tconst permission = nameIndex[permission_name]\n\n\treturn permission != null\n\t\t&& flagon(\n\t\t\tuser\n\t\t\t\t? user.auth_permissions_read()\n\n\t\t\t\t: auth_permissions.auth_permissions_read\n\t\t)\n\t\t.contains(permission.permission_flag)\n\n}\n\nexport default {\n\thasRead\n\t,hasWrite\n}","import $UUID from '../../../../types/uuid'\nimport $ from 'sanctuary-def'\nimport SumType from 'sum-type-legacy'\n\nimport moment from 'moment'\nimport {\n\tLoaded\n\t, Loading\n\t, Loadable\n} from '../../../../types/loadable'\n\nimport {\n\tpluck\n\t,concat\n\t,merge\n\t,pipe\n\t,equals\n\t,map\n\t,prop\n\t,sortBy\n\t,over\n\t,lensProp\n} from 'ramda'\n\nimport {\n\tT\n\t,I\n\t,K\n\t,Maybe\n\t,get\n\t,find\n} from '../../utils/safe'\n\nconst Sum = SumType(\n\t$\n\t//eslint-disable-next-line no-undef\n\t,{ checkTypes: !!process.env.CHECK_TYPES\n\n\t\t, env: $.env.concat( $UUID )\n\t}\n)\n\n\n\nconst {\n\tJust\n\t,Nothing\n\t,fromMaybe\n\t,toMaybe\n} = Maybe\n\nconst $SortedScheduleVersionList = $.NullaryType(\n 'harth/SortedScheduleVersionList'\n ,''\n ,x => $.test([], $.Array($ScheduleVersion), x )\n \t&& equals(\n\t\tsortBy(prop('schedule_version_created'), x)\n\t\t\t.reverse(), x)\n)\n\nconst $Schedule = Sum.Named('Schedule', {\n\tEmpty: {}\n\t,Id: { schedule_id: $UUID }\n\t,Loaded: {\n\t\tschedule_id: $UUID\n\t\t,schedule_name: $.String\n\t\t,schedule_versions: $SortedScheduleVersionList\n\t}\n})\n\nconst $ScheduleVersion = Sum.Named('ScheduleVersion', {\n\tEmpty: {}\n\t,Id: { schedule_version_id: $UUID }\n\t,Loaded: {\n\t\tschedule_id: $UUID\n\t\t,schedule_version_id: $UUID\n\t\t,schedule_priority: $.String\n\t\t,label: $.String\n\t\t,schedule_version_created: $.Number\n\t}\n})\n\nconst $or = (name, a,b) =>\n $.NullaryType(\n name + ' ' + [a,b].map( T => T.name ).join(' | ')\n , a.url || b.url\n , x => [a,b].some( T => $.test([], T, x) )\n )\n\nconst $and = (name, a,b) =>\n $.NullaryType(\n name + ' ' + [a,b].map( T => T.name ).join(' & ')\n , a.url || b.url\n , x => [a,b].every( T => $.test([], T, x) )\n )\n\nconst $Labelled = $.RecordType({\n\tlabel: $.String\n})\n\n\nconst $Model = $.RecordType({\n\tschedule: $Schedule\n\t,schedule_version: $ScheduleVersion\n\t,schedules: Loadable.$Type( $.Array($Schedule) )\n\t,schedule_names: $.Array($.String)\n\t,schedule_params: $.Array($.Any)\n\t,versions:\n\t\t$and(\n\t\t\t'SortedScheduleVersionLabelList'\n\t\t\t,$SortedScheduleVersionList\n\t\t\t,$.Array($Labelled)\n\t\t)\n\n\t,progress: $.StrMap($.String)\n})\n\n\nconst $ServerScheduleVersion =\n\t$.RecordType({\n\t\tschedule_id: $UUID\n\t\t,schedule_version_id: $UUID\n\t\t,schedule_priority: $.String\n\t\t,schedule_version_created: $.Number\n\t})\n\nconst q = s => '('+s+')'\n\nconst fromNow = d => moment(d).fromNow()\n\nconst paths =\n\t[\n\t\t['schedule', 'schedule_id']\n\t\t,['schedule', 'schedule_name']\n\t\t,['schedule']\n\t\t,['schedule_version']\n\t\t,['schedule_version', 'schedule_version_id']\n\t\t,['schedule_version', 'schedule_priority']\n\t\t,['schedule_version', 'label']\n\t\t,['schedules']\n\t\t,['schedule_params']\n\t\t,['versions']\n\t\t,['progress']\n\t]\n\nconst $Action =\n\t[paths]\n\t.map(\n\t\tpaths => paths.reduce(function(cases, path){\n\t\t\treturn merge( cases, { [path.join('$')]: {} })\n\t\t}, {})\n\t)\n\t.map(\n\t\tcases => Sum.Named('Action', cases)\n\t)\n\t[0]\n\n\nconst def = $.create({\n\t//eslint-disable-next-line no-undef\n\tcheckTypes: !!process.env.CHECK_TYPES\n\t, env: $.env.concat( [$UUID] )\n})\n\nfunction formatLabel(progress, x){\n\n\tconst id = 'schedule_version_id'\n\tconst created = 'schedule_version_created'\n\tconst name = 'schedule_priority'\n\n\tconst suffix =\n\t\tT(progress, pipe(\n\t\t\tget( x[id] )\n\t\t\t// todo-james use Maybe.filter\n\t\t\t,Maybe.chain( x => x == '' ? Maybe.Nothing() : Maybe.Just(x) )\n\t\t\t,Maybe.map( concat( 'Generating ' ) )\n\t\t\t,fromMaybe( fromNow( x[created] ) )\n\t\t\t,q\n\t\t))\n\n\treturn x[name] + ' ' + suffix\n}\n\nfunction versionsFromSchedule({ progress }, schedule){\n\tconst xs =\n\t\tschedule.schedule_versions\n\n\tconst f = (x) => formatLabel(progress, x)\n\n\treturn T( xs ,pipe(\n\t\tmap( x => merge(x, { label: f(x) } ) )\n\t\t,map( $ScheduleVersion.LoadedOf )\n\t))\n}\n\nconst kit = {\n\tsv(id, schedule_version, schedule) {\n\n\t\tconst ys =\n\t\t\tschedule.schedule_versions || []\n\n\t\tconst x =\n\t\t\tschedule_version[id]\n\n\t\tconst $T =\n\t\t\t$ScheduleVersion\n\n\t\treturn {\n\t\t\tx, ys, id, $T\n\t\t}\n\t}\n\t,s(id, schedules, schedule){\n\t\tconst ys = schedules\n\n\t\tconst x =\n\t\t\tschedule[id]\n\n\t\tconst $T = $Schedule\n\n\t\treturn {\n\t\t\tx, ys, id, $T\n\t\t}\n\t}\n}\n\nconst LoadableType =\n\t$.RecordType({\n\t\tLoaded: $.AnyFunction\n\t\t,LoadedOf: $.AnyFunction\n\t\t,Id: $.AnyFunction\n\t\t,IdOf: $.AnyFunction\n\t\t,Empty: $.AnyFunction\n\t\t,EmptyOf: $.AnyFunction\n\t})\n\nconst LoadableRecord =\n\t$or( 'LoadableRecord', $Schedule, $ScheduleVersion )\n\nconst findLoaded =\n\tdef(\n\t\t'findLoaded'\n\t\t, {}\n\t\t,[$.Any\n\t\t, $.Array( LoadableRecord )\n\t\t, LoadableType\n\t\t, $.String\n\t\t, LoadableRecord\n\t\t]\n\t\t, (x, ys, $T, id) =>\n\t\t\tT( ys, pipe(\n\t\t\t\tfind( y => y[id] == x)\n\t\t\t\t,Maybe.map( $T.LoadedOf )\n\t\t\t\t,Maybe.fromMaybe( $T.Empty() )\n\t\t\t))\n\t)\n\nconst scheduleVersionFromSchedule = (s, sv) =>\n\tT( s, pipe(\n\t\t$Schedule.case({\n\t\t\tLoaded: () => Just(true)\n\t\t\t,Id: () => Just(true)\n\t\t\t,Empty: () => Nothing()\n\t\t})\n\t\t,Maybe.map(function(){\n\n\t\t\tconst {x, ys, $T, id} =\n\t\t\t\tkit.sv(\n\t\t\t\t\t'schedule_version_id'\n\t\t\t\t\t, sv\n\t\t\t\t\t, s\n\t\t\t\t)\n\n\t\t\treturn findLoaded(x,ys,$T,id)\n\t\t})\n\t))\n\nconst initial =\n\tdef('initial', {}, [$Model]\n\t\t,()=> ({\n\t\t\tschedule: $Schedule.Empty()\n\t\t\t,schedule_version: $ScheduleVersion.Empty()\n\t\t\t,schedule_names: []\n\t\t\t,schedule_params: []\n\t\t\t,schedules: Loading()\n\t\t\t,schedule_versions: []\n\t\t\t,versions: []\n\t\t\t,progress: {}\n\t\t})\n\t)\n\nconst update =\n\n\tdef(\n\t\t'update'\n\t\t,{}\n\t\t,[$Model\n\t\t,$.RecordType({\n\t\t\tstate: $Model\n\t\t\t,action: $.Array($.String)\n\t\t})\n\t\t,$Model\n\t\t]\n\t\t,function update(p, { state, action }){\n\n\t\t\tconst $action =\n\t\t\t\t$Action[action.join('$')]()\n\n\t\t\tconst result =\n\t\t\t\t$Action.case({\n\t\t\t\t\tschedule$schedule_id (){\n\n\t\t\t\t\t\treturn T( p.schedules, pipe(\n\t\t\t\t\t\t\tLoadable.map(function(xs){\n\n\t\t\t\t\t\t\t\tconst { x, ys, id, $T } =\n\t\t\t\t\t\t\t\t\tkit.s(\n\t\t\t\t\t\t\t\t\t\t'schedule_id'\n\t\t\t\t\t\t\t\t\t\t, xs\n\t\t\t\t\t\t\t\t\t\t, state.schedule\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\tconst schedule =\n\t\t\t\t\t\t\t\t\tx != null\n\t\t\t\t\t\t\t\t\t? ys.length\n\t\t\t\t\t\t\t\t\t\t? findLoaded(x,ys,$T,id)\n\t\t\t\t\t\t\t\t\t\t: $T.Id( x )\n\t\t\t\t\t\t\t\t\t: $T.Empty()\n\n\t\t\t\t\t\t\t\tconst Y = a => Just(a)\n\t\t\t\t\t\t\t\tconst N = () => Nothing()\n\n\t\t\t\t\t\t\t\tconst schedule_version =\n\t\t\t\t\t\t\t\t\tT(\n\t\t\t\t\t\t\t\t\t\tp.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t, pipe(\n\t\t\t\t\t\t\t\t\t\t\ttoMaybe\n\t\t\t\t\t\t\t\t\t\t\t,Maybe.map( K( schedule ) )\n\t\t\t\t\t\t\t\t\t\t\t,Maybe.chain( $Schedule.case({\n\t\t\t\t\t\t\t\t\t\t\t\tLoaded(){\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst k =\n\t\t\t\t\t\t\t\t\t\t\t\t\t'schedule_version_id'\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst {x,ys,id,$T} =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkit.sv(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tk\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, p.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, schedule\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn Y(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfindLoaded(x,ys,$T,id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,Id: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst sv =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tp.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst id =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsv.schedule_version_id\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn id != null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? $ScheduleVersion\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.Id( id )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: $ScheduleVersion\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.Empty()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,Empty: () => N()\n\t\t\t\t\t\t\t\t\t\t\t}) )\n\t\t\t\t\t\t\t\t\t\t\t,fromMaybe(\n\t\t\t\t\t\t\t\t\t\t\t\t$ScheduleVersion.Empty()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t// if the schedule_version_id\n\t\t\t\t\t\t\t\t// exists in this new schedule\n\t\t\t\t\t\t\t\t// reverify it and keep it\n\t\t\t\t\t\t\t\t// otherwise, set it to empty\n\n\n\t\t\t\t\t\t\t\tconst versions =\n\t\t\t\t\t\t\t\t\t$Schedule.case({\n\t\t\t\t\t\t\t\t\t\tLoaded: () =>\n\t\t\t\t\t\t\t\t\t\t\tversionsFromSchedule(\n\t\t\t\t\t\t\t\t\t\t\t\tp, schedule\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,Id: K([])\n\t\t\t\t\t\t\t\t\t\t,Empty: K([])\n\t\t\t\t\t\t\t\t\t}, schedule)\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t\t\t,schedule_version\n\t\t\t\t\t\t\t\t\t,versions\n\t\t\t\t\t\t\t\t\t,schedule_names:\n\t\t\t\t\t\t\t\t\t\tp.schedule_names\n\t\t\t\t\t\t\t\t\t,schedule_params:\n\t\t\t\t\t\t\t\t\t\tp.schedule_params\n\t\t\t\t\t\t\t\t\t,schedules:\n\t\t\t\t\t\t\t\t\t\tp.schedules\n\t\t\t\t\t\t\t\t\t,progress:\n\t\t\t\t\t\t\t\t\t\tp.progress\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,Loadable.fromLoadable(\n\t\t\t\t\t\t\t\tmerge(p, {\n\t\t\t\t\t\t\t\t\tversions: []\n\t\t\t\t\t\t\t\t\t,schedule:\n\t\t\t\t\t\t\t\t\t\tstate.schedule.schedule_id != null\n\t\t\t\t\t\t\t\t\t\t? $Schedule.case({\n\t\t\t\t\t\t\t\t\t\t\tId: () => p.schedule\n\t\t\t\t\t\t\t\t\t\t\t,Empty: () => $Schedule.Id(\n\t\t\t\t\t\t\t\t\t\t\t\tstate.schedule.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,Loaded: () => $Schedule.Id(\n\t\t\t\t\t\t\t\t\t\t\t\tstate.schedule.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}, p.schedule)\n\t\t\t\t\t\t\t\t\t\t: $Schedule.Empty()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t))\n\t\t\t\t\t}\n\t\t\t\t\t,schedule$schedule_name (){\n\n\t\t\t\t\t\treturn T(p.schedules, pipe(\n\t\t\t\t\t\t\tLoadable.fromLoadable([])\n\t\t\t\t\t\t\t,find(\n\t\t\t\t\t\t\t\ts => equals(\n\t\t\t\t\t\t\t\t\ts.schedule_name\n\t\t\t\t\t\t\t\t\t,state.schedule.schedule_name\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,Maybe.map(function(schedule){\n\t\t\t\t\t\t\t\treturn update(p, {\n\t\t\t\t\t\t\t\t\tstate: merge(p, { schedule })\n\t\t\t\t\t\t\t\t\t,action: ['schedule', 'schedule_id']\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,fromMaybe(p)\n\t\t\t\t\t\t))\n\t\t\t\t\t}\n\t\t\t\t\t,schedules() {\n\t\t\t\t\t\tconst Y = a => Just(a)\n\t\t\t\t\t\tconst N = () => Nothing()\n\n\t\t\t\t\t\tconst schedule =\n\n\t\t\t\t\t\t\tT(\n\t\t\t\t\t\t\t\tp.schedule\n\t\t\t\t\t\t\t\t,pipe(\n\t\t\t\t\t\t\t\t\t$Schedule.case({\n\t\t\t\t\t\t\t\t\t\tId: Y\n\t\t\t\t\t\t\t\t\t\t,Loaded: Y\n\t\t\t\t\t\t\t\t\t\t,Empty: N\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,() => Loadable.toMaybe(\n\t\t\t\t\t\t\t\t\t\tstate.schedules\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,Maybe.map(xs => {\n\t\t\t\t\t\t\t\t\t\tconst {x, ys, $T, id } =\n\t\t\t\t\t\t\t\t\t\t\tkit.s(\n\t\t\t\t\t\t\t\t\t\t\t\t'schedule_id'\n\t\t\t\t\t\t\t\t\t\t\t\t, xs\n\t\t\t\t\t\t\t\t\t\t\t\t, p.schedule\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tconst out =\n\t\t\t\t\t\t\t\t\t\t\tfindLoaded(x,ys,$T,id)\n\n\t\t\t\t\t\t\t\t\t\treturn out\n\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t,fromMaybe(\n\t\t\t\t\t\t\t\t\t\tp.schedule\n\t\t\t\t\t\t\t\t\t\t\t.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t? $Schedule.Id(\n\t\t\t\t\t\t\t\t\t\t\t\tp.schedule\n\t\t\t\t\t\t\t\t\t\t\t\t\t.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: $Schedule.Empty()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst schedule_version =\n\t\t\t\t\t\t\tT( schedule, pipe(\n\t\t\t\t\t\t\t\t$Schedule.case({\n\t\t\t\t\t\t\t\t\tLoaded(){\n\t\t\t\t\t\t\t\t\t\tconst Ma =\n\t\t\t\t\t\t\t\t\t\t\tscheduleVersionFromSchedule(\n\t\t\t\t\t\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t\t\t\t\t\t,p.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\treturn Maybe.fromMaybe(\n\t\t\t\t\t\t\t\t\t\t\t$ScheduleVersion.Empty()\n\t\t\t\t\t\t\t\t\t\t) (Ma)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,Id(){\n\t\t\t\t\t\t\t\t\t\treturn p.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t!= null\n\t\t\t\t\t\t\t\t\t\t\t? $ScheduleVersion.Id(\n\t\t\t\t\t\t\t\t\t\t\t\tp.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t\t\t.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: $ScheduleVersion.Empty()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,Empty(){\n\t\t\t\t\t\t\t\t\t\treturn $ScheduleVersion.Empty()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t))\n\n\t\t\t\t\t\tconst schedule_names =\n\t\t\t\t\t\t\tT( state.schedules, pipe(\n\t\t\t\t\t\t\t\tLoadable.fromLoadable([])\n\t\t\t\t\t\t\t\t, pluck( 'schedule_name' )\n\t\t\t\t\t\t\t))\n\n\t\t\t\t\t\tconst versions =\n\t\t\t\t\t\t\tT(\n\t\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t\t,pipe(\n\t\t\t\t\t\t\t\t\t$Schedule.case({\n\t\t\t\t\t\t\t\t\t\tLoaded(){\n\t\t\t\t\t\t\t\t\t\t\treturn versionsFromSchedule(\n\t\t\t\t\t\t\t\t\t\t\t\tp, schedule\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Id: () => []\n\t\t\t\t\t\t\t\t\t\t,Empty: () => []\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t,schedule_version\n\t\t\t\t\t\t\t,schedule_names\n\t\t\t\t\t\t\t,schedules: state.schedules\n\t\t\t\t\t\t\t,schedule_params: p.schedule_params\n\t\t\t\t\t\t\t,versions\n\t\t\t\t\t\t\t,progress: p.progress\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,schedule(){\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}\n\t\t\t\t\t,schedule_version(){\n\t\t\t\t\t\t// todo-james just accept the state object\n\t\t\t\t\t\t// this function is called once per field anyway\n\t\t\t\t\t\treturn merge(p, {\n\t\t\t\t\t\t\tschedule_version: state.schedule_version\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t,schedule_version$schedule_version_id(){\n\n\t\t\t\t\t\tconst schedule = p.schedule\n\t\t\t\t\t\tconst Y = a => Just(a)\n\t\t\t\t\t\tconst schedule_version =\n\t\t\t\t\t\t\t// todo-james replace with diff :: a -> a -> Maybe a\n\t\t\t\t\t\t\tT( schedule\n\t\t\t\t\t\t\t, pipe(\n\t\t\t\t\t\t\t\t$Schedule.case({\n\t\t\t\t\t\t\t\t\tLoaded(){\n\n\t\t\t\t\t\t\t\t\t\tconst { x, ys, id, $T } =\n\t\t\t\t\t\t\t\t\t\t\tkit.sv(\n\t\t\t\t\t\t\t\t\t\t\t\t'schedule_version_id'\n\t\t\t\t\t\t\t\t\t\t\t\t, state.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t\t, schedule\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\treturn Y(findLoaded(x,ys,$T,id))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,Id(){\n\t\t\t\t\t\t\t\t\t\treturn Y(\n\t\t\t\t\t\t\t\t\t\t\t$ScheduleVersion.Id(\n\t\t\t\t\t\t\t\t\t\t\t\tstate\n\t\t\t\t\t\t\t\t\t\t\t\t\t.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t\t\t.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,Empty(){\n\t\t\t\t\t\t\t\t\t\treturn Y( $ScheduleVersion.Empty() )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t,fromMaybe( p.schedule_version )\n\t\t\t\t\t\t\t))\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t,schedules: p.schedules\n\t\t\t\t\t\t\t,schedule_version\n\t\t\t\t\t\t\t,schedule_names: p.schedule_names\n\t\t\t\t\t\t\t,schedule_params: p.schedule_params\n\t\t\t\t\t\t\t,versions: p.versions\n\t\t\t\t\t\t\t,progress: p.progress\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,schedule_version$schedule_priority(){\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}\n\t\t\t\t\t// todo-james possible race condition when switching\n\t\t\t\t\t// schedule_versions while the progress label is changing\n\t\t\t\t\t// need to compare the label in a more sophisiticated\n\t\t\t\t\t// manner\n\t\t\t\t\t,schedule_version$label(){\n\n\t\t\t\t\t\treturn T(p.versions, pipe(\n\t\t\t\t\t\t\tfind(\n\t\t\t\t\t\t\t\tv => equals(\n\t\t\t\t\t\t\t\t\tv.label\n\t\t\t\t\t\t\t\t\t,state.schedule_version.label\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,Maybe.map(function(schedule_version){\n\t\t\t\t\t\t\t\treturn update(p, {\n\t\t\t\t\t\t\t\t\tstate: merge(p, { schedule_version })\n\t\t\t\t\t\t\t\t\t,action:\n\t\t\t\t\t\t\t\t\t\t['schedule_version'\n\t\t\t\t\t\t\t\t\t\t, 'schedule_version_id'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,fromMaybe(p)\n\t\t\t\t\t\t))\n\t\t\t\t\t}\n\t\t\t\t\t,schedule_params(){\n\t\t\t\t\t\treturn state\n\t\t\t\t\t}\n\t\t\t\t\t,versions(){\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}\n\t\t\t\t\t,progress(){\n\n\t\t\t\t\t\treturn $Schedule.case({\n\t\t\t\t\t\t\tLoaded(){\n\t\t\t\t\t\t\t\tconst progress =\n\t\t\t\t\t\t\t\t\tstate.progress\n\n\t\t\t\t\t\t\t\tconst versions =\n\n\t\t\t\t\t\t\t\t\tversionsFromSchedule(state, state.schedule)\n\n\t\t\t\t\t\t\t\tconst schedule =\n\t\t\t\t\t\t\t\t\tp.schedule\n\n\t\t\t\t\t\t\t\tconst schedule_version =\n\t\t\t\t\t\t\t\t\tscheduleVersionFromSchedule(\n\t\t\t\t\t\t\t\t\t\tschedule\n\t\t\t\t\t\t\t\t\t\t, p.schedule_version\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\treturn merge(p, {\n\t\t\t\t\t\t\t\t\tprogress\n\t\t\t\t\t\t\t\t\t,versions\n\t\t\t\t\t\t\t\t\t,schedule_version:\n\t\t\t\t\t\t\t\t\t\tMaybe.fold(\n\t\t\t\t\t\t\t\t\t\t\tp.schedule_version\n\t\t\t\t\t\t\t\t\t\t\t, I\n\t\t\t\t\t\t\t\t\t\t)(schedule_version)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,Id(){\n\t\t\t\t\t\t\t\treturn p\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,Empty(){\n\t\t\t\t\t\t\t\treturn p\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, state.schedule)\n\t\t\t\t\t}\n\n\t\t\t\t}, $action)\n\n\t\t\treturn result\n\t\t}\n\t)\n\nconst Streams = (streamFromPath, paths)=>\n\tpaths\n\t.map( a => [ a.slice(-1)[0], a ])\n\t.reduce(\n\t\t(streams, [name, path]) => {\n\t\t\treturn merge( streams, { [name]: streamFromPath(path) })\n\t\t}\n\t, {})\n\nconst processServerScheduleVersion =\n\tdef(\n\t\t'processServerScheduleVersion'\n\t\t, {}\n\t\t, [$ServerScheduleVersion, $ScheduleVersion]\n\t\t, pipe(\n\t\t\tsv => merge(\n\t\t\t\tsv\n\t\t\t\t,{ label: formatLabel({}, sv)\n\t\t\t\t}\n\t\t\t)\n\t\t\t,$ScheduleVersion.LoadedOf\n\t\t)\n\t)\n\nfunction processServerSchedules(schedules){\n\n\treturn pipe(\n\t\tsortBy( s => s.schedule_name )\n\t\t// schedules\n\t\t,map( // schedule\n\t\t\tover( //schedule_versions\n\t\t\t\tlensProp('schedule_versions')\n\t\t\t\t,map( processServerScheduleVersion )\n\t\t\t)\n\t\t)\n\n\t\t,map( $Schedule.LoadedOf )\n\t\t,Loaded\n\t) ( schedules )\n}\n\nexport {\n\tupdate\n\t,initial\n\t,paths\n\t,$Model\n\t,$Action\n\t,formatLabel\n\t,Streams\n\t,$Schedule\n\t,$ScheduleVersion\n\t,versionsFromSchedule\n\t,kit\n\t,findLoaded\n\t,scheduleVersionFromSchedule\n\t,processServerSchedules\n}\nexport default {\n\tupdate\n\t,initial\n\t,paths\n\t,$Model\n\t,$Action\n\t,formatLabel\n\t,Streams\n\t,$Schedule\n\t,$ScheduleVersion\n\t,versionsFromSchedule\n\t,kit\n\t,findLoaded\n\t,scheduleVersionFromSchedule\n\t,processServerSchedules\n}","// /* globals Promise */\nimport { Manager } from '../../utils/state-router'\nimport { Loading, Loadable } from '../../../../types/loadable'\nimport Progress from '../../modules/tasks/progress'\nimport m from 'bacta'\n\nimport { prop as stream } from '../../../../stream'\nimport Tasks from '../../modules/tasks/ui'\nimport Permissions from '../permissions'\nconst asyncMergeAll =\n\txs => stream.afterSilence(\n\t\t0\n\t\t, stream.merge(xs)\n\t)\n\nimport {\n\tupdate\n\t, initial\n\t, Streams\n\t, paths\n\t, $Schedule\n\t, $ScheduleVersion\n\t, processServerSchedules\n} from './update'\n\nimport {\n\tindexBy\n\t,pluck\n\t,merge\n\t,pipe\n\t,prop\n} from 'ramda'\n\nexport default function Model(world){\n\n\tconst write = stream()\n\tconst read = stream.scan(update, initial(), write)\n\n\tconst { streamFromPath } = Manager(read, write, 'schedule_model')\n\n\tconst streams = Streams(streamFromPath, paths)\n\n\t// todo-james this is already define in the reducer\n\tconst schedule_names =\n\t\tstreams.schedules.map(\n\t\t\tpipe(\n\t\t\t\tLoadable.map(pluck('schedule_name'))\n\t\t\t\t,Loadable.fromLoadable([])\n\t\t\t)\n\t\t)\n\n\tfunction fetchSchedulesLocal(){\n\t\t// return world.api.schedules.fetch.allStats()\n\t\treturn (\n\t\t\tPermissions.hasRead(world.permissions(), 'schedule_management')\n\t\t\t\t? world.api.schedules.fetch.all()\n\t\t\t\t: Promise.resolve([])\n\t\t)\n\t\t\t.then( processServerSchedules )\n\t\t\t.then(streams.schedules)\n\t\t\t// unwrap value for other modules that use the result?\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction deleteSchedule(schedule_id){\n\t\treturn world.api.schedules.remove(schedule_id)\n\t\t\t.then(fetchSchedulesLocal)\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction fetchSchedulesParameters(){\n\t\treturn (\n\t\t\tPermissions.hasRead(world.permissions(), 'schedule_management')\n\t\t\t\t? world.api.schedules_parameters.fetch.all()\n\t\t\t\t: Promise.resolve([])\n\t\t)\n\t\t\t.then(streams.schedule_params)\n\t\t\t.then(m.redraw)\n\t}\n\n\tconst progress =\n\t\tProgress(\n\t\t\tTasks.start(world)\n\t\t)\n\n\tprogress\n\t\t.map(streams.progress)\n\n\tstream.dropRepeats(\n\t\tworld.permissions\n\t)\n\t.map(function(p){\n\t\tif( p.organization_id != null ){\n\t\t\tPromise.all(\n\t\t\t\t(streams.schedule_params() || []).length == 0\n\t\t\t\t? [ fetchSchedulesLocal(), fetchSchedulesParameters()]\n\t\t\t\t: [ fetchSchedulesLocal() ]\n\t\t\t)\n\t\t\t.then(m.redraw)\n\t\t} else {\n\t\t\tstreams.schedules( Loading() )\n\t\t}\n\n\t\treturn null\n\t})\n\n\tconst schedules = streams.schedules.map(\n\t\tLoadable.fromLoadable([])\n\t)\n\n\tfunction createStatsStream(){\n\n\t\tconst out = stream()\n\n\t\tstream.dropRepeats(\n\t\t\tasyncMergeAll([\n\t\t\t\tstreams.schedules\n\t\t\t\t,progress\n\t\t\t])\n\t\t)\n\t\t.map(([xs, ]) =>\n\t\t\t\tPromise.resolve( xs )\n\t\t\t\t.then(Loadable.fold([], function(){\n\t\t\t\t\tif(\n\t\t\t\t\t\tworld.permissions().organization_id\n\t\t\t\t\t\t&& Permissions.hasRead(\n\t\t\t\t\t\t\tworld.permissions(), 'schedule_management'\n\t\t\t\t\t\t)\n\t\t\t\t\t){\n\t\t\t\t\t\treturn world.api.schedules.fetch.allStats()\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn []\n\t\t\t\t\t}\n\n\t\t\t\t}))\n\t\t\t\t.then( x => out(x) )\n\t\t)\n\n\t\treturn out.map( indexBy( prop('schedule_id') ) )\n\t}\n\n\treturn merge(streams, {\n\t\tselectedVersion:\n\t\t\tstream.dropRepeats(streams.schedule_version)\n\t\t, schedule_id:\n\t\t\tstream.dropRepeats(streams.schedule_id)\n\n\t\t, actual: streams\n\t\t, schedules:\n\t\t\tstream.dropRepeats(schedules)\n\t\t, schedulesLoadable: streams.schedules\n\t\t, scheduleModel: {\n\t\t\tread, write\n\t\t}\n\t\t, createStatsStream\n\t\t, fetchSchedulesLocal\n\t\t, deleteSchedule\n\t\t, schedule_names\n\t\t, fetchSchedulesParameters\n\t\t, types: {\n\t\t\t$Schedule\n\t\t\t,$ScheduleVersion\n\t\t}\n\t})\n}","import * as R from 'ramda'\n\nfunction byProp(prop){\n return R.pipe(\n R.prop(prop), //get the property from the object\n R.nAry(0), //ensure no values are passed in when we call it\n R.call //call it to get the value\n )\n\n}\n\nexport default byProp","var e=[],t=[];function n(n,r){if(n&&\"undefined\"!=typeof document){var a,s=!0===r.prepend?\"prepend\":\"append\",d=!0===r.singleTag,i=\"string\"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName(\"head\")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c()}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n))}function c(){var e=document.createElement(\"style\");if(e.setAttribute(\"type\",\"text/css\"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n new o(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e4) => {\n const n5 = 1 === t3.length ? t3[0] : e4.reduce((e5, s5, n6) => e5 + ((t4) => {\n if (true === t4._$cssResult$)\n return t4.cssText;\n if (\"number\" == typeof t4)\n return t4;\n throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n })(s5) + t3[n6 + 1], t3[0]);\n return new o(n5, t3, s);\n};\nvar S = (s5, n5) => {\n e ? s5.adoptedStyleSheets = n5.map((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet) : n5.forEach((e4) => {\n const n6 = document.createElement(\"style\"), o5 = t.litNonce;\n void 0 !== o5 && n6.setAttribute(\"nonce\", o5), n6.textContent = e4.cssText, s5.appendChild(n6);\n });\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n let e4 = \"\";\n for (const s5 of t4.cssRules)\n e4 += s5.cssText;\n return r(e4);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar s2;\nvar e2 = window;\nvar r2 = e2.trustedTypes;\nvar h = r2 ? r2.emptyScript : \"\";\nvar o2 = e2.reactiveElementPolyfillSupport;\nvar n2 = { toAttribute(t3, i3) {\n switch (i3) {\n case Boolean:\n t3 = t3 ? h : null;\n break;\n case Object:\n case Array:\n t3 = null == t3 ? t3 : JSON.stringify(t3);\n }\n return t3;\n}, fromAttribute(t3, i3) {\n let s5 = t3;\n switch (i3) {\n case Boolean:\n s5 = null !== t3;\n break;\n case Number:\n s5 = null === t3 ? null : Number(t3);\n break;\n case Object:\n case Array:\n try {\n s5 = JSON.parse(t3);\n } catch (t4) {\n s5 = null;\n }\n }\n return s5;\n} };\nvar a = (t3, i3) => i3 !== t3 && (i3 == i3 || t3 == t3);\nvar l = { attribute: true, type: String, converter: n2, reflect: false, hasChanged: a };\nvar d = class extends HTMLElement {\n constructor() {\n super(), this._$Ei = /* @__PURE__ */ new Map(), this.isUpdatePending = false, this.hasUpdated = false, this._$El = null, this.u();\n }\n static addInitializer(t3) {\n var i3;\n this.finalize(), (null !== (i3 = this.h) && void 0 !== i3 ? i3 : this.h = []).push(t3);\n }\n static get observedAttributes() {\n this.finalize();\n const t3 = [];\n return this.elementProperties.forEach((i3, s5) => {\n const e4 = this._$Ep(s5, i3);\n void 0 !== e4 && (this._$Ev.set(e4, s5), t3.push(e4));\n }), t3;\n }\n static createProperty(t3, i3 = l) {\n if (i3.state && (i3.attribute = false), this.finalize(), this.elementProperties.set(t3, i3), !i3.noAccessor && !this.prototype.hasOwnProperty(t3)) {\n const s5 = \"symbol\" == typeof t3 ? Symbol() : \"__\" + t3, e4 = this.getPropertyDescriptor(t3, s5, i3);\n void 0 !== e4 && Object.defineProperty(this.prototype, t3, e4);\n }\n }\n static getPropertyDescriptor(t3, i3, s5) {\n return { get() {\n return this[i3];\n }, set(e4) {\n const r4 = this[t3];\n this[i3] = e4, this.requestUpdate(t3, r4, s5);\n }, configurable: true, enumerable: true };\n }\n static getPropertyOptions(t3) {\n return this.elementProperties.get(t3) || l;\n }\n static finalize() {\n if (this.hasOwnProperty(\"finalized\"))\n return false;\n this.finalized = true;\n const t3 = Object.getPrototypeOf(this);\n if (t3.finalize(), void 0 !== t3.h && (this.h = [...t3.h]), this.elementProperties = new Map(t3.elementProperties), this._$Ev = /* @__PURE__ */ new Map(), this.hasOwnProperty(\"properties\")) {\n const t4 = this.properties, i3 = [...Object.getOwnPropertyNames(t4), ...Object.getOwnPropertySymbols(t4)];\n for (const s5 of i3)\n this.createProperty(s5, t4[s5]);\n }\n return this.elementStyles = this.finalizeStyles(this.styles), true;\n }\n static finalizeStyles(i3) {\n const s5 = [];\n if (Array.isArray(i3)) {\n const e4 = new Set(i3.flat(1 / 0).reverse());\n for (const i4 of e4)\n s5.unshift(c(i4));\n } else\n void 0 !== i3 && s5.push(c(i3));\n return s5;\n }\n static _$Ep(t3, i3) {\n const s5 = i3.attribute;\n return false === s5 ? void 0 : \"string\" == typeof s5 ? s5 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n }\n u() {\n var t3;\n this._$E_ = new Promise((t4) => this.enableUpdating = t4), this._$AL = /* @__PURE__ */ new Map(), this._$Eg(), this.requestUpdate(), null === (t3 = this.constructor.h) || void 0 === t3 || t3.forEach((t4) => t4(this));\n }\n addController(t3) {\n var i3, s5;\n (null !== (i3 = this._$ES) && void 0 !== i3 ? i3 : this._$ES = []).push(t3), void 0 !== this.renderRoot && this.isConnected && (null === (s5 = t3.hostConnected) || void 0 === s5 || s5.call(t3));\n }\n removeController(t3) {\n var i3;\n null === (i3 = this._$ES) || void 0 === i3 || i3.splice(this._$ES.indexOf(t3) >>> 0, 1);\n }\n _$Eg() {\n this.constructor.elementProperties.forEach((t3, i3) => {\n this.hasOwnProperty(i3) && (this._$Ei.set(i3, this[i3]), delete this[i3]);\n });\n }\n createRenderRoot() {\n var t3;\n const s5 = null !== (t3 = this.shadowRoot) && void 0 !== t3 ? t3 : this.attachShadow(this.constructor.shadowRootOptions);\n return S(s5, this.constructor.elementStyles), s5;\n }\n connectedCallback() {\n var t3;\n void 0 === this.renderRoot && (this.renderRoot = this.createRenderRoot()), this.enableUpdating(true), null === (t3 = this._$ES) || void 0 === t3 || t3.forEach((t4) => {\n var i3;\n return null === (i3 = t4.hostConnected) || void 0 === i3 ? void 0 : i3.call(t4);\n });\n }\n enableUpdating(t3) {\n }\n disconnectedCallback() {\n var t3;\n null === (t3 = this._$ES) || void 0 === t3 || t3.forEach((t4) => {\n var i3;\n return null === (i3 = t4.hostDisconnected) || void 0 === i3 ? void 0 : i3.call(t4);\n });\n }\n attributeChangedCallback(t3, i3, s5) {\n this._$AK(t3, s5);\n }\n _$EO(t3, i3, s5 = l) {\n var e4;\n const r4 = this.constructor._$Ep(t3, s5);\n if (void 0 !== r4 && true === s5.reflect) {\n const h3 = (void 0 !== (null === (e4 = s5.converter) || void 0 === e4 ? void 0 : e4.toAttribute) ? s5.converter : n2).toAttribute(i3, s5.type);\n this._$El = t3, null == h3 ? this.removeAttribute(r4) : this.setAttribute(r4, h3), this._$El = null;\n }\n }\n _$AK(t3, i3) {\n var s5;\n const e4 = this.constructor, r4 = e4._$Ev.get(t3);\n if (void 0 !== r4 && this._$El !== r4) {\n const t4 = e4.getPropertyOptions(r4), h3 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== (null === (s5 = t4.converter) || void 0 === s5 ? void 0 : s5.fromAttribute) ? t4.converter : n2;\n this._$El = r4, this[r4] = h3.fromAttribute(i3, t4.type), this._$El = null;\n }\n }\n requestUpdate(t3, i3, s5) {\n let e4 = true;\n void 0 !== t3 && (((s5 = s5 || this.constructor.getPropertyOptions(t3)).hasChanged || a)(this[t3], i3) ? (this._$AL.has(t3) || this._$AL.set(t3, i3), true === s5.reflect && this._$El !== t3 && (void 0 === this._$EC && (this._$EC = /* @__PURE__ */ new Map()), this._$EC.set(t3, s5))) : e4 = false), !this.isUpdatePending && e4 && (this._$E_ = this._$Ej());\n }\n async _$Ej() {\n this.isUpdatePending = true;\n try {\n await this._$E_;\n } catch (t4) {\n Promise.reject(t4);\n }\n const t3 = this.scheduleUpdate();\n return null != t3 && await t3, !this.isUpdatePending;\n }\n scheduleUpdate() {\n return this.performUpdate();\n }\n performUpdate() {\n var t3;\n if (!this.isUpdatePending)\n return;\n this.hasUpdated, this._$Ei && (this._$Ei.forEach((t4, i4) => this[i4] = t4), this._$Ei = void 0);\n let i3 = false;\n const s5 = this._$AL;\n try {\n i3 = this.shouldUpdate(s5), i3 ? (this.willUpdate(s5), null === (t3 = this._$ES) || void 0 === t3 || t3.forEach((t4) => {\n var i4;\n return null === (i4 = t4.hostUpdate) || void 0 === i4 ? void 0 : i4.call(t4);\n }), this.update(s5)) : this._$Ek();\n } catch (t4) {\n throw i3 = false, this._$Ek(), t4;\n }\n i3 && this._$AE(s5);\n }\n willUpdate(t3) {\n }\n _$AE(t3) {\n var i3;\n null === (i3 = this._$ES) || void 0 === i3 || i3.forEach((t4) => {\n var i4;\n return null === (i4 = t4.hostUpdated) || void 0 === i4 ? void 0 : i4.call(t4);\n }), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n }\n _$Ek() {\n this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n }\n get updateComplete() {\n return this.getUpdateComplete();\n }\n getUpdateComplete() {\n return this._$E_;\n }\n shouldUpdate(t3) {\n return true;\n }\n update(t3) {\n void 0 !== this._$EC && (this._$EC.forEach((t4, i3) => this._$EO(i3, this[i3], t4)), this._$EC = void 0), this._$Ek();\n }\n updated(t3) {\n }\n firstUpdated(t3) {\n }\n};\nd.finalized = true, d.elementProperties = /* @__PURE__ */ new Map(), d.elementStyles = [], d.shadowRootOptions = { mode: \"open\" }, null == o2 || o2({ ReactiveElement: d }), (null !== (s2 = e2.reactiveElementVersions) && void 0 !== s2 ? s2 : e2.reactiveElementVersions = []).push(\"1.6.1\");\n\n// node_modules/lit-html/lit-html.js\nvar t2;\nvar i2 = window;\nvar s3 = i2.trustedTypes;\nvar e3 = s3 ? s3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar o3 = `lit$${(Math.random() + \"\").slice(9)}$`;\nvar n3 = \"?\" + o3;\nvar l2 = `<${n3}>`;\nvar h2 = document;\nvar r3 = (t3 = \"\") => h2.createComment(t3);\nvar d2 = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar u = Array.isArray;\nvar c2 = (t3) => u(t3) || \"function\" == typeof (null == t3 ? void 0 : t3[Symbol.iterator]);\nvar v = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar a2 = /-->/g;\nvar f = />/g;\nvar _ = RegExp(`>|[ \t\n\\f\\r](?:([^\\\\s\"'>=/]+)([ \t\n\\f\\r]*=[ \t\n\\f\\r]*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar m = /'/g;\nvar p = /\"/g;\nvar $ = /^(?:script|style|textarea|title)$/i;\nvar g = (t3) => (i3, ...s5) => ({ _$litType$: t3, strings: i3, values: s5 });\nvar y = g(1);\nvar w = g(2);\nvar x = Symbol.for(\"lit-noChange\");\nvar b = Symbol.for(\"lit-nothing\");\nvar T = /* @__PURE__ */ new WeakMap();\nvar A = h2.createTreeWalker(h2, 129, null, false);\nvar E = (t3, i3) => {\n const s5 = t3.length - 1, n5 = [];\n let h3, r4 = 2 === i3 ? \"\" : \"\", d3 = v;\n for (let i4 = 0; i4 < s5; i4++) {\n const s6 = t3[i4];\n let e4, u3, c3 = -1, g2 = 0;\n for (; g2 < s6.length && (d3.lastIndex = g2, u3 = d3.exec(s6), null !== u3); )\n g2 = d3.lastIndex, d3 === v ? \"!--\" === u3[1] ? d3 = a2 : void 0 !== u3[1] ? d3 = f : void 0 !== u3[2] ? ($.test(u3[2]) && (h3 = RegExp(\"\" === u3[0] ? (d3 = null != h3 ? h3 : v, c3 = -1) : void 0 === u3[1] ? c3 = -2 : (c3 = d3.lastIndex - u3[2].length, e4 = u3[1], d3 = void 0 === u3[3] ? _ : '\"' === u3[3] ? p : m) : d3 === p || d3 === m ? d3 = _ : d3 === a2 || d3 === f ? d3 = v : (d3 = _, h3 = void 0);\n const y2 = d3 === _ && t3[i4 + 1].startsWith(\"/>\") ? \" \" : \"\";\n r4 += d3 === v ? s6 + l2 : c3 >= 0 ? (n5.push(e4), s6.slice(0, c3) + \"$lit$\" + s6.slice(c3) + o3 + y2) : s6 + o3 + (-2 === c3 ? (n5.push(void 0), i4) : y2);\n }\n const u2 = r4 + (t3[s5] || \"\") + (2 === i3 ? \"\" : \"\");\n if (!Array.isArray(t3) || !t3.hasOwnProperty(\"raw\"))\n throw Error(\"invalid template strings array\");\n return [void 0 !== e3 ? e3.createHTML(u2) : u2, n5];\n};\nvar C = class {\n constructor({ strings: t3, _$litType$: i3 }, e4) {\n let l4;\n this.parts = [];\n let h3 = 0, d3 = 0;\n const u2 = t3.length - 1, c3 = this.parts, [v2, a3] = E(t3, i3);\n if (this.el = C.createElement(v2, e4), A.currentNode = this.el.content, 2 === i3) {\n const t4 = this.el.content, i4 = t4.firstChild;\n i4.remove(), t4.append(...i4.childNodes);\n }\n for (; null !== (l4 = A.nextNode()) && c3.length < u2; ) {\n if (1 === l4.nodeType) {\n if (l4.hasAttributes()) {\n const t4 = [];\n for (const i4 of l4.getAttributeNames())\n if (i4.endsWith(\"$lit$\") || i4.startsWith(o3)) {\n const s5 = a3[d3++];\n if (t4.push(i4), void 0 !== s5) {\n const t5 = l4.getAttribute(s5.toLowerCase() + \"$lit$\").split(o3), i5 = /([.?@])?(.*)/.exec(s5);\n c3.push({ type: 1, index: h3, name: i5[2], strings: t5, ctor: \".\" === i5[1] ? M : \"?\" === i5[1] ? k : \"@\" === i5[1] ? H : S2 });\n } else\n c3.push({ type: 6, index: h3 });\n }\n for (const i4 of t4)\n l4.removeAttribute(i4);\n }\n if ($.test(l4.tagName)) {\n const t4 = l4.textContent.split(o3), i4 = t4.length - 1;\n if (i4 > 0) {\n l4.textContent = s3 ? s3.emptyScript : \"\";\n for (let s5 = 0; s5 < i4; s5++)\n l4.append(t4[s5], r3()), A.nextNode(), c3.push({ type: 2, index: ++h3 });\n l4.append(t4[i4], r3());\n }\n }\n } else if (8 === l4.nodeType)\n if (l4.data === n3)\n c3.push({ type: 2, index: h3 });\n else {\n let t4 = -1;\n for (; -1 !== (t4 = l4.data.indexOf(o3, t4 + 1)); )\n c3.push({ type: 7, index: h3 }), t4 += o3.length - 1;\n }\n h3++;\n }\n }\n static createElement(t3, i3) {\n const s5 = h2.createElement(\"template\");\n return s5.innerHTML = t3, s5;\n }\n};\nfunction P(t3, i3, s5 = t3, e4) {\n var o5, n5, l4, h3;\n if (i3 === x)\n return i3;\n let r4 = void 0 !== e4 ? null === (o5 = s5._$Co) || void 0 === o5 ? void 0 : o5[e4] : s5._$Cl;\n const u2 = d2(i3) ? void 0 : i3._$litDirective$;\n return (null == r4 ? void 0 : r4.constructor) !== u2 && (null === (n5 = null == r4 ? void 0 : r4._$AO) || void 0 === n5 || n5.call(r4, false), void 0 === u2 ? r4 = void 0 : (r4 = new u2(t3), r4._$AT(t3, s5, e4)), void 0 !== e4 ? (null !== (l4 = (h3 = s5)._$Co) && void 0 !== l4 ? l4 : h3._$Co = [])[e4] = r4 : s5._$Cl = r4), void 0 !== r4 && (i3 = P(t3, r4._$AS(t3, i3.values), r4, e4)), i3;\n}\nvar V = class {\n constructor(t3, i3) {\n this.u = [], this._$AN = void 0, this._$AD = t3, this._$AM = i3;\n }\n get parentNode() {\n return this._$AM.parentNode;\n }\n get _$AU() {\n return this._$AM._$AU;\n }\n v(t3) {\n var i3;\n const { el: { content: s5 }, parts: e4 } = this._$AD, o5 = (null !== (i3 = null == t3 ? void 0 : t3.creationScope) && void 0 !== i3 ? i3 : h2).importNode(s5, true);\n A.currentNode = o5;\n let n5 = A.nextNode(), l4 = 0, r4 = 0, d3 = e4[0];\n for (; void 0 !== d3; ) {\n if (l4 === d3.index) {\n let i4;\n 2 === d3.type ? i4 = new N(n5, n5.nextSibling, this, t3) : 1 === d3.type ? i4 = new d3.ctor(n5, d3.name, d3.strings, this, t3) : 6 === d3.type && (i4 = new I(n5, this, t3)), this.u.push(i4), d3 = e4[++r4];\n }\n l4 !== (null == d3 ? void 0 : d3.index) && (n5 = A.nextNode(), l4++);\n }\n return o5;\n }\n p(t3) {\n let i3 = 0;\n for (const s5 of this.u)\n void 0 !== s5 && (void 0 !== s5.strings ? (s5._$AI(t3, s5, i3), i3 += s5.strings.length - 2) : s5._$AI(t3[i3])), i3++;\n }\n};\nvar N = class {\n constructor(t3, i3, s5, e4) {\n var o5;\n this.type = 2, this._$AH = b, this._$AN = void 0, this._$AA = t3, this._$AB = i3, this._$AM = s5, this.options = e4, this._$Cm = null === (o5 = null == e4 ? void 0 : e4.isConnected) || void 0 === o5 || o5;\n }\n get _$AU() {\n var t3, i3;\n return null !== (i3 = null === (t3 = this._$AM) || void 0 === t3 ? void 0 : t3._$AU) && void 0 !== i3 ? i3 : this._$Cm;\n }\n get parentNode() {\n let t3 = this._$AA.parentNode;\n const i3 = this._$AM;\n return void 0 !== i3 && 11 === t3.nodeType && (t3 = i3.parentNode), t3;\n }\n get startNode() {\n return this._$AA;\n }\n get endNode() {\n return this._$AB;\n }\n _$AI(t3, i3 = this) {\n t3 = P(this, t3, i3), d2(t3) ? t3 === b || null == t3 || \"\" === t3 ? (this._$AH !== b && this._$AR(), this._$AH = b) : t3 !== this._$AH && t3 !== x && this.g(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : c2(t3) ? this.k(t3) : this.g(t3);\n }\n O(t3, i3 = this._$AB) {\n return this._$AA.parentNode.insertBefore(t3, i3);\n }\n T(t3) {\n this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n }\n g(t3) {\n this._$AH !== b && d2(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(h2.createTextNode(t3)), this._$AH = t3;\n }\n $(t3) {\n var i3;\n const { values: s5, _$litType$: e4 } = t3, o5 = \"number\" == typeof e4 ? this._$AC(t3) : (void 0 === e4.el && (e4.el = C.createElement(e4.h, this.options)), e4);\n if ((null === (i3 = this._$AH) || void 0 === i3 ? void 0 : i3._$AD) === o5)\n this._$AH.p(s5);\n else {\n const t4 = new V(o5, this), i4 = t4.v(this.options);\n t4.p(s5), this.T(i4), this._$AH = t4;\n }\n }\n _$AC(t3) {\n let i3 = T.get(t3.strings);\n return void 0 === i3 && T.set(t3.strings, i3 = new C(t3)), i3;\n }\n k(t3) {\n u(this._$AH) || (this._$AH = [], this._$AR());\n const i3 = this._$AH;\n let s5, e4 = 0;\n for (const o5 of t3)\n e4 === i3.length ? i3.push(s5 = new N(this.O(r3()), this.O(r3()), this, this.options)) : s5 = i3[e4], s5._$AI(o5), e4++;\n e4 < i3.length && (this._$AR(s5 && s5._$AB.nextSibling, e4), i3.length = e4);\n }\n _$AR(t3 = this._$AA.nextSibling, i3) {\n var s5;\n for (null === (s5 = this._$AP) || void 0 === s5 || s5.call(this, false, true, i3); t3 && t3 !== this._$AB; ) {\n const i4 = t3.nextSibling;\n t3.remove(), t3 = i4;\n }\n }\n setConnected(t3) {\n var i3;\n void 0 === this._$AM && (this._$Cm = t3, null === (i3 = this._$AP) || void 0 === i3 || i3.call(this, t3));\n }\n};\nvar S2 = class {\n constructor(t3, i3, s5, e4, o5) {\n this.type = 1, this._$AH = b, this._$AN = void 0, this.element = t3, this.name = i3, this._$AM = e4, this.options = o5, s5.length > 2 || \"\" !== s5[0] || \"\" !== s5[1] ? (this._$AH = Array(s5.length - 1).fill(new String()), this.strings = s5) : this._$AH = b;\n }\n get tagName() {\n return this.element.tagName;\n }\n get _$AU() {\n return this._$AM._$AU;\n }\n _$AI(t3, i3 = this, s5, e4) {\n const o5 = this.strings;\n let n5 = false;\n if (void 0 === o5)\n t3 = P(this, t3, i3, 0), n5 = !d2(t3) || t3 !== this._$AH && t3 !== x, n5 && (this._$AH = t3);\n else {\n const e5 = t3;\n let l4, h3;\n for (t3 = o5[0], l4 = 0; l4 < o5.length - 1; l4++)\n h3 = P(this, e5[s5 + l4], i3, l4), h3 === x && (h3 = this._$AH[l4]), n5 || (n5 = !d2(h3) || h3 !== this._$AH[l4]), h3 === b ? t3 = b : t3 !== b && (t3 += (null != h3 ? h3 : \"\") + o5[l4 + 1]), this._$AH[l4] = h3;\n }\n n5 && !e4 && this.j(t3);\n }\n j(t3) {\n t3 === b ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, null != t3 ? t3 : \"\");\n }\n};\nvar M = class extends S2 {\n constructor() {\n super(...arguments), this.type = 3;\n }\n j(t3) {\n this.element[this.name] = t3 === b ? void 0 : t3;\n }\n};\nvar R = s3 ? s3.emptyScript : \"\";\nvar k = class extends S2 {\n constructor() {\n super(...arguments), this.type = 4;\n }\n j(t3) {\n t3 && t3 !== b ? this.element.setAttribute(this.name, R) : this.element.removeAttribute(this.name);\n }\n};\nvar H = class extends S2 {\n constructor(t3, i3, s5, e4, o5) {\n super(t3, i3, s5, e4, o5), this.type = 5;\n }\n _$AI(t3, i3 = this) {\n var s5;\n if ((t3 = null !== (s5 = P(this, t3, i3, 0)) && void 0 !== s5 ? s5 : b) === x)\n return;\n const e4 = this._$AH, o5 = t3 === b && e4 !== b || t3.capture !== e4.capture || t3.once !== e4.once || t3.passive !== e4.passive, n5 = t3 !== b && (e4 === b || o5);\n o5 && this.element.removeEventListener(this.name, this, e4), n5 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n }\n handleEvent(t3) {\n var i3, s5;\n \"function\" == typeof this._$AH ? this._$AH.call(null !== (s5 = null === (i3 = this.options) || void 0 === i3 ? void 0 : i3.host) && void 0 !== s5 ? s5 : this.element, t3) : this._$AH.handleEvent(t3);\n }\n};\nvar I = class {\n constructor(t3, i3, s5) {\n this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i3, this.options = s5;\n }\n get _$AU() {\n return this._$AM._$AU;\n }\n _$AI(t3) {\n P(this, t3);\n }\n};\nvar L = { P: \"$lit$\", A: o3, M: n3, C: 1, L: E, R: V, D: c2, V: P, I: N, H: S2, N: k, U: H, B: M, F: I };\nvar z = i2.litHtmlPolyfillSupport;\nnull == z || z(C, N), (null !== (t2 = i2.litHtmlVersions) && void 0 !== t2 ? t2 : i2.litHtmlVersions = []).push(\"2.6.1\");\nvar Z = (t3, i3, s5) => {\n var e4, o5;\n const n5 = null !== (e4 = null == s5 ? void 0 : s5.renderBefore) && void 0 !== e4 ? e4 : i3;\n let l4 = n5._$litPart$;\n if (void 0 === l4) {\n const t4 = null !== (o5 = null == s5 ? void 0 : s5.renderBefore) && void 0 !== o5 ? o5 : null;\n n5._$litPart$ = l4 = new N(i3.insertBefore(r3(), t4), t4, void 0, null != s5 ? s5 : {});\n }\n return l4._$AI(t3), l4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar l3;\nvar o4;\nvar s4 = class extends d {\n constructor() {\n super(...arguments), this.renderOptions = { host: this }, this._$Dt = void 0;\n }\n createRenderRoot() {\n var t3, e4;\n const i3 = super.createRenderRoot();\n return null !== (t3 = (e4 = this.renderOptions).renderBefore) && void 0 !== t3 || (e4.renderBefore = i3.firstChild), i3;\n }\n update(t3) {\n const i3 = this.render();\n this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this._$Dt = Z(i3, this.renderRoot, this.renderOptions);\n }\n connectedCallback() {\n var t3;\n super.connectedCallback(), null === (t3 = this._$Dt) || void 0 === t3 || t3.setConnected(true);\n }\n disconnectedCallback() {\n var t3;\n super.disconnectedCallback(), null === (t3 = this._$Dt) || void 0 === t3 || t3.setConnected(false);\n }\n render() {\n return x;\n }\n};\ns4.finalized = true, s4._$litElement$ = true, null === (l3 = globalThis.litElementHydrateSupport) || void 0 === l3 || l3.call(globalThis, { LitElement: s4 });\nvar n4 = globalThis.litElementPolyfillSupport;\nnull == n4 || n4({ LitElement: s4 });\n(null !== (o4 = globalThis.litElementVersions) && void 0 !== o4 ? o4 : globalThis.litElementVersions = []).push(\"3.2.0\");\n\nexport {\n i,\n n2 as n,\n y,\n w,\n x,\n b,\n L,\n s4 as s\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n (**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/reactive-element.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\nlit-html/lit-html.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\nlit-element/lit-element.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\nlit-html/is-server.js:\n (**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","import {\n i\n} from \"./chunk.DUT32TWM.js\";\n\n// src/styles/form-control.styles.ts\nvar form_control_styles_default = i`\n .form-control .form-control__label {\n display: none;\n }\n\n .form-control .form-control__help-text {\n display: none;\n }\n\n /* Label */\n .form-control--has-label .form-control__label {\n display: inline-block;\n color: var(--sl-input-label-color);\n margin-bottom: var(--sl-spacing-3x-small);\n }\n\n .form-control--has-label.form-control--small .form-control__label {\n font-size: var(--sl-input-label-font-size-small);\n }\n\n .form-control--has-label.form-control--medium .form-control__label {\n font-size: var(--sl-input-label-font-size-medium);\n }\n\n .form-control--has-label.form-control--large .form-control__label {\n font-size: var(--sl-input-label-font-size-large);\n }\n\n :host([required]) .form-control--has-label .form-control__label::after {\n content: var(--sl-input-required-content);\n margin-inline-start: var(--sl-input-required-content-offset);\n color: var(--sl-input-required-content-color);\n }\n\n /* Help text */\n .form-control--has-help-text .form-control__help-text {\n display: block;\n color: var(--sl-input-help-text-color);\n margin-top: var(--sl-spacing-3x-small);\n }\n\n .form-control--has-help-text.form-control--small .form-control__help-text {\n font-size: var(--sl-input-help-text-font-size-small);\n }\n\n .form-control--has-help-text.form-control--medium .form-control__help-text {\n font-size: var(--sl-input-help-text-font-size-medium);\n }\n\n .form-control--has-help-text.form-control--large .form-control__help-text {\n font-size: var(--sl-input-help-text-font-size-large);\n }\n\n .form-control--has-help-text.form-control--radio-group .form-control__help-text {\n margin-top: var(--sl-spacing-2x-small);\n }\n`;\n\nexport {\n form_control_styles_default\n};\n","import {\n form_control_styles_default\n} from \"./chunk.HP6S5QOV.js\";\nimport {\n component_styles_default\n} from \"./chunk.BCEYT3RT.js\";\nimport {\n i\n} from \"./chunk.DUT32TWM.js\";\n\n// src/components/textarea/textarea.styles.ts\nvar textarea_styles_default = i`\n ${component_styles_default}\n ${form_control_styles_default}\n\n :host {\n display: block;\n }\n\n .textarea {\n display: flex;\n align-items: center;\n position: relative;\n width: 100%;\n font-family: var(--sl-input-font-family);\n font-weight: var(--sl-input-font-weight);\n line-height: var(--sl-line-height-normal);\n letter-spacing: var(--sl-input-letter-spacing);\n vertical-align: middle;\n transition: var(--sl-transition-fast) color, var(--sl-transition-fast) border, var(--sl-transition-fast) box-shadow,\n var(--sl-transition-fast) background-color;\n cursor: text;\n }\n\n /* Standard textareas */\n .textarea--standard {\n background-color: var(--sl-input-background-color);\n border: solid var(--sl-input-border-width) var(--sl-input-border-color);\n }\n\n .textarea--standard:hover:not(.textarea--disabled) {\n background-color: var(--sl-input-background-color-hover);\n border-color: var(--sl-input-border-color-hover);\n }\n .textarea--standard:hover:not(.textarea--disabled) .textarea__control {\n color: var(--sl-input-color-hover);\n }\n\n .textarea--standard.textarea--focused:not(.textarea--disabled) {\n background-color: var(--sl-input-background-color-focus);\n border-color: var(--sl-input-border-color-focus);\n color: var(--sl-input-color-focus);\n box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-input-focus-ring-color);\n }\n\n .textarea--standard.textarea--focused:not(.textarea--disabled) .textarea__control {\n color: var(--sl-input-color-focus);\n }\n\n .textarea--standard.textarea--disabled {\n background-color: var(--sl-input-background-color-disabled);\n border-color: var(--sl-input-border-color-disabled);\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .textarea--standard.textarea--disabled .textarea__control {\n color: var(--sl-input-color-disabled);\n }\n\n .textarea--standard.textarea--disabled .textarea__control::placeholder {\n color: var(--sl-input-placeholder-color-disabled);\n }\n\n /* Filled textareas */\n .textarea--filled {\n border: none;\n background-color: var(--sl-input-filled-background-color);\n color: var(--sl-input-color);\n }\n\n .textarea--filled:hover:not(.textarea--disabled) {\n background-color: var(--sl-input-filled-background-color-hover);\n }\n\n .textarea--filled.textarea--focused:not(.textarea--disabled) {\n background-color: var(--sl-input-filled-background-color-focus);\n outline: var(--sl-focus-ring);\n outline-offset: var(--sl-focus-ring-offset);\n }\n\n .textarea--filled.textarea--disabled {\n background-color: var(--sl-input-filled-background-color-disabled);\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .textarea__control {\n flex: 1 1 auto;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: 1.4;\n color: var(--sl-input-color);\n border: none;\n background: none;\n box-shadow: none;\n cursor: inherit;\n -webkit-appearance: none;\n }\n\n .textarea__control::-webkit-search-decoration,\n .textarea__control::-webkit-search-cancel-button,\n .textarea__control::-webkit-search-results-button,\n .textarea__control::-webkit-search-results-decoration {\n -webkit-appearance: none;\n }\n\n .textarea__control::placeholder {\n color: var(--sl-input-placeholder-color);\n user-select: none;\n }\n\n .textarea__control:focus {\n outline: none;\n }\n\n /*\n * Size modifiers\n */\n\n .textarea--small {\n border-radius: var(--sl-input-border-radius-small);\n font-size: var(--sl-input-font-size-small);\n }\n\n .textarea--small .textarea__control {\n padding: 0.5em var(--sl-input-spacing-small);\n }\n\n .textarea--medium {\n border-radius: var(--sl-input-border-radius-medium);\n font-size: var(--sl-input-font-size-medium);\n }\n\n .textarea--medium .textarea__control {\n padding: 0.5em var(--sl-input-spacing-medium);\n }\n\n .textarea--large {\n border-radius: var(--sl-input-border-radius-large);\n font-size: var(--sl-input-font-size-large);\n }\n\n .textarea--large .textarea__control {\n padding: 0.5em var(--sl-input-spacing-large);\n }\n\n /*\n * Resize types\n */\n\n .textarea--resize-none .textarea__control {\n resize: none;\n }\n\n .textarea--resize-vertical .textarea__control {\n resize: vertical;\n }\n\n .textarea--resize-auto .textarea__control {\n height: auto;\n resize: none;\n overflow-y: hidden;\n }\n`;\n\nexport {\n textarea_styles_default\n};\n","import {\n i\n} from \"./chunk.DUT32TWM.js\";\n\n// src/styles/component.styles.ts\nvar component_styles_default = i`\n :host {\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none !important;\n }\n`;\n\nexport {\n component_styles_default\n};\n","// node_modules/lit-html/directive.js\nvar t = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e = (t2) => (...e2) => ({ _$litDirective$: t2, values: e2 });\nvar i = class {\n constructor(t2) {\n }\n get _$AU() {\n return this._$AM._$AU;\n }\n _$AT(t2, e2, i2) {\n this._$Ct = t2, this._$AM = e2, this._$Ci = i2;\n }\n _$AS(t2, e2) {\n return this.update(t2, e2);\n }\n update(t2, e2) {\n return this.render(...e2);\n }\n};\n\nexport {\n t,\n e,\n i\n};\n/*! Bundled license information:\n\nlit-html/directive.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","import {\n e,\n i,\n t\n} from \"./chunk.UP75L23G.js\";\nimport {\n L,\n b,\n x\n} from \"./chunk.DUT32TWM.js\";\n\n// node_modules/lit-html/directive-helpers.js\nvar { I: l } = L;\nvar e2 = (o) => void 0 === o.strings;\nvar f = {};\nvar s = (o, l3 = f) => o._$AH = l3;\n\n// node_modules/lit-html/directives/live.js\nvar l2 = e(class extends i {\n constructor(r) {\n if (super(r), r.type !== t.PROPERTY && r.type !== t.ATTRIBUTE && r.type !== t.BOOLEAN_ATTRIBUTE)\n throw Error(\"The `live` directive is not allowed on child or event bindings\");\n if (!e2(r))\n throw Error(\"`live` bindings can only contain a single expression\");\n }\n render(r) {\n return r;\n }\n update(i2, [t2]) {\n if (t2 === x || t2 === b)\n return t2;\n const o = i2.element, l3 = i2.name;\n if (i2.type === t.PROPERTY) {\n if (t2 === o[l3])\n return x;\n } else if (i2.type === t.BOOLEAN_ATTRIBUTE) {\n if (!!t2 === o.hasAttribute(l3))\n return x;\n } else if (i2.type === t.ATTRIBUTE && o.getAttribute(l3) === t2 + \"\")\n return x;\n return s(i2), t2;\n }\n});\n\nexport {\n l2 as l\n};\n/*! Bundled license information:\n\nlit-html/directive-helpers.js:\n (**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\nlit-html/directives/live.js:\n (**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __decorateClass = (decorators, target, key, kind) => {\n var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n for (var i = decorators.length - 1, decorator; i >= 0; i--)\n if (decorator = decorators[i])\n result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n if (kind && result)\n __defProp(target, key, result);\n return result;\n};\n\nexport {\n __spreadValues,\n __spreadProps,\n __objRest,\n __export,\n __decorateClass\n};\n","import {\n __spreadProps,\n __spreadValues\n} from \"./chunk.LKA3TPUC.js\";\n\n// src/internal/form.ts\nvar formCollections = /* @__PURE__ */ new WeakMap();\nvar reportValidityOverloads = /* @__PURE__ */ new WeakMap();\nvar userInteractedControls = /* @__PURE__ */ new Set();\nvar interactions = /* @__PURE__ */ new WeakMap();\nvar FormControlController = class {\n constructor(host, options) {\n (this.host = host).addController(this);\n this.options = __spreadValues({\n form: (input) => {\n if (input.hasAttribute(\"form\") && input.getAttribute(\"form\") !== \"\") {\n const root = input.getRootNode();\n const formId = input.getAttribute(\"form\");\n if (formId) {\n return root.getElementById(formId);\n }\n }\n return input.closest(\"form\");\n },\n name: (input) => input.name,\n value: (input) => input.value,\n defaultValue: (input) => input.defaultValue,\n disabled: (input) => {\n var _a;\n return (_a = input.disabled) != null ? _a : false;\n },\n reportValidity: (input) => typeof input.reportValidity === \"function\" ? input.reportValidity() : true,\n setValue: (input, value) => input.value = value,\n assumeInteractionOn: [\"sl-input\"]\n }, options);\n this.handleFormData = this.handleFormData.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n this.handleFormReset = this.handleFormReset.bind(this);\n this.reportFormValidity = this.reportFormValidity.bind(this);\n this.handleInteraction = this.handleInteraction.bind(this);\n }\n hostConnected() {\n const form = this.options.form(this.host);\n if (form) {\n this.attachForm(form);\n }\n interactions.set(this.host, []);\n this.options.assumeInteractionOn.forEach((event) => {\n this.host.addEventListener(event, this.handleInteraction);\n });\n }\n hostDisconnected() {\n this.detachForm();\n interactions.delete(this.host);\n this.options.assumeInteractionOn.forEach((event) => {\n this.host.removeEventListener(event, this.handleInteraction);\n });\n }\n hostUpdated() {\n const form = this.options.form(this.host);\n if (!form) {\n this.detachForm();\n }\n if (form && this.form !== form) {\n this.detachForm();\n this.attachForm(form);\n }\n if (this.host.hasUpdated) {\n this.setValidity(this.host.validity.valid);\n }\n }\n attachForm(form) {\n if (form) {\n this.form = form;\n if (formCollections.has(this.form)) {\n formCollections.get(this.form).add(this.host);\n } else {\n formCollections.set(this.form, /* @__PURE__ */ new Set([this.host]));\n }\n this.form.addEventListener(\"formdata\", this.handleFormData);\n this.form.addEventListener(\"submit\", this.handleFormSubmit);\n this.form.addEventListener(\"reset\", this.handleFormReset);\n if (!reportValidityOverloads.has(this.form)) {\n reportValidityOverloads.set(this.form, this.form.reportValidity);\n this.form.reportValidity = () => this.reportFormValidity();\n }\n } else {\n this.form = void 0;\n }\n }\n detachForm() {\n var _a;\n if (this.form) {\n (_a = formCollections.get(this.form)) == null ? void 0 : _a.delete(this.host);\n this.form.removeEventListener(\"formdata\", this.handleFormData);\n this.form.removeEventListener(\"submit\", this.handleFormSubmit);\n this.form.removeEventListener(\"reset\", this.handleFormReset);\n if (reportValidityOverloads.has(this.form)) {\n this.form.reportValidity = reportValidityOverloads.get(this.form);\n reportValidityOverloads.delete(this.form);\n }\n }\n this.form = void 0;\n }\n handleFormData(event) {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n const isButton = this.host.tagName.toLowerCase() === \"sl-button\";\n if (!disabled && !isButton && typeof name === \"string\" && name.length > 0 && typeof value !== \"undefined\") {\n if (Array.isArray(value)) {\n value.forEach((val) => {\n event.formData.append(name, val.toString());\n });\n } else {\n event.formData.append(name, value.toString());\n }\n }\n }\n handleFormSubmit(event) {\n var _a;\n const disabled = this.options.disabled(this.host);\n const reportValidity = this.options.reportValidity;\n if (this.form && !this.form.noValidate) {\n (_a = formCollections.get(this.form)) == null ? void 0 : _a.forEach((control) => {\n this.setUserInteracted(control, true);\n });\n }\n if (this.form && !this.form.noValidate && !disabled && !reportValidity(this.host)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n handleFormReset() {\n this.options.setValue(this.host, this.options.defaultValue(this.host));\n this.setUserInteracted(this.host, false);\n interactions.set(this.host, []);\n }\n handleInteraction(event) {\n const emittedEvents = interactions.get(this.host);\n if (!emittedEvents.includes(event.type)) {\n emittedEvents.push(event.type);\n }\n if (emittedEvents.length === this.options.assumeInteractionOn.length) {\n this.setUserInteracted(this.host, true);\n }\n }\n reportFormValidity() {\n if (this.form && !this.form.noValidate) {\n const elements = this.form.querySelectorAll(\"*\");\n for (const element of elements) {\n if (typeof element.reportValidity === \"function\") {\n if (!element.reportValidity()) {\n return false;\n }\n }\n }\n }\n return true;\n }\n setUserInteracted(el, hasInteracted) {\n if (hasInteracted) {\n userInteractedControls.add(el);\n } else {\n userInteractedControls.delete(el);\n }\n el.requestUpdate();\n }\n doAction(type, invoker) {\n if (this.form) {\n const button = document.createElement(\"button\");\n button.type = type;\n button.style.position = \"absolute\";\n button.style.width = \"0\";\n button.style.height = \"0\";\n button.style.clipPath = \"inset(50%)\";\n button.style.overflow = \"hidden\";\n button.style.whiteSpace = \"nowrap\";\n if (invoker) {\n button.name = invoker.name;\n button.value = invoker.value;\n [\"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\"].forEach((attr) => {\n if (invoker.hasAttribute(attr)) {\n button.setAttribute(attr, invoker.getAttribute(attr));\n }\n });\n }\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n /** Returns the associated `
` element, if one exists. */\n getForm() {\n var _a;\n return (_a = this.form) != null ? _a : null;\n }\n /** Resets the form, restoring all the control to their default value */\n reset(invoker) {\n this.doAction(\"reset\", invoker);\n }\n /** Submits the form, triggering validation and form data injection. */\n submit(invoker) {\n this.doAction(\"submit\", invoker);\n }\n /**\n * Synchronously sets the form control's validity. Call this when you know the future validity but need to update\n * the host element immediately, i.e. before Lit updates the component in the next update.\n */\n setValidity(isValid) {\n const host = this.host;\n const hasInteracted = Boolean(userInteractedControls.has(host));\n const required = Boolean(host.required);\n host.toggleAttribute(\"data-required\", required);\n host.toggleAttribute(\"data-optional\", !required);\n host.toggleAttribute(\"data-invalid\", !isValid);\n host.toggleAttribute(\"data-valid\", isValid);\n host.toggleAttribute(\"data-user-invalid\", !isValid && hasInteracted);\n host.toggleAttribute(\"data-user-valid\", isValid && hasInteracted);\n }\n /**\n * Updates the form control's validity based on the current value of `host.validity.valid`. Call this when anything\n * that affects constraint validation changes so the component receives the correct validity states.\n */\n updateValidity() {\n const host = this.host;\n this.setValidity(host.validity.valid);\n }\n /**\n * Dispatches a non-bubbling, cancelable custom event of type `sl-invalid`.\n * If the `sl-invalid` event will be cancelled then the original `invalid`\n * event (which may have been passed as argument) will also be cancelled.\n * If no original `invalid` event has been passed then the `sl-invalid`\n * event will be cancelled before being dispatched.\n */\n emitInvalidEvent(originalInvalidEvent) {\n const slInvalidEvent = new CustomEvent(\"sl-invalid\", {\n bubbles: false,\n composed: false,\n cancelable: true\n });\n if (!originalInvalidEvent) {\n slInvalidEvent.preventDefault();\n }\n if (!this.host.dispatchEvent(slInvalidEvent)) {\n originalInvalidEvent == null ? void 0 : originalInvalidEvent.preventDefault();\n }\n }\n};\nvar validValidityState = Object.freeze({\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valid: true,\n valueMissing: false\n});\nvar valueMissingValidityState = Object.freeze(__spreadProps(__spreadValues({}, validValidityState), {\n valid: false,\n valueMissing: true\n}));\nvar customErrorValidityState = Object.freeze(__spreadProps(__spreadValues({}, validValidityState), {\n valid: false,\n customError: true\n}));\n\nexport {\n formCollections,\n FormControlController,\n validValidityState,\n valueMissingValidityState,\n customErrorValidityState\n};\n","// src/internal/slot.ts\nvar HasSlotController = class {\n constructor(host, ...slotNames) {\n this.slotNames = [];\n (this.host = host).addController(this);\n this.slotNames = slotNames;\n this.handleSlotChange = this.handleSlotChange.bind(this);\n }\n hasDefaultSlot() {\n return [...this.host.childNodes].some((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== \"\") {\n return true;\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n const el = node;\n const tagName = el.tagName.toLowerCase();\n if (tagName === \"sl-visually-hidden\") {\n return false;\n }\n if (!el.hasAttribute(\"slot\")) {\n return true;\n }\n }\n return false;\n });\n }\n hasNamedSlot(name) {\n return this.host.querySelector(`:scope > [slot=\"${name}\"]`) !== null;\n }\n test(slotName) {\n return slotName === \"[default]\" ? this.hasDefaultSlot() : this.hasNamedSlot(slotName);\n }\n hostConnected() {\n this.host.shadowRoot.addEventListener(\"slotchange\", this.handleSlotChange);\n }\n hostDisconnected() {\n this.host.shadowRoot.removeEventListener(\"slotchange\", this.handleSlotChange);\n }\n handleSlotChange(event) {\n const slot = event.target;\n if (this.slotNames.includes(\"[default]\") && !slot.name || slot.name && this.slotNames.includes(slot.name)) {\n this.host.requestUpdate();\n }\n }\n};\nfunction getTextContent(slot) {\n if (!slot) {\n return \"\";\n }\n const nodes = slot.assignedNodes({ flatten: true });\n let text = \"\";\n [...nodes].forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n });\n return text;\n}\n\nexport {\n HasSlotController,\n getTextContent\n};\n","import {\n b\n} from \"./chunk.DUT32TWM.js\";\n\n// node_modules/lit-html/directives/if-defined.js\nvar l = (l2) => null != l2 ? l2 : b;\n\nexport {\n l\n};\n/*! Bundled license information:\n\nlit-html/directives/if-defined.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","import {\n e,\n i,\n t\n} from \"./chunk.UP75L23G.js\";\nimport {\n x\n} from \"./chunk.DUT32TWM.js\";\n\n// node_modules/lit-html/directives/class-map.js\nvar o = e(class extends i {\n constructor(t2) {\n var i2;\n if (super(t2), t2.type !== t.ATTRIBUTE || \"class\" !== t2.name || (null === (i2 = t2.strings) || void 0 === i2 ? void 0 : i2.length) > 2)\n throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n }\n render(t2) {\n return \" \" + Object.keys(t2).filter((i2) => t2[i2]).join(\" \") + \" \";\n }\n update(i2, [s]) {\n var r, o2;\n if (void 0 === this.nt) {\n this.nt = /* @__PURE__ */ new Set(), void 0 !== i2.strings && (this.st = new Set(i2.strings.join(\" \").split(/\\s/).filter((t2) => \"\" !== t2)));\n for (const t2 in s)\n s[t2] && !(null === (r = this.st) || void 0 === r ? void 0 : r.has(t2)) && this.nt.add(t2);\n return this.render(s);\n }\n const e2 = i2.element.classList;\n this.nt.forEach((t2) => {\n t2 in s || (e2.remove(t2), this.nt.delete(t2));\n });\n for (const t2 in s) {\n const i3 = !!s[t2];\n i3 === this.nt.has(t2) || (null === (o2 = this.st) || void 0 === o2 ? void 0 : o2.has(t2)) || (i3 ? (e2.add(t2), this.nt.add(t2)) : (e2.remove(t2), this.nt.delete(t2)));\n }\n return x;\n }\n});\n\nexport {\n o\n};\n/*! Bundled license information:\n\nlit-html/directives/class-map.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","import {\n __spreadValues\n} from \"./chunk.LKA3TPUC.js\";\n\n// src/internal/watch.ts\nfunction watch(propertyName, options) {\n const resolvedOptions = __spreadValues({\n waitUntilFirstUpdate: false\n }, options);\n return (proto, decoratedFnName) => {\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n proto.update = function(changedProps) {\n watchedProperties.forEach((property) => {\n const key = property;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n this[decoratedFnName](oldValue, newValue);\n }\n }\n }\n });\n update.call(this, changedProps);\n };\n };\n}\n\nexport {\n watch\n};\n","import {\n s\n} from \"./chunk.DUT32TWM.js\";\nimport {\n __decorateClass,\n __spreadProps,\n __spreadValues\n} from \"./chunk.LKA3TPUC.js\";\n\n// node_modules/@lit/reactive-element/decorators/custom-element.js\nvar e = (e5) => (n2) => \"function\" == typeof n2 ? ((e6, n3) => (customElements.define(e6, n3), n3))(e5, n2) : ((e6, n3) => {\n const { kind: t2, elements: s2 } = n3;\n return { kind: t2, elements: s2, finisher(n4) {\n customElements.define(e6, n4);\n } };\n})(e5, n2);\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar i = (i3, e5) => \"method\" === e5.kind && e5.descriptor && !(\"value\" in e5.descriptor) ? __spreadProps(__spreadValues({}, e5), { finisher(n2) {\n n2.createProperty(e5.key, i3);\n} }) : { kind: \"field\", key: Symbol(), placement: \"own\", descriptor: {}, originalKey: e5.key, initializer() {\n \"function\" == typeof e5.initializer && (this[e5.key] = e5.initializer.call(this));\n}, finisher(n2) {\n n2.createProperty(e5.key, i3);\n} };\nfunction e2(e5) {\n return (n2, t2) => void 0 !== t2 ? ((i3, e6, n3) => {\n e6.constructor.createProperty(n3, i3);\n })(e5, n2, t2) : i(e5, n2);\n}\n\n// node_modules/@lit/reactive-element/decorators/state.js\nfunction t(t2) {\n return e2(__spreadProps(__spreadValues({}, t2), { state: true }));\n}\n\n// node_modules/@lit/reactive-element/decorators/base.js\nvar o = ({ finisher: e5, descriptor: t2 }) => (o2, n2) => {\n var r;\n if (void 0 === n2) {\n const n3 = null !== (r = o2.originalKey) && void 0 !== r ? r : o2.key, i3 = null != t2 ? { kind: \"method\", placement: \"prototype\", key: n3, descriptor: t2(o2.key) } : __spreadProps(__spreadValues({}, o2), { key: n3 });\n return null != e5 && (i3.finisher = function(t3) {\n e5(t3, n3);\n }), i3;\n }\n {\n const r2 = o2.constructor;\n void 0 !== t2 && Object.defineProperty(o2, n2, t2(n2)), null == e5 || e5(r2, n2);\n }\n};\n\n// node_modules/@lit/reactive-element/decorators/query.js\nfunction i2(i3, n2) {\n return o({ descriptor: (o2) => {\n const t2 = { get() {\n var o3, n3;\n return null !== (n3 = null === (o3 = this.renderRoot) || void 0 === o3 ? void 0 : o3.querySelector(i3)) && void 0 !== n3 ? n3 : null;\n }, enumerable: true, configurable: true };\n if (n2) {\n const n3 = \"symbol\" == typeof o2 ? Symbol() : \"__\" + o2;\n t2.get = function() {\n var o3, t3;\n return void 0 === this[n3] && (this[n3] = null !== (t3 = null === (o3 = this.renderRoot) || void 0 === o3 ? void 0 : o3.querySelector(i3)) && void 0 !== t3 ? t3 : null), this[n3];\n };\n }\n return t2;\n } });\n}\n\n// node_modules/@lit/reactive-element/decorators/query-async.js\nfunction e3(e5) {\n return o({ descriptor: (r) => ({ async get() {\n var r2;\n return await this.updateComplete, null === (r2 = this.renderRoot) || void 0 === r2 ? void 0 : r2.querySelector(e5);\n }, enumerable: true, configurable: true }) });\n}\n\n// node_modules/@lit/reactive-element/decorators/query-assigned-elements.js\nvar n;\nvar e4 = null != (null === (n = window.HTMLSlotElement) || void 0 === n ? void 0 : n.prototype.assignedElements) ? (o2, n2) => o2.assignedElements(n2) : (o2, n2) => o2.assignedNodes(n2).filter((o3) => o3.nodeType === Node.ELEMENT_NODE);\n\n// src/internal/shoelace-element.ts\nvar ShoelaceElement = class extends s {\n /** Emits a custom event with more convenient defaults. */\n emit(name, options) {\n const event = new CustomEvent(name, __spreadValues({\n bubbles: true,\n cancelable: false,\n composed: true,\n detail: {}\n }, options));\n this.dispatchEvent(event);\n return event;\n }\n};\n__decorateClass([\n e2()\n], ShoelaceElement.prototype, \"dir\", 2);\n__decorateClass([\n e2()\n], ShoelaceElement.prototype, \"lang\", 2);\n\nexport {\n e,\n e2,\n t,\n i2 as i,\n e3,\n ShoelaceElement\n};\n/*! Bundled license information:\n\n@lit/reactive-element/decorators/custom-element.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/property.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/state.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/base.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/query.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/query-async.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/event-options.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/query-all.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n (**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n\n@lit/reactive-element/decorators/query-assigned-nodes.js:\n (**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *)\n*/\n","import {\n textarea_styles_default\n} from \"./chunk.572XDSW6.js\";\nimport {\n l as l2\n} from \"./chunk.OXFFPZHD.js\";\nimport {\n defaultValue\n} from \"./chunk.ZNRFAEMI.js\";\nimport {\n FormControlController\n} from \"./chunk.M265FVHA.js\";\nimport {\n HasSlotController\n} from \"./chunk.3IYPB6RR.js\";\nimport {\n l\n} from \"./chunk.V47DPYLL.js\";\nimport {\n o\n} from \"./chunk.ORW72H2K.js\";\nimport {\n watch\n} from \"./chunk.VQ3XOPCT.js\";\nimport {\n ShoelaceElement,\n e,\n e2,\n i,\n t\n} from \"./chunk.Z5VD5WTS.js\";\nimport {\n y\n} from \"./chunk.DUT32TWM.js\";\nimport {\n __decorateClass\n} from \"./chunk.LKA3TPUC.js\";\n\n// src/components/textarea/textarea.ts\nvar SlTextarea = class extends ShoelaceElement {\n constructor() {\n super(...arguments);\n this.formControlController = new FormControlController(this, {\n assumeInteractionOn: [\"sl-blur\", \"sl-input\"]\n });\n this.hasSlotController = new HasSlotController(this, \"help-text\", \"label\");\n this.hasFocus = false;\n this.title = \"\";\n this.name = \"\";\n this.value = \"\";\n this.size = \"medium\";\n this.filled = false;\n this.label = \"\";\n this.helpText = \"\";\n this.placeholder = \"\";\n this.rows = 4;\n this.resize = \"vertical\";\n this.disabled = false;\n this.readonly = false;\n this.form = \"\";\n this.required = false;\n this.spellcheck = true;\n this.defaultValue = \"\";\n }\n /** Gets the validity state object */\n get validity() {\n return this.input.validity;\n }\n /** Gets the validation message */\n get validationMessage() {\n return this.input.validationMessage;\n }\n connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(() => this.setTextareaHeight());\n this.updateComplete.then(() => {\n this.setTextareaHeight();\n this.resizeObserver.observe(this.input);\n });\n }\n firstUpdated() {\n this.formControlController.updateValidity();\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this.input);\n }\n handleBlur() {\n this.hasFocus = false;\n this.emit(\"sl-blur\");\n }\n handleChange() {\n this.value = this.input.value;\n this.setTextareaHeight();\n this.emit(\"sl-change\");\n }\n handleFocus() {\n this.hasFocus = true;\n this.emit(\"sl-focus\");\n }\n handleInput() {\n this.value = this.input.value;\n this.emit(\"sl-input\");\n }\n handleInvalid(event) {\n this.formControlController.setValidity(false);\n this.formControlController.emitInvalidEvent(event);\n }\n setTextareaHeight() {\n if (this.resize === \"auto\") {\n this.input.style.height = \"auto\";\n this.input.style.height = `${this.input.scrollHeight}px`;\n } else {\n this.input.style.height = void 0;\n }\n }\n handleDisabledChange() {\n this.formControlController.setValidity(this.disabled);\n }\n handleRowsChange() {\n this.setTextareaHeight();\n }\n async handleValueChange() {\n await this.updateComplete;\n this.formControlController.updateValidity();\n this.setTextareaHeight();\n }\n /** Sets focus on the textarea. */\n focus(options) {\n this.input.focus(options);\n }\n /** Removes focus from the textarea. */\n blur() {\n this.input.blur();\n }\n /** Selects all the text in the textarea. */\n select() {\n this.input.select();\n }\n /** Gets or sets the textarea's scroll position. */\n scrollPosition(position) {\n if (position) {\n if (typeof position.top === \"number\")\n this.input.scrollTop = position.top;\n if (typeof position.left === \"number\")\n this.input.scrollLeft = position.left;\n return void 0;\n }\n return {\n top: this.input.scrollTop,\n left: this.input.scrollTop\n };\n }\n /** Sets the start and end positions of the text selection (0-based). */\n setSelectionRange(selectionStart, selectionEnd, selectionDirection = \"none\") {\n this.input.setSelectionRange(selectionStart, selectionEnd, selectionDirection);\n }\n /** Replaces a range of text with a new string. */\n setRangeText(replacement, start, end, selectMode) {\n this.input.setRangeText(replacement, start, end, selectMode);\n if (this.value !== this.input.value) {\n this.value = this.input.value;\n }\n if (this.value !== this.input.value) {\n this.value = this.input.value;\n this.setTextareaHeight();\n }\n }\n /** Checks for validity but does not show a validation message. Returns `true` when valid and `false` when invalid. */\n checkValidity() {\n return this.input.checkValidity();\n }\n /** Checks for validity and shows the browser's validation message if the control is invalid. */\n reportValidity() {\n return this.input.reportValidity();\n }\n /** Sets a custom validation message. Pass an empty string to restore validity. */\n setCustomValidity(message) {\n this.input.setCustomValidity(message);\n this.formControlController.updateValidity();\n }\n render() {\n const hasLabelSlot = this.hasSlotController.test(\"label\");\n const hasHelpTextSlot = this.hasSlotController.test(\"help-text\");\n const hasLabel = this.label ? true : !!hasLabelSlot;\n const hasHelpText = this.helpText ? true : !!hasHelpTextSlot;\n return y`\n \n \n ${this.label}\n \n\n
\n \n \n
\n \n\n \n ${this.helpText}\n \n \n `;\n }\n};\nSlTextarea.styles = textarea_styles_default;\n__decorateClass([\n i(\".textarea__control\")\n], SlTextarea.prototype, \"input\", 2);\n__decorateClass([\n t()\n], SlTextarea.prototype, \"hasFocus\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"title\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"name\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"value\", 2);\n__decorateClass([\n e2({ reflect: true })\n], SlTextarea.prototype, \"size\", 2);\n__decorateClass([\n e2({ type: Boolean, reflect: true })\n], SlTextarea.prototype, \"filled\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"label\", 2);\n__decorateClass([\n e2({ attribute: \"help-text\" })\n], SlTextarea.prototype, \"helpText\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"placeholder\", 2);\n__decorateClass([\n e2({ type: Number })\n], SlTextarea.prototype, \"rows\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"resize\", 2);\n__decorateClass([\n e2({ type: Boolean, reflect: true })\n], SlTextarea.prototype, \"disabled\", 2);\n__decorateClass([\n e2({ type: Boolean, reflect: true })\n], SlTextarea.prototype, \"readonly\", 2);\n__decorateClass([\n e2({ reflect: true })\n], SlTextarea.prototype, \"form\", 2);\n__decorateClass([\n e2({ type: Boolean, reflect: true })\n], SlTextarea.prototype, \"required\", 2);\n__decorateClass([\n e2({ type: Number })\n], SlTextarea.prototype, \"minlength\", 2);\n__decorateClass([\n e2({ type: Number })\n], SlTextarea.prototype, \"maxlength\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"autocapitalize\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"autocorrect\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"autocomplete\", 2);\n__decorateClass([\n e2({ type: Boolean })\n], SlTextarea.prototype, \"autofocus\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"enterkeyhint\", 2);\n__decorateClass([\n e2({\n type: Boolean,\n converter: {\n // Allow \"true|false\" attribute values but keep the property boolean\n fromAttribute: (value) => !value || value === \"false\" ? false : true,\n toAttribute: (value) => value ? \"true\" : \"false\"\n }\n })\n], SlTextarea.prototype, \"spellcheck\", 2);\n__decorateClass([\n e2()\n], SlTextarea.prototype, \"inputmode\", 2);\n__decorateClass([\n defaultValue()\n], SlTextarea.prototype, \"defaultValue\", 2);\n__decorateClass([\n watch(\"disabled\", { waitUntilFirstUpdate: true })\n], SlTextarea.prototype, \"handleDisabledChange\", 1);\n__decorateClass([\n watch(\"rows\", { waitUntilFirstUpdate: true })\n], SlTextarea.prototype, \"handleRowsChange\", 1);\n__decorateClass([\n watch(\"value\", { waitUntilFirstUpdate: true })\n], SlTextarea.prototype, \"handleValueChange\", 1);\nSlTextarea = __decorateClass([\n e(\"sl-textarea\")\n], SlTextarea);\n\nexport {\n SlTextarea\n};\n","import {\n n\n} from \"./chunk.DUT32TWM.js\";\n\n// src/internal/default-value.ts\nvar defaultValue = (propertyName = \"value\") => (proto, key) => {\n const ctor = proto.constructor;\n const attributeChangedCallback = ctor.prototype.attributeChangedCallback;\n ctor.prototype.attributeChangedCallback = function(name, old, value) {\n var _a;\n const options = ctor.getPropertyOptions(propertyName);\n const attributeName = typeof options.attribute === \"string\" ? options.attribute : propertyName;\n if (name === attributeName) {\n const converter = options.converter || n;\n const fromAttribute = typeof converter === \"function\" ? converter : (_a = converter == null ? void 0 : converter.fromAttribute) != null ? _a : n.fromAttribute;\n const newValue = fromAttribute(value, options.type);\n if (this[propertyName] !== newValue) {\n this[key] = newValue;\n }\n }\n attributeChangedCallback.call(this, name, old, value);\n };\n};\n\nexport {\n defaultValue\n};\n","import { prop } from '../../../stream'\n\nexport default prop()","import { prop } from '../../../stream'\n\nexport default prop()","/* global window */\nimport m from 'bacta'\nimport css from 'bss'\nimport renderStream from '../utils/render-stream'\nimport modalStream from '../utils/modal-stream'\n\nimport * as E from './elements'\n\n// let modal = null\nlet content = []\n\n// For animating out old view gracefully\nlet prevVTree = null\n\n// When we last cached the prevVTree\nlet prevVTreeTime = Date.now()\n\n// How long to retain the prevVTree for\n// Should be longer than any animations\nlet MAX_TIME = 2 * 1000\n\n// every render, reset content to null\n// so we can handle `false && m(Content, ...)`\nrenderStream.map( () => content = [] )\n\nexport function Portal(){\n\n\tfunction view(){\n\t\tlet found = content.find(\n\t\t\tx => x\n\t\t\t&& (window.innerWidth > 550 || x.channel < Channel.info )\n\t\t)\n\t\tif ( found ) {\n\n\t\t\tfound = truncation({found})\n\n\t\t\tprevVTreeTime = Date.now()\n\t\t\tprevVTree = m('.content'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: end;\n\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\tmax-width: 50em;\n\n\t\t\t\t\tpadding: 1em;\n\t\t\t\t\tborder-radius: 0.5em 0.5em 0em 0em\n\t\t\t\t\tcolor: #000000a8;\n\t\t\t\t\tmargin-top: 1em;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tbox-shadow: 0px 2px 7px 0px rgba(0,0,0,0.1);\n\t\t\t\t\tgap: 1em;\n\n\t\t\t\t\ttransition: flex-grow 1s;\n\t\t\t\t\tflex-grow: 1;\n\n\t\t\t\t\tpointer-events: all;\n\t\t\t\t`\n\t\t\t\t.thinTablet`\n\t\t\t\t\tmargin-bottom: 1em;\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t`\n\t\t\t\t, found.message && found.icon\n\t\t\t\t, found.message && m('.message'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tmin-width: 0em;\n\t\t\t\t\t`\n\t\t\t\t\t, found.message\n\t\t\t\t)\n\t\t\t\t, found.actions && found.actions.length > 0 && m('.actions'\n\t\t\t\t\t+ (found.message ? '.message' : '')\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\tjustify-content: end;\n\t\t\t\t\t`\n\t\t\t\t\t.$nest('&.message', `\n\t\t\t\t\t\tgrid-auto-flow: row;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t`)\n\t\t\t\t\t.thinTablet(`\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t`)\n\t\t\t\t\t// todo-james globalize:\n\t\t\t\t\t.$nest('.btn:disabled', `\n\t\t\t\t\t\tbackground-color: hsl(247 5% 81% / 1);\n\t\t\t\t\t\tcolor: #8a8a8a;\n\t\t\t\t\t`)\n\t\t\t\t\t, found.actions\n\t\t\t\t)\n\t\t\t)\n\t\t} else if ( !found && prevVTreeTime > Date.now() + MAX_TIME ) {\n\t\t\tprevVTree = null\n\t\t}\n\n\t\t// position: fixed\n\t\t// makes bottom: 0px work as you'd expect\n\t\t// https://developers.google.com/web/updates/2016/12/url-bar-resizing\n\t\treturn m('.context-bar-portal'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tjustify-content: center;\n\t\t\t\tposition: fixed;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tmin-height: 4em;\n\t\t\t\tz-index: 2;\n\t\t\t\twidth: 100vw;\n\t\t\t\tmax-width: 100vw;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttransition: transform 1s, opacity 0.2s;\n\n\t\t\t\tpointer-events: none;\n\t\t\t`\n\t\t\t.$nest('.resizing &', `\n\t\t\t\topacity: 0;\n\t\t\t`)\n\t\t\t.tablet`\n\t\t\t\tjustify-content: center;\n\t\t\t`\n\t\t\t.$nest('&.open', `\n\t\t\t\ttransform: translateY(0%);\n\t\t\t`)\n\t\t\t.$nest('&.closed', `\n\t\t\t\ttransform: translateY(100%);\n\t\t\t`)\n\t\t\t+ (\n\t\t\t\tfound ? '.open' : '.closed'\n\t\t\t)\n\t\t\t, prevVTree\n\t\t)\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\n\nexport const Channel = {\n\n\t// most critical to render\n\terror: 0\n\n\t// if no errors, render last warning\n\t,warn: 1\n\t,warning: 1\n\n\t// if no warnings, render last info\n\t,info: 2\n\n\t// verbose+silly will render if\n\t// there is nothing else\n\t// but we may use an elipsis and\n\t// only show the first part\n\t// then clicking it will\n\t// open a modal\n\t,verbose: 3\n\t,silly: 4\n}\n\nexport function Content(){\n\n\tfunction view({ attrs: { message, icon, actions=[], channel=0 }}){\n\t\tcontent[channel] = { message, icon, actions, channel }\n\t\treturn m('.context-bar-content')\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\n\nexport function info(message, ...actions){\n\treturn m(Content, {\n\t\ticon: icon.info()\n\t\t, message\n\t\t, actions\n\t\t, channel: Channel.info\n\t})\n}\n\nexport function error(message, ...actions){\n\treturn m(Content, {\n\t\ticon: icon.error()\n\t\t, message\n\t\t, actions\n\t\t, channel: Channel.error\n\t})\n}\n\nexport function warn(message, ...actions){\n\treturn m(Content, {\n\t\ticon: icon.warn()\n\t\t, message\n\t\t, actions\n\t\t, channel: Channel.warn\n\t})\n}\n\n\nconst iconWrapperCSS =\n\tcss`\n\t\tmin-width: 1.5em;\n\t\tdisplay: grid;\n\t\talign-items: center;\n\t\talign-content: center;\n\t\tstroke-width: 1px;\n\t`\n\nexport const icon = {\n\terror: () => m(''\n\t\t+ iconWrapperCSS\n\t\t+ '.context-icon'\n\t\t+ css`\n\t\t\tcolor: red;\n\t\t`\n\t\t, E.icon.stop()\n\t)\n\t,info: () => m(''\n\t\t+ iconWrapperCSS\n\t\t+ '.context-icon'\n\t\t, E.icon.info()\n\t)\n\t,warn: () => m(''\n\t\t+ iconWrapperCSS\n\t\t+ '.context-icon'\n\t\t+ css`\n\t\t\tcolor: orange;\n\t\t`\n\t\t, E.icon.warn()\n\t)\n}\n\nicon.warning = icon.warn\nicon.verbose = icon.info\nicon.silly = icon.info\n\n\nfunction infoModalButton({\n\toriginalMessage\n}){\n\treturn m('button.btn.btn-info', {\n\t\tonclick: () => {\n\t\t\tmodalStream({\n\t\t\t\tdismissable: true\n\t\t\t\t, offset: { desktop: { y: '0vh'}, mobile: { y: '0vh' } }\n\t\t\t\t, content: () => m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\tcolor: black;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t/* align-content: space-between; */\n\t\t\t\t\t\tgrid-template-rows: auto 1fr auto;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t/* grid-template-columns: 2em 1fr; */\n\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\tborder-bottom: solid 0.5px #EEE;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$nest('.context-icon', `\n\t\t\t\t\t\t\tmin-width: 1.9em;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t, icon.info()\n\t\t\t\t\t\t, m('h1', 'Odin Help')\n\t\t\t\t\t)\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-size: 1.2em;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\talign-content: baseline;\n\t\t\t\t\t\tbackground-color: #FEFEFE;\n\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, originalMessage.split('. ').map( x => m('p', x + '.'))\n\t\t\t\t\t)\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t,m('h4'+css`text-align: center;`, 'More help topics:')\n\t\t\t\t\t\t, m('.links'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\tfont-size: 1.3em;\n\t\t\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t{ name: 'Create a Schedule', href: 'https://harth.io/documentation/create-a-schedule.html' }\n\t\t\t\t\t\t\t\t,{ name: 'Create a Project', href: 'https://harth.io/documentation/create-a-project.html' }\n\t\t\t\t\t\t\t\t,{ name: 'Create a Resource', href: 'https://harth.io/documentation/create-a-resource.html' }\n\t\t\t\t\t\t\t\t,{ name: 'Explore Odin Help', href: 'https://harth.io/documentation' }\n\t\t\t\t\t\t\t,]\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tx => m('a', { href:x.href, target: '_blank', rel: 'noopener noreferrer' }, x.name)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, m('button.btn.btn-info'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, { onclick: () => window.history.back() }\n\t\t\t\t\t\t, 'Done'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\t}, 'Read More')\n}\n\nfunction truncation({ found}){\n\tlet truncate =\n\t\tfound.channel >= Channel.info\n\t\t&& typeof found.message == 'string'\n\n\tif( truncate && found.message.length > 160 ) {\n\t\tlet originalMessage = found.message\n\t\tfound.message = found.message.slice(0,160 -3) + '...'\n\n\t\tif (found.actions.length == 0) {\n\t\t\tfound.actions.push(\n\t\t\t\tinfoModalButton({ originalMessage })\n\t\t\t)\n\t\t}\n\t}\n\n\treturn found\n}","/* globals window, setTimeout, clearTimeout */\nimport m from 'bacta'\nimport css from 'bss'\nfunction debounce(f, ms=0){\n\tlet id;\n\treturn () => {\n\t\tclearTimeout(id)\n\t\tid = setTimeout(f, ms)\n\t}\n}\nfunction Responsive({\n\tattrs: {\n\t\tbreakpoints={\n\t\t\tmobile:0\n\t\t\t,desktop:1000\n\t\t\t,tablet:700\n\t\t\t,hd:1800\n\t\t}\n\t\t,useDisplayNone=false\n\t}\n}){\n\n\tconst sorted_breakpoints =\n\t\tObject.entries(breakpoints).sort(\n\t\t\t([,a],[,b]) => a - b\n\t\t)\n\t\t.map( ([k]) => k )\n\n\tconst selectors =\n\t\tsorted_breakpoints.reduce( (prev, k, i) => {\n\t\t\tconst current = breakpoints[k]\n\t\t\tconst next = breakpoints[sorted_breakpoints[i+1]]\n\n\t\t\tlet def =\n\t\t\t\tprev\n\t\t\t\t.$nest(`&& .${k}`,\n\t\t\t\t\tcss`\n\t\t\t\t\t\t${ useDisplayNone ? `display: none` : ``}\n\t\t\t\t\t`\n\t\t\t\t\t.$media(`(min-width: ${current}px)`, `\n\t\t\t\t\t\t${ useDisplayNone ? `display: grid` : ``}\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t.$nest(`&& .lt-${k}`,\n\t\t\t\t\tcss`\n\t\t\t\t\t\t${ useDisplayNone ? `display: none` : ``}\n\t\t\t\t\t`\n\t\t\t\t\t.$media(`(max-width: ${current}px)`, `\n\t\t\t\t\t\t${ useDisplayNone ? `display: grid` : ``}\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t.$nest(`&& .${k} > *`, css`\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t`\n\t\t\t\t\t.$media(`(min-width: ${current}px)`, `\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\ttransition: 0.5s;\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t.$nest(`&& .lt-${k} > *`,\n\t\t\t\t\tcss`\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t`\n\t\t\t\t\t.$media(`(max-width: ${current}px)`, `\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\ttransition: 0.5s;\n\t\t\t\t\t`)\n\t\t\t\t)\n\n\t\t\tif ( next ) {\n\t\t\t\tdef =\n\t\t\t\tdef\n\t\t\t\t.$nest(`&& .${k}-only`,\n\t\t\t\t\tcss`\n\t\t\t\t\t\t${ useDisplayNone ? `display: none` : ``}\n\t\t\t\t\t`\n\t\t\t\t\t.$media(`(min-width: ${current}px) and (max-width: ${next}px)`, `\n\t\t\t\t\t\t${ useDisplayNone ? `display: grid` : ``}\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t.$nest(`&& .${k}-only > *`, css`\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t`\n\t\t\t\t\t.$media(\n\t\t\t\t\t\t`(min-width: ${current}px) and (max-width: ${next}px)`, `\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\ttransition: 0.5s;\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn def\n\t\t}, css )\n\n\tconst combinators =\n\t\tsorted_breakpoints.reduce( (p,k, i) => {\n\n\t\t\tconst breakpoint = breakpoints[k]\n\t\t\tconst next = breakpoints[sorted_breakpoints[i+1]]\n\n\t\t\tconst render = (cond, f, k) => {\n\t\t\t\tconst vtree = cond() && f()\n\t\t\t\tif( vtree && vtree.attrs ) {\n\t\t\t\t\tvtree.attrs.className += ' ' + k\n\t\t\t\t\treturn vtree\n\t\t\t\t} else {\n\t\t\t\t\treturn m('.'+k , vtree )\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp[k] = function(f){\n\t\t\t\treturn render( () => width >= breakpoint, f, k )\n\t\t\t}\n\n\t\t\tp['lt_'+k] = function(f){\n\t\t\t\treturn render( () => width < breakpoint, f, 'lt-'+k )\n\t\t\t}\n\n\t\t\tif( next ) {\n\t\t\t\tp[k+'Only'] = function(f){\n\t\t\t\t\treturn render( () => width >= breakpoint && width < next, f, k+'-only')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn p\n\t\t}, {})\n\n\tlet width = window.innerWidth\n\tlet listener;\n\n\tconst updateState = debounce(() => {\n\t\twidth = window.innerWidth\n\t\tm.redraw()\n\t}, 500)\n\n\twindow.addEventListener('resize', listener = () => updateState())\n\tfunction onremove(){\n\t\twindow.removeEventListener('resize', listener)\n\t}\n\n\tfunction view({ children }){\n\t\treturn m('.responsive'\n\t\t\t+ selectors\n\t\t\t,\n\t\t\t{ oncreate: updateState }\n\t\t\t, children.map( f => f(Object.assign({}, combinators, {width})) )\n\t\t)\n\t}\n\treturn { view, onremove }\n}\nResponsive.legacyRenderProps = true\nexport default Responsive","\n\nimport NotificationBar from './notification'\n\nimport '@shoelace-style/shoelace/dist/themes/light.css';\nimport '@shoelace-style/shoelace/dist/components/textarea/textarea.js';\n\nimport * as R from 'ramda'\nimport * as ContextBar from './context-bar'\nimport m from 'bacta'\nimport css from 'bss'\nimport * as H from '../../../how/index.js'\nimport Responsive from './responsive'\n\nconst M = R.curryN(2, m)\n\tObject.assign(M, m)\n\nconst I = R.identity\n\nexport function scrollPane(\n\tchildren\n\t, attrs={}\n\t, style={\n\t\twidth:'30em'\n\t\t, maxHeight:'8em'\n\t\t, minHeight:'3em'\n\t}\n){\n\treturn m(\n\t\t'div.db.mt2.overflow-y-auto'\n\t\t,R.merge({ style },attrs)\n\t\t,children\n\t)\n}\n\nconst link =\n\tcss`\n\t\ttext-decoration: none;\n\t\tcolor: currentColor;\n\t`\n\t.$visited(`\n\t\tcolor: currentColor;\n\t`)\n\nexport const icons = {\n\tinfo: () => m.trust(``)\n\t,x: () => m.trust(``)\n\t,box: () => m.trust(``)\n\t,tool: () => m.trust(``)\n\t,user: () => m.trust(``)\n\t,truck: () => m.trust(``)\n\t,mapPin: () => m.trust(``)\n\t,hash: () => m.trust(``)\n\t,invoice: () =>\n\t\tm.trust(`\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t`\n\t\t)\n\n\t,send: () =>\n\t\tm.trust(`\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t`\n\t\t)\n\n\t,greenTick: () =>\n\t\tm.trust(`\n\t\t\t\n\t\t`\n\t\t)\n\n\t,redCross: () =>\n\t\tm.trust(`\n\t\t\t\t\t`\n\t\t)\n\n\n}\n\nconst btn =\n\tcss`\n\t\ttransition-duration: 0.2s;\n\t\tpadding: 0.75em 1em;\n\t\talign-content: normal;\n\t\tmargin: 0px;\n\t\toutline: none;\n\t\tborder-radius: 0.25em;\n\t\tbox-sizing: border-box;\n\t\tborder: solid 0.5px rgba(0,0,0,0);\n\t\tbackground-color: var(--theme, rgba(0,0,0,0.1));\n\t\ttext-align: center;\n\t`\n\t.$nest('&.btn-warning', `\n\t\tcolor: #fff;\n\t\tbackground-color: #f0ad4e;\n\t\tborder-color: #eea236;\n\t`)\n\t.$hover('o 0.9')\n\t.$active(`\n\t\tbox-shadow: 0px 2px 2px 2px inset rgba(0,0,0,0.2);\n\t`)\n\t.$focus(`\n\t\tborder: solid 0.5px var(--theme, blue);\n\t`)\n\nexport const styles = {\n\tbtn, link\n}\n\nexport const checkboxSize = () => ({\n width: '1.35em'\n ,height: '1.35em'\n})\n\nexport const plainTxt = (v) => m('p.fw1', v)\n\nexport const trashBin = () =>\n\tm.trust(`\n\t\n\t`)\n\nexport const switchiconNeuLeft = () =>\n\tm.trust(`\n\t\n\t\n\t40. Switch off\n\tCreated with Sketch.\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t`)\n\nexport const switchiconNeuRight = () =>\n\tm.trust(`\n\t\n\t\n\t39. Switch on\n\tCreated with Sketch.\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t`)\n\n\n\nexport const switchiconon = () =>\n\tm.trust(`\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t`)\n\n\n\nexport const switchiconoff = () =>\n\tm.trust(`\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t`)\n\nexport const refresher = () =>\n\tm.trust(`\n\t\n\t`)\n\n\nexport const guardedInput =\n\t(type, setGuard, getGuard=R.identity) => (prop, attr) =>\n\tm(\"input.form-control\",\n\t\tR.mergeRight(\n\t\t\t{\n\t\t\t\toncreate({ dom: el }){\n\t\t\t\t\tconst received = getGuard(prop(), el)\n\t\t\t\t\tif( el.value != received && received != null ){\n\n\t\t\t\t\t\tel.value = received\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,onupdate({ dom: el }){\n\t\t\t\t\tconst received = getGuard(prop(), el)\n\t\t\t\t\tif( el.value != received && received != null ){\n\n\t\t\t\t\t\tel.value = received\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,type\n\t\t\t\t,oninput: m.withAttr(\n\t\t\t\t\t'value'\n\t\t\t\t\t, value => setGuard(prop,value)\n\t\t\t\t)\n\t\t\t}\n\t\t\t, attr || {}\n\t\t)\n\t)\n\nexport function propAdapter({ get, set }){\n\n\tconst out = function prop(...args){\n\t\tif( args.length ) {\n\t\t\tif( typeof args[0] == 'function' ) {\n\t\t\t\tset( args[0] )\n\t\t\t} else {\n\t\t\t\tset( () => args[0] )\n\t\t\t}\n\t\t}\n\t\treturn get()\n\t}\n\n\tout.get = get\n\tout.set = set\n\treturn out\n}\n\nexport const headingSeparators = /\\s|\\//\n\nexport function title(str){\n\treturn R.type(str) == 'String'\n\t\t? str.split('').reduce(\n\t\t\t(p,c) =>\n\t\t\t\tp + (\n\t\t\t\t\theadingSeparators\n\t\t\t\t\t\t.test(\n\t\t\t\t\t\t\tR.last(p)\n\t\t\t\t\t\t)\n\t\t\t\t\t|| p == ''\n\t\t\t\t\t? c.toUpperCase()\n\t\t\t\t\t: c\n\t\t\t\t)\n\t\t\t, ''\n\t\t)\n\t\t: str\n}\n\nexport function errorAlert(\n\tprologue\n\t, conjunction\n\t, postlogue\n\t, items\n\t, errorArray\n\t, returnBoolean\n\t, symmetric\n\t, alertType='warning'\n\t, statPlacement=''\n\t, additionalChecks=[]\n){\n\tconst errorString =\n\t\tR.uniq(\n\t\t\tR.unnest(\n\t\t\t\tsymmetric\n\t\t\t\t\t? errorArray.map((e, eindex) =>\n\t\t\t\t\t\tArray.isArray(items[eindex])\n\t\t\t\t\t\t\t? items[eindex].map((i) =>\n\t\t\t\t\t\t\t\te(i)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: e(items[eindex])\n\t\t\t\t\t)\n\t\t\t\t\t: errorArray.map((e) =>\n\t\t\t\t\t\titems.map((i) =>\n\t\t\t\t\t\t\te(i)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t)\n\t\t.filter((label) => label )\n\t\t.join(conjunction)\n\n\tconst errorStringAdd = additionalChecks.join(' ')\n\tconst invisible = errorString + errorStringAdd ? '' : '-invisible'\n\tconst errorPrologue = errorString ? prologue : ''\n\tconst errorpostlogue = errorString ? postlogue : ''\n\n\tconst displayederrorstring =\n\t\terrorString\n\t\t? (\n\t\t\t[ errorPrologue\n\t\t\t, errorString\n\t\t\t, errorpostlogue\n\t\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ')\n\t\t\t.replace(/ ,/g, ',')\n\t\t\t.replace(/\\s+/, ' ')\n\t\t\t.trim()\n\t\t\t+'. '\n\t\t\t+ errorStringAdd\n\t\t).trim() + (errorStringAdd ? '.' : '')\n\t\t: errorStringAdd.trim()\n\n\talertType = 'error'\n\treturn returnBoolean\n\t\t? displayederrorstring\n\t\t: errorString + errorStringAdd\n\t\t\t? alert(\n\t\t\t\talertType + invisible\n\t\t\t\t,displayederrorstring\n\t\t\t)\n\t\t\t: statPlacement\n\t\t\t\t? statPlacement\n\t\t\t\t: alert(alertType + invisible ,' ')\n}\n\n\n\nexport const buttonDefaults = () => ({\n\t'color':'#333'\n\t,'background-color': 'buttonface'\n})\n\nexport const unstyledIconLeft = element => iconStyle =>\n\tclassName => text => (title, onclick, attrs={}) =>\n\t\tm(element+'.btn.pl3'\n\t\t\t, R.mergeAll([\n\t\t\t\tattrs\n\t\t\t\t, {\n\t\t\t\t\ttitle\n\t\t\t\t\t,style: buttonDefaults()\n\t\t\t\t}\n\t\t\t\t,onclick\n\t\t\t\t? { onclick: (e) => {\n\t\t\t\t\tonclick(e);\n\n\t\t\t\t\tif( attrs.onclick ) {\n\t\t\t\t\t\tattrs.onclick(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t])\n\t\t\t, m('span'+iconStyle, { className })\n\t\t\t, m('span', text )\n\t\t)\n\nexport const unstyledIconRight = element => iconStyle =>\n\tclassName => text => (title, onclick, attrs={}, type='') =>\n\t\tm(element+'.btn.'+type+'.pl3'\n\t\t\t, R.merge( attrs, {\n\t\t\t\tonclick: onclick\n\t\t\t\t,title\n\t\t\t})\n\t\t\t, m('span', text )\n\t\t\t, m('span'+iconStyle, { className })\n\t\t)\n\n\nexport const unstyledIconLeftButton = unstyledIconLeft('button')\nexport const unstyledIconRightButton = unstyledIconRight('button')\n\nexport const unstyledIconLeftAnchor = unstyledIconLeft('a')\nexport const unstyledIconRightAnchor = unstyledIconRight('a')\n\nexport const iconLeftButton = unstyledIconLeftButton('.pl2.pr1')\nexport const iconRightButton = unstyledIconRightButton('.pl3.mt1')\n\nexport const iconLeftAnchor = unstyledIconLeftAnchor('.pl2.pr1.')\nexport const iconRightAnchor = unstyledIconRightAnchor('.pl3.mt1')\n\n\nexport const [backAnchor, back] =\n\t[iconLeftAnchor, iconLeftButton].map(\n\t\tf => f('fa fa-chevron-left')('Back')\n\t)\n\nexport const [forwardAnchor, forward] =\n\t[iconRightAnchor, iconRightButton]\n\t\t.map( f => f('fa fa-chevron-right') )\n\n// export const left = iconLeftButton('fa fa-chevron-left')\nexport const down = iconRightButton('fa fa-chevron-down')\n\nexport const go = (title, onclick, attrs) =>\n\tunstyledIconRightButton('.w2.pl1.t2')('fa fa-chevron-right')('')(\n\t\ttitle\n\t\t, onclick\n\t\t, attrs\n\t)\n\nexport const ensureList = R.concat([])\n\nexport const list =\n\t(items, padding='.pv2') =>\n\t\tR.compose(\n\t\t\tM(\"ul.list-inline.hth-measure\")\n\t\t\t,R.map(M('li' + padding))\n\t\t\t,ensureList\n\t\t)(items)\n\nexport const listNoPadding = (items) => list(items, '')\n\nexport const strikeItem = (tachyons=\"\") => ({ action, label, fstyle }) =>\n\tm('span.hover-strike.underline'+tachyons+fstyle\n\t+ css.$animate('ease-in-out 0.5s forwards', {\n\t\tfrom: 'o 0', to: 'o 1'\n\t})\n\t,{ onclick: () => action(label) }\n\t, label\n\t)\n\nexport const strikeItemRow = (tachyons=\"\") => (strikeObject) =>\n\tlist([strikeItem(tachyons)(strikeObject)].concat(strikeObject.meta))\n\nexport const inlinestrikeList = R.map(strikeItem('.ph2.pr0'))\n\nexport function inlineStrikeList2(list){\n\treturn m('ul'\n\t\t+ css`\n\t\t\tdisplay: flex;\n\t\t\tlist-style:none;\n\t\t\tgap: 0.5em;\n\t\t\tflex-flow: wrap;\n\t\t`\n\t\t.$nest('li', `\n\t\t\tborder: solid 1px #EEE;\n\t\t\tborder-radius: 0.25em;\n\t\t\tpadding: 0.25em 0.5em;\n\t\t`)\n\t\t,list.map( strikeItem('') )\n\t\t\t.map( v => m('li', v) )\n\t)\n}\n\n\nexport function strikeList(list){\n\treturn m('ul.pl4'\n\t\t,list.map( strikeItem('') )\n\t\t.map( v => m('li.pa2', v) )\n\t)\n}\n\nexport function strikeTable(list){\n\treturn m('ul.pl4',list.map((o) => m('li.pa2', strikeItemRow()(o))))\n}\n\nexport function nonStrikeList(list){\n\treturn m('ul.pl4'\n\t\t,list.map( ({label}) => m('span', label))\n\t\t.map( v => m('li.pa2', v) )\n\t)\n}\n\nexport function splitPane(a,b, attrs={css:''}){\n\treturn m('.split-pane'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 1fr;\n\t\t`\n\t\t.desktop(\n\t\t\tcss`\n\t\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\t`\n\t\t\t.$nest('.pane', `\n\t\t\t\tborder-left: solid 1px rgba(0,0,0,0.1);\n\t\t\t\tpadding-left: 1em;\n\t\t\t\t`+ attrs.css + `\n\t\t\t`)\n\t\t\t.$nest('.pane:first-child', `\n\t\t\t\tborder-left: none;\n\t\t\t\tpadding-left: 0em;\n\t\t\t\tpadding-right: 1em;\n\t\t\t`)\n\t\t)\n\n\t\t,m('.pane', a)\n\t\t,m('.pane', b)\n\t)\n}\n\nexport const HorizontalForm = M('div.form-horizontal')\nexport function HorizontalInput(label, type, prop, attributes){\n\t\treturn m('div', { className: (prop.error || !prop()) && 'has-error' }, [\n\n\t\t\tm('div.form-group', [\n\t\t\t\tm('label.col-sm-2.control-label', label)\n\t\t\t\t,m('div.col-sm-10',\n\t\t\t\t\tm('input.form-control',\n\t\t\t\t\t\tObject.assign({\n\t\t\t\t\t\t\toninput: m.withAttr('value', prop)\n\t\t\t\t\t\t\t,value: prop()\n\t\t\t\t\t\t\t,type: type\n\t\t\t\t\t\t}, attributes)\n\t\t\t\t\t),\n\t\t\t\t\t[ prop.error && m('span.help-block', prop.error ) || null ]\n\t\t\t\t)\n\t\t\t])\n\t\t])\n\t}\n\nexport function HorizontalSelect(label, prop, options, attr){\n\treturn m('div', { className: (prop.error || !prop()) && 'has-error' }, [\n\t\tm('div.form-group', [\n\t\t\tm('label.col-sm-2.control-label', label)\n\t\t\t,m('div.col-sm-10', [\n\t\t\t\tm('select.form-control.col-sm-2', Object.assign({\n\t\t\t\t\tonchange: m.withAttr('value', prop)\n\t\t\t\t\t,value: prop()\n\t\t\t\t}, attr),\n\t\t\t\t\toptions\n\t\t\t\t)\n\t\t\t])\n\t\t\t,m('span.col-sm-10.help-block', prop.error || null )\n\t\t])\n\t])\n}\n\n/**\n * Indents the children to match the alignment of the Horizontal Inputs\n * useful for submit buttons at the end of a form\n */\nexport const HorizontalAlignment = R.compose(\n\tM('div.form-group'),\n\t\tM('div.col-sm-offset-2.col-sm-10')\n)\n\nexport const HorizontalInputForm = R.compose(\n\t\tHorizontalForm,\n\t\t\tR.map(\n\t\t\t\tR.apply(HorizontalInput)\n\t\t\t)\n\t)\n\nexport const HorizontalCustomForm = R.compose(\n\t\tHorizontalForm,\n\t\t\tHorizontalAlignment,\n\t\t\t\tlist\n\t)\n\nexport const thead = R.compose(\n\t\tM('thead'),\n\t\t\tM('tr'),\n\t\t\t\tR.map(\n\t\t\t\t\tR.pipe(title, M('th'))\n\t\t\t\t)\n\t)\n\nexport const table = (data, headings, rows) => {\n\treturn m('table.table table-striped.mb4'\n\t\t, thead(headings)\n\t\t, m('tbody'\n\t\t\t, rows.map( x => {\n\t\t\t\tif ( x.type == 'table.row' ) {\n\t\t\t\t\treturn x.content\n\t\t\t\t} else {\n\t\t\t\t\treturn table.row({}, x).content\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\t)\n}\n\nexport const icon = {\n\tx: () => m.trust(``)\n\t, info: () => m.trust(``)\n\t, stop: () => m.trust(``)\n\t, warn: () => m.trust(``)\n}\n\ntable.row = (attrs={}, content) => {\n\treturn {\n\t\ttype: 'table.row'\n\t\t,content: m('tr', attrs, content.map( x => m('td', x)))\n\t}\n}\n\n\n/*\n\n\tWill disable the button while the action is resolving. When it resolves it will be enabled again.\n\n\tIf there is a failure it will pass the err message into your fail function which defaults to window.alert.\n\n\tUsage:\n\n\t\t\taction('Go', callServer())\n\n*/\n\nexport const selectbuttons = function(\n\toptions=[]\n\t, prop\n\t, attr\n\t, style=R.equals\n\t, saving=R.F\n\t, disabled=R.F\n\t, _\n\t, fail=NotificationBar.Notifications.alertError\n){\n\treturn m('.cf db'\n\t\t, list(\n\t\t\toptions.map((o) =>\n\t\t\t\taction(\n\t\t\t\t\to\n\t\t\t\t\t, () => prop(o)\n\t\t\t\t\t, saving\n\t\t\t\t\t, style( prop(), o )\n\t\t\t\t\t\t? '.bg-black-30'\n\t\t\t\t\t\t: ''\n\t\t\t\t\t, disabled\n\t\t\t\t\t, fail\n\t\t\t\t\t, attr\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t)\n}\n\nexport const dateCheckbox = ({\n\t date = { title: '', prop: R.identity, attrs:{} }\n\t, attrs = { title: '', prop: R.identity, attrs:{} }\n}) => {\n\treturn m('.input-group'\n\t\t,m('span.input-group-addon'\n\t\t\t,{\n\t\t\t\tstyle: {\n\t\t\t\t\t\"backgroundColor\": 'transparent'\n\t\t\t\t\t,\"border-bottom\": '1px solid #ccc'\n\t\t\t\t\t,\"border\": 'none'\n\t\t\t\t}\n\t\t\t}\n\t\t\t,checkbox(\n\t\t\t\tR.merge({\n\t\t\t\t\tchecked: attrs.prop()\n\t\t\t\t\t, onclick: m.withAttr('checked', attrs.prop )\n\t\t\t\t\t, title: attrs.title\n\t\t\t\t}, attrs.attrs )\n\t\t\t)\n\t\t)\n\t\t,dateInput(\n\t\t\tdate.prop\n\t\t\t,R.merge({\n\t\t\t\ttitle: date.title\n\t\t\t}, date.attrs)\n\t\t)\n\t)\n}\n\n\nexport const dateCheckboxLabel = ({\n\tlabel\n\t, date = { title: '', prop: R.identity, attrs:{} }\n\t, checkbox = { title: '', prop: R.identity, attrs:{} }\n}) =>\n\tm('label.control-label.mw5'\n\t\t,label\n\t\t, dateCheckbox({ date, attrs: checkbox })\n\t)\n\n\nexport const actionEvent = function(\n\tlabel='Submit'\n\t, action=R.identity\n\t, saving=R.identity\n\t, type='primary'\n\t, disabled=R.F\n\t, fail=NotificationBar.Notifications.alertError\n\t, attr\n){\n\treturn m('button.btn.btn-' + type\n\t\t, { async onclick(e){\n\t\t\tsaving(true)\n\t\t\ttry {\n\t\t\t\tawait action(e)\n\t\t\t} catch(err) {\n\t\t\t\tfail(err.message)\n\t\t\t} finally {\n\t\t\t\tsaving(false)\n\t\t\t\tm.redraw()\n\t\t\t}\n\n\t\t\treturn null\n\t\t}\n\t\t,disabled: disabled() || saving()\n\t\t, ...attr\n\t\t}\n\t\t,label\n\t)\n}\n\nexport const action = function(\n\tlabel='Submit'\n\t, action=R.identity\n\t, saving=R.identity\n\t, type='primary'\n\t, disabled=R.F\n\t, fail=NotificationBar.Notifications.alertError\n\t, attr\n){\n\treturn m('button.btn.btn-' + type\n\t\t,R.merge(\n\t\t\t{\n\t\t\t\tonclick: function(){\n\t\t\t\t\tsaving(true)\n\t\t\t\t\tPromise.resolve().then(function(){\n\t\t\t\t\t\tconst out = action()\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\treturn out\n\t\t\t\t\t})\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\tsaving(false)\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\treturn null\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function(err){\n\t\t\t\t\t\tsaving(false)\n\t\t\t\t\t\tfail(err.message)\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\treturn null\n\t\t\t\t\t})\n\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\t,disabled: disabled() || saving()\n\t\t\t}\n\t\t\t,attr\n\t\t)\n\t\t,label\n\t)\n}\n\n\n\nexport const confirmDelete = function(\n\tactionFn=R.identity\n\t, saving=R.F\n\t, disabled=R.F\n\t, active=R.F\n\t, fail=NotificationBar.Notifications.alertError\n\t, initalLabel='Delete'\n\t, confirmedLabel='Irrecoverable'\n\t, recoveryFunction=R.T\n\t, forceRender=R.F\n\t, skipConfirm=R.F\n){\n\tconst discardButoon =\n\t\t(\n\t\t\tactive()\n\t\t\t|| forceRender()\n\t\t)\n\t\t&& !skipConfirm()\n\t\t\t? m('button.btn'\n\t\t\t\t+ css`\n\t\t\t\t\theight: 2.4em;\n\t\t\t\t\tleft: -5px;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tbackground-color: #efefef;\n\t\t\t\t\tborder-radius: 0em 0.3em 0.3em 0em;\n\t\t\t\t\tcolor: #000000;\n\t\t\t\t\tborder-left: 1px solid #d52525;\n\t\t\t\t`\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tonclick: function(){\n\t\t\t\t\t\trecoveryFunction()\n\t\t\t\t\t\t&& active(false)\n\t\t\t\t\t}\n\t\t\t\t\t,disabled: disabled() || saving()\n\t\t\t\t\t,title: 'Discard Changes or Hide Action'\n\t\t\t\t\t,className: `fa fa-undo`\n\t\t\t\t}\n\t\t\t\t,''\n\t\t\t)\n\t\t\t: null\n\n\tconst actionButton =\n\t\taction(\n\t\t\tactive()\n\t\t\t\t? confirmedLabel\n\t\t\t\t: initalLabel\n\t\t\t, active()\n\t\t\t\t? () => {\n\t\t\t\t\tactive(false)\n\t\t\t\t\treturn actionFn()\n\t\t\t\t}\n\t\t\t\t: () => active(true)\n\t\t\t, saving\n\t\t\t, active()\n\t\t\t\t? 'danger'\n\t\t\t\t: 'warning'\n\t\t\t, disabled\n\t\t\t, fail\n\t\t)\n\n\treturn \t[\n\t\tactionButton\n\t\t,discardButoon\n\t]\n}\n\nexport const undoDiscard = function({\n\tdiscard\n\t,doneUndo\n}){\n\tconst discardButoon =\n\t\tdiscard && discard.loading\n\t\t? confirmDelete(\n\t\t\tdiscard.attrs.onclick\n\t\t\t,discard.loading\n\t\t\t,discard.attrs.disabled\n\t\t\t,discard.state\n\t\t\t,null\n\t\t\t,trashBin()\n\t\t)\n\t\t: discard\n\t\t? m(\"button.btn.btn-warning\"\n\t\t\t, discard.attrs\n\t\t\t, trashBin()\n\t\t)\n\t\t: null\n\n\tconst undoButton =\n\t\tdoneUndo && !doneUndo.attrs.disabled\n\t \t? m(\"button.btn.btn-\"\n\t\t\t, doneUndo.attrs\n\t\t\t, doneUndo.label || 'Revert'\n\t\t)\n\t\t: null\n\n\treturn [\n\t\tundoButton\n\t\t,discardButoon\n\t]\n}\n\nexport function statusCheckboxGroup( input, label, status ){\n\treturn m('.cf db'\n\t\t,m('.f6.black-80.fl.ba.br3.b--black-20.ma2'\n\t\t\t,m('span.fl.f3.pa2.pr3.pl3.br--left.br3.bg-black-05'\n\t\t\t\t,input\n\t\t\t)\n\t\t\t,m('span.fl.f3.bg-white.pv2.ph3.br.bl.b--black-20.w5'\n\t\t\t\t,label\n\t\t\t)\n\t\t\t,m('span.fl.f3.bg-black-05.pv2.ph3.br--right.br3'\n\t\t\t\t,status\n\t\t\t)\n\t\t)\n\t)\n}\n\nexport function spinner(\n\tcustom=\n\t\t{\n\t\t\ttachyons:''\n\t\t\t, attrs:{}\n\t\t\t, spinnerdimensions: {\n\t\t\t\twidth: '1.5em'\n\t\t\t\t, height: '1.5em'\n\t\t\t}\n\t\t}\n){\n\treturn m('.centeredSpinner.w-100.h-100' + custom.tachyons\n\t\t,custom.attrs\n\t\t,m('img', {\n\t\t\tsrc: '/assets/spinner.gif'\n\t\t\t, style:\n\t\t\t\t{ width: custom.spinnerdimensions.width\n\t\t\t\t, height: custom.spinnerdimensions.height\n\t\t\t\t, userSelect: 'none'\n\t\t\t\t}\n\t\t})\n\t)\n}\n\nexport function formInput ([label, prop, attrs]){\n\treturn\tm('div.form-group.hth-measure', [\n\t\tm('label.control-label.w-100', label\n\t\t,m('input.form-control'\n\t\t\t,R.merge(\n\t\t\t\t{\n\t\t\t\t\ttype: 'text'\n\t\t\t\t\t, oninput: m.withAttr('value', prop)\n\t\t\t\t\t, value: prop() || null\n\t\t\t\t}\n\t\t\t\t,attrs\n\t\t\t)\n\t\t))\n\t])\n}\n\nexport const telephoneInput = guardedInput('tel', (prop, value) => prop(value))\n\nexport const textArea = (prop, attrs) =>\n\tm('sl-textarea' + H.css`\n\t\t&::part(base) {\n\t\t\tfont-size: 1.1em;\n\t\t\tfont-family: Helvetica;\n\t\t}\n\t`, {\n\t\tvalue: prop(),\n\t\t['onsl-input']: m.withAttr('value', prop), ...attrs\n\t})\n\nexport const textInput = guardedInput('text', (prop, value) => prop(value))\n\n/**\n * Accepts native JS dates and returns native JS dates\n */\nexport function dateInput2(prop, attrs){\n\treturn m('input.form-control', {\n\t\tonupdate: ({ dom }) => dom.valueAsDate = prop()\n\t\t,oncreate: ({ dom }) => dom.valueAsDate = prop()\n\t\t,type: 'date'\n\t\t,onchange: e => prop(e.target.valueAsDate)\n\t\t, ...attrs\n\t})\n}\n\n/**\n * Accepts ISO Date Strings and returns ISO Date Strings\n */\nexport function dateInput(prop, attrs){\n\tlet f = ({ dom }) => {\n\t\tlet x = prop()\n\t\tif( x != null ) {\n\t\t\tdom.valueAsDate = new Date(x)\n\t\t} else {\n\t\t\tdom.valueAsDate = null\n\t\t}\n\t}\n\treturn m('input.form-control', {\n\t\tonupdate: f\n\t\t,oncreate: f\n\t\t,type: 'date'\n\t\t,onchange: e =>\n\t\t\tprop(\n\t\t\t\te.target.valueAsDate != null\n\t\t\t\t\t? e.target.valueAsDate.toJSON()\n\t\t\t\t\t: null\n\t\t\t)\n\t\t, ...attrs\n\t})\n}\n\nexport const xRemoval = (attr) =>\n\tm(\tattr.undo\n\t\t? 'span.dim.ml2.fw9.fa.fa-undo'\n\t\t: 'span.dim.ml2.fw9.fa.fa-remove'\n\t\t,Object.assign(\n\t\t\t{},\n\t\t\tattr,\n\t\t\t{ fontSize: '1.5em'\n\t\t\t, transform: 'translateY(-0.1em)'\n\t\t\t}\n\t\t)\n\t)\n/*\n\tA select element. Receives a list of options and a prop for persistence\n*/\nexport const select = (options, prop, attr, placeholder='Select an item') => {\n\tconst usePlaceholder =\n\t\ttypeof prop() == \"undefined\"\n\t\t|| prop() == \"\"\n\t\t|| !options.includes(prop())\n\n\t\treturn m(\"select.form-control\", R.merge({\n\t\ttitle: prop()\n\t\t,onchange: prop && m.withAttr(\"value\", prop)\n\t\t,style: {'min-width': '5em'}\n\t}, attr || {}),\n\t\t[]\n\t\t.concat(\n\t\t\tusePlaceholder\n\t\t\t? m('option'\n\t\t\t\t,{ value:\"\"\n\t\t\t\t, disabled: true\n\t\t\t\t, selected: true\n\t\t\t\t, hidden: true\n\t\t\t\t}\n\t\t\t\t, placeholder\n\t\t\t)\n\t\t\t: []\n\t\t)\n\t\t.concat(\n\t\t\toptions\n\t\t\t.map(\n\t\t\t\t(option) =>\n\t\t\t\tm(\"option\", {\n\t\t\t\t\tvalue: option\n\n\t\t\t\t\t,selected: usePlaceholder\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: prop() == option\n\n\t\t\t\t}, option)\n\t\t\t)\n\t\t)\n\t)\n}\n\nexport const objectSelect2 = function(list, key, objProp, placeholder, attr){\n\n\tfunction propGet(){\n\t\treturn objProp() && objProp()[key]()\n\t}\n\n\tfunction propSet(value){\n\t\tconst o = list.find( o => o[key]() == value )\n\t\ttry {\n\t\t\tobjProp(o)\n\t\t} catch (e) {\n\t\t\tdebugger;\n\t\t}\n\t}\n\n\tfunction prop(...args){\n\t\targs.length && propSet(...args)\n\t\treturn propGet()\n\t}\n\n\treturn select(\n\t\tlist.map(\n\t\t\t(o) => o[key]()\n\t\t),\n\t\tprop\n\t\t,attr || {}\n\t\t,placeholder\n\t)\n}\n\n/*\n\tLike a labelSelect but accepts a list of objects with props.\n\tYou specify the key for display and objectSelect will assign\n\tthe value back to your objProp\n*/\nexport const objectSelect = function({\n\tlist=[], key=\"\", prop=R.identity\n\t, objProp=R.identity, Ddisabled=false, placeholder, attr\n}){\n\tfunction setObjProp(){\n\t\tconst val = prop()\n\t\tconst found = R.find((record) => record[key]() == val, list )\n\t\tif( found != null ){\n\t\t\tobjProp(found)\n\t\t}\n\t}\n\n\tif(list.length && prop() && !objProp()){\n\t\tsetObjProp()\n\t}\n\n\treturn select(\n\t\tlist.map(\n\t\t\t(o) => o[key]()\n\t\t),\n\t\tprop\n\t\t,R.merge({\n\t\t\tonchange: R.pipe(\n\t\t\t\tm.withAttr('value', prop),\n\t\t\t\tsetObjProp\n\t\t\t)\n\t\t\t,title: prop()\n\t\t\t,disabled: Ddisabled\n\t\t}, attr || {}),\n\t\tplaceholder\n\t)\n}\n\nexport const navbar = function({home = '/dashboard', brand, brand_icon=null, collapsed=I, children=[], attrs={}}){\n\treturn m('nav.navbar navbar-default', attrs,\n\t\tm('div.container-fluid',\n\t\t\tm('div.navbar-header',\n\t\t\t\tm('button.navbar-toggle.collapsed', {\n\t\t\t\t\tonclick: toggleProp(collapsed),\n\t\t\t\t}, [ m('div.span.icon-bar'), m('div.span.icon-bar'), m('div.span.icon-bar') ]),\n\t\t\t\tm('a.navbar-brand.pl5', { href: home , oncreate: m.route.link },\n\t\t\t\t\tbrand_icon ? m('img', {src:brand_icon}) : brand\n\t\t\t\t)\n\t\t\t),\n\t\t\tm(`div.navbar-collapse collapse ${collapsed() ? '' : 'in'}` ,[\n\t\t\t\tm('ul.nav.navbar-nav.navbar-right', children )\n\t\t\t])\n\n\t\t)\n\t)\n}\n\n\nexport const checkbox = function(attrs){\n\tconst onchange = attrs.onchange\n\tdelete attrs.onchange\n\n\treturn m(\n\t\t'input[type=checkbox].checkbox-size'\n\t\t, Object.assign(\n\t\t\t{ style: checkboxSize() }\n\t\t\t,attrs\n\t\t\t,{\n\t\t\t\tonchange(e){\n\t\t\t\t\tonchange(e)\n\t\t\t\t\t// todo-james may not be necessary with mithril v2\n\t\t\t\t\tm.redraw()\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t)\n}\n\nexport const labelCheckbox = function({label,prop,attrs}){\n\tconst onchange = attrs.onchange\n\tdelete attrs.onchange\n\treturn m('div.checkbox',\n\t\tm('label', [\n\t\t\tm('input[type=checkbox].checkbox-size'\n\t\t\t\t, Object.assign(\n\t\t\t\t\t{ onchange: m.withAttr('checked', prop)\n\t\t\t\t\t, style: checkboxSize()\n\t\t\t\t\t, checked: prop()\n\t\t\t\t\t, onclick: onchange\n\t\t\t\t\t}\n\t\t\t\t\t,attrs\n\t\t\t\t)\n\t\t\t)\n\t\t\t,label\n\t\t])\n\t)\n}\n\nexport const alert = function(channel='info', message){\n\tif( !message ) return null\n\tif(! (channel in ContextBar.Channel) ) return null\n\n\treturn m(ContextBar.Content, {\n\t\tmessage\n\t\t,channel: ContextBar.Channel[channel]\n\t\t,icon: ContextBar.icon[channel]()\n\t})\n}\n\nexport const toggleProp = (prop) => () => prop(! prop() )\n\n// FOR LINKS IN NAVBAR\nexport const dropdown = function(title, open=I, children=[]){\n\n\treturn (\n\t\tm(`li.dropdown ${open() ? 'open' : ''}`, [\n\t\t\tm('a.dropdown-toggle',{\n\t\t\t\thref: '#'\n\t\t\t\t,onclick: toggleProp(open)\n\t\t\t}, title, m('span.caret') )\n\t\t\t,m('ul.dropdown-menu',\n\t\t\t\tchildren.map(function(c){\n\t\t\t\t\treturn m('li', c)\n\t\t\t\t})\n\t\t\t)\n\t\t])\n\t)\n\n}\n\nexport const tabset = ( tabnames, active) =>\n\n\tm(\"ul\",{className: \"nav nav-tabs\"},\n\t\ttabnames.map(\n\t\t\t(tab) => m(\"li\"\n\t\t\t,{ role: \"presentation\"\n\t\t\t, onclick: () => { active(tab) }\n\t\t\t, className: tab == active() && \"active\"\n\t\t\t},\n\t\t\t\tm(\"a\",{}, title(tab) )\n\t\t\t)\n\t\t)\n\t)\n\nexport const dropup = function(open){\n\n\treturn function(title, children=[],current){\n\t\tlet el = dropdown(title,open,children,current)\n\n\n\t\tel.attrs.className = el.attrs.className + ' dropup'\n\t\treturn el\n\t}\n}\n\nexport const details = (label, value, attrs={}) =>\n\tm(\n\t\t'details'\n\t\t, attrs\n\t\t, m('summary.control-label.b', label)\n\t\t, value\n\t)\n\nexport function centeredSpinner(){\n\treturn spinner(\n\t\t{\n\t\t\ttachyons: '.pt6.pb2'\n\t\t\t,attrs: { style: { 'padding-left': 'calc( 50% - 1.5em )' } }\n\t\t\t,spinnerdimensions: { width: '3em', height: '3em'}\n\t\t}\n\t)\n}\n\n\nlet normalizeInfoPillValue = v => {\n\tif ( v && v.value ) {\n\t\treturn {\n\t\t\tvalue: v.value\n\t\t\t, icon: v.icon\n\t\t}\n\t} else {\n\t\treturn {\n\t\t\tvalue: v\n\t\t}\n\t}\n}\n\nexport const infoPills = (idx) => {\n\n\tidx = Object.entries(idx)\n\t\t.map( ([k,v]) => [k, normalizeInfoPillValue(v)])\n\t\t.filter( ([,v]) => v.value != null )\n\n\treturn m('.infoPills'\n\t\t+ H.css`\n\t\t\t& {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 1em;\n\t\t\t\tjustify-content: start;\n\t\t\t\talign-items: start;\n\t\t\t}\n\n\t\t\t@media ( min-width: 700px ) {\n\t\t\t\t& {\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: repeat(${idx.length}, 1fr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .info {\n\t\t\t\tborder-radius: 0.25em;\n\t\t\t\tfont-size: 0.9em;\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 0em;\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: grid;\n\t\t\t\tjustify-content: start;\n\t\t\t\talign-content: center;\n\t\t\t}\n\n\t\t\t& .key {\n\t\t\t\ttop: -1.2em;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tleft: 0em;\n\t\t\t\tborder-radius: 0.5em;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.3em;\n\t\t\t}\n\t\t`\n\t\t, idx\n\t\t.map( ([k,v]) =>\n\t\t\tm('.info'\n\t\t\t\t, m('.key'\n\t\t\t\t\t, k\n\t\t\t\t\t, v.icon\n\t\t\t\t)\n\t\t\t\t, m('.value', v.value )\n\t\t\t)\n\t\t)\n\t)\n}\n\nexport const infoPill = (key, value) => infoPills({ [key]: value })\n\n\nexport const centerdHorizontalRule = children => m('.division'\n\t+ css`\n\t\tdisplay: grid;\n\t\tgap: 1em;\n\t\tgrid-template-columns: 1fr auto 1fr;\n\t\talign-items: end;\n\t`\n\t, m('hr')\n\t, m('p', children)\n\t, m('hr')\n)\n\nfunction mobileButtonStackItem({ label, onclick, attrs }){\n\treturn {\n\t\tlabel, onclick, attrs\n\t}\n}\n\nexport const mobileButtonStack = ({ container }, list) =>\n\tm( Responsive, {\n\t\tbreakpoints: {\n\t\t\tmobile: 0\n\t\t\t,tablet:700\n\t\t\t,desktop:900\n\t\t\t,hd:1800\n\t\t}\n\t}, ({ mobileOnly, tabletOnly, desktop }) => {\n\n\t\tlet v = i => m('button.mobile-button-stack'\n\t\t\t, {\n\t\t\t\t...i.attrs\n\t\t\t\t, onclick: e => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\ti.onclick(e)\n\t\t\t\t}\n\t\t\t}\n\t\t\t, i.label\n\t\t)\n\n\t\tlet wrapper = x => m('button'\n\t\t\t+ css`\n\t\t\t\tbackground-color: unset;\n\t\t\t\tdisplay: flex;\n\t\t\t\tborder: none;\n\t\t\t\tgap: 1em;\n\t\t\t\tflex-shrink: 0;\n\n\t\t\t`\n\t\t\t.$nest('button',\n\t\t\t\tcss`\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tfont-size: 1em;\n\t\t\t\t\tpadding: 0.5em 0.4em;\n\t\t\t\t\tbackground-color: unset;\n\t\t\t\t\ttext-align: left;\n\t\t\t\t\tgap: 0.6em;\n\t\t\t\t`\n\t\t\t)\n\t\t\t.tablet`\n\t\t\t\tflex-wrap: wrap;\n\t\t\t`\n\t\t\t.$nest('.mobile-button-stack', `\n\t\t\t\tmin-height: 3em;\n\t\t\t\tpadding: 0.5em 1em;\n\t\t\t\tborder-radius: 0.25em;\n\t\t\t\tcolor: black;\n\t\t\t\tborder: solid 1px rgb(0,0,0,5%);\n\t\t\t`)\n\t\t\t.$nest('.mobile-button-stack:hover', `\n\t\t\t\tcolor: #33a6dc;\n\t\t\t\tborder-color: currentColor;\n\t\t\t`)\n\t\t\t, container.attrs\n\t\t\t, x\n\t\t)\n\n\t\tlet truncate = (n) =>\n\t\t\twrapper(\n\t\t\t\tlist.slice(0, n).map(v).concat(\n\t\t\t\t\tlist.length > n\n\t\t\t\t\t? m('button.mobile-button-stack'\n\t\t\t\t\t\t, '+ '+list.slice(n).length+' more'\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t)\n\t\t\t)\n\n\t\treturn [\n\t\t\tmobileOnly( () => truncate(2) )\n\t\t\t, tabletOnly( () => truncate(3) )\n\t\t\t, desktop( () => truncate(8) )\n\t\t]\n\t})\n\nmobileButtonStack.item = mobileButtonStackItem\n\nexport const loadingRetain = (loading, vtree) =>\n\tm('.loading-retain'\n\t\t,\n\t\t{ onbeforeupdate: (vnode, old) => {\n\t\t\tlet content =\n\t\t\t\t[old]\n\t\t\t\t.flatMap( x =>\n\t\t\t\t\tx && x.dom\n\t\t\t\t\t? [x.dom.children[0]]\n\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t\t.filter(Boolean)\n\n\t\t\tcontent.forEach( content => {\n\t\t\t\tif( loading ) {\n\t\t\t\t\tcontent.classList.add('loading')\n\t\t\t\t} else {\n\t\t\t\t\tcontent.classList.remove('loading')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn !loading\n\t\t}\n\t\t}\n\t\t, m('.loading-content'\n\t\t\t+ css\n\t\t\t.$nest('&.loading'\n\t\t\t\t,css`\n\t\t\t\t\ttouch-action: none;\n\t\t\t\t\tpointer-events: none;\n\t\t\t\t`\n\t\t\t\t.$animate('ease-in-out 0.6s infinite alternate', {\n\t\t\t\t\tfrom: 'o 0.3', to: 'o 0.6'\n\t\t\t\t})\n\t\t\t)\n\t\t\t, vtree\n\t\t)\n\t)","// todo-james paragraph isn't a regex, either rename module/function etc\n\n/**\n * Formats a vlaue into money formats for human representation.\n *\n * e.g. prettyKey('500520') //=> $ 500,520.00\n */\n\nconst uniqPattern = /[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi\nconst moneyPattern = /(\\d)(?=(\\d{3})+\\.)/g\n\nfunction paragraphPattern(xs, ...ys){\n return xs.reduce((p,n,i) =>\n\t\tp + n + (ys[i] || \"\")\n\t\t,''\n\t).replace(/\\t|\\n/g, '').trim()\n}\n\n\nfunction nFormatter(num, digits, forceFromat) {\n\tlet si = [\n\t { value: 1, symbol: \"\" }\n\t ,{ value: 1E3, symbol: \"k\" }\n\t ,{ value: 1E6, symbol: \"M\" }\n\t ,{ value: 1E9, symbol: \"G\" }\n\t ,{ value: 1E12, symbol: \"T\" }\n\t ,{ value: 1E15, symbol: \"P\" }\n\t ,{ value: 1E18, symbol: \"E\" }\n\t];\n\tlet rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n\tlet i;\n\tfor (i = si.length - 1; i > 0; i--) {\n\t if (Number(num) >= si[i].value) {\n\t\tbreak;\n\t }\n\t}\n\treturn num.length < 9 && !forceFromat\n\t\t? num\n\t\t: (num / si[i].value).toFixed(digits).replace(rx, \"$1\") + si[i].symbol;\n}\n\n\nexport function money(n=0, forceFromat){\n\treturn isNaN(n)\n\t\t? ``\n\t\t: Number(n) < 0\n\t\t? '$ (' + nFormatter(Number(Math.abs(n)).toFixed(2), 2, forceFromat).replace(moneyPattern, '$1,') + ')'\n\t\t: '$ ' + nFormatter(Number(n).toFixed(2), 2, forceFromat).replace(moneyPattern, '$1,')\n}\n\nexport { uniqPattern, paragraphPattern }","import * as R from 'ramda'\n\nconst financialprops = {\n\tcurrentRevenue: 0\n\t,currentExpenditures: 0\n\t,currentProfits: 0\n\t,forecastedRevenue: 0\n\t,forecastedExpenditures: 0\n\t,forecastedProfits: 0\n\t,outstandingRevenue: 0\n\t,outstandingExpenditures: 0\n\t,outstandingProfits: 0\n\n\t,currentDailyPeriodRevenue: 0\n\t,currentDailyPeriodExpenditures: 0\n\t,forecastedDailyPeriodRevenue: 0\n\t,forecastedDailyPeriodExpenditures: 0\n\t,currentDailyPeriodProfits: 0\n\t,forecastedDailyPeriodProfits: 0\n\t,outstandingDailyPeriodRevenue: 0\n\t,outstandingDailyPeriodExpenditures: 0\n\t,outstandingDailyPeriodProfits: 0\n\n\t,currentDailyRevenue: 0\n\t,currentDailyExpenditures: 0\n\t,forecastedDailyRevenue: 0\n\t,forecastedDailyExpenditures: 0\n\t,currentDailyProfits: 0\n\t,forecastedDailyProfits: 0\n\t,outstandingDailyRevenue: 0\n\t,outstandingDailyExpenditures: 0\n\t,outstandingDailyProfits: 0\n\n\t,accruedExpenditures: 0\n\t,accruedRevenue: 0\n\t,accruedProfits: 0\n\t,accruedDailyRevenue: 0\n\t,accruedDailyExpenditures: 0\n\t,accruedDailyPeriodRevenue: 0\n\t,accruedDailyPeriodExpenditures: 0\n\t,accruedDailyProfits: 0\n\t,accruedDailyPeriodProfits: 0\n\t,budget: 0\n\t,contractList: []\n\t,totalScheduleData: []\n\t,chartdata: []\n\t,totalDayData: []\n\t,invoicecount: 0\n\t,materialActual: 0\n\t,materialForecasted: 0\n}\n\nconst coalatorAccumulator =\n\t(a, b) =>\n\t\tR.mapObjIndexed((object, propIndex) =>\n\t\t\tobject =\n\t\t\tArray.isArray(b[propIndex])\n\t\t\t|| propIndex == 'contractList'\n\t\t\t|| propIndex == 'totalScheduleData'\n\t\t\t|| propIndex == 'totalDayData'\n\t\t\t|| propIndex == 'chartdata'\n\t\t\t\t? object.concat( b[propIndex] || [])\n\t\t\t\t: object + b[propIndex]\n\t\t)(a)\n\n\nconst financialReduce =\n\t({items}) =>\n\t\tR.reduce(\n\t\t\tcoalatorAccumulator\n\t\t\t,R.clone(financialprops)\n\t\t\t,items\n\t\t)\n\n\nexport { financialReduce, coalatorAccumulator, financialprops }","/* globals setTimeout, clearTimeout */\nimport * as R from 'ramda'\nimport m from 'bacta'\nimport byProp from '../utils/byProp'\nimport Promise from 'bluebird'\nimport * as elements from '../components/elements'\nimport { uniqPattern } from '../utils/regExes'\nimport { money as makeMoney } from '../utils/regExes'\nimport { prop } from '../../../stream'\nimport css from 'bss'\nimport * as F from '../utils/financialsUtils'\n\nconst milliperday = 1000*60*60*24\nconst asyncMergeAll =\n\txs => prop.afterSilence(\n\t\t0\n\t\t, prop.merge(xs)\n\t)\n\n\nconst overHEadVersion = {\n\tscheduleNameVersion: 'Overheads'\n\t,schedule_version_id: 'Overheads'\n\t,schedule_id: null\n}\n\nconst accumulator =\n\t(a, b) =>\n\t\tR.mapObjIndexed((object, propIndex) =>\n\t\t\tobject = object + b[propIndex]\n\t\t)(a)\n\nconst checkprop = (a, b, c) =>\n\tc && c[a] && b && c[a][b]\n\t\t? typeof c[a][b] == 'function'\n\t\t\t? c[a][b]()\n\t\t\t: c[a][b]\n\t\t: c && a\n\t\t? typeof c[a] == 'function'\n\t\t\t? c[a]()\n\t\t\t: c[a]\n\t\t: typeof a == 'function'\n\t\t\t? a()\n\t\t\t: a\n\nimport Permissions from './permissions'\n\nexport default function Model(\n\tapi\n\t, scheduleData\n\t, authPermissions\n\t, organizationID\n\t, permissions\n\t, buildRequest\n){\n\n\n\tconst advancedView = prop( false )\n\tconst readWarehousePermissions = prop( false )\n\tconst readProjectPermissions = prop( false )\n\tconst readSupplierPermissions = prop( false )\n\tconst readOrderPermissions = prop( false )\n\tconst readMaterialPermissions = prop( false )\n\tconst readResourcePermissions = prop( false )\n\tconst readFlowPermissions = prop( false )\n\tconst readInterruptionsPermissions = prop( false )\n\tconst readSchedulePermissions = prop( false )\n\tconst readToolPermissions = prop( false )\n\tconst readContractPermissions = prop( false )\n\tconst readInvoicePermissions = prop( false )\n\tconst readTimesheetPermissions = prop( false )\n\tconst readUpdatePermissions = prop( false )\n\tconst readUserPermissions = prop( false )\n\tconst readModulePermissions = prop( false )\n\tconst readAssignedTimesheetsPermissions = prop( false )\n\tconst readOwnedInvoicesPermissions = prop( false )\n\tconst readContractObligationPermissions = prop( false )\n\tconst readAssignedToolsPermissions = prop( false )\n\tconst readAssignedContractsPermissions = prop( false )\n\tconst readOwnedResourcePermissions = prop( false )\n\n\tconst toolsIdentical = prop(true)\n\n\tconst routeChangeCommands = prop()\n\n\tconst permissionsArray = [\n\t\t{ name: 'warehouse_management', stream: readWarehousePermissions }\n\t\t,{ name: 'project_management', stream: readProjectPermissions }\n\t\t,{ name: 'supplier_management', stream: readSupplierPermissions }\n\t\t,{ name: 'resource_management', stream: readResourcePermissions }\n\t\t,{ name: 'flow_management', stream: readFlowPermissions }\n\t\t,{ name: 'interruption_management', stream: readInterruptionsPermissions }\n\t\t,{ name: 'schedule_management', stream: readSchedulePermissions }\n\t\t,{ name: 'tool_management', stream: readToolPermissions }\n\t\t,{ name: 'contract_management', stream: readContractPermissions }\n\t\t,{ name: 'invoice_management', stream: readInvoicePermissions }\n\t\t,{ name: 'timesheet_management', stream: readTimesheetPermissions }\n\t\t,{ name: 'updates_management', stream: readUpdatePermissions }\n\t\t,{ name: 'user_management', stream: readUserPermissions }\n\t\t,{ name: 'order_management', stream: readOrderPermissions }\n\t\t,{ name: 'material_management', stream: readMaterialPermissions }\n\t\t,{ name: 'plan_management', stream: readModulePermissions }\n\t\t,{ name: 'assigned_timesheets', stream: readAssignedTimesheetsPermissions }\n\t\t,{ name: 'owned_invoices', stream: readOwnedInvoicesPermissions }\n\t\t,{ name: 'contract_recognition', stream: readContractObligationPermissions }\n\t\t,{ name: 'assigned_tools', stream: readAssignedToolsPermissions }\n\t\t,{ name: 'assigned_contracts', stream: readAssignedContractsPermissions }\n\t\t,{ name: 'assigned_resources', stream: readOwnedResourcePermissions }\n\t]\n\n\tconst editContractPermissions = prop(false)\n\tconst editInvoicePermissions = prop(false)\n\tconst currentPermissions = prop({})\n\tconst forecastdateA = prop(0)\n\tconst forecastdateB = prop(Infinity)\n\tconst focussedEntities = prop([])\n\tconst calculatedData = prop({})\n\tconst currentRoute = prop('Nothing')\n\tconst currentSchedule = prop(null)\n\tconst disconnectedcontract =\n\t\t{\n\t\t\tcontract_end_date: Infinity\n\t\t\t,contract_start_date: 0\n\t\t\t,contract_name: 'Disconnected Ledgers'\n\t\t\t,contract_id: null\n\t\t\t,organization_id: null\n\t\t\t,contract_description: 'Ledgers tied to deleted records'\n\t\t\t,contract_payment_term: 0\n\t\t\t,contract_count_invoices: true\n\t\t\t,supplier_id: null\n\t\t\t,supplier_name: ''\n\t\t\t,contract_items: [{\n\t\t\t\tcontract_id: null\n\t\t\t\t,contract_items_id: null\n\t\t\t\t,contract_items_name: 'Disconnected Ledgers'\n\t\t\t\t,contract_items_description: ''\n\t\t\t\t,contract_items_client_reference: ''\n\t\t\t\t,contract_items_budget: 0\n\t\t\t\t,contract_items_rate: 0\n\t\t\t\t,contract_items_service: 0\n\t\t\t\t,contract_items_depreciation: 0\n\t\t\t\t,contract_items_appreciation: 0\n\t\t\t\t,contract_items_uom: ''\n\t\t\t\t,contract_items_damages_rate: 0\n\t\t\t\t,contract_items_damages_period: 0\n\t\t\t\t,contract_items_applied: true\n\t\t\t\t,contract_items_recorded_reference: 0\n\t\t\t\t,contract_items_recorded_reference_standard: 0\n\t\t\t\t,crews_discipline_rates_id: null\n\t\t\t\t,modules_id: null\n\t\t\t\t,warehouse_id: null\n\t\t\t\t,contractor_id: null\n\t\t\t\t,crew_id: null\n\t\t\t\t,project_id: null\n\t\t\t\t,organizations_disciplines_id: null\n\t\t\t\t,tools_id: null\n\t\t\t\t,user_id: null\n\t\t\t}]\n\t\t}\n\tconst routeInitialized =\n\t\tcurrentRoute.map((cr) => {\n\t\t\treturn {\n\t\t\t\t'projects': cr == 'projects'\n\t\t\t\t,'exports': cr == 'exports'\n\t\t\t\t,'schedules': cr == 'schedules'\n\t\t\t\t,'gantt': cr == 'gantt'\n\t\t\t\t,'updates': cr == 'updates'\n\t\t\t\t,'contractors': cr == 'contractors'\n\t\t\t\t,'financials': cr == 'financials'\n\t\t\t\t,'tools': cr == 'tools'\n\t\t\t\t,'users': cr == 'users'\n\t\t\t\t,'materials': cr == 'materials'\n\t\t\t\t,'modules': cr == 'modules'\n\t\t\t\t,'interruptions': cr == 'interruptions'\n\t\t\t\t,'flows': cr == 'flows'\n\t\t\t}\n\t\t})\n\n\tconst routeids = prop({\n\t\trouteids: []\n\t\t, getledgers: false\n\t\t, financialsubsets: []\n\t\t, ledgerdetails:false\n\t\t, getmatdata: false\n\t\t, specificproject: null\n\t})\n\n\n\tconst reroute =\n\t\t(auth_permissions) =>\n\t\t\trouteChangeCommands(\n\t\t\t\tPermissions.hasRead(\n\t\t\t\t\tauth_permissions\n\t\t\t\t\t,'project_management'\n\t\t\t\t)\n\t\t\t\t? '/data/projects'\n\t\t\t\t: Permissions.hasRead(\n\t\t\t\t\tauth_permissions\n\t\t\t\t\t,'contract_management'\n\t\t\t\t)\n\t\t\t\t? '/data/contracts'\n\t\t\t\t: Permissions.hasRead(\n\t\t\t\t\tauth_permissions\n\t\t\t\t\t,'warehouse_management'\n\t\t\t\t)\n\t\t\t\t? '/data/materials'\n\t\t\t\t: Permissions.hasRead(\n\t\t\t\t\tauth_permissions\n\t\t\t\t\t,'updates_management'\n\t\t\t\t)\n\t\t\t\t? '/data/updates'\n\t\t\t\t: '/data/updates'\n\t\t\t)\n\n\tconst sumtype = prop(null)\n\tconst groups = prop([])\n\tconst loadchart = prop({})\n\tconst initiateContractFetch =\n\t\tprop.dropRepeats(\n\t\t\tasyncMergeAll(\n\t\t\t\t[\n\t\t\t\t\tscheduleData.schedule_id\n\t\t\t\t]\n\t\t\t)\n\t\t).map(([ s ]) => {\n\n\t\t\tconst auth_permissions = permissions()\n\t\t\teditContractPermissions(\n\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\tauth_permissions, 'contract_management'\n\t\t\t\t)\n\t\t\t)\n\t\t\teditInvoicePermissions(\n\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\tauth_permissions, 'invoice_management'\n\t\t\t\t)\n\t\t\t)\n\n\t\t\tcalculatedData({})\n\n\t\t\tconst ochange =\n\t\t\t\tpermissionsArray\n\t\t\t\t.map((aPermissions) =>\n\t\t\t\t\taPermissions.stream(\n\t\t\t\t\t\tPermissions.hasRead(\n\t\t\t\t\t\t\tauth_permissions\n\t\t\t\t\t\t\t, aPermissions.name\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t).length\n\t\t\t\t&& currentPermissions().organization_id\n\t\t\t\t!= auth_permissions.organization_id\n\t\t\t\t&& auth_permissions.organization_id\n\n\t\t\tconst schange = s != currentSchedule()\n\t\t\tconst opsum = currentPermissions().auth_permissions_read + currentPermissions().auth_permissions_read\n\t\t\tconst psumm = auth_permissions.auth_permissions_read + auth_permissions.auth_permissions_read\n\t\t\tcurrentPermissions(auth_permissions)\n\t\t\tcurrentSchedule(s)\n\n\t\t\tif(\n\t\t\t\t( ochange && opsum && psumm != opsum )\n\t\t\t\t|| m.route.get().indexOf('/autodirect') > -1\n\t\t\t){ reroute(auth_permissions) }\n\n\t\t\tif(ochange || schange){\n\t\t\t\tloading(true)\n\t\t\t\t;Promise.all([\n\t\t\t\t\tcurrentRoute() == 'financials' && ochange\n\t\t\t\t\t? fetchContracts({depth:'', props:{}})\n\t\t\t\t\t: fetchContracts({depth:1})\n\t\t\t\t\t, auth_permissions.organization_id\n\t\t\t\t\t\t? api.groups2.fetch.byOrganization({\n\t\t\t\t\t\t\torganization_id: auth_permissions.organization_id\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: []\n\t\t\t\t])\n\t\t\t\t.then(([clist, g]) => {\n\n\t\t\t\t\tcontracts(\n\t\t\t\t\t\tR.concat(\n\t\t\t\t\t\t\tclist\n\t\t\t\t\t\t\t,[disconnectedcontract]\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\tgroups(g)\n\n\t\t\t\t\treturn contracts()\n\t\t\t\t})\n\t\t\t\t.then(R.F)\n\t\t\t\t.then(loading)\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tochange\n\t\t\t\t,schange\n\t\t\t\t,schedule_id: s\n\t\t\t\t,organization_id: auth_permissions.organization_id\n\t\t\t\t,ids: []\n\t\t\t}\n\t\t})\n\n\t function cloneInvoice(\n\t\t ilist\n\t \t, userID\n\t \t, baseContract\n\t \t, prefillObject={\n\t\t\t project_id: m.prop(null)\n\t\t\t ,project_name: null\n\t\t\t ,allocation_id: m.prop(null)\n\t\t }\n\t \t, amountMultiplier={\n\t\t\t preFillAmount: 0\n\t\t\t,rateMultiplier: 1\n\t\t}\n\t \t, invoiceItems\n\t){\n\n\t\tconst sType = Array.isArray(ilist)\n\t\t\t? ilist[0]\n\t\t\t: ilist[Object.keys(ilist)[0]]\n\n\n\t\tconst PreFillProjectId = prefillObject.project_id()\n\t\tconst PreFillProjectName = prefillObject.project_name\n\t\tconst PreFillAllocationId = prefillObject.allocation_id()\n\n\t\tconst exposer =\n\t\t\tilist\n\t\t\t&& (\n\t\t\t\tArray.isArray(ilist) && ilist.length\n\t\t\t\t|| Object.keys(ilist).length\n\t\t\t)\n\t\t\t&& typeof sType.contract_id == 'function'\n\t\t\t\t? R.call\n\t\t\t\t: R.identity\n\n\t\tif(ilist.length && !ilist[0].invoice_id ){\n\n\t\t\tvar supplierID = typeof baseContract.supplier_id == 'function'\n\t\t\t\t? byProp('supplier_id')(baseContract)\n\t\t\t\t: R.prop('supplier_id')(baseContract)\n\t\t\tvar supplierName = typeof baseContract.supplier_name == 'function'\n\t\t\t\t? byProp('supplier_name')(baseContract)\n\t\t\t\t: R.prop('supplier_name')(baseContract)\n\t\t}\n\n\t\treturn (\n\t\t\tArray.isArray(ilist)\n\t\t\t\t? ilist\n\t\t\t\t: Object.keys(ilist)\n\t\t)\n\t\t\t.map((aitem, index, theArray) => {\n\n\t\t\t\tconst structure = Array.isArray(ilist)\n\t\t\t\t\t? aitem\n\t\t\t\t\t: ilist[aitem]\n\n\t\t\t\tconst contractItemInfo =\n\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t? { contractprojectid: structure.contractprojectid }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\tcrews_discipline_rates_id:\n\t\t\t\t\t\t\t\tstructure.crews_discipline_rates_id\n\t\t\t\t\t\t\t,contractor_id:\n\t\t\t\t\t\t\t\tstructure.contractor_id\n\t\t\t\t\t\t\t,crew_id:\n\t\t\t\t\t\t\t\tstructure.crew_id\n\t\t\t\t\t\t\t,contractprojectid:\n\t\t\t\t\t\t\t\tstructure.project_id\n\t\t\t\t\t\t\t,organizations_disciplines_id:\n\t\t\t\t\t\t\t\tstructure.organizations_disciplines_id\n\t\t\t\t\t\t}\n\n\t\t\t\tconst copiedList = R.merge(\n\t\t\t\t\tcontractItemInfo\n\t\t\t\t\t,{\n\t\t\t\t\t\tcontractrecognitionid: structure.invoice_type\n\t\t\t\t\t\t\t? structure.contractrecognitionid\n\t\t\t\t\t\t\t: structure.modules_id\n\t\t\t\t\t\t\t|| structure.warehouse_id\n\t\t\t\t\t\t\t|| structure.contractor_id\n\t\t\t\t\t\t\t|| structure.project_id\n\t\t\t\t\t\t\t|| structure.organizations_disciplines_id\n\t\t\t\t\t\t\t|| structure.tools_id\n\t\t\t\t\t\t\t|| structure.user_id\n\t\t\t\t\t\t\t|| structure.crews_discipline_rates_id\n\t\t\t\t\t\t\t|| structure.crew_id\n\n\t\t\t\t\t\t,key: structure.key\n\t\t\t\t\t\t\t? structure.key\n\t\t\t\t\t\t\t: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t\t,contract_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_type\n\t\t\t\t\t\t\t\t? exposer(structure.contract_id)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_id)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,organization_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_type\n\t\t\t\t\t\t\t\t? exposer(structure.organization_id)\n\t\t\t\t\t\t\t\t: exposer(structure.organization_id)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,contract_items_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_type\n\t\t\t\t\t\t\t\t? exposer(structure.contract_items_id)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_items_id)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_type: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_type\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_type)\n\t\t\t\t\t\t\t\t: Number(\n\t\t\t\t\t\t\t\t\texposer(structure.contract_items_rate)\n\t\t\t\t\t\t\t\t\t+ exposer(structure.contract_items_appreciation)\n\t\t\t\t\t\t\t\t\t+ exposer(structure.contract_items_service)\n\t\t\t\t\t\t\t\t\t+ exposer(structure.contract_items_depreciation)\n\t\t\t\t\t\t\t\t\t+ exposer(structure.contract_items_damages_rate)\n\t\t\t\t\t\t\t\t) > 0\n\t\t\t\t\t\t\t\t\t? 'Accrued Revenue'\n\t\t\t\t\t\t\t\t\t: 'Accrued Expenditure'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,project_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.project_id)\n\t\t\t\t\t\t\t\t: PreFillProjectId\n\t\t\t\t\t\t\t\t|| structure.project_id\n\t\t\t\t\t\t\t\t|| null\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,project_name: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.project_name)\n\t\t\t\t\t\t\t\t: PreFillProjectName\n\t\t\t\t\t\t\t\t|| structure.project_id && structure.contract_items_name()\n\t\t\t\t\t\t\t\t|| null\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_id)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,user_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.user_id)\n\t\t\t\t\t\t\t\t: userID\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_date: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_date\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_date)\n\t\t\t\t\t\t\t\t: new Date().getTime()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_received_date: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_received_date)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_due_date: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_due_date)\n\t\t\t\t\t\t\t\t: new Date().getTime() + milliperday * Number(structure.contract_payment_term)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_no: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_no\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_no)\n\t\t\t\t\t\t\t\t: new Date().toLocaleString().replace(':', '').replace(':', '').replace(',', '').replace(' ', '').replace(' ', '').replace('AM', '').replace('PM', '').replace('am', '').replace('pm', '')\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tsupplierName\n\t\t\t\t\t\t\t\t\t\t\t? '-' + supplierName.split(' ').map((word) => word.replace(uniqPattern, '').slice(0, word.length > 2 ? 1 : 2).charAt(0).toUpperCase()).join('')\n\t\t\t\t\t\t\t\t\t\t\t: 'UKN'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tstructure.contract_items_name()\n\t\t\t\t\t\t\t\t\t\t\t? '-' + exposer(structure.contract_items_name).split(' ').map((word) => word.replace(uniqPattern, '').slice(0, word.length > 2 ? 1 : 2).charAt(0).toUpperCase()).join('')\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tstructure.contract_items_description()\n\t\t\t\t\t\t\t\t\t\t\t? '-' + exposer(structure.contract_items_description).split(' ').map((word) => word.replace(uniqPattern, '').slice(0, word.length > 2 ? 1 : 2).charAt(0).toUpperCase()).join('')\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ theArray.length\n\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_inv_id: m.prop(\n\t\t\t\t\t\t\texposer(structure.invoice_inv_id)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,allocation_id: m.prop(\n\t\t\t\t\t\t\tstructure.allocation_id\n\t\t\t\t\t\t\t\t? exposer(structure.allocation_id)\n\t\t\t\t\t\t\t\t: PreFillAllocationId\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_received: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_received\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_received)\n\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_name: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_name\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_name)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_items_name)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_description: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_description\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_description)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_items_description)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_client_reference: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_client_reference)\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_items_client_reference: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_items_client_reference)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_items_client_reference)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_uom: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_uom)\n\t\t\t\t\t\t\t\t: exposer(structure.contract_items_uom)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_amount: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_amount)\n\t\t\t\t\t\t\t\t: amountMultiplier.preFillAmount || 0\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_service_amount: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_service_amount)\n\t\t\t\t\t\t\t\t: amountMultiplier.preFillAmount || 0\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_depreciation_amount: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_depreciation_amount)\n\t\t\t\t\t\t\t\t: amountMultiplier.preFillAmount || 0\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_appreciation_amount: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_appreciation_amount)\n\t\t\t\t\t\t\t\t: amountMultiplier.preFillAmount || 0\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_damages_amount: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_damages_amount)\n\t\t\t\t\t\t\t\t: amountMultiplier.preFillAmount || 0\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_rate: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_rate)\n\t\t\t\t\t\t\t\t: exposer(\n\t\t\t\t\t\t\t\t\tstructure.contract_items_rate\n\t\t\t\t\t\t\t\t) * amountMultiplier.rateMultiplier\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_service_rate: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_service_rate)\n\t\t\t\t\t\t\t\t: exposer(\n\t\t\t\t\t\t\t\t\tstructure.contract_items_service\n\t\t\t\t\t\t\t\t) * amountMultiplier.rateMultiplier\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_depreciation_rate: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_depreciation_rate)\n\t\t\t\t\t\t\t\t: exposer(\n\t\t\t\t\t\t\t\t\tstructure.contract_items_depreciation\n\t\t\t\t\t\t\t\t) * amountMultiplier.rateMultiplier\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_appreciation_rate: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_appreciation_rate)\n\t\t\t\t\t\t\t\t: exposer(\n\t\t\t\t\t\t\t\t\tstructure.contract_items_appreciation\n\t\t\t\t\t\t\t\t) * amountMultiplier.rateMultiplier\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_damages_rate: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_damages_rate)\n\t\t\t\t\t\t\t\t: exposer(\n\t\t\t\t\t\t\t\t\tstructure.contract_items_damages_rate\n\t\t\t\t\t\t\t\t) * amountMultiplier.rateMultiplier\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_approval: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_approval\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_approval)\n\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,invoice_approver: m.prop(\n\t\t\t\t\t\t\texposer(structure.invoice_approver)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,supplier_name: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.supplier_name)\n\t\t\t\t\t\t\t\t: supplierName\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,supplier_id: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.supplier_id)\n\t\t\t\t\t\t\t\t: supplierID\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,created:\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t,invoice_reversal: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_reversal)\n\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_amount_total: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t\t? exposer(structure.invoice_amount_total)\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,invoice_total: m.prop(\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t? structure.invoice_amount*structure.invoice_rate\n\t\t\t\t\t\t\t+ structure.invoice_service_amount*structure.invoice_service_rate\n\t\t\t\t\t\t\t+ structure.invoice_depreciation_amount*structure.invoice_depreciation_rate\n\t\t\t\t\t\t\t+ structure.invoice_appreciation_amount*structure.invoice_appreciation_rate\n\t\t\t\t\t\t\t+ structure.invoice_damages_amount*structure.invoice_damages_rate\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,contract_payment_term:\n\t\t\t\t\t\t\tstructure.invoice_id\n\t\t\t\t\t\t\t? structure.contract_payment_term\n\t\t\t\t\t\t\t: checkprop('contract_payment_term', null, baseContract)\n\t\t\t\t\t\t,invoice_items: structure.invoice_items || invoiceItems || []\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\treturn copiedList\n\t\t\t})\n\t}\n\n\tconst routeParam = function(){\n\n\t\tconst url = m.route.get()\n\n\t\tconst scopedURL = (url || '').replace('/data/contracts', '')\n\t\tconst viewType =\n\t\t\tscopedURL.startsWith('/contracts')\n\t\t\t? 'contracts'\n\t\t\t: scopedURL.startsWith('/overview')\n\t\t\t? 'overview'\n\t\t\t: 'contractitems'\n\t\tconst modeURL = scopedURL.replace('/' + viewType, '')\n\t\tconst modeType =\n\t\t\tviewType == 'contracts'\n\t\t\t? modeURL.split('/')[1]\n\t\t\t: 'view'\n\n\t\tconst invoiceType =\n\t\t\tmodeURL.indexOf('ledger') > -1\n\t\t\t? modeURL.split('ledger/')[1]\n\t\t\t: ''\n\n\t\tconst contractId =\n\t\t\tmodeType == 'edit' || modeType == 'clone'\n\t\t\t? modeURL.split('/')[2]\n\t\t\t: ''\n\n\t\tconst focus =\n\t\t\tmodeURL.indexOf('focus') > -1\n\t\t\t? modeURL.split('focus/')[1].split('/ledger')[0]\n\t\t\t: ''\n\n\t\treturn {\n\t\t\tviewType\n\t\t\t,modeType\n\t\t\t,invoiceType\n\t\t\t,contractId\n\t\t\t,focus\n\t\t}\n\t}\n\n\tfunction routeParams(scheduleonly, schedule_version_id){\n\t\tlet {\n\t\t\tviewType\n\t\t\t,invoiceType\n\t\t\t,contractId\n\t\t} = routeParam()\n\n\t\tconst odinItems =\n\t\t\tR.unnest(\n\t\t\t\tviewWindow()\n\t\t\t\t.map((v) =>\n\t\t\t\t\tv == 'Projects'\n\t\t\t\t\t? projects()\n\t\t\t\t\t: v == 'Project Disciplines'\n\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\tprojects().map((p) =>\n\t\t\t\t\t\t\tp.disciplines\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: v == 'Resources'\n\t\t\t\t\t? resources()\n\t\t\t\t\t: v == 'Teams'\n\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\tresources().map((r) =>\n\t\t\t\t\t\t\tr.crews\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: v == 'Team Capabilities'\n\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\tresources().map((r) =>\n\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\tr.crews.map((crew) =>\n\t\t\t\t\t\t\t\t\tcrew.crews_discipline_rates\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: v == 'Organization Disciplines'\n\t\t\t\t\t? organizations_disciplines()\n\t\t\t\t\t: v == 'Users'\n\t\t\t\t\t? users()\n\t\t\t\t\t: v == 'Tools'\n\t\t\t\t\t? tools()\n\t\t\t\t\t: v == 'Warehouses'\n\t\t\t\t\t? warehouses()\n\t\t\t\t\t: v == 'Odin Modules'\n\t\t\t\t\t? modules()\n\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map(R.prop('contractrecognitionid'))\n\t\t\t.filter(R.identity).join(',')\n\t\t\t|| 'none'\n\n\t\treturn currentRoute() != 'financials'\n\t\t? {\n\t\t\tcontracts: 'none'\n\t\t\t,invoices: routeids().getledgers ? 'all' : 'none'\n\t\t\t,contract_items: 'none'\n\t\t\t,items: routeids().routeids.join(',') || 'none'\n\t\t\t,viewwindow: 'none'\n\t\t\t,viewType\n\t\t\t,sumtype: sumtype() || ''\n\t\t\t,breakdown: 'breakdown'\n\t\t\t,getchartdata:\n\t\t\t\tObject.keys(loadchart()).length\n\t\t\t\t? 'getcharts'\n\t\t\t\t: ''\n\t\t}\n\t\t: viewType == 'contracts'\n\t\t? {\n\t\t\tcontracts:\n\t\t\t\tinvoiceType\n\t\t\t\t|| contractId\n\t\t\t\t|| ['all'].concat('null').join(',')\n\t\t\t\t// || contracts().map(R.prop('contract_id'))\n\t\t\t\t// .filter(R.identity).concat('null').join(',')\n\t\t\t,invoices: invoiceType || 'count'\n\t\t\t,contract_items:\n\t\t\t\t!contractId ? 'none' : invoiceType ? invoiceType : 'all'\n\t\t\t,items: 'none'\n\t\t\t,viewwindow: 'none'\n\t\t\t,viewType\n\t\t\t,sumtype: sumtype()\n\t\t\t,props: {\n\t\t\t\tfinancials: [\n\t\t\t\t\t'contract_id'\n\t\t\t\t\t,'contract_items_id'\n\t\t\t\t\t,\"contractStart\"\n\t\t\t\t\t,\"contractEnd\"\n\t\t\t\t\t,\"damagesEnd\"\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t\t: viewType == 'contractitems' || viewType == 'overview'\n\t\t? {\n\t\t\tcontracts: 'none'\n\t\t\t,invoices: invoiceType || 'count'\n\t\t\t,contract_items: 'none'\n\t\t\t,viewwindow: viewWindow().join(',') || 'none'\n\t\t\t,items:\n\t\t\t\tscheduleonly\n\t\t\t\t|| schedule_version_id == overHEadVersion.schedule_version_id\n\t\t\t\t\t? 'all'\n\t\t\t\t\t: odinItems\n\t\t\t,viewType\n\t\t\t,props:\n\t\t\t\tviewType == 'overview'\n\t\t\t\t? {\n\t\t\t\t\tfinancials: [\n\t\t\t\t\t\t'currentProfits'\n\t\t\t\t\t\t,'forecastedProfits'\n\t\t\t\t\t\t,'contractrecognitionid'\n\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t,'costedto'\n\t\t\t\t\t\t,'currentRevenue'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\t: null\n\t\t\t,getchartdata:\n\t\t\t\tObject.keys(loadchart()).length\n\t\t\t\t? 'getcharts'\n\t\t\t\t: ''\n\t\t\t,sumtype: sumtype()\n\t\t}\n\t\t: {\n\t\t\tcontracts: 'none'\n\t\t\t,invoices: 'none'\n\t\t\t,contract_items: 'none'\n\t\t\t,items: 'none'\n\t\t\t,viewwindow: 'none'\n\t\t\t,viewType\n\t\t\t,sumtype: sumtype()\n\t\t}\n\t}\n\n\n\tconst summation =\n\t\t(i) =>\n\t\t\tR.sum(\n\t\t\t\tObject.keys({\n\t\t\t\t\tcurrentProfits: 0\n\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t// ,materialActual: 0\n\t\t\t\t\t// ,materialForecasted: 0\n\n\t\t\t\t\t// ,budget: 0\n\t\t\t\t\t// ,contractList: []\n\t\t\t\t\t// ,totalScheduleData: []\n\t\t\t\t\t// ,totalDayData: []\n\t\t\t\t\t// ,invoicecount: 0\n\t\t\t\t})\n\t\t\t\t.map((k) => i[k])\n\t\t\t)\n\n\tconst route_contract_id = prop(null)\n\tconst route_original_contract_id = prop(null)\n\tconst route_view_type =\tprop(null)\n\tconst prevview = prop(null)\n\tconst chartCreation = prop({})\n\n\tfunction sumSchedule({data, fe}){\n\t\tif( fe ){\n\t\t\tfe.odinitems =\n\t\t\t\tdata.scheduleonly\n\t\t\t\t? R.last(data.possibleContractEntities).odinitems\n\t\t\t\t: data.possibleContractEntities\n\t\t\t\t.map((e) => R.merge(baseItems() && baseItems()[e.contractrecognitionid] || {}, e))\n\t\t\t\t.filter((e) =>\n\t\t\t\t\t!fe.schedule_id\n\t\t\t\t\t? (summation(e) || e.invoicecount)\n\t\t\t\t\t&& !projects().find((p) => p.project_id() == e.contractrecognitionid)\n\t\t\t\t\t: e.schedule_id && e.schedule_id() == fe.schedule_id\n\t\t\t\t)\n\n\t\t\tfe.odincount =\n\t\t\t\tdata.scheduleonly\n\t\t\t\t\t? R.last(data.possibleContractEntities).odincount || 0\n\t\t\t\t\t: data.odincount || fe.odinitems.length\n\n\t\t\tfe.odinsum =\n\t\t\t\tdata.scheduleonly\n\t\t\t\t\t? R.last(data.possibleContractEntities).odinsum || 0\n\t\t\t\t\t: data.odinsum || F.financialReduce({items: fe.odinitems})\n\n\t\t\tfe.tp = prop(20)\n\t\t\tfe.groupings = []\n\t\t\tfe.makeChart =\n\t\t\t\tsummation(fe.odinsum)\n\t\t\t\t? chartCreation({fe})\n\t\t\t\t: null\n\t\t}\n\t}\n\n\tfunction fetchCalculations(paramObj){\n\t\tcalculated(false)\n\t\tdelete calculatedData()[\n\t\t\tparamObj.scheduleList[0].schedule_version_id\n\t\t\t+ forecastdateA()\n\t\t\t+ forecastdateB()\n\t\t]\n\n\t\tconst sv = R.last(paramObj.scheduleList).schedule_version_id\n\t\tconst cparams = routeParams(paramObj.scheduleonly, sv)\n\n\t\tconst paramObjUpdated =\n\t\t\tR.merge(\n\t\t\t\troute_view_type() == 'Overview'\n\t\t\t\t&& sv == 'Overheads' ? {nochildren: true} : {}\n\t\t\t\t,paramObj\n\t\t\t)\n\n\t\trecordedFocus({\n\t\t\tschedules: focussedEntities()\n\t\t\t\t.map((a) => ({\n\t\t\t\t\tsnv: a.scheduleNameVersion\n\t\t\t\t\t,dReceived: {\n\t\t\t\t\t\tcoalatedSelectedVersion: false\n\t\t\t\t\t\t,possibleContractEntities: false\n\t\t\t\t\t\t,focussedInvoices: false\n\t\t\t\t\t\t,allContractItems: false\n\t\t\t\t\t\t,allContracts: false\n\t\t\t\t\t}\n\t\t\t\t\t,schedule_version_id: a.schedule_version_id\n\t\t\t\t}))\n\t\t\t,dateA: forecastdateA()\n\t\t\t,dateB: forecastdateB()\n\t\t})\n\n\t\treturn (\n\t\t\t[\n\t\t\t\treadContractPermissions\n\t\t\t\t,readInvoicePermissions\n\t\t\t\t,readOwnedInvoicesPermissions\n\t\t\t\t,readAssignedContractsPermissions\n\t\t\t].some((a) => a())\n\t\t\t\t? api.contracts_invoices_calculations.fetch.all(\n\t\t\t\t\tR.merge(paramObjUpdated, cparams)\n\t\t\t\t\t, routeids()\n\t\t\t\t)\n\t\t\t\t: Promise.resolve(\n\t\t\t\t\t[\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\tparamObj\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tforecastdateA: Number(forecastdateA()) || 0\n\t\t\t\t\t\t\t\t,forecastdateB: Number(forecastdateB()) || Infinity\n\t\t\t\t\t\t\t\t,now: Number(Date.now())\n\t\t\t\t\t\t\t\t,allContractItems: []\n\t\t\t\t\t\t\t\t,allContracts: []\n\t\t\t\t\t\t\t\t,focussedInvoices: []\n\t\t\t\t\t\t\t\t,possibleContractEntities: []\n\t\t\t\t\t\t\t\t,totalDayData: []\n\t\t\t\t\t\t\t\t,totalScheduleData: []\n\t\t\t\t\t\t\t\t,schedule_version_id: paramObj.scheduleList[0].schedule_version_id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t)\n\t\t.then(function([res]){\n\t\t\tconst calculationID = res.schedule_version_id\n\t\t\tconst fe = focussedEntities().find((sv) => sv.schedule_version_id == calculationID)\n\t\t\tcalculatedData()[calculationID + res.forecastdateA + (res.forecastdateB || Infinity)] = res\n\t\t\tcalculatedData(calculatedData())\n\t\t\tsumSchedule({data: res, fe })\n\t\t\treturn res\n\t\t})\n\t}\n\n\tfunction fetchInterruptions(params){\n\t\treturn readInterruptionsPermissions()\n\t\t\t? api.interruptions.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchFlowsByScheduleId(schedule_id){\n\t\treturn readFlowPermissions()\n\t\t\t? api.flows.fetch.bySchedule(schedule_id)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchGeographies(){\n\t\treturn api.geographies.fetch.all()\n\t}\n\n\tfunction fetchSchedules(stats){\n\t\treturn !readSchedulePermissions()\n\t\t\t? Promise.resolve([])\n\t\t\t: stats\n\t\t\t? api.schedules.fetch.allStats()\n\t\t\t: api.schedules.fetch.all()\n\t}\n\n\tfunction fetchScheduleParameters(){\n\t\treturn readSchedulePermissions()\n\t\t\t? api.schedules_parameters.fetch.all()\n\t\t\t: Promise.resolve([])\n\t}\n\n\n\tfunction fetchAllocationsbyProjectAndScheduleVersion(params){\n\t\treturn readUpdatePermissions() || readProjectPermissions()\n\t\t\t? api.allocations.fetch\n\t\t\t\t.byProjectAndScheduleVersion(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchAllocationsbyDiscipline(allocation_id){\n\t\treturn readUpdatePermissions() || readProjectPermissions()\n\t\t\t? api.allocations.fetch.disciplines(allocation_id)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchAllocationsbyScheduleVersion(params, load){\n\t\treturn !readUpdatePermissions()\n\t\t\t? Promise.resolve([])\n\t\t\t: load\n\t\t\t? api.allocations.fetch.byAllocationScheduleVersionKey[load](params)\n\t\t\t: api.allocations.fetch.byScheduleVersion(params)\n\t}\n\n\tfunction fetchAllocationsbyScheduleVersionShallow(params){\n\t\treturn readUpdatePermissions() || readProjectPermissions()\n\t\t\t? api.allocations.fetch\n\t\t\t\t.byAllocationScheduleVersionKey\n\t\t\t\t.shallowUniq(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchSuppliers(params){\n\t\treturn readSupplierPermissions()\n\t\t\t? api.suppliers.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchPresets(){\n return readMaterialPermissions()\n\t\t\t? api.presets.fetch.all()\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction getLocation(items, disableSave, postRequest){\n\t\tconst setlatlong =\n\t\t\t(s) => {\n\t\t\t\titems.forEach((i) => i.location = s && s.coords || null)\n\t\t\t\t;postRequest ? postRequest() : null\n\t\t\t\treturn disableSave(false)\n\t\t\t}\n\t\t// eslint-disable-next-line no-undef\n\t\tif (!navigator.geolocation) {\n\t\t\treturn (postRequest ? postRequest() : true)\n\t\t} else {\n\t\t\tdisableSave(true)\n\t\t// eslint-disable-next-line no-undef\n\t\t\tnavigator.geolocation.getCurrentPosition(setlatlong, setlatlong)\n\t\t\treturn true\n\t\t}\n\t }\n\n\n\tlet fetchMaterials = function(\n\t\tparams={\n\t\t\tprojects: []\n\t\t\t,warehouse_id: null\n\t\t\t,completedProjects: null\n\t\t}\n\t){\n\t\treturn readMaterialPermissions()\n\t\t\t? api.materials.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tlet fetchSuggestedMaterials = function(\n\t\tparams={\n\t\t\tproject_id: null\n\t\t\t,warehouse_id: null\n\t\t}\n\t){\n\t\treturn readMaterialPermissions()\n\t\t\t? api.materials.fetch.suggested(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tlet fetchOrders = function(\n\t\tparams={\n\t\t\tproject_id: null\n\t\t\t,warehouse_id: null\n\t\t\t,completedProjects: null\n\t\t}\n\t){\n\t\treturn readOrderPermissions()\n\t\t\t? api.orders.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchProjectsBySchedule(params){\n\t\treturn readProjectPermissions()\n\t\t&& params.schedule_id || params.gettemplates\n\t\t\t? api.projects.fetch.bySchedule(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchProjectsByProjectId(params){\n\t\treturn (readProjectPermissions() || readUpdatePermissions())\n\t\t&& params.project_id\n\t\t\t? api.projects.fetch.one_shallow(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchProjectExtras(paramObj){\n\t\treturn readProjectPermissions()\n\t\t|| readUpdatePermissions()\n\t\t\t? api.project_extras.fetch(paramObj)\n\t\t\t\t.then(function(res){\n\t\t\t\t\tparamObj.f(true)\n\t\t\t\t\treturn res\n\t\t\t\t})\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchProjectContacts(paramObj){\n\t\treturn readProjectPermissions()\n\t\t|| readUpdatePermissions()\n\t\t\t? api.project_contacts.fetch(paramObj)\n\t\t\t\t.then(function(res){\n\t\t\t\t\treturn res\n\t\t\t\t})\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchContainers(){\n\t\treturn readMaterialPermissions()\n\t\t\t? api.containers.fetch.all()\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchInvoices(){\n\t\treturn readInvoicePermissions()\n\t\t|| readOwnedInvoicesPermissions()\n\t\t\t? api.invoices.fetch.all()\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchContracts(params){\n\t\treturn readContractPermissions()\n\t\t|| readAssignedContractsPermissions()\n\t\t\t? api.contracts.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchOrganizationsDisciplines(params){\n\t\treturn api.organizations_disciplines.fetch(params)\n\t}\n\n\tfunction fetchUsers(){\n\t\treturn api.users.fetch.all()\n\t}\n\n\tfunction fetchResource(params){\n\t\treturn readResourcePermissions()\n\t\t|| readOwnedResourcePermissions()\n\t\t\t? api.contractors.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchResourceWork(a){\n\t\treturn readResourcePermissions()\n\t\t|| readOwnedResourcePermissions()\n\t\t\t? api.contractors.fetch.workList(a)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchProjects(params){\n\t\treturn readProjectPermissions()\n\t\t\t? api.projects.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchWarehouses(params){\n\t\treturn readWarehousePermissions()\n\t\t\t? api.warehouses.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n function fetchTools(params){\n\t\treturn readToolPermissions()\n\t\t|| readAssignedToolsPermissions()\n\t\t\t? api.tools.fetch.all(params)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchTimesheetsByAllocation(props){\n\t\treturn readTimesheetPermissions()\n\t\t|| readAssignedTimesheetsPermissions()\n\t\t\t? api.timesheets.fetch.byAllocationId(props)\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction fetchTimesheetsByProject({project_id}){\n\t\treturn readTimesheetPermissions()\n\t\t|| readAssignedTimesheetsPermissions()\n\t\t\t? api.timesheets.fetch.byProjectId({project_id})\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction transferProjects(d){\n\t\treturn api.projects.transfer(d)\n\t}\n\n\tfunction progressCalculation(processingItem, summaryType, dAverage){\n\t\tconst summaryPeriod =\n\t\t\tdAverage() == 'Total Period'\n\t\t\t? ''\n\t\t\t: dAverage() == 'Work-Day Average'\n\t\t\t? 'Daily'\n\t\t\t: 'DailyPeriod'\n\t\tconst a =\n\t\t\t// processingItem['accrued' + summaryPeriod + summaryType]\n\t\t\tprocessingItem['outstanding' + summaryPeriod + summaryType]\n\t\t\t+ processingItem['current' + summaryPeriod + summaryType]\n\t\tconst b = processingItem['forecasted' + summaryPeriod + summaryType]\n\t\treturn (\n\t\t\t(\n\t\t\t\ta != 0\n\t\t\t\t&& a/b != 0\n\t\t\t\t&& Math.abs(b) > 1/10000\n\t\t\t\t\t? a/b\n\t\t\t\t\t: a != 0 && (b == 0 || Math.abs(b) < 1/10000)\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: 0\n\n\t\t\t) * 100\n\t\t).toFixed(3) + ' %'\n\t}\n\n\tfunction renderSummary(\n\t\titem\n\t\t, summaryType\n\t\t, dAverage\n\t\t, overwriteProgress\n\t\t, progressOption\n\t\t, open\n\t\t, attrs={\n\t\t\tstyle:{\n\t\t\t\twidth: '10rem'\n\t\t\t}\n\t\t}\n\t){\n\n\t\tconst processingItem = item || {}\n\t\tconst summaryPeriod =\n\t\t\tdAverage() == 'Total Period'\n\t\t\t? ''\n\t\t\t: dAverage() == 'Work-Day Average'\n\t\t\t? 'Daily'\n\t\t\t: 'DailyPeriod'\n\n\t\tconst progress =\n\t\t\toverwriteProgress\n\t\t\t? overwriteProgress + ' %'\n\t\t\t: processingItem['forecasted' + summaryPeriod + summaryType] != null\n\t\t\t\t? progressCalculation(processingItem, summaryType, dAverage)\n\t\t\t\t: \"\"\n\n\t\tconst accrued =\n\t\t\tprocessingItem['accrued' + summaryPeriod + summaryType] != null\n\t\t\t\t? makeMoney(processingItem['accrued' + summaryPeriod + summaryType])\n\t\t\t\t: \"\"\n\n\t\tconst outstanding =\n\t\t\tprocessingItem['outstanding' + summaryPeriod + summaryType] != null\n\t\t\t\t? makeMoney(processingItem['outstanding' + summaryPeriod + summaryType])\n\t\t\t\t: \"\"\n\n\t\tconst current =\n\t\t\tprocessingItem['current' + summaryPeriod + summaryType] != null\n\t\t\t\t? makeMoney(processingItem['current' + summaryPeriod + summaryType])\n\t\t\t\t: \"\"\n\n\t\tconst forecasted =\n\t\t\tprocessingItem['forecasted' + summaryPeriod + summaryType] != null\n\t\t\t\t? makeMoney(processingItem['forecasted' + summaryPeriod + summaryType])\n\t\t\t\t: \"\"\n\n\t\tconst renderArray =\n\t\t\t[\n\t\t\t\t{k:'Accrued ', v: accrued}\n\t\t\t\t,{k:'Requisitions ', v: outstanding}\n\t\t\t\t,{k:'Receipted ', v: current}\n\t\t\t\t,{k:'Forecasts ', v: forecasted}\n\t\t\t]\n\n\t\tconst tvalue = !calculated()\n\t\treturn m(\n\t\t\t'div'\n\t\t\t,{style: attrs.style ? R.pick('font-size', attrs.style) : {}}\n\t\t\t,elements.details(\n\t\t\t\tprogressOption == 'inline'\n\t\t\t\t? progress\n\t\t\t\t: summaryType + ' ' + progress\n\t\t\t\t,progressOption == 'inline'\n\t\t\t\t? renderArray.map((s) => tvalue ? elements.spinner() : s.v).join(' | ')\n\t\t\t\t: progressOption == 'tabled'\n\t\t\t\t? elements.list(R.intersperse(' | ', renderArray.map((s) => m('p.tc', attrs, tvalue ? elements.spinner() : s.v))))\n\t\t\t\t: m('p.pt3'\n\t\t\t\t\t, renderArray.map((s) =>\n\t\t\t\t\t\tm('p.pv1.ma0.pl3'\n\t\t\t\t\t\t\t+css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.4fr 0.6fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[s.k, tvalue ? elements.spinner() : s.v]\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,k || elements.spinner()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,{open}\n\t\t\t)\n\t\t)\n\t}\n\n\tconst currentVersion =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tscheduleData.schedule_version_id\n\t\t\t\t,scheduleData.schedules\n\t\t\t]\n\t\t)\n\t\t.map(([sversion, schedules]) =>\n\t\t\tsversion\n\t\t\t\t&& schedules.length\n\t\t\t\t&& scheduleData.schedule_id() != null\n\t\t\t\t? schedules\n\t\t\t\t\t.find((s) =>\n\t\t\t\t\t\ts.schedule_id\n\t\t\t\t\t\t== scheduleData.schedule_id()\n\t\t\t\t\t)\n\t\t\t\t\t.schedule_versions.find((svs) =>\n\t\t\t\t\t\tsvs.schedule_version_id == sversion\n\t\t\t\t\t)\n\t\t\t\t\t|| {}\n\t\t\t\t: {}\n\t\t)\n\n\tconst contracts = prop([])\n\tconst organizations_disciplines = prop([])\n\tconst users = prop([])\n\tconst modules = prop([])\n\tconst projects = prop([])\n\tconst resources = prop([])\n\tconst tools = prop([])\n\tconst materials = prop([])\n\tconst warehouses = prop([])\n\tconst teams = prop([])\n\tconst rates = prop([])\n\n\tconst loading = prop(false)\n\tconst metaDataLoading = prop(true)\n\tconst metaDataIndexing = prop(true)\n\tconst invoiceDataLoading = prop(false)\n\n\tconst allContractItems =\n\t\tcontracts.map((contract) =>\n\t\t\tR.unnest(\n\t\t\t\tcontract.map((c) =>\n\t\t\t\t\tc.contract_items\n\t\t\t\t)\n\t\t\t) || []\n\t\t)\n\n\n\tconst allUserContractItems =\n\t\tallContractItems.map((cI) =>\n\t\t\tcI.filter((contractItem) =>\n\t\t\t\tcontractItem.user_id\n\t\t\t)\n\t\t)\n\n\n\tconst allContractItemsIndexByItemID =\n\t\tallContractItems.map((cI) =>\n\t\t\tR.groupBy(\n\t\t\t\tR.prop('contractrecognitionid')\n\t\t\t\t, cI\n\t\t\t)\n\t\t)\n\n\tconst allContractItemsIndexByContractItemId =\n\t\tprop.scan(\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tfunction(p, [calculatedData, contracts]){\n\n\t\t\t\treturn currentRoute() == 'financials'\n\t\t\t\t? R.indexBy(\n\t\t\t\t\tR.prop('contract_items_id')\n\t\t\t\t\t,coalator(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsubSetFilter: null\n\t\t\t\t\t\t\t, subSetFilterValue: null\n\t\t\t\t\t\t\t, groupByProp: 'contract_items_id'\n\t\t\t\t\t\t\t, focusArray: 'allContractItems'\n\t\t\t\t\t\t\t, focusSchedules: focussedEntities()\n\t\t\t\t\t\t\t, calculatedData: calculatedData\n\t\t\t\t\t\t\t, startDate: forecastdateA()\n\t\t\t\t\t\t\t, endDate: forecastdateB()\n\t\t\t\t\t\t\t, findBaseBy: 'contract_items_id'\n\t\t\t\t\t\t\t, mergeBase: false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: {}\n\t\t\t}\n\t\t\t,{}\n\t\t\t,asyncMergeAll(\n\t\t\t\t\t[\n\t\t\t\t\tcalculatedData\n\t\t\t\t\t,contracts\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\tconst baseItemsSelectList = prop()\n\n\tconst baseItemsList = asyncMergeAll(\n\t\t[\n\t\t\tcontracts\n\t\t\t,metaDataLoading\n\t\t]\n\t).map(([contracts, ]) => {\n\n\t\tteams(\n\t\t\tR.unnest(\n\t\t\t\tresources().map((r) =>\n\t\t\t\t\tr.crews\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\trates(\n\t\t\tR.unnest(\n\t\t\t\tteams().map((crew) =>\n\t\t\t\t\tcrew.crews_discipline_rates\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\tbaseItemsSelectList(\n\t\t\t[].concat(\n\t\t\t\torganizations_disciplines().map(R.assocPath(['tag'], 'Organization Disciplines'))\n\t\t\t\t,users().map(R.assocPath(['tag'], 'Users'))\n\t\t\t\t,modules().map(R.assocPath(['tag'], 'Odin Modules'))\n\t\t\t\t,projects().map(R.assocPath(['tag'], 'Projects'))\n\t\t\t\t,resources().map(R.assocPath(['tag'], 'Resources'))\n\t\t\t\t,tools().map(R.assocPath(['tag'], 'Tools'))\n\t\t\t\t//,materials().map(R.assocPath(['tag'], 'Projects'))\n\t\t\t\t,warehouses().map(R.assocPath(['tag'], 'Warehouses'))\n\t\t\t\t,R.unnest(\n\t\t\t\t\tprojects().map((p) =>\n\t\t\t\t\t\tp.disciplines\n\t\t\t\t\t)\n\t\t\t\t).map(R.assocPath(['tag'], 'Project Disciplines'))\n\t\t\t\t,teams().map(R.assocPath(['tag'], 'Teams'))\n\t\t\t\t,rates().map(R.assocPath(['tag'], 'Team Capabilities'))\n\t\t\t)\n\t\t\t.filter(R.prop('contractrecognitionid'))\n\t\t)\n\n\t\treturn [].concat(\n\t\t\tbaseItemsSelectList()\n\t\t\t,contracts\n\t\t\t,R.unnest(\n\t\t\t\tcontracts.map((c) =>\n\t\t\t\t\tc.contract_items\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t})\n\n\t/* eslint-disable */\n\tconst baseItems = asyncMergeAll(\n\t\t[\n\t\t\tbaseItemsList\n\t\t]\n\t).map(([bi]) => {\n\t\tconst itemIndex =\n\t\t\tR.indexBy(\n\t\t\t\t(a) =>\n\t\t\t\t\t( a.invoice_id\n\t\t\t\t\t\t? byProp('invoice_id')\n\t\t\t\t\t\t: a.contract_id && !a.contract_items_id && !a.project_id\n\t\t\t\t\t\t\t? R.prop('contract_id')\n\t\t\t\t\t\t\t: a.contract_id && a.contract_items_id\n\t\t\t\t\t\t\t\t? byProp('contract_items_id')\n\t\t\t\t\t\t\t\t: R.prop('contractrecognitionid')\n\t\t\t\t\t)(a)\n\t\t\t\t,bi\n\t\t\t)\n\n\t\titemIndex[null] = {\n\t\t\tcontract_end_date: Infinity\n\t\t\t,contract_start_date: 0\n\t\t\t,contract_name: 'Disconnected Ledgers'\n\t\t\t,contract_id: null\n\t\t\t,organization_id: null\n\t\t\t,contract_description: 'Ledgers tied to deleted records'\n\t\t\t,contract_payment_term: 0\n\t\t\t,contract_count_invoices: true\n\t\t\t,supplier_id: null\n\t\t\t,supplier_name: ''\n\t\t\t,contract_items: [{\n\t\t\t\tcontract_id: null\n\t\t\t\t,contract_items_id: null\n\t\t\t\t,contract_items_name: 'Disconnected Ledgers'\n\t\t\t\t,contract_items_description: ''\n\t\t\t\t,contract_items_client_reference: ''\n\t\t\t\t,contract_items_budget: 0\n\t\t\t\t,contract_items_rate: 0\n\t\t\t\t,contract_items_service: 0\n\t\t\t\t,contract_items_depreciation: 0\n\t\t\t\t,contract_items_appreciation: 0\n\t\t\t\t,invoicecount: 0\n\t\t\t\t,contract_items_uom: ''\n\t\t\t\t,contract_items_damages_rate: 0\n\t\t\t\t,contract_items_damages_period: 0\n\t\t\t\t,contract_items_applied: true\n\t\t\t\t,contract_items_recorded_reference: 0\n\t\t\t\t,contract_items_recorded_reference_standard: 0\n\t\t\t\t,crews_discipline_rates_id: null\n\t\t\t\t,modules_id: null\n\t\t\t\t,warehouse_id: null\n\t\t\t\t,contractor_id: null\n\t\t\t\t,crew_id: null\n\t\t\t\t,project_id: null\n\t\t\t\t,organizations_disciplines_id: null\n\t\t\t\t,tools_id: null\n\t\t\t\t,user_id: null\n\t\t\t}]\n\t\t}\n\t\treturn itemIndex\n\t})\n\n\tconst multiplierIndex =\n\t\tprojects.map((p) => {\n\n\t\t\tconst pobjects =\n\t\t\t\tp.map((project) => {\n\n\t\t\t\t\tconst dobjects =\n\t\t\t\t\t\tproject.disciplines\n\n\t\t\t\t\treturn R.merge(\n\t\t\t\t\t\t{project_id: project.project_id}\n\t\t\t\t\t\t,R.indexBy(\n\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\ta.disciplines_contractors_crews_name\n\t\t\t\t\t\t\t\t\t? a.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t: a.organizations_disciplines_id()\n\t\t\t\t\t\t\t,[].concat(\n\t\t\t\t\t\t\t\tdobjects\n\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\tproject.disciplines.map((d) =>\n\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\td.disciplines_contractors.map((dc) =>\n\t\t\t\t\t\t\t\t\t\t\t\tdc.disciplines_contractors_crews\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t})\n\n\n\t\t\treturn R.indexBy(\n\t\t\t\t(a) => a.project_id()\n\t\t\t\t,pobjects\n\t\t\t)\n\t\t})\n\n\tfunction coalator(paramObj){\n\n\t\treturn R.filter(\n\t\t\t\t(a) => typeof(a) != 'string'\n\t\t\t\t,R.unnest(\n\t\t\t\t\tR.toPairs(\n\t\t\t\t\t\tR.map((oArray) =>\n\t\t\t\t\t\t\tR.tap(\n\t\t\t\t\t\t\t\t(finalObject) => {\n\t\t\t\t\t\t\t\t\tfinalObject.contractList =\n\t\t\t\t\t\t\t\t\t\tfinalObject.contractList\n\t\t\t\t\t\t\t\t\t\t? R.uniq(\n\t\t\t\t\t\t\t\t\t\t\tfinalObject.contractList\n\t\t\t\t\t\t\t\t\t\t\t\t.map((c) => c.contractListName)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,paramObj.focusArray == 'focussedInvoices'\n\t\t\t\t\t\t\t\t\t? oArray\n\t\t\t\t\t\t\t\t\t: R.merge(\n\t\t\t\t\t\t\t\t\t\t!paramObj.mergeBase\n\t\t\t\t\t\t\t\t\t\t\t? oArray[0]\n\t\t\t\t\t\t\t\t\t\t\t: baseItems()[oArray[0][paramObj.findBaseBy]]\n\t\t\t\t\t\t\t\t\t\t, R.reduce(\n\t\t\t\t\t\t\t\t\t\t\tF.coalatorAccumulator\n\t\t\t\t\t\t\t\t\t\t\t,R.clone(F.financialprops)\n\t\t\t\t\t\t\t\t\t\t\t,oArray\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,R.groupBy(\n\t\t\t\t\t\t\t\tR.prop(paramObj.groupByProp)\n\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\tparamObj.focusSchedules.map((s) => {\n\t\t\t\t\t\t\t\t\t\tvar afocusObject =\n\t\t\t\t\t\t\t\t\t\t\tparamObj.calculatedData[\n\t\t\t\t\t\t\t\t\t\t\t\ts.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t+ paramObj.startDate\n\t\t\t\t\t\t\t\t\t\t\t\t+ paramObj.endDate\n\t\t\t\t\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\t\t\t\tvar rF = recordedFocus().schedules\n\t\t\t\t\t\t\t\t\t\t\t.find((r) =>\n\t\t\t\t\t\t\t\t\t\t\t\tr.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t== s.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tif(afocusObject && rF){\n\t\t\t\t\t\t\t\t\t\t\tcurrentRoute() != 'financials'\n\t\t\t\t\t\t\t\t\t\t\t\t? rF.dReceived['coalatedSelectedVersion'] = true\n\t\t\t\t\t\t\t\t\t\t\t\t: rF.dReceived[paramObj.focusArray] = true\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn afocusObject\n\t\t\t\t\t\t\t\t\t\t|| {\n\t\t\t\t\t\t\t\t\t\t\tpossibleContractEntities: []\n\t\t\t\t\t\t\t\t\t\t\t,chartdata: []\n\t\t\t\t\t\t\t\t\t\t\t//,possibleContractEntities: baseItemsList()\n\t\t\t\t\t\t\t\t\t\t\t,allContracts: []\n\t\t\t\t\t\t\t\t\t\t\t,focussedInvoices: []\n\t\t\t\t\t\t\t\t\t\t\t,allContractItems: []\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.map((dataObject) =>\n\t\t\t\t\t\t\t\t\t\tdataObject[paramObj.focusArray]\n\t\t\t\t\t\t\t\t\t\t.filter((a) =>\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\tbaseItems()[a[paramObj.findBaseBy]]\n\t\t\t\t\t\t\t\t\t\t\t\t|| !paramObj.mergeBase\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t\t\t\t\t\t!paramObj.subSetFilter\n\t\t\t\t\t\t\t\t\t\t\t\t|| paramObj.subSetFilterValue ==\n\t\t\t\t\t\t\t\t\t\t\t\t\ta[paramObj.subSetFilter]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\tparamObj.focusArray == 'allContracts'\n\t\t\t\t\t\t\t\t\t\t\t\t? contracts()\n\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.filter((a) =>\n\t\t\t\t\t\t\t\t\t\t\t\t!dataObject[paramObj.focusArray]\n\t\t\t\t\t\t\t\t\t\t\t\t.find((ra) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tra[paramObj.findBaseBy]\n\t\t\t\t\t\t\t\t\t\t\t\t \t== a[paramObj.findBaseBy]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t}\n\n\tconst calculateSelectedVersion =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tcurrentVersion\n\t\t\t\t,currentRoute\n\t\t\t\t,routeids\n\t\t\t]\n\t\t)\n\t\t.map(([i, currentRoute, ri]) => {\n\n\t\t\tvar routeChange = false\n\t\t\tif(\n\t\t\t\tcurrentRoute != 'Nothing'\n\t\t\t\t&& currentRoute != 'financials'\n\t\t\t\t&& currentVersion()\n\t\t\t\t&& currentVersion().schedule_version_id\n\t\t\t){\n\t\t\t\trouteChange = true\n\t\t\t\tcoalatedSelectedVersion({})\n\t\t\t\tcalculatedData({})\n\t\t\t\tfocussedEntities(\n\t\t\t\t\tcurrentRoute == 'projects'\n\t\t\t\t\t|| currentRoute == 'materials'\n\t\t\t\t\t|| currentRoute == 'contractors'\n\t\t\t\t\t|| currentRoute == 'gantt'\n\t\t\t\t\t|| currentRoute == 'updates'\n\t\t\t\t\t? [\n\t\t\t\t\t\toverHEadVersion\n\t\t\t\t\t\t,currentVersion()\n\t\t\t\t\t]\n\t\t\t\t\t: currentRoute == 'financials'\n\t\t\t\t\t\t? [currentVersion()]\n\t\t\t\t\t\t: [overHEadVersion]\n\t\t\t\t)\n\t\t\t}\n\t\t\telse if( currentRoute == 'financials' ){\n\n\t\t\t\t// bug this is happening every link touch because currentVersion doesn't want to droprepeats\n\n\t\t\t\tfocussedEntities().length\n\t\t\t\t!= scheduleData.schedules().length + 1\n\t\t\t\t? focussedEntities(\n\t\t\t\t\t[overHEadVersion]\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tscheduleData\n\t\t\t\t\t\t.schedules().map((s) => s.schedule_versions[0])\n\t\t\t\t\t\t.filter(R.identity)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t}\n\n\t\t\treturn !routeChange\n\t\t\t\t? {}\n\t\t\t\t: Promise.all(\n\t\t\t\t\tfocussedEntities()\n\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\tfetchCalculations({\n\t\t\t\t\t\t\tstartDate: 0\n\t\t\t\t\t\t\t,endDate: Infinity\n\t\t\t\t\t\t\t,currentRoute: currentRoute\n\t\t\t\t\t\t\t,scheduleList: [\n\t\t\t\t\t\t\t\tR.omit(\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t'label'\n\t\t\t\t\t\t\t\t\t\t, '_keys'\n\t\t\t\t\t\t\t\t\t\t, '_name'\n\t\t\t\t\t\t\t\t\t\t, '@@type'\n\t\t\t\t\t\t\t\t\t\t, 'case'\n\t\t\t\t\t\t\t\t\t\t, 'env'\n\t\t\t\t\t\t\t\t\t\t, 'odinitems'\n\t\t\t\t\t\t\t\t\t\t, 'odincount'\n\t\t\t\t\t\t\t\t\t\t, 'odinsum'\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t, a\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t})\n\t/* eslint-enable */\n\n\n\tconst coalatedSelectedVersion =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tcalculatedData\n\t\t\t\t,currentRoute\n\t\t\t]\n\t\t).map(([calculatedData, currentRoute]) => {\n\t\t\treturn R.indexBy(\n\t\t\t\tR.prop('contractrecognitionid')\n\t\t\t\t,coalator(\n\t\t\t\t\t{\n\t\t\t\t\t\tsubSetFilter: null\n\t\t\t\t\t\t, subSetFilterValue: null\n\t\t\t\t\t\t, groupByProp: 'contractrecognitionid'\n\t\t\t\t\t\t, focusArray: 'possibleContractEntities'\n\t\t\t\t\t\t, focusSchedules:\n\t\t\t\t\t\t\t!currentVersion()\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: currentRoute == 'tools'\n\t\t\t\t\t\t\t|| currentRoute == 'users'\n\t\t\t\t\t\t\t|| currentRoute == 'modules'\n\t\t\t\t\t\t\t? [ overHEadVersion ]\n\t\t\t\t\t\t\t: currentRoute == 'financials'\n\t\t\t\t\t\t\t|| currentRoute == 'materials'\n\t\t\t\t\t\t\t|| currentRoute == 'projects'\n\t\t\t\t\t\t\t|| currentRoute == 'contractors'\n\t\t\t\t\t\t\t|| currentRoute == 'gantt'\n\t\t\t\t\t\t\t|| currentRoute == 'updates'\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\toverHEadVersion\n\t\t\t\t\t\t\t\t,currentVersion()\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t, calculatedData: calculatedData\n\t\t\t\t\t\t, startDate: 0\n\t\t\t\t\t\t, endDate: Infinity\n\t\t\t\t\t\t, findBaseBy: 'contractrecognitionid'\n\t\t\t\t\t\t, mergeBase: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t})\n\n\tconst contractEntities =\n\t\tprop.scan(\n\t\t\tfunction(p, [calculatedData, focussedEntities, baseItems]){\n\t\t\t\treturn Object.keys(baseItems).length > 0\n\t\t\t\t&& focussedEntities.length > 0\n\t\t\t\t&& currentRoute() == 'financials'\n\t\t\t\t\t? coalator(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsubSetFilter: null\n\t\t\t\t\t\t\t, subSetFilterValue: null\n\t\t\t\t\t\t\t, groupByProp: 'contractrecognitionid'\n\t\t\t\t\t\t\t, focusArray: 'possibleContractEntities'\n\t\t\t\t\t\t\t, focusSchedules: focussedEntities\n\t\t\t\t\t\t\t, calculatedData: calculatedData\n\t\t\t\t\t\t\t, startDate: forecastdateA()\n\t\t\t\t\t\t\t, endDate: forecastdateB()\n\t\t\t\t\t\t\t, findBaseBy: 'contractrecognitionid'\n\t\t\t\t\t\t\t, mergeBase: true\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: p\n\t\t\t}\n\t\t\t,[]\n\t\t\t,asyncMergeAll(\n\t\t\t\t[\n\t\t\t\t\tcalculatedData\n\t\t\t\t\t,focussedEntities\n\t\t\t\t\t,baseItems\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\tconst contractEntitiesIndexedById =\n\t\tcontractEntities\n\t\t.map((c) => R.indexBy(R.prop('contractrecognitionid'), c))\n\n\tconst indexedContractEntities =\n\t\tcontractEntities\n\t\t\t.map((c) => {\n\n\t\t\t\tconst i =\n\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta['project_id'] && !a['discipline_id']\n\t\t\t\t\t\t\t\t? 'Projects'\n\t\t\t\t\t\t\t\t: a['project_id'] && a['discipline_id']\n\t\t\t\t\t\t\t\t? 'Project Disciplines'\n\t\t\t\t\t\t\t\t: a['contractor_id'] && !a['crew_id']\n\t\t\t\t\t\t\t\t? 'Resources'\n\t\t\t\t\t\t\t\t: a['contractor_id'] && a['crew_id']\n\t\t\t\t\t\t\t\t? 'Teams'\n\t\t\t\t\t\t\t\t: a['crews_discipline_rates_id']\n\t\t\t\t\t\t\t\t? 'Team Capabilities'\n\t\t\t\t\t\t\t\t: a['organizations_disciplines_name']\n\t\t\t\t\t\t\t\t? 'Organization Disciplines'\n\t\t\t\t\t\t\t\t: a['user_username']\n\t\t\t\t\t\t\t\t? 'Users'\n\t\t\t\t\t\t\t\t: a['tools_name']\n\t\t\t\t\t\t\t\t? 'Tools'\n\t\t\t\t\t\t\t\t: a['warehouse_id']\n\t\t\t\t\t\t\t\t? 'Warehouses'\n\t\t\t\t\t\t\t\t: 'Odin Modules'\n\t\t\t\t\t\t,c.map((c) => R.merge(c, {key: Math.random().toString(15).slice(2, 8)}))\n\t\t\t\t\t)\n\n\t\t\t\treturn i\n\t\t\t})\n\n\tindexedContractEntities\n\t\t.map(() =>\n\t\t\t!metaDataLoading()\n\t\t\t\t? metaDataIndexing(false)\n\t\t\t\t: metaDataIndexing(true)\n\t\t)\n\n\tconst focussedContracts =\n\t\tprop.scan(\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tfunction(p, [calculatedData, focussedEntities, contracts, baseItems]){\n\t\t\t\treturn focussedEntities.length > 0\n\t\t\t\t&& recordedFocus().schedules.every((sch) =>\n\t\t\t\t\tcalculatedData[\n\t\t\t\t\t\tsch.schedule_version_id\n\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t\t? coalator(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsubSetFilter: null\n\t\t\t\t\t\t\t, subSetFilterValue: null\n\t\t\t\t\t\t\t, groupByProp: 'contract_id'\n\t\t\t\t\t\t\t, focusArray: 'allContracts'\n\t\t\t\t\t\t\t, focusSchedules: focussedEntities\n\t\t\t\t\t\t\t, calculatedData: calculatedData\n\t\t\t\t\t\t\t, startDate: forecastdateA()\n\t\t\t\t\t\t\t, endDate: forecastdateB()\n\t\t\t\t\t\t\t, findBaseBy: 'contract_id'\n\t\t\t\t\t\t\t, mergeBase: true\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: contracts\n\t\t\t}\n\t\t\t,[]\n\t\t\t,asyncMergeAll(\n\t\t\t\t [\n\t\t\t\t\tcalculatedData\n\t\t\t\t\t,focussedEntities\n\t\t\t\t\t,contracts\n\t\t\t\t\t,baseItems\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\n\tconst ctypes = prop([\n\t\t{cname:'Projects', list: projects}\n\t\t,{cname: 'Resources', list: resources}\n\t\t,{cname: 'Teams', list: teams}\n\t\t,{cname: 'Team Disciplines', list: rates}\n\t\t,{cname: 'Disciplines', list: organizations_disciplines}\n\t\t,{cname: 'Tools', list: tools}\n\t\t,{cname: 'Users', list: users}\n\t\t,{cname: 'Warehouses', list: warehouses}\n\t\t,{cname: 'Odin Modules', list: modules}\n\t])\n\tconst coption = prop(ctypes()[4])\n\n\tconst viewOptions = prop([\n\t\t'Projects'\n\t\t// ,'Project Disciplines'\n\t\t,'Resources'\n\t\t,'Teams'\n\t\t// ,'Team Capabilities'\n\t\t,'Organization Disciplines'\n\t\t,'Tools'\n\t\t,'Users'\n\t\t,'Warehouses'\n\t\t,'Odin Modules'\n\t])\n\n\tconst viewWindow = prop([])\n\tconst invoiceWindow = prop([])\n\tconst focus_schedules = prop([])\n\n\tconst viewWindowList = asyncMergeAll(\n\t\t[\n\t\t\tviewWindow\n\t\t\t,indexedContractEntities\n\t\t]\n\t).map(([viewWindow,indexedContractEntities]) =>\n\t\tR.unnest(\n\t\t\tviewWindow.map((view) =>\n\t\t\t\tindexedContractEntities[view] || []\n\t\t\t)\n\t\t)\n\t)\n\n\tconst reMapdateChange = prop(false)\n\tconst recordedFocus = prop({\n\t\tschedules: []\n\t\t,dateA: 0\n\t\t,dateB: Infinity\n\t})\n\n\t/* eslint-disable */\n\tconst reMapCalculated = asyncMergeAll(\n\t\t[\n\t\t\tloading\n\t\t\t,reMapdateChange\n\t\t\t,currentRoute\n\t\t\t,viewWindow\n\t\t\t,metaDataLoading\n\t\t]\n\t)\n\t.map(([load, reMapdateChange, currentRoute, vw, metaDataLoading]) => {\n\n\t\tconst cparams = routeParams()\n\n\t\treturn !load\n\t\t\t&& !reMapdateChange\n\t\t\t&& calculated()\n\t\t\t&& !metaDataLoading\n\t\t\t&& currentRoute == 'financials'\n\t\t\t&& route_view_type() != 'Overview'\n\t\t\t\t|| focussedEntities()\n\t\t\t\t.some((sv) => sv.chartBreakdown)\n\t\t\t&& (cparams.invoices == 'count' || cparams.invoices == 'none')\n\n\t\t\t? Promise.all(\n\t\t\t\tfocussedEntities().length\n\t\t\t\t\t? focussedEntities()\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(sv) =>\n\t\t\t\t\t\t\t\tfetchCalculations({\n\t\t\t\t\t\t\t\t\tstartDate: forecastdateA()\n\t\t\t\t\t\t\t\t\t,endDate: forecastdateB()\n\t\t\t\t\t\t\t\t\t,currentRoute: currentRoute\n\t\t\t\t\t\t\t\t\t,scheduleList: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tscheduleNameVersion: sv.scheduleNameVersion\n\t\t\t\t\t\t\t\t\t\t\t,schedule_priority: sv.schedule_priority\n\t\t\t\t\t\t\t\t\t\t\t,schedule_version_created: sv.schedule_version_created\n\t\t\t\t\t\t\t\t\t\t\t,schedule_version_id: sv.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t,schedule_version_old_id: sv.schedule_version_old_id\n\t\t\t\t\t\t\t\t\t\t\t,schedules_parameters_id: sv.schedules_parameters_id\n\t\t\t\t\t\t\t\t\t\t\t,schedule_id: sv.schedule_id\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t: [\n\t\t\t\t\t\tcontractEntities().forEach((ac) => {\n\t\t\t\t\t\t\tac.currentRevenue = 0\n\t\t\t\t\t\t\tac.currentExpenditures = 0\n\t\t\t\t\t\t\tac.currentProfits = 0\n\t\t\t\t\t\t\tac.forecastedRevenue = 0\n\t\t\t\t\t\t\tac.forecastedExpenditures = 0\n\t\t\t\t\t\t\tac.forecastedProfits = 0\n\t\t\t\t\t\t\tac.outstandingRevenue = 0\n\t\t\t\t\t\t\tac.outstandingExpenditures = 0\n\t\t\t\t\t\t\tac.outstandingProfits = 0\n\n\t\t\t\t\t\t\tac.currentDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tac.currentDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tac.forecastedDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tac.forecastedDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tac.currentDailyPeriodProfits = 0\n\t\t\t\t\t\t\tac.forecastedDailyPeriodProfits = 0\n\t\t\t\t\t\t\tac.outstandingDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tac.outstandingDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tac.outstandingDailyPeriodProfits = 0\n\n\t\t\t\t\t\t\tac.currentDailyRevenue = 0\n\t\t\t\t\t\t\tac.currentDailyExpenditures = 0\n\t\t\t\t\t\t\tac.forecastedDailyRevenue = 0\n\t\t\t\t\t\t\tac.forecastedDailyExpenditures = 0\n\t\t\t\t\t\t\tac.currentDailyProfits = 0\n\t\t\t\t\t\t\tac.forecastedDailyProfits = 0\n\t\t\t\t\t\t\tac.outstandingDailyRevenue = 0\n\t\t\t\t\t\t\tac.outstandingDailyExpenditures = 0\n\t\t\t\t\t\t\tac.outstandingDailyProfits = 0\n\n\t\t\t\t\t\t\tac.accruedExpenditures = 0\n\t\t\t\t\t\t\tac.accruedRevenue = 0\n\t\t\t\t\t\t\tac.accruedProfits = 0\n\t\t\t\t\t\t\tac.accruedDailyRevenue = 0\n\t\t\t\t\t\t\tac.accruedDailyExpenditures = 0\n\t\t\t\t\t\t\tac.accruedDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tac.accruedDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tac.accruedDailyProfits = 0\n\t\t\t\t\t\t\tac.accruedDailyPeriodProfits = 0\n\t\t\t\t\t\t\tac.budget = 0\n\t\t\t\t\t\t\tac.contractList = []\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,focussedContracts().forEach((c) => {\n\t\t\t\t\t\t\tc.currentRevenue = 0\n\t\t\t\t\t\t\tc.currentExpenditures = 0\n\t\t\t\t\t\t\tc.currentProfits = 0\n\t\t\t\t\t\t\tc.forecastedRevenue = 0\n\t\t\t\t\t\t\tc.forecastedExpenditures = 0\n\t\t\t\t\t\t\tc.forecastedProfits = 0\n\t\t\t\t\t\t\tc.outstandingRevenue = 0\n\t\t\t\t\t\t\tc.outstandingExpenditures = 0\n\t\t\t\t\t\t\tc.outstandingProfits = 0\n\n\t\t\t\t\t\t\tc.currentDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tc.currentDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tc.forecastedDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tc.forecastedDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tc.currentDailyPeriodProfits = 0\n\t\t\t\t\t\t\tc.forecastedDailyPeriodProfits = 0\n\t\t\t\t\t\t\tc.outstandingDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tc.outstandingDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tc.outstandingDailyPeriodProfits = 0\n\n\t\t\t\t\t\t\tc.currentDailyRevenue = 0\n\t\t\t\t\t\t\tc.currentDailyExpenditures = 0\n\t\t\t\t\t\t\tc.forecastedDailyRevenue = 0\n\t\t\t\t\t\t\tc.forecastedDailyExpenditures = 0\n\t\t\t\t\t\t\tc.currentDailyProfits = 0\n\t\t\t\t\t\t\tc.forecastedDailyProfits = 0\n\t\t\t\t\t\t\tc.outstandingDailyRevenue = 0\n\t\t\t\t\t\t\tc.outstandingDailyExpenditures = 0\n\t\t\t\t\t\t\tc.outstandingDailyProfits = 0\n\n\t\t\t\t\t\t\tc.accruedExpenditures = 0\n\t\t\t\t\t\t\tc.accruedRevenue = 0\n\t\t\t\t\t\t\tc.accruedProfits = 0\n\t\t\t\t\t\t\tc.accruedDailyRevenue = 0\n\t\t\t\t\t\t\tc.accruedDailyExpenditures = 0\n\t\t\t\t\t\t\tc.accruedDailyPeriodRevenue = 0\n\t\t\t\t\t\t\tc.accruedDailyPeriodExpenditures = 0\n\t\t\t\t\t\t\tc.accruedDailyProfits = 0\n\t\t\t\t\t\t\tc.accruedDailyPeriodProfits = 0\n\t\t\t\t\t\t\tc.budget = 0\n\t\t\t\t\t\t\tc.contractList = []\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,focussedEntities(focussedEntities())\n\t\t\t\t\t\t,calculatedData(calculatedData())\n\t\t\t\t\t\t,calculated(true)\n\t\t\t\t\t]\n\t\t\t)\n\t\t\t: []\n\t\t})\n\n\tconst calculated = asyncMergeAll(\n\t\t[\n\t\t\tcoalatedSelectedVersion\n\t\t]\n\t).map(([s]) => {\n\t\t// finanicals route taken care of inside the route\n\t\treturn currentRoute() == 'financials'\n\t\t? s\n\t\t: currentRoute() != 'financials'\n\t\t&& Object.keys(s).length > 0\n\t\t&& recordedFocus().schedules.every((s) =>\n\t\t\ts.dReceived['coalatedSelectedVersion']\n\t\t)\n\t\t\t? true\n\t\t\t: false\n\t})\n\n\tconst originalInvoices = prop([])\n\tconst focussedInvoices = prop([])\n\tconst hiddenInvoiceData =\n\t\tadvancedView.map((av) => ({\n\t\t\tinvoice_rate: !av\n\t\t\t,invoice_service_rate: !av && !originalInvoices().filter(R.prop('invoice_service_rate')).length\n\t\t\t,invoice_depreciation_rate: !av && !originalInvoices().filter(R.prop('invoice_depreciation_rate')).length\n\t\t\t,invoice_appreciation_rate: !av && !originalInvoices().filter(R.prop('invoice_appreciation_rate')).length\n\t\t\t,invoice_damages_rate: !av && !originalInvoices().filter(R.prop('invoice_damages_rate')).length\n\t\t\t,invoice_type: !av\n\t\t}))\n\t/* eslint-enable */\n\tasyncMergeAll(\n\t\t[\n\t\t\tinvoiceWindow\n\t\t\t,metaDataLoading\n\t\t]\n\t).map(([ , ]) => {\n\n\t\tconst cparams = routeParams()\n\t\tconst fe =\n\t\t\tfocussedEntities()\n\t\t\t.map((sv) =>\n\t\t\t\tR.merge(\n\t\t\t\t\tcparams\n\t\t\t\t\t,{\n\t\t\t\t\t\tnochildren: cparams.viewType == 'overview' && sv.schedule_version_id == 'Overheads'\n\t\t\t\t\t\t,items: cparams.items != 'none' ? cparams.invoices : cparams.items\n\t\t\t\t\t\t,startDate: forecastdateA()\n\t\t\t\t\t\t,endDate: forecastdateB()\n\t\t\t\t\t\t,currentRoute: currentRoute()\n\t\t\t\t\t\t,scheduleList: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscheduleNameVersion: sv.scheduleNameVersion\n\t\t\t\t\t\t\t\t,schedule_priority: sv.schedule_priority\n\t\t\t\t\t\t\t\t,schedule_version_created: sv.schedule_version_created\n\t\t\t\t\t\t\t\t,schedule_version_id: sv.schedule_version_id\n\t\t\t\t\t\t\t\t,schedule_version_old_id: sv.schedule_version_old_id\n\t\t\t\t\t\t\t\t,schedules_parameters_id: sv.schedules_parameters_id\n\t\t\t\t\t\t\t\t,schedule_id: sv.schedule_id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\n\t\treturn Promise.all(\n\t\t\tcparams.invoices == 'count'\n\t\t\t|| cparams.invoices == 'none'\n\t\t\t|| currentRoute() == 'Nothing'\n\t\t\t|| currentRoute() != 'financials'\n\t\t\t|| !calculated()\n\t\t\t// || !iW.length\n\t\t\t|| invoiceDataLoading()\n\t\t\t|| metaDataLoading()\n\t\t\t? Promise.resolve([])\n\t\t\t: fe\n\t\t\t.filter((fea) =>\n\t\t\t\t!R.last(focus_schedules())\n\t\t\t\t|| focus_schedules()\n\t\t\t\t.find((fs) => fea.items && fs == R.last(fea.scheduleList).schedule_version_id)\n\t\t\t)\n\t\t\t.map((f) => {\n\t\t\t\tinvoiceDataLoading(true)\n\t\t\t\treturn api.contracts_invoices_calculations.fetch.all(\n\t\t\t\t\tf, R.merge(routeids(), {ledgerdetails:true, specificproject: null}))\n\t\t\t})\n\t\t)\n\t\t.then((invdata) => {\n\n\t\t\tlet sortedata = []\n\n\t\t\tif(invdata.length > 0){\n\n\t\t\t\trecordedFocus()\n\t\t\t\t.schedules.forEach((sch) => sch.dReceived['focussedInvoices'] = true )\n\n\t\t\t\tsortedata =\n\t\t\t\t\tcparams.items == 'none'\n\t\t\t\t\t\t? R.sortBy(\n\t\t\t\t\t\t\tR.prop('invoice_id')\n\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\tR.unnest(R.unnest(invdata).map(R.prop('focussedInvoices')))\n\t\t\t\t\t\t\t\t.map(R.prop('invoicelist'))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: R.sortBy(\n\t\t\t\t\t\t\tR.prop('invoice_id')\n\t\t\t\t\t\t\t,R.unnest(R.unnest(invdata).map(R.prop('focussedInvoices')))\n\t\t\t\t\t\t)\n\n\t\t\t\thiddenInvoiceData({\n\t\t\t\t\tinvoice_rate: !advancedView()\n\t\t\t\t\t,invoice_service_rate: !advancedView() && !sortedata.filter(R.prop('invoice_service_rate')).length\n\t\t\t\t\t,invoice_depreciation_rate: !advancedView() && !sortedata.filter(R.prop('invoice_depreciation_rate')).length\n\t\t\t\t\t,invoice_appreciation_rate: !advancedView() && !sortedata.filter(R.prop('invoice_appreciation_rate')).length\n\t\t\t\t\t,invoice_damages_rate: !advancedView() && !sortedata.filter(R.prop('invoice_damages_rate')).length\n\t\t\t\t\t,invoice_type: !advancedView()\n\t\t\t\t})\n\n\t\t\t\toriginalInvoices(sortedata)\n\t\t\t\tfocussedInvoices(cloneInvoice(sortedata))\n\t\t\t\tinvoiceDataLoading(false)\n\n\t\t\t}\n\n\t\t\treturn sortedata\n\t\t})\n\t})\n\n\tfunction makeContractItem(v, originalObjects){\n\n\t\tconst baseObject =\n\t\t\toriginalObjects.find(\n\t\t\t\t(c) => c.contractrecognitionid\n\t\t\t\t\t== v.contractrecognitionid\n\t\t\t)\n\n\t\t\t// const baseParent = baseObject.crew_id\n\t\t\t// \t? originalObjects.find(\n\t\t\t\t// \t\t(c) => c.crew_id\n\t\t\t\t// \t\t\t&& c.crew_id() == baseObject.crew_id()\n\t\t\t\t// \t)\n\t\t\t\t// \t: null\n\n\t\treturn {\n\t\t\tkey: Math.random().toString(15).slice(2, 8)\n\t\t\t,created: true\n\t\t\t,contract_id: m.prop(null)\n\t\t\t,contract_items_id: m.prop(null)\n\t\t\t,contract_items_applied: m.prop(true)\n\t\t\t,organization_id: m.prop(initiateContractFetch().organization_id)\n\n\t\t\t,modules_id: checkprop(baseObject.modules_id) || null\n\t\t\t,warehouse_id: checkprop(baseObject.warehouse_id) || null\n\t\t\t,contractor_id:\n\t\t\t\tcheckprop(baseObject.contractor_id) && !checkprop(baseObject.crew_id)\n\t\t\t\t\t? checkprop(baseObject.contractor_id)\n\t\t\t\t\t: null\n\t\t\t,project_id:\n\t\t\t\tcheckprop(baseObject.project_id) && !checkprop(baseObject.discipline_id) && !checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t\t? checkprop(baseObject.project_id)\n\t\t\t\t\t: null\n\t\t\t,organizations_disciplines_id:\n\t\t\t\tcheckprop(baseObject.organizations_disciplines_id) && !checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t\t? checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t\t: null\n\t\t\t,tools_id: checkprop(baseObject.tools_id) || null\n\t\t\t,user_id: !checkprop(baseObject.crew_id) && checkprop(baseObject.user_id) ? checkprop(baseObject.user_id) : null\n\t\t\t,crew_id:\n\t\t\t\tcheckprop(baseObject.crew_id) && !checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t\t? checkprop(baseObject.crew_id)\n\t\t\t\t\t: null\n\t\t\t,crews_discipline_rates_id:\n\t\t\t\tcheckprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t\t? checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t\t: null\n\n\t\t\t,contract_items_recorded_reference:\n\t\t\t\tcheckprop(baseObject.organizations_disciplines_id)\n\t\t\t\t|| checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t|| checkprop(baseObject.project_id) && !checkprop(baseObject.discipline_id) && !checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t|| checkprop(baseObject.contractor_id) && !checkprop(baseObject.crew_id)\n\t\t\t\t? m.prop('Contract Quantity')\n\t\t\t\t: m.prop('Contract Days')\n\n\t\t\t,contract_items_recorded_reference_standard:\n\t\t\t\tcheckprop(baseObject.organizations_disciplines_id)\n\t\t\t\t|| checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t|| checkprop(baseObject.project_id) && !checkprop(baseObject.discipline_id) && !checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t|| checkprop(baseObject.contractor_id) && !checkprop(baseObject.crew_id)\n\t\t\t\t? m.prop(1)\n\t\t\t\t: m.prop(8)\n\n\t\t\t,contract_items_damages_period: m.prop(365)\n\t\t\t,contract_items_rate: m.prop(\n\t\t\t\tcheckprop(baseObject.modules_id)\n\t\t\t\t? Number(baseObject.modules_rate()/28).toFixed(2)\n\t\t\t\t: checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t&& !checkprop(baseObject.crews_discipline_rates_id)\n\t\t\t\t? checkprop(baseObject.organizations_disciplines_nominal_revenue_rate)\n\t\t\t\t: checkprop(baseObject.organizations_disciplines_id)\n\t\t\t\t? checkprop(baseObject.organizations_disciplines_nominal_expenditure_rate)\n\t\t\t\t: 0\n\t\t\t)\n\t\t\t,contract_items_budget: m.prop(0)\n\n\t\t\t,contractrecognitionid: baseObject.contractrecognitionid\n\n\t\t\t,currentRevenue: 0\n\t\t\t,currentExpenditures: 0\n\t\t\t,currentProfits: 0\n\t\t\t,forecastedRevenue: 0\n\t\t\t,forecastedExpenditures: 0\n\t\t\t,forecastedProfits: 0\n\t\t\t,outstandingRevenue: 0\n\t\t\t,outstandingExpenditures: 0\n\t\t\t,outstandingProfits: 0\n\n\t\t\t,currentDailyPeriodRevenue: 0\n\t\t\t,currentDailyPeriodExpenditures: 0\n\t\t\t,forecastedDailyPeriodRevenue: 0\n\t\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t\t,currentDailyPeriodProfits: 0\n\t\t\t,forecastedDailyPeriodProfits: 0\n\t\t\t,outstandingDailyPeriodRevenue: 0\n\t\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t\t,outstandingDailyPeriodProfits: 0\n\n\t\t\t,currentDailyRevenue: 0\n\t\t\t,currentDailyExpenditures: 0\n\t\t\t,forecastedDailyRevenue: 0\n\t\t\t,forecastedDailyExpenditures: 0\n\t\t\t,currentDailyProfits: 0\n\t\t\t,forecastedDailyProfits: 0\n\t\t\t,outstandingDailyRevenue: 0\n\t\t\t,outstandingDailyExpenditures: 0\n\t\t\t,outstandingDailyProfits: 0\n\n\t\t\t,accruedExpenditures: 0\n\t\t\t,accruedRevenue: 0\n\t\t\t,accruedProfits: 0\n\t\t\t,accruedDailyRevenue: 0\n\t\t\t,accruedDailyExpenditures: 0\n\t\t\t,accruedDailyPeriodRevenue: 0\n\t\t\t,accruedDailyPeriodExpenditures: 0\n\t\t\t,accruedDailyProfits: 0\n\t\t\t,accruedDailyPeriodProfits: 0\n\t\t\t,budget: 0\n\t\t\t,invoicecount: 0\n\n\t\t\t,contract_items_service: m.prop(0)\n\t\t\t,contract_items_depreciation: m.prop(0)\n\t\t\t,contract_items_appreciation: m.prop(0)\n\t\t\t,contract_items_damages_rate: m.prop(0)\n\n\t\t\t,contract_items_description: m.prop(\n\t\t\t\t// baseObject['contractrecognitiondescription']\n\t\t\t\tcheckprop(baseObject['crews_discipline_rates_id'])\n\t\t\t\t|| checkprop(baseObject['organizations_disciplines_id'])\n\t\t\t\t? 'UOM Completed'\n\t\t\t\t: baseObject['contractrecognitiondescription'] || ''\n\t\t\t)\n\t\t\t,contract_items_client_reference: m.prop('')\n\t\t\t,contract_items_name: m.prop(\n\t\t\t\tbaseObject['contractrecognitionname']\n\t\t\t)\n\n\t\t\t,contract_items_uom: m.prop(\n\t\t\t\tcheckprop(baseObject['project_name'])\n\t\t\t\t\t? 'Per Project'\n\t\t\t\t\t: checkprop(baseObject['contractor_name'])\n\t\t\t\t\t? 'Per Contractor'\n\t\t\t\t\t: checkprop(baseObject['user_username'])\n\t\t\t\t\t? 'Per Day'\n\t\t\t\t\t: checkprop(baseObject['organizations_disciplines_name'])\n\t\t\t\t\t? checkprop(baseObject['organizations_disciplines_uom'])\n\t\t\t\t\t: checkprop(baseObject['crews_discipline_rates_name'])\n\t\t\t\t\t? checkprop(baseObject['crews_discipline_rates_uom'])\n\t\t\t\t\t: checkprop(baseObject['crew_name'])\n\t\t\t\t\t? 'Per Day'\n\t\t\t\t\t: 'Per Day'\n\t\t\t)\n\t\t}\n\n\t}\n\n\n\tfunction criteriaBasedCalculation(\n\t\tcontractItem\n\t\t, ratingCriteria\n\t) {\n\n\t\tconst criteriaResults = {\n\t\t\tcurrentRevenue: 0\n\t\t\t, currentExpenditures: 0\n\t\t\t, currentProfits: 0\n\t\t\t, forecastedRevenue: 0\n\t\t\t, forecastedExpenditures: 0\n\t\t\t, forecastedProfits: 0\n\t\t\t, materialActual: 0\n\t\t\t, materialForecasted: 0\n\t\t\t, outstandingRevenue: 0\n\t\t\t, outstandingExpenditures: 0\n\t\t\t, outstandingProfits: 0\n\t\t\t, accruedExpenditures: 0\n\t\t\t, accruedRevenue: 0\n\t\t\t, accruedProfits: 0\n\t\t\t, budget: 0\n\t\t}\n\n\t\tconst incriment = ratingCriteria.incriment\n\n\t\tif ( incriment != 'invoice' ) {\n\t\t\tvar periodRatedAdjustment =\n\t\t\t\tratingCriteria.forecastedWorkAmount\n\n\t\t\tvar damageRatedAdjustment =\n\t\t\t\tratingCriteria.forecastedDamagesAmount\n\n\t\t\tvar periodAccruedAdjustment =\n\t\t\t\tratingCriteria.accruedAmount\n\t\t}\n\n\n\t\t; (\n\t\t\tincriment == 'invoice'\n\t\t\t\t? [\n\t\t\t\t\t'invoice_rate'\n\t\t\t\t\t, 'invoice_service_rate'\n\t\t\t\t\t, 'invoice_depreciation_rate'\n\t\t\t\t\t, 'invoice_appreciation_rate'\n\t\t\t\t\t, 'invoice_damages_rate'\n\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t'contract_items_rate'\n\t\t\t\t\t, 'contract_items_service'\n\t\t\t\t\t, 'contract_items_depreciation'\n\t\t\t\t\t, 'contract_items_appreciation'\n\t\t\t\t\t, 'contract_items_damages_rate'\n\t\t\t\t\t, 'contract_items_budget'\n\t\t\t\t]\n\t\t)\n\t\t\t.forEach((iRate) => {\n\n\t\t\t\tperiodRatedAdjustment =\n\t\t\t\t\tincriment == 'invoice'\n\t\t\t\t\t\t? contractItem[iRate.replace('_rate', '_amount')]()\n\t\t\t\t\t\t: periodRatedAdjustment\n\n\t\t\t\tperiodRatedAdjustment =\n\t\t\t\t\tiRate == 'contract_items_damages_rate'\n\t\t\t\t\t\t? damageRatedAdjustment\n\t\t\t\t\t\t: periodRatedAdjustment\n\n\t\t\t\tperiodAccruedAdjustment =\n\t\t\t\t\tincriment == 'invoice'\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: periodAccruedAdjustment\n\n\t\t\t\tconst value = periodRatedAdjustment * contractItem[iRate]()\n\t\t\t\tconst accruedValue = periodAccruedAdjustment * contractItem[iRate]()\n\n\t\t\t\tiRate == 'contract_items_budget'\n\t\t\t\t? criteriaResults.budget = criteriaResults.budget + value\n\t\t\t\t: value > 0 && incriment == 'invoice'\n\t\t\t\t\t? !contractItem['invoice_received'] || !contractItem['invoice_received']()\n\t\t\t\t\t\t? criteriaResults.outstandingRevenue = criteriaResults.outstandingRevenue + value\n\t\t\t\t\t\t: criteriaResults.currentRevenue = criteriaResults.currentRevenue + value\n\t\t\t\t\t: value < 0 && incriment == 'invoice'\n\t\t\t\t\t\t? contractItem['invoice_received'] || !contractItem['invoice_received']()\n\t\t\t\t\t\t\t? criteriaResults.outstandingExpenditures = criteriaResults.outstandingExpenditures + value\n\t\t\t\t\t\t\t: criteriaResults.currentExpenditures = criteriaResults.currentExpenditures + value\n\t\t\t\t\t\t: value > 0 && incriment != 'invoice'\n\t\t\t\t\t\t\t? criteriaResults.forecastedRevenue = criteriaResults.forecastedRevenue + value\n\t\t\t\t\t\t\t: criteriaResults.forecastedExpenditures = criteriaResults.forecastedExpenditures + value\n\n\t\t\t\taccruedValue > 0\n\t\t\t\t\t? criteriaResults.accruedRevenue = criteriaResults.accruedRevenue + accruedValue\n\t\t\t\t\t: criteriaResults.accruedExpenditures = criteriaResults.accruedExpenditures + accruedValue\n\n\t\t\t\tcriteriaResults.accruedProfits = criteriaResults.accruedRevenue + criteriaResults.accruedExpenditures\n\t\t\t\tcriteriaResults.currentProfits = criteriaResults.currentRevenue + criteriaResults.currentExpenditures\n\t\t\t\tcriteriaResults.forecastedProfits = criteriaResults.forecastedRevenue + criteriaResults.forecastedExpenditures\n\t\t\t\tcriteriaResults.outstandingProfits = criteriaResults.outstandingRevenue + criteriaResults.outstandingExpenditures\n\n\t\t\t})\n\n\t\treturn [criteriaResults]\n\t}\n\n\tfunction fetchXeroExport(bdata){\n\t\tconst dfci = originalInvoices().map(R.prop('contract_items_id')).join(',')\n\t\tconst dfii = originalInvoices().map(R.prop('invoice_id')).join(',')\n\n\t\treturn buildRequest(\n\t\t\t'GET'\n\t\t\t,'/exports/xero/'\n\t\t\t,R.merge(\n\t\t\t\t{\n\t\t\t\t\torganization_id: initiateContractFetch().organization_id\n\t\t\t\t\t, xeroexport: true\n\t\t\t\t\t, startDate: forecastdateA()\n\t\t\t\t\t, endDate: forecastdateB()\n\t\t\t\t\t, contract_items: dfci\n\t\t\t\t\t, invoices: dfii\n\t\t\t\t}\n\t\t\t\t,bdata\n\t\t\t)\n\t\t).url\n\t}\n\n\tfunction reChartButton({versions, disabled=R.F}){\n\t\treturn m('button.btn.btn'\n\t\t\t,{\n\t\t\t\tonclick: () => {\n\n\t\t\t\t\tloadchart(versions)\n\n\t\t\t\t\trouteids( routeids() )\n\n\t\t\t\t}\n\t\t\t\t, disabled: disabled()\n\t\t\t\t, title: \"Load chart view\"\n\t\t\t\t, style:\n\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t}\n\t\t\t}\n\t\t\t, elements.refresher()\n\t\t)\n\t}\n\n\tfunction debounce(f, ms=0){\n\t\tlet id;\n\t\treturn ( ...args ) => {\n\t\t\tclearTimeout(id)\n\t\t\tid = setTimeout(() => f(...args), ms)\n\t\t}\n\t}\n\n\treturn {\n\t\tcontracts\n\t\t,originalInvoices\n\t\t,focussedContracts\n\t\t,organizations_disciplines\n\t\t,users\n\t\t,modules\n\t\t,projects\n\t\t,resources\n\t\t,tools\n\t\t,materials\n\t\t,warehouses\n\t\t,calculatedData\n\t\t,contractEntities\n\t\t,forecastdateA\n\t\t,forecastdateB\n\t\t,fetchCalculations\n\t\t,allContractItems\n\t\t,focussedEntities\n\t\t,calculated\n\t\t,fetchInvoices\n\t\t,fetchOrganizationsDisciplines\n\t\t,fetchUsers\n\t\t,fetchContracts\n\t\t,fetchResource\n\t\t,fetchProjects\n\t\t,fetchWarehouses\n\t\t,fetchTools\n\t\t,fetchTimesheetsByAllocation\n\t\t,fetchContainers\n\t\t,fetchGeographies\n\t\t,fetchProjectsBySchedule\n\t\t,fetchFlowsByScheduleId\n\t\t,fetchInterruptions\n\t\t,fetchAllocationsbyProjectAndScheduleVersion\n\t\t,fetchAllocationsbyScheduleVersion\n\t\t,fetchSuppliers\n\t\t,fetchMaterials\n\t\t,fetchSuggestedMaterials\n\t\t,fetchPresets\n\t\t,fetchOrders\n\t\t,makeContractItem\n\t\t,coalator\n\t\t,overHEadVersion\n\t\t,reMapCalculated\n\t\t,cloneInvoice\n\t\t,viewOptions\n\t\t,viewWindow\n\t\t,viewWindowList\n\t\t,indexedContractEntities\n\t\t,coalatedSelectedVersion\n\t\t,loading\n\t\t,reMapdateChange\n\t\t,recordedFocus\n\t\t,accumulator\n\t\t,criteriaBasedCalculation\n\t\t,api\n\t\t,readContractPermissions\n\t\t,readWarehousePermissions\n\t\t,readProjectPermissions\n\t\t,readSupplierPermissions\n\t\t,readResourcePermissions\n\t\t,readFlowPermissions\n\t\t,readInterruptionsPermissions\n\t\t,readSchedulePermissions\n\t\t,readToolPermissions\n\t\t,readInvoicePermissions\n\t\t,readTimesheetPermissions\n\t\t,readUpdatePermissions\n\t\t,readUserPermissions\n\t\t,readOrderPermissions\n\t\t,readMaterialPermissions\n\t\t,readModulePermissions\n\t\t,readAssignedTimesheetsPermissions\n\t\t,readContractObligationPermissions\n\t\t,readAssignedToolsPermissions\n\t\t,readOwnedResourcePermissions\n\t\t,initiateContractFetch\n\t\t,contractEntitiesIndexedById\n\t\t,allContractItemsIndexByContractItemId\n\t\t,allUserContractItems\n\t\t,renderSummary\n\t\t,fetchProjectExtras\n\t\t,fetchAllocationsbyScheduleVersionShallow\n\t\t,editContractPermissions\n\t\t,editInvoicePermissions\n\t\t,currentRoute\n\t\t,currentVersion\n\t\t,baseItems\n\t\t,allContractItemsIndexByItemID\n\t\t,invoiceWindow\n\t\t,focussedInvoices\n\t\t,schedules: scheduleData.schedules\n\t\t,fetchResourceWork\n\t\t,fetchAllocationsbyDiscipline\n\t\t,fetchTimesheetsByProject\n\t\t,fetchProjectsByProjectId\n\t\t,fetchSchedules\n\t\t,fetchScheduleParameters\n\t\t,multiplierIndex\n\t\t,metaDataLoading\n\t\t,metaDataIndexing\n\t\t,invoiceDataLoading\n\t\t,routeInitialized\n\t\t,progressCalculation\n\t\t,fetchProjectContacts\n\t\t,routeids\n\t\t,baseItemsList\n\t\t,ctypes\n\t\t,coption\n\t\t,advancedView\n\t\t,hiddenInvoiceData\n\t\t,disconnectedcontract\n\t\t,calculatedData\n\t\t,transferProjects\n\t\t,focus_schedules\n\t\t,route_contract_id\n\t\t,route_original_contract_id\n\t\t,route_view_type\n\t\t,prevview\n\t\t,summation\n\t\t,routeParam\n\t\t,routeids\n\t\t,fetchCalculations\n\t\t,scheduleData\n\t\t,chartCreation\n\t\t,toolsIdentical\n\t\t,groups\n\t\t,routeChangeCommands\n\t\t,fetchXeroExport\n\t\t,loadchart\n\t\t,baseItemsSelectList\n\t\t,reChartButton\n\t\t,debounce\n\t\t,sumSchedule\n\t\t,reroute\n\t\t,getLocation\n\t}\n}","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","/* globals splitio, process, localStorage, window */\nimport * as R from 'ramda'\n// todo-james reference odin stream module instead\nimport { prop as stream } from '../../../stream'\n\nconst service = ({ auth }) => {\n\n\tlet factory;\n\tlet client\n\tconst out = stream()\n\n\tauth.map( ({ user_id='anonymous' }) => {\n\n\t\tconst key = user_id\n\n\t\tif( factory ) {\n\t\t\tfactory = null\n\t\t\tclient.destroy()\n\t\t}\n\n\t\tfactory = splitio({\n\t\t\tstartup: {\n\t\t\t\trequestTimeoutBeforeReady: 10.5\n\t\t\t\t,retriesOnFailureBeforeReady: 3\n\t\t\t\t,readyTimeout: 10.5\n\t\t\t\t,eventsFirstPushWindow: 10\n\t\t\t}\n\t\t\t,core: {\n\t\t\t authorizationKey: process.env.SPLIT_IO_BROWSER\n\t\t\t // your internal user id, or the account id that\n\t\t\t // the user belongs to.\n\t\t\t // This coudld also be a cookie you generate\n\t\t\t // for anonymous users\n\t\t\t ,key\n\t\t\t // an OPTIONAL traffic type, if provided will be\n\t\t\t // used for event tracking with the SDK client.\n\t\t\t ,trafficType: 'development'\n\t\t\t}\n\t\t})\n\n\t\tclient = factory.client()\n\n\t\tconst defaults = {\n\t\t\ttopnav: 'off'\n\t\t\t,uppy: 'off'\n\t\t\t,uppyDropbox: 'off'\n\t\t\t,uppyGoogleDrive: 'off'\n\t\t\t,uppyWebcam: 'on'\n\t\t\t,payments: 'off'\n\t\t\t,paymentsNav: 'off'\n\t\t\t,paymentsEnforced: 'off'\n\t\t\t,paymentsBanner: 'off'\n\t\t\t,quickStartProject: 'off'\n\t\t\t,Charts: 'off'\n\t\t}\n\n\t\tconst localOverrides = {\n\t\t\tquickStartProject: true\n\t\t}\n\n\t\tconst expected = localStorage['features.'+key]\n\t\t\t? JSON.parse(localStorage['features.'+key])\n\t\t\t: defaults\n\n\t\tconst features = stream(expected)\n\n\t\tfeatures.map(\n\t\t\tx => localStorage.setItem('features.'+key, JSON.stringify(x))\n\t\t)\n\n\t\tfunction respond(){\n\t\t\tconst treatments = client.getTreatments(Object.keys(defaults));\n\t\t\tfeatures(treatments)\n\t\t}\n\n\t\tclient.on(client.Event.SDK_READY, respond)\n\t\tclient.on(client.Event.SDK_UPDATE, respond)\n\n\t\tfeatures.map(R.map( x => x == 'on'))\n\t\t.map( x => {\n\t\t\tif(window.location.host.includes('localhost')){\n\t\t\t\treturn Object.assign({}, x, localOverrides)\n\t\t\t}\n\t\t\treturn x\n\t\t})\n\t\t.map(\n\t\t\tx => R.assocPath(['features'], x)\n\t\t)\n\n\t\t.map(out)\n\n\t\treturn null\n\t})\n\n\treturn out\n}\n\nexport default { service }","import m from 'bacta'\nimport css from 'bss'\nimport { prop } from '../../../stream'\n\nconst truncate =\n css`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `\n\nconst Container =\n 'detailspane2'\n + css`\n z-index: 1;\n min-height: 100vh;\n max-height: 100vh;\n bc: white;\n position: absolute;\n box-shadow: -2px -2px 7px 0px rgba(0,0,0,0.1);\n overflow-x: hidden;\n overflow-y: auto;\n bc: #F4F4F4;\n top: 0em;\n right: 0em;\n transform: translateX(100%);\n transition: 0.5s;\n top: var(--top-nav-height);\n min-height: calc(100vh - var(--top-nav-height));\n max-height: calc(100vh - var(--top-nav-height));\n width: 100vw;\n `\n .$media('(min-width: 600px)', `\n width 22em;\n `)\n .$nest('&.open', `\n transform: translateX(0%);\n `)\n\nconst ContentPane =\n 'detailspane2-scroll'\n + css`\n w: 100%;\n top: 0px;\n left: 0px;\n display: block;\n margin-bottom: 2em;\n --padding: 1em;\n padding: 0em var(--padding);\n padding-bottom: var(--context-bar-height);\n `\n .$media('(min-width: 600px)', `\n padding-bottom: 0em;\n `)\n\nconst HeaderPane =\n 'detailspane2-header'\n + css`\n w: 100%;\n h: 3em;\n z-index: 1;\n display: block;\n position: sticky;\n top: 0px;\n background-color: white;\n width: 100%;\n display: grid;\n justify-content: start;\n align-items: center;\n box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.05);\n padding-left: 1em;\n `\n + truncate\n\nconst stream = prop(() => null)\n\nconst fade = vnode => {\n vnode.attrs.className\n += ' '\n + css.$animate('0.5s ease-in-out forwards', {\n from: 'o 0', to: 'o 100'\n })\n\n vnode.attrs.onbeforeremove =\n css.$animate.out('0.5s ease-in-out forwards', {\n from: 'o 100', to: 'o 0'\n })\n\n return vnode\n}\n\nconst openWatch = prop()\n\nprop.dropRepeats(openWatch).map(\n () => m.redraw()\n)\n\nfunction Unstyled(\n Container\n ,HeaderPane\n ,ContentPane\n){\n\n return function Main(open, header, children, attrs = {}){\n openWatch(open())\n stream( () =>\n m(Container\n + (open() ? '.open' : '')\n , attrs\n , open() && fade(m(HeaderPane, typeof header == 'function' ? header() : header )\n )\n , open() && fade(m(ContentPane, typeof children == 'function' ? children() : children ))\n )\n )\n return m('.details-pane-portal'\n + css`\n position: absolute;\n `,\n { onremove: () => {\n stream( () => null )\n open( false )\n }\n }\n )\n }\n}\n\nexport const Light = Unstyled(\n Container\n ,HeaderPane\n ,ContentPane\n)\n\nexport const Dark = Unstyled(\n Container.replace('.bg-white','.hth-bg-dark')\n ,HeaderPane\n ,ContentPane+'.black'\n)\n\nexport { stream }\n","/* globals window */\nimport m from 'bacta'\nimport css from 'bss'\nimport * as R from 'ramda'\nimport flagon from 'flagon'\nimport permissions from '../../../api/permissions.json'\n\nconst links =\n [{ title: 'Gantt'\n , route: ({ Route }) => Route.HomeEmpty()\n , tags: ['data']\n , permissions: []\n }\n ,{ title: 'Updates'\n , route: ({ Route }) => Route.Updates({ args: '' })\n , tags: ['data']\n , permissions: ['updates_management', 'timesheet_management']\n }\n ,{ title: 'Projects'\n , route: ({ Route }) => Route.Projects({ args: '' })\n , tags: ['data']\n , permissions: ['project_management']\n }\n ,{ title: 'Resources'\n , route: ({ Route }) => Route.Resources({ args: '' })\n , tags: ['data']\n , permissions: ['resource_management']\n }\n ,{ title: 'Schedules'\n , route: ({ Route }) => Route.Schedules({ args: '' })\n , tags: ['data']\n , permissions: ['project_management']\n }\n ,{ title: 'Workflows'\n , route: ({ Route }) => Route.Workflows({ args: '' })\n , tags: ['data']\n , permissions: ['flow_management']\n }\n ,{ title: 'Interruptions'\n , route: ({ Route }) => Route.Interruptions({ args: '' })\n , tags: ['data']\n , permissions: ['interruption_management']\n }\n ,{ title: 'Tools'\n , route: ({ Route }) => Route.Tools({ args: '' })\n , tags: ['data']\n , permissions: ['tool_management', 'assigned_tools']\n }\n ,{ title: 'Financials'\n , route: ({ Route }) => Route.Financials({ args: 'contracts' })\n , tags: ['data']\n , permissions: ['contract_management', 'invoice_management']\n }\n ,{ title: 'Materials'\n , route: ({ Route }) => Route.Materials({ args: '' })\n , tags: ['data']\n , permissions: ['material_management', 'contract_recognition']\n }\n ,{ title: 'Payments'\n , onclick(e, { api }){\n\te.preventDefault()\n\n\tapi.request('post', '/payments/portal', {\n\t\treturn_url: window.location.href\n\t})\n\t.then( ({ url }) => {\n\t\twindow.location = url\n\t})\n }\n , tags: ['data']\n , permissions: ['payment_management']\n , filter: ({ features }) => {\n\t return features().paymentsNav\n }\n }\n ,{ title: 'Exports'\n , route: ({ Route }) => Route.Exports({ args: '' })\n , tags: ['data']\n , permissions: ['organization_exports', 'schedule_exports']\n }\n ,{ title: 'Organizations'\n , route: ({ Route, state }) => Route.Organizations2({ args: state.organization_id || '' })\n , tags: ['data']\n , permissions: ['user_management', 'organization_management']\n }\n ,{ title: 'Login'\n , route: ({ Route }) => Route.Login()\n , tags: ['access']\n , permissions: []\n }\n ,{ title: 'Reset Password'\n , route: ({ Route }) => Route.Reset()\n , tags: ['access']\n , permissions: []\n }\n ]\n\nconst link_css =\n\tcss`\n\t\ttext-decoration: none;\n\t\tcolor: inherit;\n\t\ttransform: scale(1);\n\t\ttransition: 0.2s;\n\t\ttransform-origin: top left;\n\t`\n\t.$hover(`\n\t\ttext-decoration: underline;\n\t\ttransform: scale(1.05);\n\t`)\n\nconst trunc_css =\n\tcss`\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\twidth: 100%;\n\t\toverflow: hidden;\n\t`\nconst isActive = ({ Route, state }) => x =>\n\tx.route\n\t&& x.route({ Route, state }).tag == state.route.tag\n\nconst toLi = () => (state, { api, Route }) => x =>\n m('a', {\n\t href: x.route ? Route.toURL(x.route({ Route, state }) ) : '#'\n\t ,oncreate: x.route ? m.route.link : null\n\t ,onclick: x.onclick ? e => x.onclick(e, { api }) : null\n\t}\n ,m('li',\n { className:\n isActive ({ state, Route }) (x)\n ? 'top-nav-active'\n : ''\n }\n , x.title\n )\n )\n\nconst logo =\n m('img'\n + css`\n height: 100%;\n transition: 1s ease-in-out;\n cursor: pointer;\n `\n , {\n src: 'https://harth.io/assets/logo/harth-logo-black-orange-bar.png'\n }\n )\n\nconst hideScrollbars =\n css`\n -ms-overflow-style: none;\n scrollbar-width: none;\n `\n .$nest('::-webkit-scrollbar', `\n display: none;\n `)\n\nexport const component = () => {\n\n\treturn {\n\t\tview: ({\n\t\t\tattrs: {\n\t\t\t\tRoute,\n\t\t\t\tdata: {\n\t\t\t\t\tgetState\n\t\t\t\t\t, link\n\t\t\t\t\t, organizations\n\t\t\t\t\t, schedule_name\n\t\t\t\t\t, schedules\n\t\t\t\t\t, actual: {\n\t\t\t\t\t\tschedule_id\n\t\t\t\t\t}\n\t\t\t\t\t, modal\n\t\t\t\t\t, advancedView\n\t\t\t\t\t, auth_permissions\n\t\t\t\t\t, api\n\t\t\t\t\t, topNavBanner\n\t\t\t\t\t, features\n\t\t\t\t}\n\t\t\t}\n\t\t}) => {\n\n\t\tconst route = getState().route\n\n\t\tconst tags = []\n\t\t\t.concat(\n\t\t\t\tRoute.isDataRoute( route ) ? ['data'] :[]\n\t\t\t)\n\t\t\t.concat(\n\t\t\t\tRoute.isAccessRoute( route ) ? ['access'] : []\n\t\t\t)\n\n\t\tconst auth_check = (x, auth_permissions) => {\n\t\t\t// flagon; permissions;\n\t\t\treturn (\n\t\t\t\tx.permissions.length == 0\n\t\t\t\t|| permissions.some(\n\t\t\t\t\ty => x.permissions.includes(y.permission_name)\n\t\t\t\t\t? flagon.contains(\n\t\t\t\t\t\tauth_permissions().auth_permissions_read\n\t\t\t\t\t\t, y.permission_flag\n\t\t\t\t\t)\n\t\t\t\t\t: false\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tconst validLinks =\n\t\t\tlinks\n\t\t\t.filter(\n\t\t\t\tx => x.route\n\t\t\t\t\t? R.intersection(x.tags, tags).length > 0\n\t\t\t\t\t: x\n\t\t\t)\n\t\t\t.filter(\n\t\t\t\tx => auth_check(x, auth_permissions)\n\t\t\t\t\t&& (!x.filter || x.filter({ features }))\n\t\t\t)\n\n\t\t\t.map(\n\t\t\t\ttoLi (link) (getState(), { api, Route })\n\t\t\t)\n\n\t\treturn m('nav'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-rows: 4em 2.5em;\n\t\t\t\twidth: 100vw;\n\t\t\t\tfont-family: Helvetica;\n\t\t\t\tposition: sticky;\n\t\t\t\ttop: 0px;\n\t\t\t\tz-index: 1;\n\t\t\t\tmax-height: var(--top-nav-height);\n\t\t\t\ttransition: max-height 0.5s;\n\t\t\t`\n\t\t\t.$nest('*', `\n\t\t\t\ttap-highlight-color: rgba(255, 255, 255, 0);\n\t\t\t\tbox-sizing: border-box;\n\t\t\t`)\n\t\t\t.$nest('*:focus', css`\n\t\t\t\toutline: none;\n\t\t\t`)\n\t\t\t,m('header'\n\t\t\t\t+css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tpadding: 0.6em 1em 0.6em 1em;\n\t\t\t\t\tborder-bottom: solid 0.3em #020b4d;\n\t\t\t\t\t/* 2em is for FireFox */\n\t\t\t\t\tgrid-template-columns: 3em 1fr 3em;\n\t\t\t\t\t/* Rows is so the nav doesnt render on top of everything */\n\t\t\t\t\tgrid-template-rows: 2.5em;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\talign-items: center;\n\t\t\t\t`\n\t\t\t\t,logo\n\t\t\t\t,m('label'\n\t\t\t\t\t+css`\n\t\t\t\t\t\ttransition: 0.3s ease-in-out;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\tmargin: 1em 0em;\n\t\t\t\t\t`\n\t\t\t\t\t.$media('(min-width: 700px)', css`\n\t\t\t\t\t\tmax-width: 100%;\n\t\t\t\t\t`),\n\t\t\t\t\t{ onchange: e => {\n\t\t\t\t\t\tconst { org: o, schedule: s } =\n\t\t\t\t\t\t\tJSON.parse(e.target.value)\n\t\t\t\t\t\tconst O = organizations.organization_id\n\t\t\t\t\t\tconst S = schedule_id\n\n\t\t\t\t\t\tif( O() != o) {\n\t\t\t\t\t\t\tO(o)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( S() != s ){\n\t\t\t\t\t\t\tS(s)\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t}\n\n\t\t\t\t\t, title:\n\t\t\t\t\t\torganizations.organization_name()\n\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t+ schedule_name()\n\t\t\t\t\t}\n\t\t\t\t\t,[organizations.organizations()]\n\t\t\t\t\t.map(\n\t\t\t\t\t\txs =>\n\t\t\t\t\t\t\tm('select' +css`\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,xs\n\t\t\t\t\t\t\t.sort(\n\t\t\t\t\t\t\t\tR.descend( x => x.organization_name )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.sort(\n\n\t\t\t\t\t\t\t\tR.descend(\n\t\t\t\t\t\t\t\t\tx => x.organization_id\n\t\t\t\t\t\t\t\t\t\t== organizations.organization_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\to => o.organization_id\n\t\t\t\t\t\t\t\t\t== organizations.organization_id()\n\t\t\t\t\t\t\t\t\t? m('optgroup',\n\t\t\t\t\t\t\t\t\t\t{ label: o.organization_name }\n\t\t\t\t\t\t\t\t\t\t,schedules().map(\n\t\t\t\t\t\t\t\t\t\t\tx =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('option',\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ value:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\torg: o.organization_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule: x.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t, selected:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\to.organization_id == organizations.organization_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& x.schedule_id == schedule_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t, x.schedule_name\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: m('option',\n\t\t\t\t\t\t\t\t\t\t{ value:\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\t\t\t\t\t\torg: o.organization_id\n\t\t\t\t\t\t\t\t\t\t\t\t,schedule: null\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, o.organization_name\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t))\n\n\t\t\t\t\t)\n\t\t\t\t\t, m('.nav-header'\n\t\t\t\t\t\t+ css`\n\n\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\tfont-size: 1.2em;\n\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,m('.org'\n\t\t\t\t\t\t\t+ trunc_css\n\t\t\t\t\t\t\t, organizations.organization_name()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('.schedule'\n\t\t\t\t\t\t\t+ trunc_css\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-size: 0.8em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, schedule_name()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, m('label'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t`\n\t\t\t\t\t, { onclick(){\n\t\t\t\t\t\tmodal({\n\t\t\t\t\t\t\tdismissable: true\n\t\t\t\t\t\t\t, content:\n\t\t\t\t\t\t\t\t() => m(''\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\tborder-top: solid 0.2em orange;\n\t\t\t\t\t\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tpadding: 1.2em;\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: ${\n\t\t\t\t\t\t\t\t\t\t\t\t`max-content max-content 1fr`\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\trow-gap: 0.2em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('span', 'Odin')\n\t\t\t\t\t\t\t\t\t\t,m('hr' + css.m(0) + css`\n\t\t\t\t\t\t\t\t\t\t\tmargin: 0em 0em 0.4em 0em;\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t,m('.links'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t\t\trow-gap: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t.tablet(`\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0.5em 0em;\n\t\t\t\t\t\t\t\t\t\t\t`),\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tonclick: () => modal(null)\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t,m('a' + link_css\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunction(e){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( advancedView && !advancedView()){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tadvancedView(e)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse { advancedView(false) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t, advancedView()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Basic View'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'Advanced View'\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t,m('a' + link_css\n\t\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\t\t{ href: '/access/login'\n\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t, onclick(){\n\t\t\t\t\t\t\t\t\t\t\t\t\twindow.localStorage.setItem('route-before-logout', m.route.get())\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,'Log Out'\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t,m('a' + link_css\n\t\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\t\t{ href: 'mailto:support@harth.io'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,'Support'\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t,m('a' + link_css\n\t\t\t\t\t\t\t\t\t\t\t\t+ css.tablet(`\n\t\t\t\t\t\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tright: 0em;\n\t\t\t\t\t\t\t\t\t\t\t\t`),\n\t\t\t\t\t\t\t\t\t\t\t\t{ href: 'https://harth.io'\n\t\t\t\t\t\t\t\t\t\t\t\t, target: '_blank'\n\t\t\t\t\t\t\t\t\t\t\t\t, rel: 'noopener noreferrer'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t, 'About'\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t\t} }\n\t\t\t\t\t, '...'\n\t\t\t\t)\n\t\t\t)\n\t\t\t,m('ul.subnav'\n\t\t\t+ hideScrollbars\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tbackground-color: var(--harth-blue);\n\t\t\t\tborder-bottom: solid 1px #1a2154;\n\t\t\t\tcolor: white;\n\t\t\t\talign-content: center;\n\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\ttext-align: center;\n\t\t\t\talign-items: center;\n\t\t\t\tlist-style: none;\n\t\t\t\tpadding-left: 0px;\n\t\t\t\tmargin: 0px;\n\t\t\t\tcursor: pointer;\n\t\t\t\tgrid-template-columns: repeat(${validLinks.length}, max-content);\n\t\t\t\tcolumn-gap: 1em;\n\t\t\t\toverflow-x: auto;\n\t\t\t`\n\t\t\t.$nest('li',css`\n\t\t\t\tdisplay: grid;\n\t\t\t\talign-content: center;\n\t\t\t\ttransform-origin: center;\n\t\t\t\ttransition: 0.1s ease-in-out;\n\t\t\t\theight: 2em;\n\t\t\t\tpadding: 0em 1em;\n\t\t\t`)\n\t\t\t.$nest('li:hover',css`\n\t\t\t\ttransform: scale(0.95);\n\t\t\t\ttransition: 0.2s ease-in-out;\n\t\t\t\tbox-shadow: 0px 15px 0px -10px rgba(255,255,255,1);\n\t\t\t`)\n\t\t\t.$nest('li.top-nav-active',css`\n\t\t\t\ttransform: scale(0.95);\n\t\t\t\ttransition: 0.2s ease-in-out;\n\t\t\t\tbox-shadow: 0px 15px 0px -10px orange;\n\t\t\t`)\n\t\t\t.$nest('li.top-nav-active:hover', css`\n\t\t\t\ttransform: scale(0.9);\n\t\t\t`)\n\t\t\t.$nest('a,a:visited', css`\n\t\t\t\ttext-decoration: none;\n\t\t\t\tcolor: whitesmoke;\n\t\t\t\tletter-spacing: 1.5px;\n\t\t\t\tfont-size: 15px;\n\t\t\t`)\n\t\t\t, {\n\t\t\t\tonwheel(e){\n\t\t\t\t\t// Simulate horizontal scroll for mouse wheel on desktop\n\t\t\t\t\tif( e.deltaX === 0){\n\t\t\t\t\t\tconst el = e.currentTarget\n\t\t\t\t\t\tconst left = el.scrollLeft + e.deltaY * 100\n\t\t\t\t\t\tel.scroll({ left: left, top: 0, behavior: 'smooth' })\n\t\t\t\t\t}\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\te.stopImmediatePropagation()\n\t\t\t\t}\n\t\t\t}\n\t\t\t, [].concat(validLinks)\n\t\t\t)\n\t\t\t, m('.notice'\n\t\t\t\t+ css`\n\t\t\t\t\tmax-height: ${\n\t\t\t\t\t\ttopNavBanner()\n\t\t\t\t\t\t? `var(--top-nav-alert)`\n\t\t\t\t\t\t: `0em`\n\t\t\t\t\t};\n\t\t\t\t\tmin-height: ${\n\t\t\t\t\t\ttopNavBanner()\n\t\t\t\t\t\t? `var(--top-nav-alert)`\n\t\t\t\t\t\t: `0em`\n\t\t\t\t\t};\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\ttransition: max-height 0.5s, min-height 0.5s;\n\t\t\t\t`\n\t\t\t\t, topNavBanner()\n\t\t\t)\n\t\t)\n\t\t}\n\t}\n\t}\n\n\t// export function ScrollActiveIntoViewService(state$){\n\n\t// // eslint-disable-next-line no-undef\n\t// const { setTimeout, clearTimeout, document } = window\n\n\t// let timeoutId\n\t// S.dropRepeats(state$.map( x => x.route ))\n\t// .map(\n\t// () => {\n\t// clearTimeout(timeoutId)\n\t// return timeoutId = setTimeout(\n\t// () => [document.querySelector('.top-nav-active')]\n\t// .filter(Boolean)\n\t// .forEach(\n\n\t// el => el.scrollIntoView({\n\t// behavior: 'smooth'\n\t// ,block: 'center'\n\t// ,inline: 'start'\n\t// })\n\t// )\n\t// ,1000\n\t// )\n\t// }\n\t// )\n\n\t// return S.of()\n\t// }\n","/* globals window */\nimport css from 'bss'\nimport m from 'bacta'\n\nfunction Main(){\n\n\tconst transition =\n\t\tcss\n\t\t.$animate('0.2s forwards', {\n\t\t\t'0%': `transform: translateY(100vh); opacity: 0;`\n\t\t\t,'100%': `transform: translateY(var(--modal-offset)); opacity: 1;`\n\t\t})\n\t\t.tablet(\n\t\t\tcss\n\t\t\t.$animate('0.2s forwards', {\n\t\t\t\t'0%':\n\t\t\t\t\t`transform: translateX(calc(100vw)); opacity: 0;`\n\t\t\t\t,'100%':\n\t\t\t\t\t`transform: translateX(calc(100vw - 400px)); opacity: 1;`\n\t\t\t})\n\t\t)\n\t\t.class\n\n\tfunction view({ attrs: { content, offset={ mobile:{y:'50vh'}, desktop:{y:'0vh'} } }}){\n\t\treturn m('.modal'\n\t\t\t+ css`\n\t\t\t\t--modal-offset: ${offset.mobile.y};\n\t\t\t\tbackground-color: black;\n\t\t\t\tcolor: white;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0px;\n\t\t\t\ttop: 0px;\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: calc(100vh - var(--modal-offset));\n\t\t\t\tdisplay: block;\n\t\t\t`\n\t\t\t.tablet(`\n\t\t\t\t--modal-offset: ${offset.desktop.y};\n\t\t\t\twidth: 400px;\n\t\t\t\theight: 100vh;\n\t\t\t`)\n\t\t\t, content()\n\t\t)\n\t}\n\n\treturn {\n\t\tview\n\t\t,oncreate({ dom }){\n\t\t\twindow.requestAnimationFrame(\n\t\t\t\t() => dom.classList.add(transition)\n\t\t\t)\n\t\t}\n\t\t,onbeforeremove({ dom }){\n\t\t\twindow.requestAnimationFrame(\n\t\t\t\t() => {\n\t\t\t\t\tdom.classList.replace(\n\t\t\t\t\t\ttransition,\n\t\t\t\t\t\tcss\n\t\t\t\t\t\t.$animate('0.2s forwards', {\n\t\t\t\t\t\t\t'0%': `transform: translateY(50vh); opacity: 1;`\n\t\t\t\t\t\t\t,'100%': `transform: translateY(100vh); opacity: 0;`\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.tablet(\n\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\twidth: 400px;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.$animate('0.2s forwards', {\n\t\t\t\t\t\t\t\t'0%':\n\t\t\t\t\t\t\t\t\t`transform: translateX(calc(100vw - 400px)); opacity: 1;`\n\t\t\t\t\t\t\t\t,'100%':\n\t\t\t\t\t\t\t\t\t`transform: translateX(calc(100vw)); opacity: 0;`\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.class\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t)\n\t\t\treturn new window.Promise(resolve => {\n\t\t\t\t// dom.style.maxHeight = 0\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\t'animationend', resolve, { once: true }\n\t\t\t\t)\n\t\t\t })\n\t\t}\n\t}\n}\n\nexport default Main","const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n","const defaults = {\n duration: 0.3,\n delay: 0,\n endDelay: 0,\n repeat: 0,\n easing: \"ease\",\n};\n\nexport { defaults };\n","const isNumber = (value) => typeof value === \"number\";\n\nexport { isNumber };\n","import { isNumber } from './is-number.es.js';\n\nconst isEasingList = (easing) => Array.isArray(easing) && !isNumber(easing[0]);\n\nexport { isEasingList };\n","const mix = (min, max, progress) => -progress * min + progress * max + min;\n\nexport { mix };\n","const noop = () => { };\nconst noopReturn = (v) => v;\n\nexport { noop, noopReturn };\n","const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min);\n\nexport { progress };\n","import { mix } from './mix.es.js';\nimport { progress } from './progress.es.js';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mix(min, 1, offsetProgress));\n }\n}\nfunction defaultOffset(length) {\n const offset = [0];\n fillOffset(offset, length - 1);\n return offset;\n}\n\nexport { defaultOffset, fillOffset };\n","import { mix } from './mix.es.js';\nimport { noopReturn } from './noop.es.js';\nimport { fillOffset, defaultOffset } from './offset.es.js';\nimport { progress } from './progress.es.js';\nimport { getEasingForSegment } from './easing.es.js';\nimport { clamp } from './clamp.es.js';\n\nfunction interpolate(output, input = defaultOffset(output.length), easing = noopReturn) {\n const length = output.length;\n /**\n * If the input length is lower than the output we\n * fill the input to match. This currently assumes the input\n * is an animation progress value so is a good candidate for\n * moving outside the function.\n */\n const remainder = length - input.length;\n remainder > 0 && fillOffset(input, remainder);\n return (t) => {\n let i = 0;\n for (; i < length - 2; i++) {\n if (t < input[i + 1])\n break;\n }\n let progressInRange = clamp(0, 1, progress(input[i], input[i + 1], t));\n const segmentEasing = getEasingForSegment(easing, i);\n progressInRange = segmentEasing(progressInRange);\n return mix(output[i], output[i + 1], progressInRange);\n };\n}\n\nexport { interpolate };\n","import { isEasingList } from './is-easing-list.es.js';\nimport { wrap } from './wrap.es.js';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingList(easing)\n ? easing[wrap(0, easing.length, i)]\n : easing;\n}\n\nexport { getEasingForSegment };\n","const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n","import { isNumber } from './is-number.es.js';\n\nconst isCubicBezier = (easing) => Array.isArray(easing) && isNumber(easing[0]);\n\nexport { isCubicBezier };\n","const isEasingGenerator = (easing) => typeof easing === \"object\" &&\n Boolean(easing.createAnimation);\n\nexport { isEasingGenerator };\n","const isFunction = (value) => typeof value === \"function\";\n\nexport { isFunction };\n","const time = {\n ms: (seconds) => seconds * 1000,\n s: (milliseconds) => milliseconds / 1000,\n};\n\nexport { time };\n","import { noopReturn } from '@motionone/utils';\n\n/*\n Bezier function generator\n\n This has been modified from Gaëtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noopReturn;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","import { clamp } from '@motionone/utils';\n\nconst steps = (steps, direction = \"end\") => (progress) => {\n progress =\n direction === \"end\"\n ? Math.min(progress, 0.999)\n : Math.max(progress, 0.001);\n const expanded = progress * steps;\n const rounded = direction === \"end\" ? Math.floor(expanded) : Math.ceil(expanded);\n return clamp(0, 1, rounded / steps);\n};\n\nexport { steps };\n","import { cubicBezier, steps } from '@motionone/easing';\nimport { isFunction, isCubicBezier, noopReturn } from '@motionone/utils';\n\nconst namedEasings = {\n ease: cubicBezier(0.25, 0.1, 0.25, 1.0),\n \"ease-in\": cubicBezier(0.42, 0.0, 1.0, 1.0),\n \"ease-in-out\": cubicBezier(0.42, 0.0, 0.58, 1.0),\n \"ease-out\": cubicBezier(0.0, 0.0, 0.58, 1.0),\n};\nconst functionArgsRegex = /\\((.*?)\\)/;\nfunction getEasingFunction(definition) {\n // If already an easing function, return\n if (isFunction(definition))\n return definition;\n // If an easing curve definition, return bezier function\n if (isCubicBezier(definition))\n return cubicBezier(...definition);\n // If we have a predefined easing function, return\n if (namedEasings[definition])\n return namedEasings[definition];\n // If this is a steps function, attempt to create easing curve\n if (definition.startsWith(\"steps\")) {\n const args = functionArgsRegex.exec(definition);\n if (args) {\n const argsArray = args[1].split(\",\");\n return steps(parseFloat(argsArray[0]), argsArray[1].trim());\n }\n }\n return noopReturn;\n}\n\nexport { getEasingFunction };\n","import { noopReturn, defaults, isEasingGenerator, isEasingList, interpolate } from '@motionone/utils';\nimport { getEasingFunction } from './utils/easing.es.js';\n\nclass Animation {\n constructor(output, keyframes = [0, 1], { easing, duration: initialDuration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, offset, direction = \"normal\", } = {}) {\n this.startTime = null;\n this.rate = 1;\n this.t = 0;\n this.cancelTimestamp = null;\n this.easing = noopReturn;\n this.duration = 0;\n this.totalDuration = 0;\n this.repeat = 0;\n this.playState = \"idle\";\n this.finished = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n easing = easing || defaults.easing;\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n initialDuration = custom.duration || initialDuration;\n }\n this.repeat = repeat;\n this.easing = isEasingList(easing) ? noopReturn : getEasingFunction(easing);\n this.updateDuration(initialDuration);\n const interpolate$1 = interpolate(keyframes, offset, isEasingList(easing) ? easing.map(getEasingFunction) : noopReturn);\n this.tick = (timestamp) => {\n var _a;\n // TODO: Temporary fix for OptionsResolver typing\n delay = delay;\n let t = 0;\n if (this.pauseTime !== undefined) {\n t = this.pauseTime;\n }\n else {\n t = (timestamp - this.startTime) * this.rate;\n }\n this.t = t;\n // Convert to seconds\n t /= 1000;\n // Rebase on delay\n t = Math.max(t - delay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (this.playState === \"finished\" && this.pauseTime === undefined) {\n t = this.totalDuration;\n }\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = t / this.duration;\n // TODO progress += iterationStart\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n iterationProgress === 1 && currentIteration--;\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const iterationIsOdd = currentIteration % 2;\n if (direction === \"reverse\" ||\n (direction === \"alternate\" && iterationIsOdd) ||\n (direction === \"alternate-reverse\" && !iterationIsOdd)) {\n iterationProgress = 1 - iterationProgress;\n }\n const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1);\n const latest = interpolate$1(this.easing(p));\n output(latest);\n const isAnimationFinished = this.pauseTime === undefined &&\n (this.playState === \"finished\" || t >= this.totalDuration + endDelay);\n if (isAnimationFinished) {\n this.playState = \"finished\";\n (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest);\n }\n else if (this.playState !== \"idle\") {\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n };\n this.play();\n }\n play() {\n const now = performance.now();\n this.playState = \"running\";\n if (this.pauseTime !== undefined) {\n this.startTime = now - this.pauseTime;\n }\n else if (!this.startTime) {\n this.startTime = now;\n }\n this.cancelTimestamp = this.startTime;\n this.pauseTime = undefined;\n this.frameRequestId = requestAnimationFrame(this.tick);\n }\n pause() {\n this.playState = \"paused\";\n this.pauseTime = this.t;\n }\n finish() {\n this.playState = \"finished\";\n this.tick(0);\n }\n stop() {\n var _a;\n this.playState = \"idle\";\n if (this.frameRequestId !== undefined) {\n cancelAnimationFrame(this.frameRequestId);\n }\n (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false);\n }\n cancel() {\n this.stop();\n this.tick(this.cancelTimestamp);\n }\n reverse() {\n this.rate *= -1;\n }\n commitStyles() { }\n updateDuration(duration) {\n this.duration = duration;\n this.totalDuration = duration * (this.repeat + 1);\n }\n get currentTime() {\n return this.t;\n }\n set currentTime(t) {\n if (this.pauseTime !== undefined || this.rate === 0) {\n this.pauseTime = t;\n }\n else {\n this.startTime = performance.now() - t / this.rate;\n }\n }\n get playbackRate() {\n return this.rate;\n }\n set playbackRate(rate) {\n this.rate = rate;\n }\n}\n\nexport { Animation };\n","/**\n * The MotionValue tracks the state of a single animatable\n * value. Currently, updatedAt and current are unused. The\n * long term idea is to use this to minimise the number\n * of DOM reads, and to abstract the DOM interactions here.\n */\nclass MotionValue {\n setAnimation(animation) {\n this.animation = animation;\n animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => { });\n }\n clearAnimation() {\n this.animation = this.generator = undefined;\n }\n}\n\nexport { MotionValue };\n","import { MotionValue } from '@motionone/types';\n\nconst data = new WeakMap();\nfunction getAnimationData(element) {\n if (!data.has(element)) {\n data.set(element, {\n transforms: [],\n values: new Map(),\n });\n }\n return data.get(element);\n}\nfunction getMotionValue(motionValues, name) {\n if (!motionValues.has(name)) {\n motionValues.set(name, new MotionValue());\n }\n return motionValues.get(name);\n}\n\nexport { getAnimationData, getMotionValue };\n","import { noopReturn, addUniqueItem } from '@motionone/utils';\nimport { getAnimationData } from '../data.es.js';\n\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\nconst axes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\nconst order = [\"translate\", \"scale\", \"rotate\", \"skew\"];\nconst transformAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n};\nconst rotation = {\n syntax: \"\",\n initialValue: \"0deg\",\n toDefaultUnit: (v) => v + \"deg\",\n};\nconst baseTransformProperties = {\n translate: {\n syntax: \"\",\n initialValue: \"0px\",\n toDefaultUnit: (v) => v + \"px\",\n },\n rotate: rotation,\n scale: {\n syntax: \"\",\n initialValue: 1,\n toDefaultUnit: noopReturn,\n },\n skew: rotation,\n};\nconst transformDefinitions = new Map();\nconst asTransformCssVar = (name) => `--motion-${name}`;\n/**\n * Generate a list of every possible transform key\n */\nconst transforms = [\"x\", \"y\", \"z\"];\norder.forEach((name) => {\n axes.forEach((axis) => {\n transforms.push(name + axis);\n transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b);\n/**\n * Provide a quick way to check if a string is the name of a transform\n */\nconst transformLookup = new Set(transforms);\nconst isTransform = (name) => transformLookup.has(name);\nconst addTransformToElement = (element, name) => {\n // Map x to translateX etc\n if (transformAlias[name])\n name = transformAlias[name];\n const { transforms } = getAnimationData(element);\n addUniqueItem(transforms, name);\n /**\n * TODO: An optimisation here could be to cache the transform in element data\n * and only update if this has changed.\n */\n element.style.transform = buildTransformTemplate(transforms);\n};\nconst buildTransformTemplate = (transforms) => transforms\n .sort(compareTransformOrder)\n .reduce(transformListToString, \"\")\n .trim();\nconst transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`;\n\nexport { addTransformToElement, asTransformCssVar, axes, buildTransformTemplate, compareTransformOrder, isTransform, transformAlias, transformDefinitions };\n","import { transformDefinitions } from './transforms.es.js';\n\nconst isCssVar = (name) => name.startsWith(\"--\");\nconst registeredProperties = new Set();\nfunction registerCssVariable(name) {\n if (registeredProperties.has(name))\n return;\n registeredProperties.add(name);\n try {\n const { syntax, initialValue } = transformDefinitions.has(name)\n ? transformDefinitions.get(name)\n : {};\n CSS.registerProperty({\n name,\n inherits: false,\n syntax,\n initialValue,\n });\n }\n catch (e) { }\n}\n\nexport { isCssVar, registerCssVariable, registeredProperties };\n","const testAnimation = (keyframes, options) => document.createElement(\"div\").animate(keyframes, options);\nconst featureTests = {\n cssRegisterProperty: () => typeof CSS !== \"undefined\" &&\n Object.hasOwnProperty.call(CSS, \"registerProperty\"),\n waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n partialKeyframes: () => {\n try {\n testAnimation({ opacity: [1] });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n finished: () => Boolean(testAnimation({ opacity: [0, 1] }, { duration: 0.001 }).finished),\n linearEasing: () => {\n try {\n testAnimation({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n },\n};\nconst results = {};\nconst supports = {};\nfor (const key in featureTests) {\n supports[key] = () => {\n if (results[key] === undefined)\n results[key] = featureTests[key]();\n return results[key];\n };\n}\n\nexport { supports };\n","import { isFunction, defaults, isCubicBezier, progress } from '@motionone/utils';\nimport { supports } from './feature-detection.es.js';\n\n// Create a linear easing point for every x second\nconst resolution = 0.015;\nconst generateLinearEasingPoints = (easing, duration) => {\n let points = \"\";\n const numPoints = Math.round(duration / resolution);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return points.substring(0, points.length - 2);\n};\nconst convertEasing = (easing, duration) => {\n if (isFunction(easing)) {\n return supports.linearEasing()\n ? `linear(${generateLinearEasingPoints(easing, duration)})`\n : defaults.easing;\n }\n else {\n return isCubicBezier(easing) ? cubicBezierAsString(easing) : easing;\n }\n};\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { convertEasing, cubicBezierAsString, generateLinearEasingPoints };\n","import { isTransform, asTransformCssVar, transformAlias } from './transforms.es.js';\n\nfunction getStyleName(key) {\n if (transformAlias[key])\n key = transformAlias[key];\n return isTransform(key) ? asTransformCssVar(key) : key;\n}\n\nexport { getStyleName };\n","import { isCssVar } from './utils/css-var.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { transformDefinitions } from './utils/transforms.es.js';\n\nconst style = {\n get: (element, name) => {\n name = getStyleName(name);\n let value = isCssVar(name)\n ? element.style.getPropertyValue(name)\n : getComputedStyle(element)[name];\n if (!value && value !== 0) {\n const definition = transformDefinitions.get(name);\n if (definition)\n value = definition.initialValue;\n }\n return value;\n },\n set: (element, name, value) => {\n name = getStyleName(name);\n if (isCssVar(name)) {\n element.style.setProperty(name, value);\n }\n else {\n element.style[name] = value;\n }\n },\n};\n\nexport { style };\n","function stopAnimation(animation, needsCommit = true) {\n if (!animation || animation.playState === \"finished\")\n return;\n // Suppress error thrown by WAAPI\n try {\n if (animation.stop) {\n animation.stop();\n }\n else {\n needsCommit && animation.commitStyles();\n animation.cancel();\n }\n }\n catch (e) { }\n}\n\nexport { stopAnimation };\n","import { getAnimationData, getMotionValue } from './data.es.js';\nimport { isCssVar, registerCssVariable } from './utils/css-var.es.js';\nimport { defaults, isEasingGenerator, isFunction, isEasingList, isNumber, time, noop } from '@motionone/utils';\nimport { isTransform, addTransformToElement, transformDefinitions } from './utils/transforms.es.js';\nimport { convertEasing } from './utils/easing.es.js';\nimport { supports } from './utils/feature-detection.es.js';\nimport { hydrateKeyframes, keyframesList } from './utils/keyframes.es.js';\nimport { style } from './style.es.js';\nimport { getStyleName } from './utils/get-style-name.es.js';\nimport { stopAnimation } from './utils/stop-animation.es.js';\nimport { getUnitConverter } from './utils/get-unit.es.js';\n\nfunction getDevToolsRecord() {\n return window.__MOTION_DEV_TOOLS_RECORD;\n}\nfunction animateStyle(element, key, keyframesDefinition, options = {}, AnimationPolyfill) {\n const record = getDevToolsRecord();\n const isRecording = options.record !== false && record;\n let animation;\n let { duration = defaults.duration, delay = defaults.delay, endDelay = defaults.endDelay, repeat = defaults.repeat, easing = defaults.easing, direction, offset, allowWebkitAcceleration = false, } = options;\n const data = getAnimationData(element);\n const valueIsTransform = isTransform(key);\n let canAnimateNatively = supports.waapi();\n /**\n * If this is an individual transform, we need to map its\n * key to a CSS variable and update the element's transform style\n */\n valueIsTransform && addTransformToElement(element, key);\n const name = getStyleName(key);\n const motionValue = getMotionValue(data.values, name);\n /**\n * Get definition of value, this will be used to convert numerical\n * keyframes into the default value type.\n */\n const definition = transformDefinitions.get(name);\n /**\n * Stop the current animation, if any. Because this will trigger\n * commitStyles (DOM writes) and we might later trigger DOM reads,\n * this is fired now and we return a factory function to create\n * the actual animation that can get called in batch,\n */\n stopAnimation(motionValue.animation, !(isEasingGenerator(easing) && motionValue.generator) &&\n options.record !== false);\n /**\n * Batchable factory function containing all DOM reads.\n */\n return () => {\n const readInitialValue = () => { var _a, _b; return (_b = (_a = style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; };\n /**\n * Replace null values with the previous keyframe value, or read\n * it from the DOM if it's the first keyframe.\n */\n let keyframes = hydrateKeyframes(keyframesList(keyframesDefinition), readInitialValue);\n /**\n * Detect unit type of keyframes.\n */\n const toUnit = getUnitConverter(keyframes, definition);\n if (isEasingGenerator(easing)) {\n const custom = easing.createAnimation(keyframes, key !== \"opacity\", readInitialValue, name, motionValue);\n easing = custom.easing;\n keyframes = custom.keyframes || keyframes;\n duration = custom.duration || duration;\n }\n /**\n * If this is a CSS variable we need to register it with the browser\n * before it can be animated natively. We also set it with setProperty\n * rather than directly onto the element.style object.\n */\n if (isCssVar(name)) {\n if (supports.cssRegisterProperty()) {\n registerCssVariable(name);\n }\n else {\n canAnimateNatively = false;\n }\n }\n /**\n * If we've been passed a custom easing function, and this browser\n * does **not** support linear() easing, and the value is a transform\n * (and thus a pure number) we can still support the custom easing\n * by falling back to the animation polyfill.\n */\n if (valueIsTransform &&\n !supports.linearEasing() &&\n (isFunction(easing) || (isEasingList(easing) && easing.some(isFunction)))) {\n canAnimateNatively = false;\n }\n /**\n * If we can animate this value with WAAPI, do so.\n */\n if (canAnimateNatively) {\n /**\n * Convert numbers to default value types. Currently this only supports\n * transforms but it could also support other value types.\n */\n if (definition) {\n keyframes = keyframes.map((value) => isNumber(value) ? definition.toDefaultUnit(value) : value);\n }\n /**\n * If this browser doesn't support partial/implicit keyframes we need to\n * explicitly provide one.\n */\n if (keyframes.length === 1 &&\n (!supports.partialKeyframes() || isRecording)) {\n keyframes.unshift(readInitialValue());\n }\n const animationOptions = {\n delay: time.ms(delay),\n duration: time.ms(duration),\n endDelay: time.ms(endDelay),\n easing: !isEasingList(easing)\n ? convertEasing(easing, duration)\n : undefined,\n direction,\n iterations: repeat + 1,\n fill: \"both\",\n };\n animation = element.animate({\n [name]: keyframes,\n offset,\n easing: isEasingList(easing)\n ? easing.map((thisEasing) => convertEasing(thisEasing, duration))\n : undefined,\n }, animationOptions);\n /**\n * Polyfill finished Promise in browsers that don't support it\n */\n if (!animation.finished) {\n animation.finished = new Promise((resolve, reject) => {\n animation.onfinish = resolve;\n animation.oncancel = reject;\n });\n }\n const target = keyframes[keyframes.length - 1];\n animation.finished\n .then(() => {\n // Apply styles to target\n style.set(element, name, target);\n // Ensure fill modes don't persist\n animation.cancel();\n })\n .catch(noop);\n /**\n * This forces Webkit to run animations on the main thread by exploiting\n * this condition:\n * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099\n *\n * This fixes Webkit's timing bugs, like accelerated animations falling\n * out of sync with main thread animations and massive delays in starting\n * accelerated animations in WKWebView.\n */\n if (!allowWebkitAcceleration)\n animation.playbackRate = 1.000001;\n /**\n * If we can't animate the value natively then we can fallback to the numbers-only\n * polyfill for transforms.\n */\n }\n else if (AnimationPolyfill && valueIsTransform) {\n /**\n * If any keyframe is a string (because we measured it from the DOM), we need to convert\n * it into a number before passing to the Animation polyfill.\n */\n keyframes = keyframes.map((value) => typeof value === \"string\" ? parseFloat(value) : value);\n /**\n * If we only have a single keyframe, we need to create an initial keyframe by reading\n * the current value from the DOM.\n */\n if (keyframes.length === 1) {\n keyframes.unshift(parseFloat(readInitialValue()));\n }\n animation = new AnimationPolyfill((latest) => {\n style.set(element, name, toUnit ? toUnit(latest) : latest);\n }, keyframes, Object.assign(Object.assign({}, options), { duration,\n easing }));\n }\n else {\n const target = keyframes[keyframes.length - 1];\n style.set(element, name, definition && isNumber(target)\n ? definition.toDefaultUnit(target)\n : target);\n }\n if (isRecording) {\n record(element, key, keyframes, {\n duration,\n delay: delay,\n easing,\n repeat,\n offset,\n }, \"motion-one\");\n }\n motionValue.setAnimation(animation);\n return animation;\n };\n}\n\nexport { animateStyle };\n","function addUniqueItem(array, item) {\n array.indexOf(item) === -1 && array.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n index > -1 && arr.splice(index, 1);\n}\n\nexport { addUniqueItem, removeItem };\n","function hydrateKeyframes(keyframes, readInitialValue) {\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] === null) {\n keyframes[i] = i ? keyframes[i - 1] : readInitialValue();\n }\n }\n return keyframes;\n}\nconst keyframesList = (keyframes) => Array.isArray(keyframes) ? keyframes : [keyframes];\n\nexport { hydrateKeyframes, keyframesList };\n","import { noopReturn, isString } from '@motionone/utils';\n\nfunction getUnitConverter(keyframes, definition) {\n var _a;\n let toUnit = (definition === null || definition === void 0 ? void 0 : definition.toDefaultUnit) || noopReturn;\n const finalKeyframe = keyframes[keyframes.length - 1];\n if (isString(finalKeyframe)) {\n const unit = ((_a = finalKeyframe.match(/(-?[\\d.]+)([a-z%]*)/)) === null || _a === void 0 ? void 0 : _a[2]) || \"\";\n if (unit)\n toUnit = (value) => value + unit;\n }\n return toUnit;\n}\n\nexport { getUnitConverter };\n","const isString = (value) => typeof value === \"string\";\n\nexport { isString };\n","const getOptions = (options, key) => \n/**\n * TODO: Make test for this\n * Always return a new object otherwise delay is overwritten by results of stagger\n * and this results in no stagger\n */\noptions[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options);\n\nexport { getOptions };\n","function resolveElements(elements, selectorCache) {\n var _a;\n if (typeof elements === \"string\") {\n if (selectorCache) {\n (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = document.querySelectorAll(elements));\n elements = selectorCache[elements];\n }\n else {\n elements = document.querySelectorAll(elements);\n }\n }\n else if (elements instanceof Element) {\n elements = [elements];\n }\n /**\n * Return an empty array\n */\n return Array.from(elements || []);\n}\n\nexport { resolveElements };\n","import { defaults, noop, time } from '@motionone/utils';\nimport { stopAnimation } from './stop-animation.es.js';\n\nconst createAnimation = (factory) => factory();\nconst withControls = (animationFactory, options, duration = defaults.duration) => {\n return new Proxy({\n animations: animationFactory.map(createAnimation).filter(Boolean),\n duration,\n options,\n }, controls);\n};\n/**\n * TODO:\n * Currently this returns the first animation, ideally it would return\n * the first active animation.\n */\nconst getActiveAnimation = (state) => state.animations[0];\nconst controls = {\n get: (target, key) => {\n const activeAnimation = getActiveAnimation(target);\n switch (key) {\n case \"duration\":\n return target.duration;\n case \"currentTime\":\n return time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0);\n case \"playbackRate\":\n case \"playState\":\n return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key];\n case \"finished\":\n if (!target.finished) {\n target.finished = Promise.all(target.animations.map(selectFinished)).catch(noop);\n }\n return target.finished;\n case \"stop\":\n return () => {\n target.animations.forEach((animation) => stopAnimation(animation));\n };\n case \"forEachNative\":\n /**\n * This is for internal use only, fire a callback for each\n * underlying animation.\n */\n return (callback) => {\n target.animations.forEach((animation) => callback(animation, target));\n };\n default:\n return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) === \"undefined\"\n ? undefined\n : () => target.animations.forEach((animation) => animation[key]());\n }\n },\n set: (target, key, value) => {\n switch (key) {\n case \"currentTime\":\n value = time.ms(value);\n case \"currentTime\":\n case \"playbackRate\":\n for (let i = 0; i < target.animations.length; i++) {\n target.animations[i][key] = value;\n }\n return true;\n }\n return false;\n },\n};\nconst selectFinished = (animation) => animation.finished;\n\nexport { controls, withControls };\n","import { isNumber, isFunction } from '@motionone/utils';\nimport { getEasingFunction } from '@motionone/animation';\n\nfunction stagger(duration = 0.1, { start = 0, from = 0, easing } = {}) {\n return (i, total) => {\n const fromIndex = isNumber(from) ? from : getFromIndex(from, total);\n const distance = Math.abs(fromIndex - i);\n let delay = duration * distance;\n if (easing) {\n const maxDelay = total * duration;\n const easingFunction = getEasingFunction(easing);\n delay = easingFunction(delay / maxDelay) * maxDelay;\n }\n return start + delay;\n };\n}\nfunction getFromIndex(from, total) {\n if (from === \"first\") {\n return 0;\n }\n else {\n const lastIndex = total - 1;\n return from === \"last\" ? lastIndex : lastIndex / 2;\n }\n}\nfunction resolveOption(option, i, total) {\n return isFunction(option) ? option(i, total) : option;\n}\n\nexport { getFromIndex, resolveOption, stagger };\n","import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n","import { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n","var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n","import { resolveElements } from '../utils/resolve-elements.es.js';\nimport { isFunction } from '@motionone/utils';\n\nconst thresholds = {\n any: 0,\n all: 1,\n};\nfunction inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = \"any\" } = {}) {\n /**\n * If this browser doesn't support IntersectionObserver, return a dummy stop function.\n * Default triggering of onStart is tricky - it could be used for starting/stopping\n * videos, lazy loading content etc. We could provide an option to enable a fallback, or\n * provide a fallback callback option.\n */\n if (typeof IntersectionObserver === \"undefined\") {\n return () => { };\n }\n const elements = resolveElements(elementOrSelector);\n const activeIntersections = new WeakMap();\n const onIntersectionChange = (entries) => {\n entries.forEach((entry) => {\n const onEnd = activeIntersections.get(entry.target);\n /**\n * If there's no change to the intersection, we don't need to\n * do anything here.\n */\n if (entry.isIntersecting === Boolean(onEnd))\n return;\n if (entry.isIntersecting) {\n const newOnEnd = onStart(entry);\n if (isFunction(newOnEnd)) {\n activeIntersections.set(entry.target, newOnEnd);\n }\n else {\n observer.unobserve(entry.target);\n }\n }\n else if (onEnd) {\n onEnd(entry);\n activeIntersections.delete(entry.target);\n }\n });\n };\n const observer = new IntersectionObserver(onIntersectionChange, {\n root,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholds[amount],\n });\n elements.forEach((element) => observer.observe(element));\n return () => observer.disconnect();\n}\n\nexport { inView };\n","const motionEvent = (name, target) => new CustomEvent(name, { detail: { target } });\nfunction dispatchPointerEvent(element, name, event) {\n element.dispatchEvent(new CustomEvent(name, { detail: { originalEvent: event } }));\n}\nfunction dispatchViewEvent(element, name, entry) {\n element.dispatchEvent(new CustomEvent(name, { detail: { originalEntry: entry } }));\n}\n\nexport { dispatchPointerEvent, dispatchViewEvent, motionEvent };\n","import { __rest } from 'tslib';\nimport { dispatchViewEvent } from '../utils/events.es.js';\nimport { inView as inView$1 } from '../../gestures/in-view.es.js';\n\nconst inView = {\n isActive: (options) => Boolean(options.inView),\n subscribe: (element, { enable, disable }, { inViewOptions = {} }) => {\n const { once } = inViewOptions, viewOptions = __rest(inViewOptions, [\"once\"]);\n return inView$1(element, (enterEntry) => {\n enable();\n dispatchViewEvent(element, \"viewenter\", enterEntry);\n if (!once) {\n return (leaveEntry) => {\n disable();\n dispatchViewEvent(element, \"viewleave\", leaveEntry);\n };\n }\n }, viewOptions);\n },\n};\n\nexport { inView };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { dispatchPointerEvent } from '../utils/events.es.js';\n\nconst mouseEvent = (element, name, action) => (event) => {\n if (event.pointerType && event.pointerType !== \"mouse\")\n return;\n action();\n dispatchPointerEvent(element, name, event);\n};\nconst hover = {\n isActive: (options) => Boolean(options.hover),\n subscribe: (element, { enable, disable }) => {\n const onEnter = mouseEvent(element, \"hoverstart\", enable);\n const onLeave = mouseEvent(element, \"hoverend\", disable);\n element.addEventListener(\"pointerenter\", onEnter);\n element.addEventListener(\"pointerleave\", onLeave);\n return () => {\n element.removeEventListener(\"pointerenter\", onEnter);\n element.removeEventListener(\"pointerleave\", onLeave);\n };\n },\n};\n\nexport { hover };\n","import { __rest } from 'tslib';\nimport { invariant } from 'hey-listen';\nimport { noop } from '@motionone/utils';\nimport { animateStyle } from '../animate/animate-style.es.js';\nimport { style } from '../animate/style.es.js';\nimport { getOptions } from '../animate/utils/options.es.js';\nimport { hasChanged } from './utils/has-changed.es.js';\nimport { resolveVariant } from './utils/resolve-variant.es.js';\nimport { scheduleAnimation, unscheduleAnimation } from './utils/schedule.es.js';\nimport { inView } from './gestures/in-view.es.js';\nimport { hover } from './gestures/hover.es.js';\nimport { press } from './gestures/press.es.js';\nimport { motionEvent } from './utils/events.es.js';\nimport { Animation } from '@motionone/animation';\n\nconst gestures = { inView, hover, press };\n/**\n * A list of state types, in priority order. If a value is defined in\n * a righter-most type, it will override any definition in a lefter-most.\n */\nconst stateTypes = [\"initial\", \"animate\", ...Object.keys(gestures), \"exit\"];\n/**\n * A global store of all generated motion states. This can be used to lookup\n * a motion state for a given Element.\n */\nconst mountedStates = new WeakMap();\nfunction createMotionState(options = {}, parent) {\n /**\n * The element represented by the motion state. This is an empty reference\n * when we create the state to support SSR and allow for later mounting\n * in view libraries.\n *\n * @ts-ignore\n */\n let element;\n /**\n * Calculate a depth that we can use to order motion states by tree depth.\n */\n let depth = parent ? parent.getDepth() + 1 : 0;\n /**\n * Track which states are currently active.\n */\n const activeStates = { initial: true, animate: true };\n /**\n * A map of functions that, when called, will remove event listeners for\n * a given gesture.\n */\n const gestureSubscriptions = {};\n /**\n * Initialise a context to share through motion states. This\n * will be populated by variant names (if any).\n */\n const context = {};\n for (const name of stateTypes) {\n context[name] =\n typeof options[name] === \"string\"\n ? options[name]\n : parent === null || parent === void 0 ? void 0 : parent.getContext()[name];\n }\n /**\n * If initial is set to false we use the animate prop as the initial\n * animation state.\n */\n const initialVariantSource = options.initial === false ? \"animate\" : \"initial\";\n /**\n * Destructure an initial target out from the resolved initial variant.\n */\n let _a = resolveVariant(options[initialVariantSource] || context[initialVariantSource], options.variants) || {}, target = __rest(_a, [\"transition\"]);\n /**\n * The base target is a cached map of values that we'll use to animate\n * back to if a value is removed from all active state types. This\n * is usually the initial value as read from the DOM, for instance if\n * it hasn't been defined in initial.\n */\n const baseTarget = Object.assign({}, target);\n /**\n * A generator that will be processed by the global animation scheduler.\n * This yeilds when it switches from reading the DOM to writing to it\n * to prevent layout thrashing.\n */\n function* animateUpdates() {\n var _a, _b;\n const prevTarget = target;\n target = {};\n const animationOptions = {};\n for (const name of stateTypes) {\n if (!activeStates[name])\n continue;\n const variant = resolveVariant(options[name]);\n if (!variant)\n continue;\n for (const key in variant) {\n if (key === \"transition\")\n continue;\n target[key] = variant[key];\n animationOptions[key] = getOptions((_b = (_a = variant.transition) !== null && _a !== void 0 ? _a : options.transition) !== null && _b !== void 0 ? _b : {}, key);\n }\n }\n const allTargetKeys = new Set([\n ...Object.keys(target),\n ...Object.keys(prevTarget),\n ]);\n const animationFactories = [];\n allTargetKeys.forEach((key) => {\n var _a;\n if (target[key] === undefined) {\n target[key] = baseTarget[key];\n }\n if (hasChanged(prevTarget[key], target[key])) {\n (_a = baseTarget[key]) !== null && _a !== void 0 ? _a : (baseTarget[key] = style.get(element, key));\n animationFactories.push(animateStyle(element, key, target[key], animationOptions[key], Animation));\n }\n });\n // Wait for all animation states to read from the DOM\n yield;\n const animations = animationFactories\n .map((factory) => factory())\n .filter(Boolean);\n if (!animations.length)\n return;\n const animationTarget = target;\n element.dispatchEvent(motionEvent(\"motionstart\", animationTarget));\n Promise.all(animations.map((animation) => animation.finished))\n .then(() => {\n element.dispatchEvent(motionEvent(\"motioncomplete\", animationTarget));\n })\n .catch(noop);\n }\n const setGesture = (name, isActive) => () => {\n activeStates[name] = isActive;\n scheduleAnimation(state);\n };\n const updateGestureSubscriptions = () => {\n for (const name in gestures) {\n const isGestureActive = gestures[name].isActive(options);\n const remove = gestureSubscriptions[name];\n if (isGestureActive && !remove) {\n gestureSubscriptions[name] = gestures[name].subscribe(element, {\n enable: setGesture(name, true),\n disable: setGesture(name, false),\n }, options);\n }\n else if (!isGestureActive && remove) {\n remove();\n delete gestureSubscriptions[name];\n }\n }\n };\n const state = {\n update: (newOptions) => {\n if (!element)\n return;\n options = newOptions;\n updateGestureSubscriptions();\n scheduleAnimation(state);\n },\n setActive: (name, isActive) => {\n if (!element)\n return;\n activeStates[name] = isActive;\n scheduleAnimation(state);\n },\n animateUpdates,\n getDepth: () => depth,\n getTarget: () => target,\n getOptions: () => options,\n getContext: () => context,\n mount: (newElement) => {\n invariant(Boolean(newElement), \"Animation state must be mounted with valid Element\");\n element = newElement;\n mountedStates.set(element, state);\n updateGestureSubscriptions();\n return () => {\n mountedStates.delete(element);\n unscheduleAnimation(state);\n for (const key in gestureSubscriptions) {\n gestureSubscriptions[key]();\n }\n };\n },\n isMounted: () => Boolean(element),\n };\n return state;\n}\n\nexport { createMotionState, mountedStates };\n","import { dispatchPointerEvent } from '../utils/events.es.js';\n\nconst press = {\n isActive: (options) => Boolean(options.press),\n subscribe: (element, { enable, disable }) => {\n const onPointerUp = (event) => {\n disable();\n dispatchPointerEvent(element, \"pressend\", event);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n const onPointerDown = (event) => {\n enable();\n dispatchPointerEvent(element, \"pressstart\", event);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n element.addEventListener(\"pointerdown\", onPointerDown);\n return () => {\n element.removeEventListener(\"pointerdown\", onPointerDown);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n },\n};\n\nexport { press };\n","import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n","/* globals window */\nimport m from 'bacta'\nimport css from 'bss'\nimport * as M from 'motion'\n/**\n * Manages the stacking of modals. On desktop modals will visually stack, on mobile they will take up the full view.\n *\n * The stacking is history aware, so back button will take you back to the previous modal.\n *\n * This modal does not handle browser refresh, not that it couldn't, but the rest of the app\n * isn't history aware so it is something we should fix globally before making this component\n * support it as well.\n *\n * In theory, we could support it dynamically by registering a history record in local storage\n * for each modal, could just be an id.\n *\n * Then we hit the back button, we go retrieve the data for that id taken from the URL.\n *\n * Additional modal history shouldn't obstruct the URL of the main page.\n * So it is likely we'd want to encode almost all modal URL state in query params\n * and in a way that won't collide with existing query params.\n *\n * Because the modal stack manages all modals it is a singleton model.\n *\n * But it is also a view.\n */\n\n\nfunction ModalItem({\n\tview\n\t, title\n\t, type\n\t, dismissable=true\n\t, onnext=null\n}){\n\treturn { view, title, type, dismissable, onnext }\n}\n\nconst modals = []\nlet minimized = false\n\nexport function add({ view, title, type, dismissable, onnext }){\n\tmodals.unshift(ModalItem({ view, title, type, dismissable, onnext }))\n\tm.redraw()\n}\n\nexport function back(){\n\tif( modals.length && modals[0].dismissable ) {\n\t\tmodals.shift()\n\t\tm.redraw()\n\t}\n}\n\nexport function minimize(){\n\tminimized = !minimized\n\tm.redraw()\n}\n\nexport function close(){\n\tmodals.length = 0\n\tm.redraw()\n}\n\nexport function isOpen(){\n\treturn !minimized && modals.length > 0\n}\n\nfunction ModalItemView(){\n\n\tfunction onbeforeupdate(v, old){\n\t\tif( old && old.attrs.i != v.attrs.i ) {\n\n\t\t\tM.animate(\n\t\t\t\told.dom\n\t\t\t\t, v.attrs.i == 0 ? {\n\t\t\t\t\tx: '0%'\n\t\t\t\t\t,scaleX: 1\n\t\t\t\t\t,scaleY: 1\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\tx: 'calc( -100vw / 2 - var(--w) / 4)'\n\t\t\t\t\t,scaleX: 0.5\n\t\t\t\t\t,scaleY: 0.5\n\t\t\t\t}\n\t\t\t\t, {\n\t\t\t\t\tscaleX: { delay: 0.1 }\n\t\t\t\t}\n\n\t\t\t)\n\t\t}\n\t\treturn true\n\t}\n\n\n\tfunction oncreate(v) {\n\t\tM.animate(v.dom,\n\t\t\t{ y: `var(--initial-y)`\n\t\t\t}\n\t\t\t, {duration: 0 }\n\t\t)\n\t\twindow.setTimeout( () =>\n\t\t\tM.animate(\n\t\t\t\tv.dom, { y: '0px' }, { duration: 0.2 }\n\t\t\t)\n\t\t)\n\t}\n\n\tfunction onbeforeremove(v){\n\t\treturn M.animate(\n\t\t\tv.dom\n\t\t\t, { y: 'var(--initial-y)' }\n\t\t\t, { delay: 0.1, duration: 0.2 }\n\t\t)\n\t\t.finished\n\t}\n\n\n\treturn {\n\t\tview: ({ attrs: { i, modals }}) =>\n\t\t\t// v.attrs.i === 0\n\t\t\t// &&\n\t\t\tm('.modal-real-item'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-rows: auto 1fr;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tz-index: 1;\n\t\t\t\t\tpadding: 1em 0em 0em 0em;\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tbottom: 0px;\n\t\t\t\t\tleft: 0px;\n\t\t\t\t\t--initial-y: calc( 100% + var(--vgap) );\n\t\t\t\t`\n\t\t\t\t.desktop`\n\t\t\t\t\tpadding: 1em;\n\t\t\t\t`\n\t\t\t\t.$nest('.nav2 button', `\n\t\t\t\t\tcolor: #5f99ff;\n\t\t\t\t\tbackground-color: unset;\n\t\t\t\t\tborder: none;\n\t\t\t\t`)\n\t\t\t\t.$nest('.nav2 .title', `\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t`)\n\t\t\t\t, i == 0 && m('.nav2'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\tgrid-template-columns: 5em 1fr 5em;\n\t\t\t\t\t`\n\t\t\t\t\t.$nest('.title', `text-align: center`)\n\t\t\t\t\t.$lastChild(`text-align: right`)\n\n\t\t\t\t\t, i == 0 && modals[i].dismissable && m('button.back', { onclick: () => back() }, 'Back')\n\t\t\t\t\t, i == 0 && m('.title', modals[i].title)\n\t\t\t\t\t, i == 0 && modals[i].onnext\n\t\t\t\t\t&& m('button.next', {\n\t\t\t\t\t\tonclick(){\n\t\t\t\t\t\t\tmodals[i].onnext()\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 'Next')\n\t\t\t\t)\n\t\t\t\t, m('.content'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\toverflow: auto;\n\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t.desktop`\n\t\t\t\t\t\tpadding: 0.1em;\n\t\t\t\t\t`\n\t\t\t\t\t, i == 0 && modals[i].view()\n\t\t\t\t)\n\t\t\t)\n\t\t, oncreate\n\t\t, onbeforeremove\n\t\t, onbeforeupdate\n\t}\n}\n\nexport function Main(){\n\n\tfunction view(){\n\t\treturn isOpen() && m('.modal-stack'\n\t\t\t+ css`\n\t\t\t\t--w: 100vw;\n\t\t\t\t--h: 100%;\n\t\t\t\t--vgap: calc( 100% - var(--h) );\n\t\t\t\t--hgap: calc( 100vw - var(--w) );\n\t\t\t\tposition: fixed;\n\t\t\t\tbottom: 0px;\n\t\t\t\tleft: 0px;\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: var(--w);\n\t\t\t\tgrid-template-rows: var(--h);\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-content: center;\n\t\t\t\tz-index: 2;\n\t\t\t`\n\t\t\t.$media('(min-width: 65em)', `\n\t\t\t\t--w: 60em;\n\t\t\t\t--h: 95vh;\n\t\t\t`)\n\t\t\t+( minimized ? '.minimized' : '' )\n\t\t\t+( isOpen() ? '.open' : '.closed')\n\t\t\t, { async onbeforeremove(v){\n\n\t\t\t\tlet list = []\n\t\t\t\tlet stack = [v]\n\n\t\t\t\twhile (stack.length) {\n\t\t\t\t\tlet next = stack.shift()\n\t\t\t\t\tif( next.state && next.state.onbeforeremove ) {\n\t\t\t\t\t\tlist.unshift({\n\t\t\t\t\t\t\tv: next\n\t\t\t\t\t\t\t,context: next.state\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if ( next.attrs && next.attrs.onbeforeremove ){\n\t\t\t\t\t\tlist.unshift({\n\t\t\t\t\t\t\tv: next\n\t\t\t\t\t\t\t,context: next.attrs\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tif( next.children ) {\n\t\t\t\t\t\tstack.push( ...next.children )\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// self\n\t\t\t\tlist.pop()\n\n\t\t\t\tawait Promise.all(list.map( x => x.context.onbeforeremove(x.v) ))\n\t\t\t}\n\t\t\t}\n\t\t\t, m('.modal-item'\n\t\t\t\t+ css`\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t`\n\t\t\t\t, modals.map( (_, i, { length }) =>\n\t\t\t\t\tm(ModalItemView, { key: i+'-'+length , i, modals })\n\n\t\t\t\t)\n\t\t\t\t.reverse()\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nexport function Overlay(){\n\n\tlet f = e => {\n\t\tif(e.target.classList.contains('modal-stack')){\n\t\t\tclose()\n\n\t\t}\n\t}\n\n\tlet g = e => {\n\t\tif( e.key == 'Escape' ) {\n\t\t\tclose()\n\t\t}\n\t}\n\n\tfunction view(){\n\t\treturn isOpen()\n\t\t\t&& m('.modal-stack-overlay'\n\t\t\t\t+ css`\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 0px;\n\t\t\t\t\tleft: 0px;\n\t\t\t\t\twidth: 100vw;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tz-index: 2;\n\t\t\t\t\tpointer-events: none;\n\t\t\t\t\tbackground-color: black;\n\t\t\t\t\topacity: 0;\n\t\t\t\t`\n\t\t\t\t, {\n\t\t\t\t\toncreate: v => {\n\t\t\t\t\t\twindow.setTimeout(\n\t\t\t\t\t\t\t() => M.animate(\n\t\t\t\t\t\t\t\tv.dom, { opacity: 0.3 }, { delay: 0.1, duration: 1 }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\twindow.document.addEventListener('keyup', g)\n\t\t\t\t\t\twindow.document.addEventListener('click', f)\n\n\t\t\t\t\t}\n\t\t\t\t\t,onbeforeremove: v =>\n\t\t\t\t\t\tM.animate(\n\t\t\t\t\t\t\tv.dom, { opacity: 0 }, { delay: 0.1, duration: 0.2 }\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.finished\n\n\t\t\t\t\t,onremove: () => {\n\t\t\t\t\t\twindow.document.removeEventListener('click', f)\n\t\t\t\t\t\twindow.document.removeEventListener('keyup', g)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\n\t}\n\n\treturn { view }\n}\n\nwindow.animate = M.animate\nwindow.modalStack = {\n\tminimize, close, isOpen, add, back\n}","/* globals window, process */\nimport m from 'bacta'\nimport css from 'bss'\n\nconst marketingURL =\n\tprocess.env.HARTH_MARKETING_URL\n\t|| 'https://harth.io'\n\nconst external =\n\tm.trust(`\n\t\t\n\t`)\n\n// [] \t\t\t\t\t\t= do nothing\n// [{ content, ...etc }] \t= write to modal stream\n// [null] \t\t\t\t\t= write null to modal stream\n\nfunction consents({ auth, modal, api, auth_permissions }){\n\treturn auth.stream.map( authData => {\n\t\tif( authData._name == 'LoggedOut' ) {\n\t\t\t// Nothing to do\n\t\t\treturn [];\n\t\t} else if ( authData._name == 'Refresh' ) {\n\t\t\treturn []\n\t\t} else if (auth_permissions().consented) {\n\t\t\t// Nothing to do\n\t\t\treturn [];\n\t\t} else {\n\t\t\tif( modal() && modal().consentModal ) {\n\t\t\t\t// Nothing to do\n\t\t\t\treturn [];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\tdismissable: false\n\t\t\t\t\t, offset: { desktop: { y: '0vh'}, mobile: '0vh' }\n\t\t\t\t\t,content(){\n\t\t\t\t\t\treturn m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t--orange: hsl(31deg 100% 72%);;\n\t\t\t\t\t\t\t\tborder-top: solid 0.2em var(--orange);\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.$nest('.loading', `\n\t\t\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\t\t\ttouch-action: none;\n\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('a', `\n\t\t\t\t\t\t\t\tcolor: var(--orange);\n\t\t\t\t\t\t\t\tletter-spacing: 0.5px;\n\t\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('a:visited', `\n\t\t\t\t\t\t\t\tcolor: var(--orange);\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.consent-checkbox', `\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\tgrid-template-columns: auto auto;\n\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\tjustify-content: start;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tfont-weight: 100;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.consent-checkbox input', `\n\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\tline-height: normal;\n\t\t\t\t\t\t\t\twidth: var(--dim);\n\t\t\t\t\t\t\t\theight: var(--dim);\n\t\t\t\t\t\t\t\t--dim: 2em;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.consent-checkbox span', `\n\t\t\t\t\t\t\t\tfont-size: 1.1em;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.cta', `\n\t\t\t\t\t\t\t\tbackground-color: black;\n\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\tfont-size: 0.8em;\n\t\t\t\t\t\t\t\ttransition: background-color 0.2s, box-shadow 0.5s, color 0.5s;\n\t\t\t\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\t\t\t\tborder: solid 2px var(--orange);\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tpadding: 1.2em;\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: ${\n\t\t\t\t\t\t\t\t\t\t`max-content max-content 1fr`\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\trow-gap: 0.2em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('h1', 'Odin')\n\t\t\t\t\t\t\t\t,m('hr' + css.m(0) + css`\n\t\t\t\t\t\t\t\t\tmargin: 0em 0em 0.4em 0em;\n\t\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,m('form.content'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\talign-content: space-evenly;\n\t\t\t\t\t\t\t\t\t\trow-gap: 1em;\n\t\t\t\t\t\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.tablet(`\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\tpadding: 0.5em 0em;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t{ onsubmit(e){\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\n\t\t\t\t\t\t\t\t\t\tconst el = e.target\n\n\t\t\t\t\t\t\t\t\t\tel.classList.add('loading')\n\n\t\t\t\t\t\t\t\t\t\tlet $=\tnew window.FormData(el)\n\t\t\t\t\t\t\t\t\t\t$=\tObject.fromEntries($.entries())\n\n\t\t\t\t\t\t\t\t\t\tapi\n\t\t\t\t\t\t\t\t\t\t.request('POST', '/users/consents', $)\n\t\t\t\t\t\t\t\t\t\t.then( () => {\n\t\t\t\t\t\t\t\t\t\t\treturn api.auths.refresh()\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.then(function(response){\n\t\t\t\t\t\t\t\t\t\t\tauth.stream(\n\t\t\t\t\t\t\t\t\t\t\t\tauth.type.LoggedInOf(response)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.then(() => {\n\n\t\t\t\t\t\t\t\t\t\t\t// refresh so code is guaranteed to have the right permissions\n\t\t\t\t\t\t\t\t\t\t\t// shouldn't be necessary but just being safe\n\t\t\t\t\t\t\t\t\t\t\twindow.location = window.location\n\t\t\t\t\t\t\t\t\t\t\tmodal(null)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.finally( () => {\n\t\t\t\t\t\t\t\t\t\t\tel.classList.remove('loading')\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,m('h4'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tcolor: var(--orange);\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t, 'Terms of Service & Privacy Policy'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('p', 'As we introduce new features and upgrades to Odin we will occasionally update our Terms of Service and Privacy Policy.')\n\t\t\t\t\t\t\t\t\t,m('p', 'In order to continue your usage of Odin we require that you read and consent to the follow declrations.')\n\t\t\t\t\t\t\t\t\t,m('p', 'If you have any questions or concerns please do not hesitate to reach out at ', m('a', { href: 'mailto:support@harth.io' }, 'support@harth.io'))\n\n\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t,m('h4'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: var(--orange);\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t, 'Declarations'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,m('hr' + css.m(0) + css`\n\t\t\t\t\t\t\t\t\t\t\tmargin: 0em 0em 0.4em 0em;\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('p'+css`font-size: 1.1em;`, 'I have read and agreed to the following:')\n\t\t\t\t\t\t\t\t\t,m('label.consent-checkbox'\n\t\t\t\t\t\t\t\t\t\t,m('input[type=checkbox]', { name: 'tac', required: true})\n\t\t\t\t\t\t\t\t\t\t, m('a'\n\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\t{ href: marketingURL+'/terms-and-conditions'\n\t\t\t\t\t\t\t\t\t\t\t, target: '_blank'\n\t\t\t\t\t\t\t\t\t\t\t, rel:\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, 'Terms and Conditions '\n\t\t\t\t\t\t\t\t\t\t\t, external\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('label.consent-checkbox'\n\t\t\t\t\t\t\t\t\t\t,m('input[type=checkbox]', { name: 'privacy', required: true})\n\t\t\t\t\t\t\t\t\t\t, m('a'\n\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\t{ href: marketingURL+'/privacy'\n\t\t\t\t\t\t\t\t\t\t\t, target: '_blank'\n\t\t\t\t\t\t\t\t\t\t\t, rel: 'noopener noreferrer'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, 'Privacy Policy '\n\t\t\t\t\t\t\t\t\t\t\t, external\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t, m('button.cta', { type: 'submit' }, 'Submit')\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t}\n\t\t\treturn []\n\t\t}\n\t})\n}\n\nexport default consents","/* globals process, window */\nimport m from 'bacta'\n\nconst APP_VERSION =\n\tprocess.env.APP_VERSION || 'DEV'\n\nexport default function authSuccess({ auth }){\n\n\tauth.stream.filter( x => x._name == 'LoggedIn' ).once().map(\n\t\t({ user_username, user_id }) => {\n\n\t\t\t{\n\t\t\t\tif( typeof trackJs != 'undefined' ){\n\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\tconst t = trackJs\n\n\t\t\t\t\tt.addMetadata(\n\t\t\t\t\t\t\"user_username\", user_username()\n\t\t\t\t\t)\n\n\t\t\t\t\tt.configure({\n\t\t\t\t\t\tuserId: user_id\n\t\t\t\t\t\t,version: APP_VERSION\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst routeBeforeLogout =\n\t\t\t\twindow.localStorage.getItem('route-before-logout')\n\n\t\t\tif (\n\t\t\t\twindow.location.pathname === '/'\n\t\t\t\t|| window.location.pathname.startsWith('/access')\n\t\t\t) {\n\t\t\t\tm.route.set( routeBeforeLogout || '/data/updates')\n\t\t\t}\n\t\t\twindow.localStorage.removeItem('route-before-logout')\n\n\t\t\treturn null\n\t\t}\n\t)\n}","\n\nimport m from 'bacta'\nimport * as R from 'ramda'\nconst parseFloatDec = s => parseFloat(s, 10)\nimport { prop } from '../../../stream'\n\nfunction NumberInput(vnode){\n\tconst { scoped, errors, errorLabel } = vnode.attrs\n\tconst attrs = scoped(R.merge(vnode.attrs,vnode.children[0]))\n const rawTextValue = scoped()\n const valueAsNumber = scoped()\n const el = scoped()\n const valid = scoped()\n\tconst keyStroke = scoped(false)\n\n\tfunction initializeHTML(el){\n\t\tel.value = attrs().prop()\n\t\tif( attrs().attrs.min ){\n\t\t\tel.min = attrs().attrs.min\n\t\t}\n\t\tif( attrs().attrs.step ){\n\t\t\tel.step = attrs().attrs.step\n\t\t}\n\t\tif( attrs().attrs.max ){\n\t\t\tel.max = attrs().attrs.max\n\t\t}\n\t}\n\n const updateHTML =\n\t\tel.map(\n\t\t\tel =>\n\t\t\t\tattrs().prop() != null\n\t\t\t\t// string comparisons could yield errors e.g. \"1.0\" != \"1\"\n\t\t\t\t&& parseFloatDec( el.value )\n\t\t\t\t\t!== parseFloatDec( String(attrs().prop()) )\n\t\t\t\t&& el.validationMessage != ''\n\t\t)\n\n const desiredElValue =\n\t\tprop.merge([el, updateHTML])\n\t\t\t.map(function([el, update]){\n\n\t\t\t\t// we want to detect if the prop value changed without\n\t\t\t\t// the user interacting with the input\n\t\t\t\t// because prop's aren't streams, we can't simply subscribe\n\t\t\t\t// to the prop's changes, so we need to detect the change\n\t\t\t\t// the way we detect the change is:\n\t\t\t\t//\n\t\t\t\t// if the html input value is valid, that means\n\t\t\t\t// we're not currently editing it\n\t\t\t\t// and if the html input value is valid and different to the\n\t\t\t\t// prop that means the prop was update independently of the UI\n\t\t\t\t// (e.g. API call) so we want to update the input to have the\n\t\t\t\t// same data as the database / etc\n\t\t\t\treturn keyStroke()\n\t\t\t\t\t? update\n\t\t\t\t\t\t? el.value\n\t\t\t\t\t\t: attrs().prop()\n\n\t\t\t\t\t: attrs().prop()\n\t\t\t})\n\n\n\tconst inputErrors =\n\t\tprop.dropRepeats(\n\t\t\tel.map((el) => {\n\t\t\t\treturn el.validationMessage\n\t\t\t})\n\t\t)\n\n\tconst errorOutput =\n\t\tinputErrors.map(function(inputErrors){\n\t\t\treturn Object.assign(\n\t\t\t\t{}\n\t\t\t\t,errors()\n\t\t\t\t,{\n\t\t\t\t\t[errorLabel]: inputErrors\n\t\t\t\t}\n\t\t\t)\n\t\t})\n\n\n\t// side effects\n\tprop.merge([valid, rawTextValue, valueAsNumber])\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t.map(function([valid, rawTextValue, valueAsNumber]){\n\t\t\tattrs().prop(\n\t\t\t\t!rawTextValue\n\t\t\t\t\t? 0\n\t\t\t\t\t: valueAsNumber\n\t\t\t)\n\t\t\treturn null\n\t\t})\n\n\tprop.merge([el, desiredElValue])\n\t\t.map(function([el, value]){\n\t\t\tif( el.value != value ){\n\t\t\t\tel.value = value\n\t\t\t}\n\t\t\tkeyStroke( false )\n\t\t\treturn null\n\t\t})\n\n\terrorOutput.map( errors )\n\n\treturn {\n\t\tonupdate: (vnode) => attrs(R.merge(vnode.attrs,vnode.children[0]))\n\t\t,view(){\n\t\t\treturn m(\"input.form-control\" + ( attrs().novalidate ? '' : '.validate')\n\t\t\t\t\t,Object.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toncreate: ({ dom }) => initializeHTML(dom)\n\t\t\t\t\t\t\t,onupdate: ({ dom }) => el(dom)\n\t\t\t\t\t\t\t,oninput: (event) => {\n\t\t\t\t\t\t\t\tconst el = event.currentTarget\n\t\t\t\t\t\t\t\trawTextValue(el.value)\n\t\t\t\t\t\t\t\tvalueAsNumber(el.valueAsNumber)\n\t\t\t\t\t\t\t\tvalid( el.validationMessage == \"\" )\n\t\t\t\t\t\t\t\tkeyStroke( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,type: 'number'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,attrs().attrs || {}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t}\n\t}\n}\n\nNumberInput.legacyRenderProps = true\n\nexport default NumberInput","\nexport default\n xs => xs.length > 1\n ? xs.slice(0, -1).join(', ')\n + ' and '\n + xs.slice(-1)[0]\n : xs[0]\n","/**\n * Formats a database style key to be human readable.\n *\n * e.g. prettyKey('schedule_management') //=> Schedule Management\n */\nexport default function(key=''){\n\treturn key\n\t\t.split('_')\n\t\t.map(\n\t\t\t(k) => k[0].toUpperCase() + k.slice(1)\n\t\t)\n\t\t.join(' ')\n}","\n/* globals setTimeout, clearTimeout */\nimport m from 'bacta'\nimport prettyKey from '../utils/prettyKey'\nimport traverse from 'traverse'\nimport * as R from 'ramda'\nimport css from 'bss'\nimport { prop as Stream } from '../../../stream/index'\nimport * as elements from './elements'\nimport NumberInput from './number'\nconst removeKeysFromJSON = R.replace(/\\\"(\\w|_)+\\\":/g, '')\nconst removeSpecialCharactersFromJSON = R.replace(/\\{|\\[|\\}|\\]|\\\"/g, '')\nconst formatSearchList =\n\tR.pipe(\n\t\tJSON.stringify\n\t\t,R.toLower\n\t\t,removeKeysFromJSON\n\t\t,removeSpecialCharactersFromJSON\n\t\t,R.split(',')\n\t\t,R.unnest\n\t)\n\nconst numberOperators = {\n\t\"is\" : (a,b) => a == b\n\t,\"isn't\" : (a,b) => a != b\n\t, \">\" : (a,b) => a > b\n\t, \"<\" : (a,b) => a < b\n\t, \"≤\" : (a,b) => a <= b\n\t, \"≥\" : (a,b) => a >= b\n}\n\nconst stringOperators = {\n\t\"Contains\" : (a, b) => !b || a && R.toLower(a).indexOf(R.toLower(b)) >= 0\n\t,\"Doesn't Contain\": (a, b) => !b || a && R.toLower(a).indexOf(R.toLower(b)) == -1\n\t,\"Blank\" : (a) => !a\n\t,\"Not Blank\" : (a) => a\n}\n\nconst dateOperators =\n\tR.merge(\n\t\t{\n\t\t\t\"Blank\" : (a) => !a\n\t\t\t,\"Not Blank\" : (a) => a\n\t\t}\n\t\t,numberOperators\n\t)\n\nconst allOperators =\n\tR.merge(\n\t\tnumberOperators\n\t\t,stringOperators\n\t)\n\nconst INDEX_SENTINEL = ''\n\nconst numberInequalities = Object.keys(numberOperators)\nconst stringInequalities = Object.keys(stringOperators)\nconst dateInequalities = Object.keys(dateOperators)\n\nconst renderTimeout = m.prop()\nconst listPotentiallyStale = Stream()\n\nlistPotentiallyStale.map(function(x){\n\tif( x ){\n\t\tclearTimeout( renderTimeout() )\n\t\trenderTimeout(setTimeout(\n\t\t\t() => {\n\t\t\t\tlistPotentiallyStale(false)\n\t\t\t\tm.redraw()\n\t\t\t}\n\t\t\t,300\n\t\t))\n\t}\n\treturn null;\n})\n\n\n\nfunction traversePaths(o, selectedPaths){\n\n\tconst comparison =\n\t\t!selectedPaths\n\t\t\t? R.pipe(R.last, R.test(/\\d/))\n\t\t\t: R.pipe(\n\t\t\t\tR.last\n\t\t\t\t,(a) => !selectedPaths.find((b) => a == b )\n\t\t\t)\n\n\treturn traverse(o).paths()\n\t\t.filter(\n\t\t\tR.complement(\n\t\t\t\tR.anyPass([\n\t\t\t\t\tR.isEmpty\n\t\t\t\t\t,comparison\n\t\t\t\t])\n\t\t\t)\n\t\t)\n}\n\nfunction makeFilterOption(template, filter, changeNames, uniqueArrays){\n\n\tfilter.propCondition().unique(uniqueArrays)\n\n\tconst strip = (key, upgrade) => {\n\t\tconst ugly = upgrade.ugly_name\n\t\tconst start = key.indexOf(ugly)\n\n\t\treturn key.slice(start + ugly.length)\n\t}\n\n\tconst filterOptions =\n\t\ttraversePaths(template)\n\t\t\t.map(function(propPath){\n\t\t\t\tconst x = R.path(propPath, template)\n\t\t\t\tconst key = R.last(propPath)\n\n\t\t\t\tconst propType =\n\t\t\t\t\tArray.isArray(x)\n\t\t\t\t\t\t? 'array'\n\t\t\t\t\t: x == 'date'\n\t\t\t\t\t\t? 'date'\n\t\t\t\t\t\t: typeof x\n\n\t\t\t\tconst prefix =\n\t\t\t\t\tpropType == 'array'\n\t\t\t\t\t\t? 'amount_of_'\n\t\t\t\t\t\t: ''\n\n\t\t\t\tconst upgrade =\n\t\t\t\t\tR.either(\n\t\t\t\t\t\tR.find(\n\t\t\t\t\t\t\tR.both(\n\t\t\t\t\t\t\t\tR.propSatisfies(R.equals(key), 'ugly_name')\n\t\t\t\t\t\t\t\t,R.prop('better_name')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,R.find(\n\t\t\t\t\t\t\tR.propSatisfies(R.contains(R.__, key), 'ugly_name')\n\t\t\t\t\t\t)\n\t\t\t\t\t)(changeNames)\n\n\t\t\t\tconst propName =\n\t\t\t\t\tupgrade\n\t\t\t\t\t\t? upgrade.better_name\n\t\t\t\t\t\t\t? prettyKey(prefix + upgrade.better_name)\n\t\t\t\t\t\t\t: prettyKey(prefix + strip(key, upgrade))\n\t\t\t\t\t\t: prettyKey(prefix+key)\n\n\t\t\t\treturn {\n\t\t\t\t\tpropPath: propPath\n\t\t\t\t\t,propName: propName\n\t\t\t\t\t,propType: propType\n\t\t\t\t}\n\t\t\t})\n\t\t\t.map(\n\t\t\t\tR.evolve({\n\t\t\t\t\tpropPath: R.map(R.replace(/0/g, INDEX_SENTINEL))\n\t\t\t\t})\n\t\t\t)\n\t\t\t.map( R.map(m.prop) )\n\n\treturn { filterOptions }\n}\n\n// todo-james assumes there's only 1 filter view at a time\n// ( which I think is fine? )\nconst totalReturned = m.prop(0)\nconst totalSearched = m.prop(0)\n\nfunction filterView(\n\ttemplate\n\t, filters\n\t, changeNames\n\t, uniqueArrays\n\t, intialDisabled\n\t, marker\n\t, scoped\n){\n\n\tconst generatedElements = []\n\tconst newFilter = {\n\t\tobjProp: m.prop(null)\n\t\t,propName: m.prop(null)\n\t\t,propValue: m.prop(null)\n\t\t,propType: m.prop(null)\n\t\t,propCondition: m.prop({\n\t\t\tequality: m.prop(null)\n\t\t\t,unique: m.prop(null)\n\t\t})\n\t\t,propInclusive: m.prop(filters.length == 0 ? 'Or' : 'And' )\n\t\t,sortName: m.prop(null)\n\t\t,sortobjProp: m.prop(null)\n\t\t,sortActivate: m.prop(false)\n\t}\n\tfilters.length == 0 ? filters.push(newFilter) : null\n\n\tfilters.forEach(function(filter, index){\n\n\t\tlet Afilter = []\n\t\tif (index == 0){\n\t\t\tfilter.propType(\"search\")\n\t\t\tfilter.objProp({\n\t\t\t\tpropType: m.prop(\"search\")\n\t\t\t})\n\t\t\tAfilter.push(m('h4', 'Search '))\n\t\t\tAfilter.push(\n\t\t\t\telements.textInput(\n\t\t\t\t\tfilter.propValue\n\t\t\t\t\t, {autofocus: true}\n\t\t\t\t)\n\t\t\t)\n\t\t\tAfilter.push(\n\t\t\t\tm(`button.btn.btn-secondary`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\tborder: solid 1px;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\twidth: 5em;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t, {\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tfilter.propValue(null)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled: !filter.propValue()\n\t\t\t\t\t}\n\t\t\t\t,\"Clear\")\n\t\t\t)\n\n\t\t\tAfilter.push(\n\t\t\t\tm(`button.btn.btn-secondary`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\tborder: solid 1px;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\twidth: 5em;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t, {\n\t\t\t\t\t\tdisabled: intialDisabled()\n\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t: filters.length == 1 ? false\n\t\t\t\t\t\t\t: filters[filters.length - 1] == null ? true\n\t\t\t\t\t\t\t: filters[filters.length - 1].propValue() == null\n\t\t\t\t\t\t\t&& filters[filters.length - 1].propType() != 'date'\n\t\t\t\t\t\t\t|| filters[filters.length - 1].propType() == 'date'\n\t\t\t\t\t\t\t&& filters[filters.length - 1].propValue() == null\n\t\t\t\t\t\t\t&& filters[filters.length - 1].propCondition().equality() != 'Blank'\n\t\t\t\t\t\t\t&& filters[filters.length - 1].propCondition().equality() != 'Not Blank'\n\t\t\t\t\t\t\t? true : false\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tfilters.push(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tobjProp: m.prop(null)\n\t\t\t\t\t\t\t\t\t,propName: m.prop(null)\n\t\t\t\t\t\t\t\t\t,propValue: m.prop(null)\n\t\t\t\t\t\t\t\t\t,propType: m.prop(null)\n\t\t\t\t\t\t\t\t\t,propCondition: m.prop({\n\t\t\t\t\t\t\t\t\t\tequality: m.prop(null)\n\t\t\t\t\t\t\t\t\t\t,unique: m.prop(null)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,propInclusive: m.prop(filters.length == 0 ? 'Or' : 'And' )\n\t\t\t\t\t\t\t\t\t,sortName: m.prop(null)\n\t\t\t\t\t\t\t\t\t,sortobjProp: m.prop(null)\n\t\t\t\t\t\t\t\t\t,sortActivate: m.prop(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: filterTitle(marker)\n\t\t\t\t}, \"+ Filter\")\n\t\t\t)\n\n\t\t\tAfilter.push(\n\t\t\t\tm('label.control-label', {\n\t\t\t\t\toncreate({ dom: el }){\n\t\t\t\t\t\tsetTimeout(function(){\n\n\t\t\t\t\t\t\tel.innerText = totalReturned()\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}, totalReturned() )\n\t\t\t\t, ' of '\n\t\t\t\t,m('label.control-label', totalSearched() )\n\t\t\t)\n\n\t\t} else {\n\t\t\tlet options = makeFilterOption(template, filter, changeNames, uniqueArrays)\n\t\t\tlet filterOptions = options.filterOptions\n\t\t\tindex > 0 && Afilter.push(elements.select(['And','Or'], filter.propInclusive ))\n\n\t\t\tAfilter.push(\n\t\t\t\telements.objectSelect({\n\t\t\t\t\tlist: filterOptions\n\t\t\t\t\t, key: 'propName'\n\t\t\t\t\t, prop: filter.propName\n\t\t\t\t\t, objProp: filter.objProp\n\t\t\t\t})\n\t\t\t)\n\n\t\t\tif (filter.objProp() != null){\n\n\t\t\t\tfilter.propCondition().equality()\n\t\t\t\t\t? null\n\t\t\t\t\t: filter.objProp().propType() == \"string\"\n\t\t\t\t\t\t? filter.propCondition().equality('Contains')\n\t\t\t\t\t\t: filter.propCondition().equality('is')\n\n\n\n\t\t\t\tfilter.propValue(\n\t\t\t\t\tfilter.objProp().propType() == \"date\"\n\t\t\t\t\t? filter.propValue() // new Date()\n\t\t\t\t\t: filter.propType() == filter.objProp().propType()\n\t\t\t\t\t? filter.propValue()\n\t\t\t\t\t: null\n\t\t\t\t)\n\n\t\t\t\t// If its a string, generate text box\n\t\t\t\tif (filter.objProp().propType() == \"string\" ){\n\n\t\t\t\t\tfilter.propType(\"string\")\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\telements.select(\n\t\t\t\t\t\t\tstringInequalities\n\t\t\t\t\t\t\t,(a) => {\n\t\t\t\t\t\t\t\tif (a){\n\t\t\t\t\t\t\t\t\ta == 'Blank' || a == 'Not Blank'\n\t\t\t\t\t\t\t\t\t\t? filter.propValue('')\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\tfilter.propCondition().equality(a)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn filter.propCondition().equality()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\tfilter.propValue\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// If its a date\n\t\t\t\tif (filter.objProp().propType() == \"date\" ){\n\t\t\t\t\tfilter.propType(\"date\")\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\telements.select(\n\t\t\t\t\t\t\tdateInequalities\n\t\t\t\t\t\t\t, filter.propCondition().equality\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\tif(\n\t\t\t\t\t\t!['Blank', 'Not Blank']\n\t\t\t\t\t\t\t.includes(\n\t\t\t\t\t\t\t\tfilter.propCondition().equality()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t){\n\t\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\t\telements.dateInput( filter.propValue )\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// If its a number, generate number input box\n\t\t\t\tif (filter.objProp().propType() == \"number\" ){\n\t\t\t\t\tfilter.propType(\"number\")\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\telements.select(\n\t\t\t\t\t\t\tnumberInequalities\n\t\t\t\t\t\t\t, filter.propCondition().equality\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tscoped\n\t\t\t\t\t\t\t\t\t,errors: m.prop({})\n\t\t\t\t\t\t\t\t\t,errorLabel: filter.objProp().propName()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: filter.propValue\n\t\t\t\t\t\t\t\t,attrs: {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// If its a boolean, generate checkbox box\n\t\t\t\tif (filter.objProp().propType() == \"boolean\" ){\n\t\t\t\t\tfilter.propType(\"boolean\")\n\t\t\t\t\tfilter.propValue(\n\t\t\t\t\t\tfilter.propValue() == null\n\t\t\t\t\t\t\t? filter.propValue(true)\n\t\t\t\t\t\t\t: filter.propValue()\n\t\t\t\t\t)\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,'Yes or No'\n\t\t\t\t\t\t\t,elements.checkbox({\n\t\t\t\t\t\t\t\tonchange: m.withAttr('checked', filter.propValue)\n\t\t\t\t\t\t\t\t,checked: filter.propValue()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// If its an array, generate array number box\n\t\t\t\tif ( filter.objProp().propType() == \"array\" ){\n\t\t\t\t\tfilter.propType(\"array\")\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\telements.select(\n\t\t\t\t\t\t\tnumberInequalities\n\t\t\t\t\t\t\t, filter.propCondition().equality\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tAfilter.push(\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tscoped\n\t\t\t\t\t\t\t\t,errors: m.prop({})\n\t\t\t\t\t\t\t\t,errorLabel: filter.objProp().propName()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: filter.propValue\n\t\t\t\t\t\t\t\t,attrs: {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tAfilter.push(\n\t\t\t\telements.xRemoval({\n\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\tfilters.splice(index, 1)\n\t\t\t\t\t\tgeneratedElements.splice(index, 1)\n\t\t\t\t\t}\n\t\t\t\t\t,title: 'Remove filter from search.'\n\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t\tconst newfilter = elements.list(Afilter)\n\t\tgeneratedElements.push(newfilter)\n\t})\n\n\tfunction modifyHandler(vnode){\n\t\tif( vnode.tag in { input: 1, select: 1 } ){\n\t\t\tconst oldChange = vnode.attrs.oninput\n\t\t\treturn Object.assign(vnode.attrs, {\n\t\t\t\toninput: oldChange\n\t\t\t\t\t? e => {\n\t\t\t\t\t\tlistPotentiallyStale(true)\n\t\t\t\t\t\treturn oldChange(e)\n\t\t\t\t\t}\n\t\t\t\t\t: () => {\n\t\t\t\t\t\tlistPotentiallyStale(true)\n\t\t\t\t\t}\n\t\t\t})\n\t\t} else if( vnode.children ) {\n\t\t\treturn [].concat(vnode.children).forEach(modifyHandler)\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\n\t}\n\tconst generatedFilterView = {\n\t\tgeneratedElements: generatedElements.map( R.tap( modifyHandler))\n\t\t, filters: filters\n\t}\n\treturn generatedFilterView\n}\n\n\nconst validValue = (str, type) => str != null || type == \"string\" || type == \"date\"\nconst words = phrase => String(phrase).toLowerCase().split(/\\s+/).filter(Boolean)\nconst searchingObject = filterValue => {\n\tconst filterWords =\n\t\tvalidValue(filterValue)\n\t\t\t? words(filterValue)\n\t\t\t: []\n\n\treturn filterValue\n\t\t? (itemValue) => {\n\t\t\tconst itemWords = words(itemValue)\n\t\t\treturn filterWords.every(\n\t\t\t\t filterWord => itemWords.some( itemWord => itemWord.startsWith(filterWord))\n\t\t\t)\n\t\t}\n\t\t: () => true\n}\n\nfunction searchingObjects(itemValues, filterValue){\n\treturn itemValues\n\t\t.find(searchingObject(filterValue) )\n}\n\nfunction checkSearchItem(item, f){\n\tconst itemValues = formatSearchList( item )\n\tconst filterValue = f.propValue()\n\treturn searchingObjects(itemValues, filterValue)\n}\n\nfunction checkSpinItem(item, f){\n\tconst type = f.objProp().propType()\n\tconst filterValue = f.propValue()\n\tconst operator = allOperators[f.propCondition().equality()]\n\n\tconst path = f.objProp().propPath()\n\tconst uniqurArray =\n\t\tf.propCondition().unique().find(\n\t\t\t(u) => u.array_name == path.slice(\n\t\t\t\tpath.lastIndexOf('') + 1, path.length\n\t\t\t)\n\t\t)\n\n\tconst uniqueCondition = !uniqurArray\n\t\t? null\n\t\t: uniqurArray.unique\n\n\treturn spinCycle(\n\t\tpath\n\t\t,item\n\t\t,type\n\t\t,filterValue\n\t\t,operator\n\t\t,uniqueCondition\n\t)\n}\n\nconst partitionActiveFilters =\n\tR.pipe(\n\t\tR.filter( (f) => validValue(f.propValue(), f.propType()) )\n\t\t,R.partition(f => f.propInclusive() == 'And')\n\t)\n\nconst eitherProp = (key) =>\n\tR.pipe(\n\t\tR.prop(key)\n\t\t,R.when(R.is(Function), (p) => p())\n\t)\n\nfunction ListProcessing(list=[], filters, sortfield, returnContainer){\n\tconst filteredList =\n\t\tlist.filter(function(item){\n\n\t\t\tconst [searchFilter, ...spinFilters] = filters\n\n\t\t\tconst searchResult =\n\t\t\t\t!searchFilter || !searchFilter.propValue()\n\t\t\t\t\t? true\n\t\t\t\t\t: checkSearchItem(item, searchFilter)\n\n\t\t\tconst [ands, ors] =\n\t\t\t\tsearchResult\n\t\t\t\t? partitionActiveFilters(spinFilters)\n\t\t\t\t: [[],[]]\n\n\t\t\tconst andResult =\n\t\t\t\tsearchResult\n\t\t\t\t&& ands.every(function(f){\n\t\t\t\t\treturn checkSpinItem(item, f)\n\t\t\t\t})\n\n\t\t\tconst orResult =\n\t\t\t\tandResult\n\t\t\t\t|| ors.some(function(f){\n\t\t\t\t\treturn checkSpinItem(item, f)\n\t\t\t\t})\n\n\t\t\treturn orResult\n\t\t})\n\n\tconst sort =\n\t\tR.ifElse(\n\t\t\t() => sortfield == null\n\t\t\t,R.identity\n\t\t\t,R.sortBy(\n\t\t\t\tR.pipe(\n\t\t\t\t\teitherProp(sortfield)\n\t\t\t\t\t,R.ifElse(\n\t\t\t\t\t\tR.is(String)\n\t\t\t\t\t\t,R.toLower\n\t\t\t\t\t\t,R.identity\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tif ( filters.length ){\n\t\ttotalReturned(filteredList.length)\n\t\ttotalSearched(list.length)\n\t\treturnContainer\n\t\t\t? returnContainer(filteredList)\n\t\t\t: null\n\t} else if( returnContainer ){\n\t\treturnContainer([])\n\t}\n\n\n\treturn sort(filteredList)\n}\n\n\nfunction spinCycle(\n\ttemplatePath\n\t,item\n\t,type\n\t,filterValue\n\t,operator\n\t,uniqueConditionKey\n){\n\tconst f =\n\t\ttype == 'boolean'\n\t\t\t? (a,b) => b == a\n\t\t\t: operator\n\n\tconst callIfProp =\n\t\t\tR.ifElse(\n\t\t\t\tR.is(Function)\n\t\t\t\t,p => p()\n\t\t\t\t,R.identity\n\t\t\t)\n\n\tconst getProp = key =>\n\t\tR.pipe(\n\t\t\tR.prop(key)\n\t\t\t,callIfProp\n\t\t)\n\n\treturn traversePaths(\n\t\t\titem\n\t\t\t,templatePath\n\t\t)\n\t\t.map(function(itemPath){\n\t\t\treturn callIfProp(R.path(itemPath, item))\n\t\t})\n\t\t.map(function(itemValue){\n\t\t\treturn type == 'date'\n\t\t\t|| type == R.toLower(R.type(itemValue))\n\t\t\t?\t\ttype == 'array'\n\t\t\t\t\t? uniqueConditionKey\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\tR.uniqBy( getProp(uniqueConditionKey), itemValue).length\n\t\t\t\t\t\t\t, filterValue\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: [itemValue.length, filterValue]\n\t\t\t\t\t: type == 'date'\n\t\t\t\t\t\t? [itemValue, filterValue]\n\t\t\t\t\t\t\t.map( v => v ? new Date(v).setHours(0,0,0,0) : null\t)\n\t\t\t\t\t: [itemValue, filterValue]\n\n\t\t\t:[false, true]\n\t\t})\n\t\t.find( R.apply(f) )\n}\n\nlet FilterInterface = {\n\t/** Maps database property names to names meant to be read by a user */\n\tchangeNames : [{ ugly_name: String(), better_name: String() }]\n\n\t,uniqueArrays : [{\n\t\t/** The name of the array on the containing object */\n\t\tarray_name: String()\n\n\t\t/** The key to be used to determine if the item is unique */\n\t\t,unique: String()\n\t}]\n\n\t/** An object that defines the types and shape of the raw data so a form can be generated */\n\t,template : Object()\n\n\t/** Human readable label for the filter */\n\t,marker : String()\n\n\t/** m.prop([]) */\n\t,filters : () => []\n\n\t/** A list of headings to be used when displaying the filtered items */\n\t,tableHeadings: [String()]\n\n\t/** Dynamically grab the list to be filtered at run time */\n\t,resources: () => []\n\n\t/** Converts a resource into a mithril table row */\n\t,resourceView: () => null\n\n\t/** The property ListProcessing will use to sort your resources before rendering them */\n\t,sortField: String()\n}\n\nfunction getFilters(filter){\n\treturn filterView(\n\t\tfilter.template\n\t\t, filter.filters()\n\t\t, filter.changeNames\n\t\t, filter.uniqueArrays\n\t\t, filter.disabled\n\t\t, filter.marker\n\t\t, filter.scoped\n\t)\n}\n\nfunction FilterInputs({ attrs: filter=FilterInterface }){\n\n\n\tfunction view(){\n\t\t//assumes filters as already been refresh by FilterButton\n\t\treturn m('div.filtered-items',\n\t\t\tgetFilters(filter).generatedElements || null\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction FilterButton({ attrs: filter=FilterInterface }){\n\n\tfunction addNewEmptyFilter(){\n\t\t//triggers creation of a new filter object\n\t\tfilter.filters().push(null)\n\n\t\t//add the new filters to our list\n\t\tfilter.filters(getFilters(filter).filters)\n\t}\n\n\tfunction view(){\n\n\t\tlet last_filter = R.last(filter.filters())\n\t\tlet filter_created_but_empty =\n\t\t\t\tlast_filter\n\t\t\t\t&& !last_filter.propValue()\n\t\t\t\t&& filter.filters().length > 1\n\n\t\treturn m(`button`\n\t\t+ css`\n\t\t\tbackgroundColor: transparent;\n\t\t\tborder: solid 1px;\n\t\t\tposition: relative;\n\t\t\theight: 2.5em;\n\t\t\twidth: 5em;\n\t\t`\n\t\t.$hover(`\n\t\t\topacity: 0.8;\n\t\t`)\n\t\t.$active(`\n\t\t\topacity: 0.5;\n\t\t`)\n\t\t,{\n\t\t\tdisabled:\n\t\t\t\tfilter.disabled()\n\t\t\t\t|| filter_created_but_empty\n\n\t\t\t,onclick: addNewEmptyFilter\n\t\t\t,title: filterTitle(filter.marker)\n\n\t\t}, '+ Filter')\n\t}\n\n\treturn { view }\n}\n\n// function FilterTable({ attrs: filter=FilterInterface }){\n\n// \tfunction view(){\n// \t\tlet processed = ListProcessing(filter.resources(), filter.filters(), filter.sortField )\n\n// \t\treturn elements.table(data,\n// \t\t\tfilter.tableHeadings,\n// \t\t\tprocessed.map(filter.resourceView)\n// \t\t)\n// \t}\n\n// \treturn { view }\n// }\n\nfunction filterTitle(marker){\n\treturn \"Focus or zoom into a specific subset\"\n\t\t+ \" to find the finer details in your \"\n\t\t+ marker+\"s.\"\n\t\t+ \" Add multiple conditions to better your focus\"\n}\n\nconst component = {\n\tFilterInputs\n\t,FilterButton\n\t,ListProcessing\n\t,filterView\n\t,filterTitle\n}\n\nexport default component\nexport {\n\tFilterInputs\n\t,FilterButton\n\t,ListProcessing\n\t,filterView\n\t,filterTitle\n}","/* globals process */\n// @ts-ignore\nimport m from 'bacta'\n// @ts-ignore\nimport * as R from 'ramda'\nimport { prop } from '../../../stream/index'\n// @ts-ignore\nimport css from 'bss'\n\nconst TRANSLOADIT_TEMPLATE = process.env.TRANSLOADIT_TEMPLATE\nconst TRANSLOADIT_AUTH_KEY = process.env.TRANSLOADIT_AUTH_KEY\n\n\nfunction Uppy({\n\tattrs: {\n\t\tuppy: options\n\t\t,Transloadit: transloaditOptions\n\t\t,UppyDashboard: dashboardOptions\n\t\t,data\n\t\t,instance=()=>{}\n\t}\n}){\n\n\tconst Uppy = prop()\n\tconst domNodeRendered = prop()\n\n\tprop.merge([\n\t\tUppy\n\t\t,domNodeRendered\n\t])\n\t.map(\n\t\t([Uppy, target]) => {\n\t\t\tlet uppy =\n\t\t\t\tUppy.Core(R.merge({ id: target }, options))\n\t\t\t\t.use(Uppy.Transloadit, R.merge(transloaditOptions, { target }))\n\t\t\t\t.use(Uppy.Dashboard, R.merge(dashboardOptions, { target }))\n\n\t\t\tinstance(uppy)\n\n\t\t\tif( data.features().uppyWebcam ) {\n\t\t\t\tuppy.use(Uppy.Webcam, {\n\t\t\t\t\ttarget: Uppy.Dashboard\n\t\t\t\t\t,facingMode: 'environment'\n\t\t\t\t\t,mirror: false\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif( data.features().uppyGoogleDrive ) {\n\t\t\t\tuppy.use(Uppy.GoogleDrive\n\t\t\t\t\t,{ target: Uppy.Dashboard\n\t\t\t\t\t, companionUrl: 'https://companion.uppy.io'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif( data.features().uppyDropbox ) {\n\t\t\t\tuppy.use(Uppy.Dropbox\n\t\t\t\t\t,{ target: Uppy.Dashboard\n\t\t\t\t\t, companionUrl: 'https://companion.uppy.io'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn null\n\t\t}\n\t)\n\n\tconst src =\n\t\t'https://transloadit.edgly.net/releases/uppy/v1.7.0/uppy.min.js'\n\n\treturn {\n\t\tonremove: () => Uppy.end(true)\n\t\t,view(){\n\t\t\treturn data.features().uppy\n\t\t\t? m(\n\t\t\t\t'.uppy'\n\t\t\t\t+ css`\n\t\t\t\t\tmin-height: 248px;\n\t\t\t\t\topacity: 0;\n\t\t\t\t`\n\t\t\t\t.$animate('ease-in-out 1s 1s forwards', {\n\t\t\t\t\tfrom: 'o 0'\n\t\t\t\t\t,to: 'o 1'\n\t\t\t\t})\n\t\t\t\t,m('script',\n\t\t\t\t\t{ src\n\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t, onload: () => Uppy(window.Uppy)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t,m('',\n\t\t\t\t\t{ oncreate: ({ dom }) => domNodeRendered(dom)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t: m('.uppy')\n\t\t}\n\t}\n}\n\n\nconst simple = ({\n\tdata\n\t, getFields\n\t, instance\n\t, width=300\n\t, height=250\n\t, uppy={}\n}) =>\n\tm(Uppy, {\n\t\tuppy: Object.assign({\n\t\t\tautoProceed: false\n\t\t\t,allowMultipleUploads: true\n\t\t\t,restrictions: {\n\t\t\t\tmaxNumberOfFiles: 50\n\t\t\t}\n\t\t}, uppy)\n\t\t,Transloadit:{\n\t\t\twaitForEncoding: true\n\t\t\t,waitForMetadata: true\n\t\t\t,getAssemblyOptions(){\n\t\t\t\treturn data.api.files.getTransLoaditSignature({\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tauth: {\n\t\t\t\t\t\t\tkey: TRANSLOADIT_AUTH_KEY\n\t\t\t\t\t\t\t,expires:\n\t\t\t\t\t\t\t\tnew Date(\n\t\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t\t\t+ 60 * 5 * 1000\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.toISOString()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, template_id: TRANSLOADIT_TEMPLATE\n\t\t\t\t\t}\n\t\t\t\t\t, fields: getFields()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t,UppyDashboard: {\n\t\t\tautoProceed: false\n\t\t\t,id: 'Dashboard'\n\t\t\t,target: 'body'\n\t\t\t,metaFields: []\n\t\t\t//,plugins: ['Webcam', 'Transloadit', 'FileInput']\n\t\t\t,trigger: '#uppy-select-files'\n\t\t\t,inline: true\n\t\t\t,proudlyDisplayPoweredByUppy: false\n\t\t\t,width\n\t\t\t,height\n\t\t\t,showProgressDetails: true\n\t\t\t,thumbnailWidth: 40\n\t\t}\n\t\t,data\n\t\t,instance\n\t}\n)\n\n\nexport default {\n\tUppy, simple\n}","/* globals console, setTimeout */\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport Uppy from './uppy'\nimport * as uuid from 'uuid'\nimport css from 'bss'\nimport moment from 'moment'\n\nfunction diffFields(a,b){\n\treturn !R.equals(a,b)\n}\n\nconst hideScrollbars =\n css`\n -ms-overflow-style: none;\n scrollbar-width: none;\n `\n .$nest('::-webkit-scrollbar', `\n display: none;\n `)\n\nconst image_exts = ['jpg', 'jpeg', 'png', 'gif']\n\n/**\n * files = List of Harth files\n * data = Harth data object, for API access\n * embedded = Do not create the white area\n * listOnly = Do not show the uploader\n * readOnly = No Delete Action\n */\nfunction MiniGallery(){\n\treturn {\n\t\tview({ attrs: { files, data, listOnly, readOnly, embedded, download } }){\n\t\t\treturn m('.mini-gallery'\n\t\t\t\t+ hideScrollbars\n\t\t\t\t+ (embedded ? '.embedded' : '')\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t--width: 5.7em;\n\t\t\t\t\tbackground-color: #fafafa;\n\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\tborder: 1px solid #eaeaea;\n\t\t\t\t\tgap: 0.3em;\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tcursor: default;\n\n\t\t\t\t\tmax-height: 18.1em;\n\t\t\t\t\toverflow-y: auto;\n\t\t\t\t`\n\t\t\t\t.$nest('&.embedded', `\n\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\tpadding: 0em;\n\t\t\t\t\tborder: none;\n\t\t\t\t`)\n\t\t\t\t.$nest('&.embedded .file', `\n\t\t\t\t\tmargin: 0em;\n\t\t\t\t\tborder: none;\n\t\t\t\t`)\n\t\t\t\t.$animate('ease-in-out 1s 1s forwards', {\n\t\t\t\t\tfrom: 'o 0'\n\t\t\t\t\t,to: 'o 1'\n\t\t\t\t})\n\t\t\t\t.$nest('.file',\n\t\t\t\t\tcss`\n\t\t\t\t\t\twidth: var(--width);\n\t\t\t\t\t\theight: var(--width);\n\t\t\t\t\t\tmin-height: var(--width);\n\t\t\t\t\t\tbackground-size: cover;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\tborder: solid 1px #EEE;\n\t\t\t\t\t\tbackground-color: #EEE;\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\tposition: relative;\n\n\t\t\t\t\t\tmargin: ${ listOnly ? '0.5em' : '0em' };\n\t\t\t\t\t`\n\t\t\t\t\t.$nest('*', `\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t`)\n\t\t\t\t\t.$animate('ease-in-out 1s 2s forwards',{\n\t\t\t\t\t\tfrom: 'o 0%'\n\t\t\t\t\t\t,to: 'o 100%'\n\t\t\t\t\t})\n\t\t\t\t\t.$hover(\n\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\topacity: 0.9;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$media('(hover: hover)', `\n\t\t\t\t\t\t\ttransform: scale(0.95);\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t.$nest('.actions',\n\t\t\t\t\t\t\tcss.$animate('ease-in-out 0.1s forwards', {\n\t\t\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\t\t\topacity: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,to: {\n\t\t\t\t\t\t\t\t\topacity: 1\n\t\t\t\t\t\t\t\t\t,pointerEvents: 'inherit'\n\t\t\t\t\t\t\t\t\t,cursor: 'pointer'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.$nest('.action:hover', `\n\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t`)\n\t\t\t\t.$nest('.action.disabled:hover', `\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t`)\n\t\t\t\t.$nest('&&& .file:hover .ext', `\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tanimation: none;\n\t\t\t\t`)\n\t\t\t\t,(\n\t\t\t\t\tdownload && files.length\n\t\t\t\t\t? [{\n\t\t\t\t\t\tzipRequest: true\n\t\t\t\t\t\t,file_ext:\n\t\t\t\t\t\t\tdownload.reference.zip_error\n\t\t\t\t\t\t\t? 'Error'\n\t\t\t\t\t\t\t: download.reference.is_zip_processing\n\t\t\t\t\t\t\t? 'Processing'\n\t\t\t\t\t\t\t: Date.now() - new Date(download.reference.latest_zip_date ) < 60 * 60 * 1000\n\t\t\t\t\t\t\t? 'Completed'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,file_date: moment(download.reference.latest_zip_date).fromNow()\n\t\t\t\t\t\t,file_url: download.reference.latest_zip_url\n\n\t\t\t\t\t\t,file_thumbnail_url:\n\t\t\t\t\t\t\t'../assets/icons8-download.gif'\n\t\t\t\t\t\t,file_thumb_url:\n\t\t\t\t\t\t\t'../assets/icons8-download.gif'\n\t\t\t\t\t\t,mithrilKey: 'zip-indicator'\n\t\t\t\t\t}]\n\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t\t.concat(files)\n\t\t\t\t.map( x =>\n\t\t\t\t\tm('.file'\n\t\t\t\t\t\t+ '.'+x.file_id\n\t\t\t\t\t\t,\n\t\t\t\t\t\t{ style:\n\t\t\t\t\t\t\t{ backgroundImage:\n\t\t\t\t\t\t\t\t!image_exts.includes(x.file_ext)\n\t\t\t\t\t\t\t\t? `url(\"${\n\t\t\t\t\t\t\t\t\tx.file_thumbnail_url\n\t\t\t\t\t\t\t\t}\")`\n\n\t\t\t\t\t\t\t\t: `url(\"${\n\t\t\t\t\t\t\t\t\tx.file_thumb_url\n\t\t\t\t\t\t\t\t}\")`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, key: x.mithrilKey || x.file_id || x.file_url\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, m('.overlay'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tmin-width: 100%;\n\t\t\t\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\t\t\t\tbackground-color: black;\n\t\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\ttop: 0px;\n\t\t\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\t\t\topacity: ${\n\t\t\t\t\t\t\t\t\tx.file_deleted_at != null\n\t\t\t\t\t\t\t\t\t\t? 0.8\n\t\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttransition: 2s;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,x.zipRequest && ['Processing', 'Completed', 'Error'].includes(x.file_ext)\n\t\t\t\t\t\t? m('.ext'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\ttop: -4px;\n\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\tbackground-color: ${x.file_ext == 'Error' ? 'red' : 'black'};\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tpadding: 0.2em 0.5em;\n\t\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\t\tanimation: bdcmli51 ease-in-out 1s forwards;\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\t\t\t\theight: 2em;\n\t\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.$animate('ease-in-out 1s forwards', {\n\t\t\t\t\t\t\t\tfrom: 'o 0'\n\t\t\t\t\t\t\t\t,to: 'o 1'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t, x.file_ext\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: (!image_exts.includes(x.file_ext) || x.file_deleted_at)\n\t\t\t\t\t\t\t&& !x.zipRequest\n\t\t\t\t\t\t\t&& m('.ext'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\tleft: -4px;\n\t\t\t\t\t\t\t\t\ttop: -4px;\n\t\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\t\tbackground-color: black;\n\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\tpadding: 0.2em 0.5em;\n\t\t\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$animate('ease-in-out 1s forwards', {\n\t\t\t\t\t\t\t\t\tfrom: 'o 0'\n\t\t\t\t\t\t\t\t\t,to: 'o 1'\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t, x.file_deleted_at\n\t\t\t\t\t\t\t\t\t? 'Deleted'\n\t\t\t\t\t\t\t\t\t: x.file_ext\n\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t, m('.actions'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 0px;\n\t\t\t\t\t\t\t\tbackground-color: rgba(0,0,0,0.8)\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-rows: ${\n\t\t\t\t\t\t\t\t\t(x.file_deleted_at || readOnly)\n\t\t\t\t\t\t\t\t\t? `1fr`\n\t\t\t\t\t\t\t\t\t: `1fr 1fr`\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tgap: 0.1em;\n\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\talign-items: space-evenly;\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\tpointer-events: none;\n\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.$nest('.action',`\n\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.action:hover', `\n\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t,x.file_deleted_at != null\n\t\t\t\t\t\t\t\t|| (!x.zipRequest || x.zipRequest && x.file_url)\n\t\t\t\t\t\t\t\t&& m('a.action'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t\t\t\t\tpointer-events: all;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$nest('visited', `\n\t\t\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t{ href: x.zipRequest ? x.file_url : `/data/files/${data.organization_id()}/view/${x.file_id}`\n\t\t\t\t\t\t\t\t\t, target: '_blank'\n\t\t\t\t\t\t\t\t\t, rel: 'noopener noreferrer'\n\t\t\t\t\t\t\t\t\t, title: 'Created ' + x.file_date\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, x.zipRequest && x.file_url\n\t\t\t\t\t\t\t\t\t? Date.now() - new Date(download.reference.latest_zip_date) < 30_000\n\t\t\t\t\t\t\t\t\t\t? 'Latest'\n\t\t\t\t\t\t\t\t\t\t: 'Previous'\n\t\t\t\t\t\t\t\t\t: 'View'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, x.file_deleted_at != null\n\t\t\t\t\t\t\t\t|| !readOnly\n\t\t\t\t\t\t\t\t&& (!x.zipRequest || x.file_id != 'Processing')\n\t\t\t\t\t\t\t\t&& m('.action'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tpointer-events: all;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tdownload && download.reference.is_zip_processing ? '.disabled' : ''\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t{ onclick:\n\t\t\t\t\t\t\t\t\t\tdownload && download.reference.is_zip_processing\n\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t: x.zipRequest\n\t\t\t\t\t\t\t\t\t\t? async () => {\n\t\t\t\t\t\t\t\t\t\t\tdownload.reference.is_zip_processing = true\n\t\t\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\t\t\tawait download.request()\n\t\t\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: () => {\n\t\t\t\t\t\t\t\t\t\t\tx._loading = Date.now()\n\t\t\t\t\t\t\t\t\t\t\treturn data.api.files.DELETE([x])\n\t\t\t\t\t\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => x.file_deleted_at = Date.now()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t.finally(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => x._loading = false\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t.finally(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => m.redraw()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, disabled: x._loading\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, x.zipRequest && download.reference.is_zip_processing\n\t\t\t\t\t\t\t\t\t? 'Processing'\n\t\t\t\t\t\t\t\t\t: x.zipRequest && download.reference.zip_error\n\t\t\t\t\t\t\t\t\t? 'Retry?'\n\t\t\t\t\t\t\t\t\t: x.zipRequest && x.file_url\n\t\t\t\t\t\t\t\t\t? 'New Zip'\n\t\t\t\t\t\t\t\t\t: x.zipRequest\n\t\t\t\t\t\t\t\t\t? 'Create Zip'\n\t\t\t\t\t\t\t\t\t: 'Delete'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, x.file_deleted_at != null\n\t\t\t\t\t\t\t\t&& !readOnly\n\t\t\t\t\t\t\t\t&& m('.action'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tpointer-events: all;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t{ onclick(){\n\t\t\t\t\t\t\t\t\t\tx._loading = Date.now()\n\t\t\t\t\t\t\t\t\t\tdata.api.files.UNDELETE([x])\n\t\t\t\t\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t\t\t\t\t() => delete x.file_deleted_at\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.finally(\n\t\t\t\t\t\t\t\t\t\t\t\t() => x._loading = false\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.finally(\n\t\t\t\t\t\t\t\t\t\t\t\t() => m.redraw()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled: x._loading\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Restore'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunction Main({ attrs }){\n\tlet prevFields = attrs.getFields()\n\tlet loading = true\n\tlet files = []\n\tlet uppy;\n\n\tconst syncFiles = (fks) => {\n\t\treturn attrs.data.api.files.LIST(fks)\n\t\t\t.then( xs => files = xs, console.error )\n\t\t\t.finally( () => loading = false )\n\t\t\t.then( () => m.redraw() )\n\t}\n\n\tsyncFiles(prevFields)\n\n\tfunction view({ attrs }){\n\t\tconst {\n\t\t\tgetFields, data, listOnly\n\t\t\t,width=300\n\t\t\t,height=250\n\t\t\t,download\n\t\t} = attrs\n\n\t\tconst nextFields = getFields()\n\n\t\tconst fieldsChanged = diffFields( prevFields, nextFields )\n\n\t\tif(!loading && fieldsChanged) {\n\t\t\t// re-fetch list, reset uppy, clear deleted files\n\t\t\tfiles = []\n\t\t\tsyncFiles(nextFields)\n\t\t\t.then(\n\t\t\t\t() => uppy && uppy.setState({ files: {} })\n\t\t\t)\n\t\t}\n\t\tprevFields = nextFields\n\n\n\t\treturn m('.harth-uppy'\n\t\t\t, listOnly\n\t\t\t|| Uppy.simple({\n\t\t\t\twidth\n\t\t\t\t,height\n\t\t\t\t,getFields(){\n\t\t\t\t\treturn Object.assign({ file_id: uuid.v4() }, prevFields)\n\t\t\t\t}\n\t\t\t\t, instance: _uppy => {\n\t\t\t\t\tuppy = _uppy\n\t\t\t\t\tuppy.on('complete', () => {\n\t\t\t\t\t\t// give the harth API time to receive the notification\n\t\t\t\t\t\tconst NOTIFY_TIMEOUT = 3000\n\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tsyncFiles(prevFields).then(\n\t\t\t\t\t\t\t\t() => uppy.setState({ files: {} })\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}, NOTIFY_TIMEOUT)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t, data\n\t\t\t})\n\t\t\t, files.length > 0\n\t\t\t\t&& m(MiniGallery, {\n\t\t\t\t\tfiles\n\t\t\t\t\t, loading\n\t\t\t\t\t, data\n\t\t\t\t\t, listOnly\n\t\t\t\t\t, embedded: attrs.embedded\n\t\t\t\t\t, readOnly: attrs.readOnly\n\t\t\t\t\t, download\n\t\t\t\t})\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nexport default Main","/* globals setTimeout */\nimport m from 'bacta'\nimport css from 'bss'\n// todo-james we should do this globally for all focus\n// it's so simple!\nlet editing = null\nconst focusQuery = 'input,textarea'\n\nfunction Pencil(){\n\tconst id = Math.random().toString(15).slice(2,8)\n\n\tfunction view({\n\t\tattrs: { value, view, toggleable },\n\t}){\n\n\t\tfunction select(){\n\t\t\tediting = id\n\t\t\t// this redraw was needed for m v1\n\t\t\t// but probably not m v2\n\t\t\t// as redraws are async in v2\n\t\t\tm.redraw()\n\t\t}\n\n\t\tconst viewOutput =\n\t\t\tediting == id\n\t\t\t? toggleable\n\t\t\t\t? view((...args) => {\n\t\t\t\t\tif( args.length ) {\n\t\t\t\t\t\tif( args[0] ) {\n\t\t\t\t\t\t\tediting = id\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tediting = null\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t: view()\n\n\t\t\t: null\n\n\t\tconst out =\n\t\t\tviewOutput\n\t\t\t|| m('p.dim.normal'\n\t\t\t\t+ css`\n\t\t\t\t\tmargin-bottom: 0px;\n\t\t\t\t`\n\t\t\t\t,m('span', value())\n\t\t\t\t,m('span.fa.fa-pencil.pl2')\n\t\t\t)\n\n\t\tif( viewOutput ) {\n\t\t\tviewOutput.attrs.oncreate =\n\t\t\t\t({ dom }) =>\n\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t[dom]\n\t\t\t\t\t\t\t.filter( x => x.matches(focusQuery) )\n\t\t\t\t\t\t\t.concat( dom.querySelector(focusQuery) || [])\n\t\t\t\t\t\t\t.slice(0,1)\n\t\t\t\t\t\t\t.forEach(\n\t\t\t\t\t\t\t\tdom => {\n\t\t\t\t\t\t\t\t\tdom.focus()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t, 100\n\t\t\t\t\t)\n\t\t}\n\n\t\treturn m('div.pencil.measure'\n\t\t\t, {\n\t\t\t\ttabindex: editing == id ? -1 : 0\n\t\t\t\t,onfocus: editing != id && select\n\t\t\t\t,onfocusout(e){\n\t\t\t\t\tconst notUs =\n\t\t\t\t\t\te.relatedTarget\n\t\t\t\t\t\t&& !e.currentTarget.contains(e.relatedTarget)\n\n\t\t\t\t\tif(notUs && editing == id ) {\n\t\t\t\t\t\tediting = null\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t, out\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction run(value, view, { toggleable=false }={}){\n\treturn m(Pencil, { value, view, toggleable })\n}\n\nfunction compat(...args){\n\n\tif ( args.length > 1 ) {\n\t\treturn run(...args)\n\t}\n\n\treturn {\n\t\tview(vnode){\n\t\t\tconst args =\n\t\t\t\tvnode.children\n\n\t\t\treturn run(...args)\n\t\t}\n\t}\n}\n\ncompat.legacyRenderProps = true\nexport default compat\n","/* global setTimeout, clearTimeout */\n\n\nimport traverse from 'traverse'\nimport * as R from 'ramda';\n// eslint-disable-next-line no-undef\nconst DEV = process.env.DEV\n// eslint-disable-previous-line no-unused-vars\n// eslint-disable-next-line no-undef\nconst IDENTICAL_LOGS = process.env.IDENTICAL_LOGS\n// eslint-disable-previous-line no-unused-vars\n\nimport m from 'bacta'\nconst callProp =\n\tR.when(\n\t\t(x) => typeof x == 'function'\n\t\t,R.call\n\t)\n\nconst exclusions = [\n\t'created'\n\t, 'interruptions_id'\n\t, 'interruptions_affected_id'\n\t, 'key'\n\t, 'ParentRecognition'\n\t, 'CommonRecognition'\n\t, 'ParentRecognitionID'\n\t, 'showWork'\n\t, 'discplineNameDescription'\n\n\t, 'materialDailyActual'\n\t, 'materialDailyForecasted'\n\t, 'materialForecasted'\n\t, 'materialActual'\n\t, 'contractedProgress'\n\t, 'contractedDailyPeriodProgress'\n\t, 'contractedDailyProgress'\n\n\t, 'budget'\n\t, 'outstandingRevenue'\n\t, 'outstandingExpenditures'\n\t, 'outstandingProfits'\n\t, 'outstandingDailyPeriodRevenue'\n\t, 'outstandingDailyPeriodExpenditures'\n\t, 'outstandingDailyPeriodProfits'\n\t, 'outstandingDailyRevenue'\n\t, 'outstandingDailyExpenditures'\n\t, 'outstandingDailyProfits'\n\n\t, 'currentExpenditures'\n\t, 'currentProfits'\n\t, 'currentRevenue'\n\t, 'currentDailyRevenue'\n\t, 'currentDailyExpenditures'\n\t, 'currentDailyProfits'\n\t, 'currentDailyPeriodRevenue'\n\t, 'currentDailyPeriodExpenditures'\n\t, 'currentDailyPeriodProfits'\n\n\t, 'forecastedDailyRevenue'\n\t, 'forecastedDailyProfits'\n\t, 'forecastedDailyExpenditures'\n\t, 'forecastedDailyPeriodRevenue'\n\t, 'forecastedDailyPeriodExpenditures'\n\t, 'forecastedDailyPeriodProfits'\n\t, 'forecastedExpenditures'\n\t, 'forecastedProfits'\n\t, 'forecastedRevenue'\n\n\t, 'accruedExpenditures'\n\t, 'accruedRevenue'\n\t, 'accruedProfits'\n\t, 'accruedDailyRevenue'\n\t, 'accruedDailyExpenditures'\n\t, 'accruedDailyPeriodRevenue'\n\t, 'accruedDailyPeriodExpenditures'\n\t, 'accruedDailyProfits'\n\t, 'accruedDailyPeriodProfits'\n\t, 'invoicecount'\n\n\t, 'contractrecognitionid'\n\t, 'contractrecognitionname'\n\t, 'contractrecognitiondescription'\n\t, 'scheduleNameVersion'\n\t, 'owner_id'\n\t, 'contractStart'\n\t, 'contractEnd'\n\t, 'damagesEnd'\n\t, 'contractList'\n\t, 'lastAllocationDate'\n\t, 'disciplineName'\n\t, 'relatedDiscipline'\n\t, 'DisciplineWork'\n\t, 'DisciplineCompleted'\n\t, 'teamresourcename'\n\t, 'dReceived'\n\t, 'coalatedSelectedVersion'\n\t, 'possibleContractEntities'\n\t, 'focussedInvoices'\n\t, 'allContractItems'\n\t, 'allContracts'\n\t, 'contractprojectid'\n\t, 'contractuserid'\n\t, 'invoiceno'\n\t, '__requestedAt'\n\t, 'depth'\n\t, 'distribution_container_id'\n\t, 'lastallocationdate'\n\t, 'eotsum'\n\t, 'nodsum'\n\t, 'varsum'\n\t, 'workdays'\n\t, 'workdayeffort'\n\t, 'badeffortteams'\n\t, 'filecount'\n\t, 'materialvalue'\n\t, 'revenuevalue'\n\t, 'expenditurevalue'\n\t, 'itemk'\n\t, 'expanded'\n\t, 'dateB'\n\t, 'orderdetail'\n\t, 'completedcount'\n\t, 'completedsum'\n\t, 'scheduledsum'\n\t, 'applicablecontracts'\n\t, 'newproject'\n\t, 'fmgroupedbyitem'\n\t, 'currentqty'\n\t, 'requiredqty'\n\t, 'wastediff'\n\t, 'newdiscipline'\n\t, 'invoice_total'\n\t, 'newtask'\n\t, 'receipting'\n\t, 'notesexpanded'\n\t, 'projectPercentComplete'\n\t, 'midfix'\n\t, 'oldusers'\n\t, 'addFiles'\n\t, 'zip_url'\n\t, 'contractrecognitionnametype'\n]\n\nlet timeoutId\nfunction deBounceTraverse(a, b, moreExclusions=[], returnKeys, identicalProp){\n\tclearTimeout(timeoutId)\n\ttimeoutId =\n\t\tsetTimeout(\n\t\t\t() => traverseCheck(a, b, moreExclusions, returnKeys, identicalProp)\n\t\t\t,500\n\t\t)\n}\n\n\nfunction traverseCheck(a, b, moreExclusions=[], returnKeys, identicalProp){\n\tconst index = R.indexBy(R.identity, [].concat(exclusions, moreExclusions))\n\tconst difference = {}\n\tconst refObj = !a || !Object.keys(a).length ? b : a\n\tconst checkObj = refObj == a ? b : a\n\n\ttraverse(refObj).forEach(function(x){\n\n\n\t\tconst parentPath = this.isRoot ? [] : this.parent.path\n\n\t\tconst bParent = R.pathOr({}, parentPath, checkObj)\n\n\t\tconst bprop = bParent[this.key]\n\t\tconst bprophas = this.key in bParent\n\t\tconst aVal = callProp(x)\n\t\tconst bVal = callProp(bprop)\n\n\t\tif(\n\t\t\t!(this.key in index)\n\t\t\t&& parentPath.every((ckey) => !(ckey in index))\n\t\t\t&& (\n\n\t\t\t\t\tArray.isArray(aVal)\n\t\t\t\t\t&& (\n\n\t\t\t\t\t\t\tArray.isArray(bParent)\n\t\t\t\t\t\t\t&& aVal.length != bParent.length\n\n\t\t\t\t\t\t|| \t\t\t\t\t\t\tArray.isArray(bVal)\n\t\t\t\t\t\t\t&& aVal.length != bVal.length\n\n\t\t\t\t\t)\n\n\t\t\t\t|| \t\t\t\t\tthis.isLeaf\n\t\t\t\t\t&& !this.isRoot\n\t\t\t\t\t&& !Array.isArray(aVal)\n\t\t\t\t\t&& (aVal != bVal || !bprophas)\n\n\t\t\t)\n\t\t){\n\t\t\tif( true ){\n\t\t\t\tconst s = x => JSON.stringify(x)\n\n\t\t\t\tdifference[this.key] =\n\t\t\t\t\tbprop\n\t\t\t\t\t\t? s(aVal) + ' - ' + s(bVal) + ' - ' + this.path\n\t\t\t\t\t\t: s(aVal) + ' - ' + 'No Path' + ' - ' + this.path\n\t\t\t} else {\n\n\t\t\t\tdifference[this.key] = true\n\n\t\t\t\tif( !returnKeys ){\n\t\t\t\t\tthis.stop()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tif( DEV && IDENTICAL_LOGS && Object.keys(difference) != 0 ){\n\t\t// eslint-disable-next-line no-undef\n\t\tconsole.log(difference)\n\t}\n\n\tconst result =\n\t\treturnKeys\n\t\t? Object.keys(difference)\n\t\t: Object.keys(difference).length == 0\n\n\tif(identicalProp){\n\t\tidenticalProp(result)\n\t\tm.redraw()\n\t}\n\n\treturn result\n}\n\n\n\nexport { deBounceTraverse as deBounceIdentical, traverseCheck as identical }","/* globals setTimeout, window, document */\nimport * as R from 'ramda'\nimport m from 'bacta'\nimport css from 'bss'\n\n\nconst hideScrollbars =\n css`\n -ms-overflow-style: none;\n scrollbar-width: none;\n `\n .$nest('::-webkit-scrollbar', `\n display: none;\n `)\n\n\nfunction Main (\n\t{\n\t\tattrs: {\n\t\t\tscoped\n\t\t\t, resize$\n\t\t\t, preventBlurSelectors=['.scrollable-table-3', 'detailspane2']\n\t\t\t, alwaysopen=false\n\t\t}\n\t}\n) {\n\n\tconst activeRow = scoped()\n\n\tlet colCount\n\tlet incriment = 50\n\tlet slicepostiona = 0\n\tlet slicepostionb = incriment\n\tresize$.map(\n\t\t() => {\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tcolCount = Math.max(1, Math.floor(window.innerWidth / 150) - 1)\n\t\t\treturn null\n\t\t}\n\t)\n\n\tfunction globalBlur(event){\n\t\tif( !activeRow() == null ) return\n\t\tconst prevented =\n\t\t\tpreventBlurSelectors\n\t\t\t\t.flatMap(\n\t\t\t\t\tselector => Array.from(\n\t\t\t\t\t\tdocument.querySelectorAll(selector)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.some(\n\t\t\t\t\tel => el.contains(event.target)\n\t\t\t\t)\n\n\t\tif( !prevented ) {\n\t\t\tactiveRow(null)\n\t\t\tm.redraw()\n\t\t}\n\t}\n\n\treturn {\n\t\toncreate(){\n\t\t\twindow.addEventListener('click', globalBlur)\n\t\t}\n\t\t,onremove(){\n\t\t\twindow.removeEventListener('click', globalBlur)\n\t\t}\n\t\t,view({ attrs: { rows } }){\n\n\t\t\tconst headers =\n\t\t\t\trows.slice(0,1).flatMap( x => Object.keys(x.data) )\n\n\t\t\tconst renderedRows =\n\t\t\t\trows.length > incriment\n\t\t\t\t? rows.slice(slicepostiona, slicepostionb)\n\t\t\t\t: rows\n\n\n\t\t\treturn m(''+css`\n\t\t\t\tpadding-bottom: 4em;\n\t\t\t\t`, [\n\t\t\t\t\tm('.scrollable-table-3'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tmax-width: 100vw;\n\t\t\t\t\t\tmax-height: 40em;\n\t\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\t`\n\t\t\t\t\t+hideScrollbars\n\t\t\t\t\t,renderedRows\n\t\t\t\t\t\t.map( (x, i) => ({ active: i === activeRow() || alwaysopen, x, i }) )\n\t\t\t\t\t\t.map( ({x, active, i }) =>\n\t\t\t\t\t\t\tm('.hth-row' + ( active ? '.hth-active' : '.hth-inactive' )\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tcolumn-gap: 0.1em;\n\t\t\t\t\t\t\t\t--padding: 0.5em;\n\t\t\t\t\t\t\t\t--padding-left:\n\t\t\t\t\t\t\t\t\t${ x.selection ? `3.5em` : `var(--padding)` }\n\t\t\t\t\t\t\t\tbox-shadow: 1px 3px 8px 1px #d4d4d4;\n\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\ttransition: 0.3s;\n\t\t\t\t\t\t\t\tpadding: var(--padding);\n\t\t\t\t\t\t\t\tmargin: 0em 0.25em 0.5em 0em;\n\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\tpadding-left: var(--padding-left);\n\t\t\t\t\t\t\t\tmin-height: 3.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.desktop(`\n\t\t\t\t\t\t\t\tmargin: 0.5em;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('&.hth-active', `\n\t\t\t\t\t\t\t\tborder-left: solid 0.4em #130f3c;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('&:nth-child(even)', `\n\t\t\t\t\t\t\t\tbackground-color: #f8f8f8;\n\t\t\t\t\t\t\t\tcolor: black;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.hth-header', `\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('&.hth-inactive:hover',`\n\t\t\t\t\t\t\t\topacity: 0.9;\n\t\t\t\t\t\t\t\ttransform: scale(0.98);\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('&.hth-inactive .hth-inner.standard', css`\n\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\tcolumn-gap: 1em;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\tgrid-template-columns: ${\n\t\t\t\t\t\t\t\t\t`repeat(${Math.min(headers.length, colCount)}, 1fr);`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(min-width: 1368px)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.$nest('&.hth-active .hth-inner.standard', css`\n\t\t\t\t\t\t\t\tgrid-template-columns: repeat(3, 1fr);\n\t\t\t\t\t\t\t\trow-gap: 1em;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\tcolumn-gap: 1em;\n\t\t\t\t\t\t\t\topacity: 1\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(min-width: 1000px)', css`\n\t\t\t\t\t\t\t\t\tgrid-template-columns: repeat(6, 1fr);\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t.$nest('.hth-cell', `\n\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t.$nest('.hth-child', `\n\t\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,Object.assign(\n\t\t\t\t\t\t\t\t\t{ tabindex: 0\n\t\t\t\t\t\t\t\t\t, onclick(e){\n\t\t\t\t\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t\t\t!['BUTTON', 'A', 'INPUT'].includes(\n\t\t\t\t\t\t\t\t\t\t\t\te.srcElement.tagName\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tactiveRow(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t, 1000 * 0.3\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// account for filtering / sorting\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, x.key\n\t\t\t\t\t\t\t\t\t\t? { key: x.key }\n\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t, x.attrs || {}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t, x.header\n\t\t\t\t\t\t\t\t\t&& m('.header-outer'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tmargin: 0.4em 0.5em 1.5em 0.1em;\n\t\t\t\t\t\t\t\t\t\t\tborder-bottom: solid 1px rgba(0,0,0,0.1);\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 0.2em;\n\t\t\t\t\t\t\t\t\t\t\tfont-size: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$nest('>*>*', `\n\t\t\t\t\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\n\t\t\t\t\t\t\t\t\t\t\tmax-width: 35vw;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, x.header\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t, m('.hth-inner'\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tactive && x.layouts && x.layouts.expanded\n\t\t\t\t\t\t\t\t\t\t? '.custom'\n\t\t\t\t\t\t\t\t\t\t: '.standard'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,x.selection\n\t\t\t\t\t\t\t\t\t\t? m('input'\n\t\t\t\t\t\t\t\t\t\t\t+ css.width(25).height(25)\n\t\t\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\t\t\tcss.width(20).height(20)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.position('absolute')\n\t\t\t\t\t\t\t\t\t\t\t.transform(`translate(-32px, -5px)`)\n\t\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t\tx.selection\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t, active && x.layouts && x.layouts.expanded\n\t\t\t\t\t\t\t\t\t? x.layouts.expanded({\n\t\t\t\t\t\t\t\t\t\tx: x.data\n\t\t\t\t\t\t\t\t\t\t, key: x.key\n\t\t\t\t\t\t\t\t\t\t, colCount\n\t\t\t\t\t\t\t\t\t\t, i\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: headers\n\t\t\t\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t\t\t\t\t? headers.length\n\t\t\t\t\t\t\t\t\t\t\t: colCount\n\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.hth-cell', { key: 'cell-'+key }\n\t\t\t\t\t\t\t\t\t\t\t\t\t,m('.hth-header'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, { title: key }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, key\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,m('.hth-child'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, { title:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttypeof x.data[key] == 'string'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x.data[key]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, x.data[key]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,rows.length > incriment\n\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 0.4fr 0.2fr 0.4fr;\n\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\tmargin-left: 45%;\n\t\t\t\t\t\t\tmargin-right: 45%;\n\t\t\t\t\t\t\tpadding-top: 2em;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$nest('a', `\n\t\t\t\t\t\t\tuser-select: none;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\tm('a', {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tslicepostiona = slicepostiona - incriment\n\t\t\t\t\t\t\t\t\t\tslicepostionb = slicepostionb - incriment\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, title: \"Previous items\"\n\t\t\t\t\t\t\t\t\t, disabled: slicepostionb <= incriment\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Prev'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,Math.floor(slicepostionb/incriment)\n\t\t\t\t\t\t\t,m('a', {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tslicepostiona = slicepostiona + incriment\n\t\t\t\t\t\t\t\t\t\tslicepostionb = slicepostionb + incriment\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, title: \"Next items\"\n\t\t\t\t\t\t\t\t\t, disabled: slicepostionb >= rows.length-1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Next'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunction advanced({\n\tscoped\n\t, resize$\n\t, rows\n\t, preventBlurSelectors\n\t, alwaysopen\n}){\n\treturn m(Main,\n\t\t{ scoped\n\t\t, resize$\n\t\t, rows\n\t\t, preventBlurSelectors\n\t\t, alwaysopen\n\t\t}\n\t)\n}\n\nfunction legacy(\n\t{ scoped, resize$, preventBlurSelectors }\n\t, headers\n\t, rows\n) {\n\tconst ourHeaders = headers.map( x => x.text )\n\tconst ourRows = rows().map(\n\t\tx => R.zipObj(ourHeaders, x.children)\n\t)\n\t.map(\n\t\tx => ({ data: x })\n\t)\n\treturn m(\n\t\tMain,\n\t\t{ scoped\n\t\t, resize$\n\t\t, rows: ourRows\n\t\t, preventBlurSelectors\n\t\t}\n\t)\n}\n\nfunction compat(){\n\treturn {\n\t\tview(vnode){\n\t\t\tconst args =\n\t\t\t\t[vnode.attrs].concat(\n\t\t\t\t\tvnode.children\n\t\t\t\t)\n\n\t\t\treturn legacy(...args)\n\t\t}\n\t}\n}\n\nexport default compat\ncompat.legacyRenderProps = true\ncompat.legacy = legacy\ncompat.scrollableTable = legacy\ncompat.advanced = advanced","/**\n * @typedef { (x: VNode ) => VNode } VNodeTransform\n * @param { VNodeTransform } f\n */\nfunction $root(f){\n\n\t/**\n\t * @param { VNode } o\n\t */\n\tfunction action(o){\n\t\tvar r =\n\t\t\tf(o)\n\n\t\treturn typeof r !== 'undefined'\n\t\t\t? r\n\t\t\t: o\n\t}\n\treturn action\n}\n\n/**\n * @param { VNodeTransform } f\n */\nfunction $ul(f){\n\n\t/**\n\t * @param { VNode } div\n\t */\n\tfunction action(div){\n\t\tvar r =\n\t\t\tf(div.children[1])\n\n\t\tif( typeof r !== 'undefined' ){\n\t\t\tdiv.children[1] = r\n\t\t}\n\t\treturn div\n\t}\n\treturn action\n}\n\n/**\n * @param { ( o: VNode[]) => VNode[] } f\n */\nfunction $li( f ){\n\n\treturn $ul(function(ul){\n\t\tvar r =\n\t\t\tf(ul.children)\n\n\n\t\tif( typeof r !== 'undefined' ){\n\t\t\tul.children = r\n\t\t}\n\n\t\treturn ul\n\t})\n}\n\n/**\n * @param { VNodeTransform } f\n */\nfunction $input(f){\n\n\t/**\n\t * @param { VNode } div\n\t */\n\tfunction action(div){\n\t\tvar r =\n\t\t\tf(div.children[0])\n\n\t\tif( typeof r !== 'undefined' ){\n\t\t\tdiv.children[0] = r\n\t\t}\n\n\t\treturn div\n\t}\n\treturn action\n}\n\n/*\n* The following utilities are all adapted from\n* https://github.com/LeaVerou/awesomplete\n*/\n\n\t/**\n\t * @type { (input: string, text: string ) => boolean }\n\t */\n\tvar contains = function contains(input, text){\n\t\treturn input != null\n\t\t\t&& input.trim().length\n\t\t\t? RegExp(regExpEscape(input.trim()), \"i\").test(text)\n\t\t\t: true\n\t}\n\n\t/**\n\t * @type { (s: string ) => string }\n\t */\n\tvar regExpEscape = function regExpEscape(s) {\n\t\treturn s.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n\t}\n\n\t/**\n\t * @type { {(a: string, b: string ) : number} }\n\t */\n\tvar sortByLength = function sortByLength(a, b) {\n\n\t\tif (a.length !== b.length) {\n\t\t\treturn a.length - b.length;\n\t\t}\n\n\t\treturn a < b ? -1 : 1;\n\t};\n\n/**\n\t @type {\n\t\t(p: { [k: string]: any }, b: [string, any] ) => { [k:string] : any }\n\t}\n */\nvar assignPair = function assignPair(p, pair){\n\tp[ pair[0] ] = pair[1]\n\treturn p\n}\n\nvar keyboard = {\n\tsubmit:\n\t\tfunction submit(\n\t\t\t/** @type {number} */code\n\t\t\t,/** @type {string} */ highlighted\n\t\t) {\n\t\t\treturn code == 13 && highlighted\n\t\t\t\t? [highlighted]\n\t\t\t\t: []\n\t\t}\n\n\t,dismiss:\n\n\t\tfunction dismiss(\n\t\t\t/** @type {number} */ code\n\t\t){\n\t\t\treturn code == 27\n\t\t\t\t? [true]\n\t\t\t\t: []\n\t\t}\n\n\t,navigate:\n\t\tfunction navigate(\n\t\t\t/** @type {boolean} */ showingDrawer\n\t\t\t,/** @type {string} */ highlighted\n\t\t\t,/** @type {string[]} */ renderedList\n\t\t\t,/** @type {number} */ code\n\t\t){\n\t\t\tvar KEY_UP = 38\n\t\t\tvar KEY_DOWN = 40\n\t\t\tvar i = renderedList.indexOf(highlighted)\n\t\t\tvar NO_MATCH = i == -1\n\t\t\tvar LOWER_BOUND = 0\n\t\t\tvar UPPER_BOUND = renderedList.length -1\n\t\t\tvar MATCH = i >= -1\n\t\t\tvar NEXT = i+1\n\t\t\tvar PREV = i-1\n\n\t\t\tif( showingDrawer && (code == KEY_UP || code == KEY_DOWN) ){\n\t\t\t\tif( code == KEY_UP && (NO_MATCH || i == LOWER_BOUND) ){\n\t\t\t\t\treturn [renderedList[UPPER_BOUND]]\n\t\t\t\t} else if(code == KEY_UP && MATCH) {\n\t\t\t\t\treturn [renderedList[PREV]]\n\t\t\t\t} else if (\n\t\t\t\t\tcode == KEY_DOWN && (\n\t\t\t\t\t\tNO_MATCH || i == UPPER_BOUND\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn [renderedList[LOWER_BOUND]]\n\t\t\t\t} else { // ( code == KEY_DOWN && MATCH )\n\t\t\t\t\treturn [renderedList[NEXT]]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn []\n\t\t\t}\n\t\t}\n\t}\n\n/**\n\n\t@typedef {any} VNode\n\t@typedef {\n\t\t(tagName: string, attrs: object, children: VNode[] ) => VNode\n\t} HyperscriptConstructor\n\t@typedef { ( key: any ) => any } FrameworkGet\n\t@typedef { ( key: any, value: any ) => any } FrameworkSet\n\t@typedef {{\n\t\tget: FrameworkGet\n\t\tset: FrameworkSet\n\t\thyperscript: HyperscriptConstructor\n\t}} Framework\n\n\t@typedef {{\n\t\tlist: any\n\t\tinput: any\n\t\tchosen: any\n\t\topen: any\n\t\thighlighted: any\n\t}} Model\n\n\t@typedef { Event & { currentTarget: { value: String }} } InputEvent\n\t@typedef {{\n\t\tminChars: number\n\t\tmaxItems: number\n\t\tsort: { (input: string, text: string ): number }\n\t\tfilter: { (value: string, s: string): boolean }\n\t\tfilteredList: string[]\n\t\teventNames: { [k:string]: string }\n\t\tshowingDrawer: boolean\n\t\tchoose: { (x:string) : void }\n\t\tclickItem: { (x:string) : void }\n\t\tPATTERN_INPUT: RegExp | null\n\t\tmark: { (x:string) : VNode }\n\t\thighlight: { (x:string) : VNode }\n\t\toninput: { (e: InputEvent ): void }\n\t\tonfocus: { (e: FocusEvent ): void }\n\t\tclose: { (): void }\n\t\tonblur: { (e: FocusEvent ): void }\n\t\trenderInput: { (config:Overrides) : VNode }\n\t\titemClassNames: { (x:string, config: Overrides) : string }\n\t\trenderItem: { (x:string, config: Overrides): VNode }\n\t\trenderItems: { (config: Overrides): VNode }\n\t\tclassNames: { () : string }\n\t\trenderRoot: { (config: Overrides): VNode }\n\t\tkeyboardSubmit: { (code: number, highlighted: string ): string[] }\n\t\tkeyboardDismiss: { (code: number ): boolean[] }\n\t\tkeyboardNavigate: {\n\t\t\t(\tshowingDrawer: boolean\n\t\t\t\t, highlighted: string\n\t\t\t\t, renderedList: string[]\n\t\t\t\t, code: number\n\t\t\t) : string[]\n\t\t}\n\t\tonkeydown: { (e: KeyboardEvent ): void }\n\n\t}} Overrides\n\n\t@param {Framework} framework\n */\nfunction BaseAutocomplete(framework){\n\n\tvar h = framework.hyperscript\n\tvar get = framework.get\n\tvar set = framework.set\n\n\t/**\n\t *\n\t * @param {Model} model\n\t * @param { Partial } nullableOverrides\n\t */\n\tfunction Autocomplete(model, nullableOverrides){\n\t\tvar overrides = nullableOverrides || {}\n\t\tvar list = model.list\n\t\tvar input = model.input\n\t\tvar chosen = model.chosen\n\t\tvar open = model.open\n\n\t\t/** @type { () => string[] } */\n\t\tvar getList = function(){\n\t\t\treturn get(list)\n\t\t}\n\n\t\t/** @type { () => string } */\n\t\tvar getInput = function(){\n\t\t\treturn get(input)\n\t\t}\n\n\t\t/** @type { () => string } */\n\t\tvar getChosen = function(){\n\t\t\treturn get(chosen)\n\t\t}\n\n\t\t/** @type { () => boolean } */\n\t\tvar getOpen = function(){\n\t\t\treturn get(open)\n\t\t}\n\n\t\t/** @type { () => string } */\n\t\tvar getHighlighted = function(){\n\t\t\treturn get(highlighted)\n\t\t}\n\n\t\tvar highlighted = model.highlighted\n\n\t\tvar value = getInput()\n\n\t\tvar minChars = typeof overrides.minChars != 'undefined'\n\t\t\t? overrides.minChars\n\t\t\t: 2\n\n\t\tvar maxItems = typeof overrides.maxItems != 'undefined'\n\t\t\t? overrides.maxItems\n\t\t\t: 10\n\n\t\tvar sort = typeof overrides.sort != 'undefined'\n\t\t\t? overrides.sort\n\t\t\t: sortByLength\n\n\t\tvar filter = typeof overrides.filter != 'undefined'\n\t\t\t? overrides.filter\n\t\t\t: contains\n\n\t\tvar filteredList =\n\t\t\ttypeof overrides.filteredList != 'undefined'\n\t\t\t\t? overrides.filteredList\n\t\t\t\t: getList()\n\t\t\t\t\t.filter(function (s){\n\t\t\t\t\t\treturn filter(value, s)\n\t\t\t\t\t})\n\t\t\t\t\t.sort( sort )\n\t\t\t\t\t.slice(0, maxItems)\n\n\t\tif( getHighlighted() != null\n\t\t\t&& filteredList.indexOf( get( highlighted ) ) == -1\n\t\t){\n\t\t\tset(highlighted, null)\n\t\t}\n\n\t\tif( getChosen() != null\n\t\t\t&& getChosen() != value\n\t\t){\n\t\t\tset(chosen, null)\n\t\t}\n\n\t\t/** @type {Overrides} */\n\t\tvar config = {\n\n\t\t\tfilteredList: filteredList\n\t\t\t,minChars: minChars\n\t\t\t,maxItems: maxItems\n\t\t\t,sort: sort\n\t\t\t,filter: filter\n\t\t\t,eventNames:\n\t\t\t\ttypeof overrides.eventNames != 'undefined'\n\t\t\t\t\t? overrides.eventNames\n\t\t\t\t\t: { oninput: 'oninput'\n\t\t\t\t\t, onfocus: 'onfocus'\n\t\t\t\t\t, onblur: 'onblur'\n\t\t\t\t\t, onkeydown: 'onkeydown'\n\t\t\t\t\t, onmousedown: 'onmousedown'\n\t\t\t\t\t}\n\t\t\t,showingDrawer:\n\t\t\t\ttypeof overrides.showingDrawer != 'undefined'\n\t\t\t\t\t? overrides.showingDrawer\n\t\t\t\t\t: getOpen()\n\t\t\t\t\t\t&& value.length >= minChars\n\t\t\t\t\t\t&& filteredList.length > 0\n\n\t\t\t,choose:\n\t\t\t\ttypeof overrides.choose != 'undefined'\n\t\t\t\t\t? overrides.choose\n\t\t\t\t\t: function choose(x){\n\n\n\t\t\t\t\t\tif( getInput() != x ){\n\t\t\t\t\t\t\tset(input, x)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( getChosen() != x ){\n\t\t\t\t\t\t\tset(chosen, x)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconfig.close()\n\t\t\t\t\t}\n\t\t\t,clickItem:\n\t\t\t\ttypeof overrides.clickItem != 'undefined'\n\t\t\t\t\t? overrides.clickItem\n\t\t\t\t\t: function clickItem(x){\n\t\t\t\t\t\treturn config.choose(x)\n\n\t\t\t\t\t}\n\t\t\t,PATTERN_INPUT:\n\t\t\t\ttypeof overrides.PATTERN_INPUT != 'undefined'\n\t\t\t\t\t? overrides.PATTERN_INPUT\n\t\t\t\t\t: value\n\t\t\t\t\t\t? new RegExp(regExpEscape(value), 'gi')\n\t\t\t\t\t\t: null\n\t\t\t,mark:\n\t\t\t\ttypeof overrides.mark != 'undefined'\n\t\t\t\t\t? overrides.mark\n\t\t\t\t\t: function(x){\n\t\t\t\t\t\treturn h('mark', {}, [x])\n\t\t\t\t\t}\n\n\t\t\t,highlight:\n\t\t\t\ttypeof overrides.highlight != 'undefined'\n\t\t\t\t\t? overrides.highlight\n\t\t\t\t\t: function highlight( x ){\n\n\t\t\t\t\t\t/** @type {string[] | null} */\n\t\t\t\t\t\tvar matches =\n\t\t\t\t\t\t\tconfig.PATTERN_INPUT != null\n\t\t\t\t\t\t\t? x.match( config.PATTERN_INPUT )\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t/** @type {{ buffer: string, output: string[] }} */\n\t\t\t\t\t\tvar initial = {\n\t\t\t\t\t\t\tbuffer: x\n\t\t\t\t\t\t\t,output: []\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar processed =\n\t\t\t\t\t\t\tmatches != null\n\t\t\t\t\t\t\t? matches\n\t\t\t\t\t\t\t\t.reduce(function(p, n){\n\t\t\t\t\t\t\t\t\tvar i = p.buffer.indexOf(n)\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tbuffer: p.buffer.slice(i+n.length)\n\t\t\t\t\t\t\t\t\t\t,output: p.output.concat(\n\t\t\t\t\t\t\t\t\t\t\ti === 0\n\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t: p.buffer.slice(0, i)\n\t\t\t\t\t\t\t\t\t\t\t,[ config.mark(\n\t\t\t\t\t\t\t\t\t\t\t\tp.buffer.slice(i, i+n.length)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, initial )\n\t\t\t\t\t\t\t: { output: [x], buffer: '' }\n\n\t\t\t\t\t\treturn processed.output.concat(\n\t\t\t\t\t\t\tprocessed.buffer || []\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t,oninput:\n\t\t\t\ttypeof overrides.oninput != 'undefined'\n\t\t\t\t\t? overrides.oninput\n\t\t\t\t\t: function oninput(e){\n\n\t\t\t\t\t\tvar v = e.currentTarget.value\n\n\t\t\t\t\t\tif( getInput() != v ){\n\t\t\t\t\t\t\tset(input, v)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !getOpen() ){\n\t\t\t\t\t\t\tset(open, true)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t,onfocus:\n\t\t\t\ttypeof overrides.onfocus != 'undefined'\n\t\t\t\t\t? overrides.onfocus\n\t\t\t\t\t: function onfocus(){\n\t\t\t\t\t\tif( !getOpen() ){\n\t\t\t\t\t\t\tset(open, true)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t,close:\n\t\t\t\ttypeof overrides.close != 'undefined'\n\t\t\t\t\t? overrides.close\n\t\t\t\t\t: function close(){\n\t\t\t\t\t\tif( getOpen() ){\n\t\t\t\t\t\t\tset(open, false)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t,onblur:\n\t\t\t\ttypeof overrides.onblur != 'undefined'\n\t\t\t\t\t? overrides.onblur\n\t\t\t\t\t: function onblur(){\n\t\t\t\t\t\tconfig.close()\n\t\t\t\t\t}\n\t\t\t,renderInput:\n\t\t\t\ttypeof overrides.renderInput != 'undefined'\n\t\t\t\t\t? overrides.renderInput\n\t\t\t\t\t: function renderInput(){\n\t\t\t\t\t\treturn h('input'\n\t\t\t\t\t\t\t,[ ['value', value]\n\t\t\t\t\t\t\t, [config.eventNames.oninput, config.oninput]\n\t\t\t\t\t\t\t, [config.eventNames.onfocus, config.onfocus]\n\t\t\t\t\t\t\t, [config.eventNames.onblur, config.onblur]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.reduce(assignPair, {})\n\t\t\t\t\t\t\t, []\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t,itemClassNames:\n\t\t\t\ttypeof overrides.itemClassNames != 'undefined'\n\t\t\t\t\t? overrides.itemClassNames\n\t\t\t\t\t: function itemClassNames(x){\n\t\t\t\t\t\treturn \tx == get(highlighted)\n\t\t\t\t\t\t\t? 'highlight'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\n\t\t\t,renderItem:\n\t\t\t\ttypeof overrides.renderItem != 'undefined'\n\t\t\t\t\t? overrides.renderItem\n\t\t\t\t\t: function renderItem(x, config){\n\t\t\t\t\t\treturn h(\n\t\t\t\t\t\t\t'li'\n\t\t\t\t\t\t\t,[ ['className', config.itemClassNames(x, config) ]\n\t\t\t\t\t\t\t, [ config.eventNames.onmousedown, function(\n\t\t\t\t\t\t\t\t/** @type {Event} */ e\n\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\tconfig.clickItem(x)\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.reduce(assignPair, {})\n\n\t\t\t\t\t\t\t, config.highlight(x)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t,renderItems:\n\t\t\t\ttypeof overrides.renderItems != 'undefined'\n\t\t\t\t\t? overrides.renderItems\n\t\t\t\t\t: function renderItems(config){\n\t\t\t\t\t\treturn h(\n\t\t\t\t\t\t\t'ul'\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t\t, config.filteredList.map(\n\t\t\t\t\t\t\t\tfunction filteredList$map(x){\n\t\t\t\t\t\t\t\t\treturn config.renderItem(x, config)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t,classNames:\n\t\t\t\ttypeof overrides.classNames != 'undefined'\n\t\t\t\t\t? overrides.classNames\n\t\t\t\t\t: function classNames(){\n\t\t\t\t\t\treturn ['manuel-complete']\n\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\tconfig.showingDrawer ? ['open'] : []\n\t\t\t\t\t\t\t\t,value.length > 0 ? ['not-empty'] : []\n\t\t\t\t\t\t\t\t,getList().length > 0 ? ['loaded'] : []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t}\n\t\t\t,renderRoot:\n\t\t\t\ttypeof overrides.renderRoot != 'undefined'\n\t\t\t\t\t? overrides.renderRoot\n\t\t\t\t\t: function renderRoot(config){\n\t\t\t\t\t\treturn h('div'\n\t\t\t\t\t\t\t,[[ 'className', config.classNames() ]\n\t\t\t\t\t\t\t, [config.eventNames.onkeydown, config.onkeydown]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.reduce(assignPair, {})\n\t\t\t\t\t\t\t,[ config.renderInput(config)\n\t\t\t\t\t\t\t, config.renderItems(config)\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t,keyboardSubmit:\n\t\t\t\ttypeof overrides.keyboardSubmit != 'undefined'\n\t\t\t\t\t? overrides.keyboardSubmit\n\t\t\t\t\t: keyboard.submit\n\t\t\t,keyboardDismiss:\n\t\t\t\ttypeof overrides.keyboardDismiss != 'undefined'\n\t\t\t\t\t? overrides.keyboardDismiss\n\t\t\t\t\t: keyboard.dismiss\n\t\t\t,keyboardNavigate:\n\t\t\t\ttypeof overrides.keyboardNavigate != 'undefined'\n\t\t\t\t\t? overrides.keyboardNavigate\n\t\t\t\t\t: keyboard.navigate\n\t\t\t,onkeydown:\n\t\t\t\ttypeof overrides.onkeydown != 'undefined'\n\t\t\t\t\t? overrides.onkeydown\n\t\t\t\t\t: function onkeydown(e){\n\t\t\t\t\t\t\tvar new_chosen =\n\t\t\t\t\t\t\t\tconfig.keyboardSubmit(\n\t\t\t\t\t\t\t\t\te.keyCode\n\t\t\t\t\t\t\t\t\t, get(highlighted)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tvar dismiss = config.keyboardDismiss(\n\t\t\t\t\t\t\t\te.keyCode\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tvar new_highlighted =\n\t\t\t\t\t\t\t\te.shiftKey\n\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t: config.keyboardNavigate(\n\t\t\t\t\t\t\t\t\tconfig.showingDrawer\n\t\t\t\t\t\t\t\t\t, get(highlighted)\n\t\t\t\t\t\t\t\t\t, config.filteredList\n\t\t\t\t\t\t\t\t\t, e.keyCode\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tnew_chosen.map(\n\t\t\t\t\t\t\t\tconfig.choose\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tnew_highlighted.map(\n\t\t\t\t\t\t\t\tfunction new_highlighted$map(v){\n\t\t\t\t\t\t\t\t\treturn set(highlighted, v)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tdismiss.map( config.close )\n\n\t\t\t\t\t\t\tnew_chosen.length\n\t\t\t\t\t\t\t+ dismiss.length\n\t\t\t\t\t\t\t+ new_highlighted.length\n\t\t\t\t\t\t\t> 0\n\n\t\t\t\t\t\t\t&& e.preventDefault()\n\t\t\t\t\t\t}\n\t\t}\n\n\t\treturn config.renderRoot(config)\n\t}\n\n\treturn Autocomplete\n}\n\nexport default BaseAutocomplete\nBaseAutocomplete.queries = {\n\tlistItems: $li\n\t, list: $ul\n\t, root: $root\n\t, input: $input\n}","/* globals Promise, setTimeout, console */\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport { prop } from '../../../stream'\nimport manuel from '../../../manuel'\nimport css from 'bss'\n\nconst delay = ms =>\n\tnew Promise( Y => setTimeout(Y, ms))\n\nconst defaultStyle =\n\tcss`\n\t\twidth: 100%;\n\t\tposition: relative;\n\t\toutline: none;\n\t`\n\t.$nest('*', `\n\t\tbox-sizing: border-box;\n\t`)\n\t.$nest('.highlight', `\n\t\tbackground-color: gold;\n\t`)\n\t.$nest('ul', `\n\t\tlist-style: none;\n\t\tz-index: 3;\n\t\tpadding-left: 0em;\n\t\tfont-size: 1em;\n\t\tmargin: 0em;\n\t\twidth: 100%;\n\t\ttransition: 500ms;\n\t\tposition: absolute;\n\t\tbackground-color: white;\n\t\ttransition: 0.3s cubic-bezier(.4,.2,.5,1.4);\n\t\ttransform-origin: 1.43em -.43em;\n\t\topacity: 0;\n\t\ttransform: scale(0);\n\t\tdisplay: block;\n\t\ttransition-timing-function: ease;\n\t`)\n\t.$nest('&.loaded.open ul', `\n\t\tborder: solid 1px rgba(40, 142, 197, 0.17);\n\t\topacity: 1;\n\t\ttransform: scale(1);\n\t\toverflow: hidden;\n\t\tborder-radius: 0em;\n\t\tmargin-top: 0.3em;\n\t\tpadding: 9px;\n\t\tline-height: 2em;\n\t`)\n\t.$nest('li', `\n\t\tpadding: 0.2em;\n\t`)\n\t.$nest('li:hover', `\n\t\tbackground: hsl(200, 40%, 80%);\n\t\tcolor: black;\n\t`)\n\n\nconst defaultInputStyle =\n\tcss`\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tborder: 0px;\n\t\tbox-shadow: none;\n\t\tborder-bottom: solid 1px #CCC;\n\t\tborder-radius: 0px;\n\t\tbackground: hsla(0,0%,100%,.2);\n\t\ttransition: 0.3s;\n\t\tfont-size: 1em;\n\t`\n\t.$focus(`\n\t\toutline: none;\n\t\tborder: 0;\n\t\tborder-bottom:: 1px solid hsl(200, 80%, 60%);\n\t`)\n\n\nfunction Main({\n\tattrs: {\n\t\tlist=prop([])\n\t\t,loading=prop(false)\n\t\t, onselect\n\t\t, oninput\n\t\t, field\n\t\t, sort\n\t\t, search=null\n\t\t, throttleSearch=500\n\t\t, manuelConfig={}\n\t\t, inputStyle=defaultInputStyle\n\t\t, rootStyle=defaultStyle.$nest('input', inputStyle).class\n\t\t, inputClassName=''\n\t\t, initialValue=''\n\t}\n}){\n\tfunction data(original){\n\t\treturn field\n\t\t\t? {\n\t\t\t\tlabel: original[field]\n\t\t\t\t,value: original\n\t\t\t}\n\t\t\t: {\n\t\t\t\tlabel: original\n\t\t\t\t,value: original\n\t\t\t}\n\t}\n\tfunction processRawList(list){\n\t\treturn list.map(\n\t\t\tdata || R.identity\n\t\t)\n\t}\n\tconst processedList =\n\t\tlist.map(processRawList)\n\tconst byLabel =\n\t\tprocessedList.map(\n\t\t\tR.indexBy( x => x.label )\n\t\t)\n\tconst computedList = byLabel.map(R.keys)\n\tif( !Array.isArray(computedList()) ){\n\t\tcomputedList([])\n\t}\n\tconst model = {\n\t\t// the current value in the input field\n\t\tinput: prop(initialValue || '')\n\t\t// the value of the currently selected\n\t\t// value in the suggestions list\n\t\t, highlighted: prop('')\n\t\t// the list of suggestions\n\t\t, list: computedList\n\t\t// whether or not the suggestions list should be open\n\t\t, open: prop(false)\n\t\t// The value of an item that was explicitly\n\t\t// selected from the list\n\t\t, chosen: prop(null)\n\t}\n\tif( onselect ) {\n\t\tmodel.chosen.map(\n\t\t\tvalue => {\n\t\t\t\tif(value != null){\n\t\t\t\t\tonselect( byLabel()[value].value, model )\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t)\n\t}\n\tif( oninput ) {\n\t\tmodel.input.map(\n\t\t\tvalue => oninput(value, model)\n\t\t)\n\t}\n\n\tlet lastRequestTime = 0;\n\tif (search) {\n\t\tmodel.input.map( value => {\n\n\t\t\tif( processedList().find( x => x.label == value ) ){\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif( value == initialValue ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif( !value ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tloading(true)\n\t\t\tm.redraw()\n\t\t\tconst then = Date.now()\n\n\t\t\tlet delayAmount =\n\t\t\t\tthen - lastRequestTime\n\t\t\t\t> throttleSearch\n\t\t\t\t? 0\n\t\t\t\t: throttleSearch\n\n\t\t\tlastRequestTime = then\n\n\t\t\tdelay(delayAmount).then( () => {\n\t\t\t\tif( lastRequestTime != then ) return null;\n\n\t\t\t\treturn Promise.resolve(search(value, model))\n\t\t\t})\n\t\t\t.then( xs => {\n\n\t\t\t\tif( lastRequestTime != then ) return;\n\n\t\t\t\tif( xs && Array.isArray(xs) ) {\n\t\t\t\t\tloading(false)\n\t\t\t\t\tlist(xs)\n\t\t\t\t\tm.redraw()\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch( console.error )\n\n\t\t\treturn null\n\t\t})\n\t}\n\tconst autocomplete = manuel({\n\t\thyperscript: m\n\t\t,get: key => model[key]()\n\t\t,set: (key, value) => {\n\t\t\tmodel[key](value)\n\t\t\tm.redraw()\n\t\t}\n\t})\n\tconst addAttrs = attrs =>\n\t\tmanuel.queries.input(\n\t\t\tvnode => {\n\t\t\t\tvnode.attrs =\n\t\t\t\t\tObject.assign({}, vnode.attrs || {}, attrs)\n\n\t\t\t\tif( !('value' in vnode.attrs) ) {\n\t\t\t\t\tvnode.attrs.value = initialValue\n\t\t\t\t}\n\t\t\t\treturn vnode\n\t\t\t}\n\t\t)\n\tconst addBSS =\n\t\tmanuel.queries.root(\n\t\t\tvnode => {\n\t\t\t\tvnode.attrs.className += ' ' + rootStyle\n\t\t\t\treturn vnode\n\t\t\t}\n\t\t)\n\n\tconst addInputClass =\n\t\tmanuel.queries.input(\n\t\t\tvnode => {\n\t\t\t\tvnode.attrs.className += ' ' + inputClassName\n\t\t\t}\n\t\t)\n\treturn {\n\t\tview({ attrs: { attrs: theirAttrs } }){\n\t\t\tconst attrs =\n\t\t\t\ttypeof theirAttrs == 'function'\n\t\t\t\t\t? theirAttrs()\n\t\t\t\t\t: theirAttrs\n\t\t\treturn addInputClass(\n\t\t\t\taddBSS(\n\t\t\t\t\taddAttrs(attrs) (\n\t\t\t\t\t\tautocomplete({\n\t\t\t\t\t\t\tinput: 'input'\n\t\t\t\t\t\t\t,highlighted: 'highlighted'\n\t\t\t\t\t\t\t,open: 'open'\n\t\t\t\t\t\t\t,chosen: 'chosen'\n\t\t\t\t\t\t\t,list: 'list'\n\t\t\t\t\t\t}, Object.assign(\n\t\t\t\t\t\t\t{ minChars: 0, sort }\n\t\t\t\t\t\t\t, manuelConfig\n\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n/**\n * Only saves exact match objects to a prop\n */\nfunction strict(\n\tlist\n\t,prop\n\t,field\n\t,attrs\n){\n\treturn m(Main, {\n\t\tlist: list\n\t\t,field\n\t\t,onselect(value, model){\n\t\t\tprop(value, model)\n\t\t\tsetTimeout(() => model.open(false), 1000)\n\t\t}\n\t\t, attrs: () => attrs ? attrs() : {}\n\t})\n}\n/**\n * Saves any user input value to the prop regardless of a match\n */\nfunction all(\n\tlist\n\t,prop\n\t,field\n\t,attrs\n){\n\treturn m(Main, {\n\t\tlist\n\t\t,onselect(value, model){\n\t\t\tprop( field ? value[field] : value, model)\n\t\t}\n\t\t,field\n\t\t,oninput(input, model){\n\t\t\tprop(input, model)\n\t\t}\n\t\t,attrs: () => attrs ? attrs() : {}\n\t})\n}\nexport default\n\t{ strict\n\t, all\n\t, Main\n\t}","/* globals setTimeout */\n\nimport m from 'bacta'\nimport * as elements from '../components/elements'\nimport NumberInput from '../components/number'\nimport humanList from '../utils/human_list'\nimport Permissions from '../models/permissions'\nimport {\n\tfilterView\n\t,ListProcessing\n\t,FilterInputs\n} from '../components/filter'\n\nimport HarthUppy from '../components/harth-uppy'\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport Pencil from '../components/pencil'\nimport * as R from 'ramda'\nimport {identical} from '../utils/harth-identical'\nimport scrollableTable from '../components/scrollableTable'\nimport autocomplete from './autocomplete'\nimport moment from 'moment'\nimport { prop as prop2 } from '../../../stream'\nimport css from 'bss'\nimport Responsive from '../components/responsive'\nimport { money as makeMoney } from '../utils/regExes'\nimport Promise from 'bluebird'\nimport * as uuid from 'uuid'\n\nconst checkprop = (a, b, c) =>\n\tc[a] && b && c[a][b]\n\t\t? typeof c[a][b] == 'function'\n\t\t\t? c[a][b]()\n\t\t\t: c[a][b]\n\t\t: typeof c[a] == 'function'\n\t\t\t? c[a]()\n\t\t\t: c[a]\n\nconst nullUser =\n\t{\n\t\tuser_id: m.prop(null)\n\t\t, user_username: m.prop('Unassigned')\n\t\t, usersFullName: 'Unassigned'\n\t}\n\n\nfunction Intent(model){\n\n\tfunction fetchOrganizationsDisciplines(){\n\t\treturn model.data.fetchOrganizationsDisciplines({})\n\t\t\t.then(model.organizations_disciplines)\n\t\t\t.then(function(){\n\t\t\t\treturn model.organizations_disciplines()\n\t\t\t\t? model.availableUOMS(\n\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t(a) => a.organizations_disciplines_uom\n\t\t\t\t\t\t, model.organizations_disciplines()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t})\n\t\t\t.then(m.redraw)\n\t}\n\n const deleteResource = (r) =>\n \tr\n \t? model.api.contractors.remove.one(r.contractor_id()).then(() => model.deleteResource(r))\n\t\t: Promise.reject('Can not delete a contractor without a contractor_id')\n\n\tconst deleteCapability = (makeAPICalls) =>\n\t\tmakeAPICalls\n\t\t\t? Promise.all( model.deleteTeams.map((t) => model.api.crews.remove.one(t)) )\n\t\t\t: ( !model.crew_vm().selected.capability.crew_id()\n\t\t\t\t\t? null\n\t\t\t\t\t: model.deleteTeams.push(\n\t\t\t\t\t\tmodel.crew_vm().selected.capability.crew_id()\n\t\t\t\t\t)\n\t\t\t) && model.deleteCapability()\n\n\tconst deleteDisciplineRate = (makeAPICalls) =>\n\t\tmakeAPICalls\n\t\t\t? Promise.all( model.deleteRates().map((t) => model.api.crews_discipline_rates.remove.one(t)) )\n\t\t\t: model.checkMultiple().data.map((discipline) => {\n\t\t\t\t!discipline.crews_discipline_rates_id()\n\t\t\t\t\t? null\n\t\t\t\t\t: model.deleteRates().push(discipline.crews_discipline_rates_id())\n\t\t\t\tmodel.deleteDisciplineR(discipline)\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t&& model.masterLIST(true)\n\n\n const sendResource = function(){\n\n\t\tmodel.metaDataLoading(true)\n if (model.crew_form().capability.crew_name != null){\n let index = R.findIndex(function(chr) { return chr.crew_id() == model.crew_form().capability.crew_id() }, model.form().resource.crews)\n model.form().resource.crews.splice(index, 1)\n model.form().resource.crews.push(model.crew_form().capability)\n }\n\n let resourceList = [model.form().resource]\n let geoy = model.process_geo(resourceList[0].contractor_yard())\n let geolist = geoy ? [geoy] : []\n\n\t\tmodel.data.currentRoute('Nothing')\n\n //todo-james why are we mapping if there is only ever one item in the list?\n let resources = resourceList.map((res) => {\n\t\t\tlet newcrews = res.crews.map((crew) => {\n\t\t\t\tlet newrates = crew.crews_discipline_rates.map((rate) => {\n\t\t\t\t\treturn Object.assign({}, rate, {})\n\t\t\t\t})\n\t\t\t\tlet newcrew = Object.assign({}, crew, {})\n\t\t\t\tnewcrew.crews_discipline_rates = newrates\n\t\t\t\treturn newcrew\n\t\t\t})\n let newcontractor = Object.assign({}, res)\n\t\t\tnewcontractor.crews = newcrews\n\t\t\treturn newcontractor\n })\n\n\t\tresources.forEach((r) => {\n\t\t\tdelete r.showWork\n\t\t\tr.crews.forEach((crew) => {\n\t\t\t\tdelete crew.showWork\n\t\t\t\tcrew.crews_discipline_rates.forEach((d) => {\n\t\t\t\t\tdelete d.created\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\n\t\tconst toolschange = identical(model.tools(), model.tools_vm())\n\t\tconst contractorchange =\n\t\t\tmodel.viewtype == EditResource\n\t\t\t\t? identical(model.vm().selected.resource, model.form().resource)\n\t\t\t\t: identical(model.crew_vm().selected.capability, model.crew_form().capability)\n\n\t\treturn Promise.all([\n\t\t\tmodel.deleteProjectResource(true)\n\t\t\t,model.deleteProjectTeam(true)\n\t\t\t,toolschange\n\t\t\t\t? Promise.resolve(null)\n\t\t\t\t: model.api.tools.patch.many( model.tools_vm() )\n\t\t\t\t\t.then(function(toolList){\n\t\t\t\t\t\tmodel.tools(toolList)\n\t\t\t\t\t\treturn model.cloningTools()\n\t\t\t\t\t})\n\t\t\t,(\n\t\t\t\tgeolist.length\n\t\t\t\t\t? model.api.geographies.patch.one(geolist[0])\n\t\t\t\t\t: model.api.geographies.fetch.all()\n\t\t\t).then( model.geographies )\n\t\t\t\t,contractorchange\n\t\t\t\t? Promise.resolve(null)\n\t\t\t\t: deleteDisciplineRate(true)\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\treturn deleteCapability(true)\n\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\tmodel.deleteRates([])\n\t\t\t\t\t\t\tmodel.deleteTeams = []\n\t\t\t\t\t\t\treturn model.api.contractors.patch.one(resources[0])\n\t\t\t\t\t\t\t\t.then( prepareResources )\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\n\t\t])\n\t\t.then(function(){\n\t\t\tfetchOrganizationsDisciplines()\n\t\t\tmodel.fetchWorkList('crew_id')\n\t\t\tmodel.fetchWorkList('contractor_id')\n\t\t\tmodel.data.currentRoute('contractors')\n\t\t\tmodel.metaDataLoading(false)\n\t\t\treturn true\n\t\t})\n\t}\n\n\tfunction prepareResources(contractors){\n\t\tcontractors.forEach((contractor) => {\n\t\t\tcontractor.showWork = m.prop(false)\n\t\t\tcontractor.crews.forEach((crew) => {\n\t\t\t\tcrew.showWork = m.prop(false)\n\t\t\t})\n\t\t})\n\n\t\tconst comparisonProp =\n\t\t\tmodel.form().resource.contractor_id\n\t\t\t&& model.form().resource.contractor_id()\n\t\t\t? 'contractor_id'\n\t\t\t: 'contractor_name'\n\n\t\tmodel.resources(\n\t\t\tR.uniqBy(\n\t\t\t\t(c) => c.contractor_id()\n\t\t\t\t,R.sort(\n\t\t\t\t\tR.descend(R.prop('__requestedAt'))\n\t\t\t\t\t,[].concat(\n\t\t\t\t\t\tcontractors\n\t\t\t\t\t\t,model.resources()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\tconst newResource =\n\t\t\tmodel.form().resource.contractor_id\n\t\t\t\t? model.resources().find((p) =>\n\t\t\t\t\tR.prop(comparisonProp, p)()\n\t\t\t\t\t== R.prop(comparisonProp, model.form().resource)()\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\tmodel.data.routeids({\n\t\t\trouteids: model.resources().map(R.prop('contractrecognitionid'))\n\t\t\t,getledgers: false\n\t\t\t,ledgerdetails: false\n\t\t\t,getmatdata: false\n\t\t\t,specificproject: null\n\t\t})\n\n\t\tif(\n\t\t\tnewResource\n\t\t\t&& (\n\t\t\t\t!model.form().resource['__requestedAt']\n\t\t\t\t|| newResource['__requestedAt']\n\t\t\t\t>= model.form().resource['__requestedAt']\n\t\t\t)\n\t\t){\n\n\t\t\tmodel.discipline_vm({})\n\t\t\tmodel.checkMultiple().data = []\n\t\t\tmodel.setOptionsMark(false)\n\n\t\t\tmodel.vm().selected.resource = newResource\n\t\t\tmodel.form().resource = model.cloningResource(false, true)\n\t\t\tmodel.contractor_edit(true)\n\t\t\tif (model.crew_form().capability.crew_name != null){\n\t\t\t\tconst updated_crew = model.form().resource.crews.find(\n\t\t\t\t\t(c) => c.crew_name() == model.crew_form().capability.crew_name()\n\t\t\t\t)\n\t\t\t\tmodel.crew_vm().selected.capability = updated_crew\n\t\t\t\tmodel.crew_form().capability = model.cloningResourceCapability(false, true)\n\t\t\t\tmodel.crew_edit(true)\n\t\t\t\tmodel.masterLIST(true)\n\t\t\t}\n\t\t}\n\t\treturn contractors\n\t}\n\n\tfunction fetchResource(params){\n\t\treturn model.data.fetchResource(\n\t\t\tR.merge(\n\t\t\t\t{props:{}}\n\t\t\t\t,params\n\t\t\t)\n\t\t)\n\t\t.then( prepareResources )\n\t}\n\n\n\tmodel.data.currentRoute('Nothing')\n\tmodel.data.initiateContractFetch\n\t.map(function(i){\n\n\t\tconst ochange = i.ochange || !model.data.routeInitialized()['contractors']\n\n\t\tif ( ochange ){\n\t\t\tmodel.viewtype = ListResource\n\t\t\tmodel.vm().selected.resource = {}\n\t\t\tmodel.deleteDisciplinesTeamsArrays([])\n\t\t\tmodel.deleteDisciplinesResourceArrays([])\n\t\t\tmodel.tools_vm([])\n\t\t\tmodel.disciplinesResources([])\n\t\t\tmodel.deleteTeams = []\n\t\t\tmodel.resources([])\n\t\t\tmodel.deleteRates([])\n\t\t\tmodel.deleteStateProp({})\n\t\t}\n\n\t\tmodel.loading(true)\n\t\tmodel.metaDataLoading(true)\n\t\treturn (\n\t\t\t!i.organization_id\n\t\t\t|| !ochange\n\t\t\t? Promise.resolve([])\n\t\t\t: Promise.all([\n\t\t\t\tfetchResource({ depth: 2 })\n\t\t\t\t,fetchOrganizationsDisciplines()\n\t\t\t\t,model.data.fetchUsers()\n\t\t\t\t\t.then(\n\t\t\t\t\t\tR.concat([nullUser])\n\t\t\t\t\t)\n\t\t\t\t\t.then(model.users)\n\t\t\t\t,model.data.fetchGeographies()\n\t\t\t\t\t.then( model.geographies )\n\t\t\t\t,model.data.fetchTools({})\n\t\t\t\t\t.then(function(toolList){\n\t\t\t\t\t\tmodel.tools(toolList)\n\t\t\t\t\t\tmodel.cloningTools()\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t])\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\t model.loading(false)\n\t\t\t\t model.metaDataLoading(true)\n\t\t\t\t return fetchResource()\n\t\t\t\t .then(function(){\n\t\t\t\t\treturn (\n\t\t\t\t\t\ti.schange || ochange\n\t\t\t\t\t\t? model.fetchWorkList('contractor_id')\n\t\t\t\t\t\t: Promise.resolve([])\n\t\t\t\t\t)\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\tmodel.data.currentRoute('contractors')\n\t\t\t\t\t\tmodel.metaDataLoading(false)\n\t\t\t\t\t\ti.schange = false\n\t\t\t\t\t\ti.ochange = false\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t })\n\t\t\t})\n\n\t})\n\n\n\treturn {\n sendResource\n\t\t, fetchResource\n\t\t, deleteResource\n\t\t, deleteCapability\n\t\t, deleteDisciplineRate\n\t\t, suburbs: model.suburbs\n }\n}\n\n\n/*\n\tModel: Data storage and functions that interact with that data.\n\n\tThe vm represents the view model, any thing to do with the state of the UI\n\tthat doesn't map to a database record is stored on the view model.\n\n\tIt could be whether or not a button is disabled due to a background process.\n\tOr it could be storing how many items are selected in order to render a tally.\n\n*/\nfunction Model(data){\n\n\tconst filteredRateOptions = data.scoped([])\n\tconst metaDataLoading = data.scoped(true)\n\tconst loading = data.scoped(true)\n\tconst teamWorkList = m.prop({})\n\tconst resourceWorkList = m.prop({})\n\tconst loadingMeta = m.prop(true)\n\tconst availableDisciplineSelections = data.scoped([])\n\tconst availableUOMS = data.scoped([])\n\tconst tools = m.prop([])\n\tconst resources = data.scoped([])\n\tconst geographies = m.prop([])\n const suburbs = data.scoped([])\n\tconst deleteTeams = []\n\tconst deleteRates = m.prop([])\n\tconst organizations_disciplines = data.scoped()\n\tconst deleteDisciplinesTeamsArrays = m.prop([])\n\tconst deleteDisciplinesResourceArrays = m.prop([])\n\tconst disciplinesResources = data.scoped([])\n\tconst errors = data.scoped({})\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Tool'\n\t\t\t\t\t,'Contract'\n\t\t\t\t\t,'Invoice'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\tconst CONSTANTdisciplines = data.scoped([])\n\n\tconst restrictedOrgDisc = prop2.merge(\n\t\t[\n\t\t\torganizations_disciplines\n\t\t\t,CONSTANTdisciplines\n\t\t]\n\t).map(([organizationDisciplines, CONSTANTdisciplines]) =>\n\t\tR.differenceWith(\n\t\t\t(a, b) =>\n\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t,organizationDisciplines\n\t\t\t,CONSTANTdisciplines\n\t\t)\n\t)\n\n\tconst permissions = data.permissions\n\t// const forceRedraw =\n\t\tprop2.merge(\t[\n\t\t\tdata.calculated\n\t\t\t,errors\n\t\t\t,metaDataLoading\n\t\t\t,loading\n\t\t])\n\t\t.map(function(){\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tsetTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t\treturn null\n\t\t})\n\n\tconst deleteStateProp = m.prop({})\n\tconst deleteWorkProp = m.prop(false)\n\tconst placeLong = suburbs.map(R.map(s => s.placeLong ))\n\tconst suburbsInput = data.scoped()\n\n\tsuburbsInput.map(\n\t\ttext =>\n\t\t\tdata.api.suburbs.fetch.byTextInput(text)\n\t\t\t.then(suburbs)\n\t)\n\n\tlet editResourcePermissions = m.prop(false)\n\tlet editAssignedToolPermissions = m.prop(false)\n\tlet editToolPermissions = m.prop(false)\n\n\tlet users = data.scoped([])\n\n\n\tlet tools_vm = m.prop([])\n\n\tlet form = m.prop({\n\t\tresource: {\n\t\t\tcrews: []\n\t\t}\n\t})\n\n\tlet crew_form = m.prop({\n\t\tcapability: {\n\t\t\tcrews_discipline_rates: []\n\t\t}\n\t})\n\n function deleteProjectResource(makeAPICalls){\n \treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteDisciplinesResourceArrays().map((c) =>\n\t\t\t\t\tdata.api.disciplines_contractors.remove.one(\n\t\t\t\t\t\tc.disciplines_contractors_id\n\t\t\t\t\t\t,data.selectedVersion().schedule_version_id\n\t\t\t\t\t\t,c.contractor_id\n\t\t\t\t\t\t,c.discipline_id\n\t\t\t\t\t\t,c.contractoruserid\n\t\t\t\t\t\t,c.crewuserid\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t\t.then(function(){\n\n\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\tR.prop('contractor_id')\n\t\t\t\t\t\t,deleteDisciplinesResourceArrays()\n\t\t\t\t\t)\n\t\t\t\t\t.forEach((c) =>\n\t\t\t\t\t\t!R.unnest(\n\t\t\t\t\t\t\tresourceWorkList()[c.contractor_id].workList\n\t\t\t\t\t\t\t.map((p) => p.disciplines )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.length\n\t\t\t\t\t\t\t? delete resourceWorkList()[c.contractor_id]\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t)\n\n\t\t\t\t\tdeleteDisciplinesResourceArrays([])\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t: Promise.resolve([])\n\t}\n\n function deleteProjectTeam(makeAPICalls){\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteDisciplinesTeamsArrays().map((c) =>\n\t\t\t\t\tdata.api.disciplines_contractors_crews.remove.one(\n\t\t\t\t\t\tc.disciplines_contractors_crews_id\n\t\t\t\t\t\t,data.selectedVersion().schedule_version_id\n\t\t\t\t\t\t,c.crew_id\n\t\t\t\t\t\t,c.discipline_id\n\t\t\t\t\t\t,c.crewuserid\n\t\t\t\t\t)\n\t\t\t\t\t&& ((data.coalatedSelectedVersion()[c.crew_id] || {}).forecastedProfits = 0)\n\t\t\t\t)\n\t\t\t)\n\t\t\t\t.then(function(){\n\n\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\tR.prop('crew_id')\n\t\t\t\t\t\t,deleteDisciplinesTeamsArrays()\n\t\t\t\t\t)\n\t\t\t\t\t.forEach((c) =>\n\t\t\t\t\t\t!R.unnest(\n\t\t\t\t\t\t\tteamWorkList()[c.crew_id].workList\n\t\t\t\t\t\t\t.map((p) => p.disciplines )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.length\n\t\t\t\t\t\t\t? delete teamWorkList()[c.crew_id]\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t)\n\n\t\t\t\t\tdeleteDisciplinesTeamsArrays([])\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t: Promise.resolve([])\n\t}\n\n\tlet process_geo = function(geo_name){\n\t\tlet index = R.findIndex(R.propEq('geography_depot', geo_name), geographies())\n\t\tlet geo_item = R.find(R.propEq('placeLong', geo_name), suburbs())\n\t\tif (index == -1 && geo_item ){\n\t\t\tvar new_geography = {\n\t\t\t\tgeography_depot: geo_name\n\t\t\t\t,geography_latitude: Number(geo_item.latitude)\n\t\t\t\t,geography_longitude: Number(geo_item.longitude),\n\t\t\t}\n\t\t\tgeographies().push(new_geography)\n\t\t}\n\t\treturn new_geography\n\t}\n\n\n\n\tlet cloningResource = function(clonemarker, pedit){\n\t\tlet clone = resetForm().resource\n\t\tclone.contractrecognitionid = clonemarker == true ? null : vm().contractrecognitionid\n\t\tclone.contractor_name( clonemarker == true ? vm().selected.resource.contractor_name() + \" (Clone)\" : vm().selected.resource.contractor_name() )\n\t\tclone.organization_id( vm().selected.resource.organization_id() )\n\t\tclone.contractor_yard( vm().selected.resource.contractor_yard())\n\t\tclone.contractor_comfortable_work_zone( vm().selected.resource.contractor_comfortable_work_zone() )\n\t\tclone.contractor_total_rating( vm().selected.resource.contractor_total_rating() )\n\t\tclone.user_id( vm().selected.resource.user_id() )\n\t\tclone.contractor_quality_rating( vm().selected.resource.contractor_quality_rating() )\n\t\tclone.contractor_first_onsite_start_date( vm().selected.resource.contractor_first_onsite_start_date() )\n\t\tclone.contractor_id( clonemarker == true ? \"\" : vm().selected.resource.contractor_id() )\n\t\tclone.contractor_common(\"Not utilized across previous disciplines\")\n\t\tclone.contractor_utilized(\"\")\n\t\tclone.contractor_mixed_crews(0)\n\t\tclone.showWork( vm().selected.resource.showWork() )\n\t\tclone.crews = []\n\t\tclone.__requestedAt = vm().selected.resource.__requestedAt\n\t\tlet reAPPLYC = crew_vm().selected.capability\n\t\tvm().selected.resource.crews.forEach((c) => {\n\t\t\tcrew_vm().selected.capability = c\n\t\t\tclone.crews.push( cloningResourceCapability(false, pedit) )\n\t\t})\n\t\tcrew_vm().selected.capability = reAPPLYC\n\t\tform().resource = clone\n return clone\n\t}\n\n\n\tvar cloningResourceCapability = function(clonemarker, pedit){\n\t\tlet crew_clone = resetCrewForm().capability\n\t\tcrew_clone.contractrecognitionid = clonemarker == false && pedit == true ? crew_vm().selected.capability.contractrecognitionid : null\n\t\tcrew_clone.contractor_id( clonemarker == false && pedit == true ? crew_vm().selected.capability.contractor_id() : \"\")\n\t\tcrew_clone.crew_name( clonemarker == true ? crew_vm().selected.capability.crew_name() + \" (Clone)\" : crew_vm().selected.capability.crew_name() )\n\t\tcrew_clone.crew_id( clonemarker == false && pedit == true ? crew_vm().selected.capability.crew_id() : \"\")\n\t\tcrew_clone.teamresourcename( crew_vm().selected.capability.teamresourcename )\n\t\tcrew_clone.user_id(crew_vm().selected.capability.user_id())\n\t\tcrew_clone.crew_invalid(\"\")\n\t\tcrew_clone.crew_excess(\"\")\n\t\tcrew_clone.crew_utilized(\"\")\n\t\tcrew_clone.crew_common(\"Not utilized across previous disciplines\")\n\t\tcrew_clone.crew_work_completed(0)\n\t\tcrew_clone.showWork( crew_vm().selected.capability.showWork() )\n\t\tcrew_clone.crews_discipline_rates = []\n\t\tcrew_vm().selected.capability.crews_discipline_rates.forEach((rate) => {\n\t\t\tcrew_clone.crews_discipline_rates.push(\n\t\t\t\tcloningResourceCapabilityRate(rate, pedit)\n\t\t\t)\n\t\t})\n\t\t// crew_form().capability = crew_clone\n return crew_clone\n\t}\n\n\tvar cloningResourceCapabilityRate = function(rate, clonemarker){\n\t\tlet newDR = resetDRateForm()\n\t\tif (rate){\n\t\t\tnewDR.contractrecognitionid = !clonemarker ? null : rate.contractrecognitionid\n\t\t\tnewDR.crews_discipline_rates_id( !clonemarker ? '' : rate.crews_discipline_rates_id() )\n\t\t\tnewDR.crew_id( !clonemarker ? '' : rate.crew_id() )\n\t\t\tnewDR.organizations_disciplines_id( rate.organizations_disciplines_id() )\n\t\t\tnewDR.crews_discipline_rates_rate( rate.crews_discipline_rates_rate() )\n\t\t\tnewDR.crews_discipline_rates_description( rate.crews_discipline_rates_description() )\n\t\t\tnewDR.crews_discipline_rates_name( rate.crews_discipline_rates_name() )\n\t\t\tnewDR.crews_discipline_rates_feedback_rate( !clonemarker ? 0 : rate.crews_discipline_rates_feedback_rate() )\n\t\t\tnewDR.crews_discipline_rates_uom( rate.crews_discipline_rates_uom() )\n\t\t\tnewDR.organizations_disciplines_nominal_expenditure_rate( rate.organizations_disciplines_nominal_expenditure_rate() )\n\t\t} else {\n\t\t\tnewDR.created = true\n\t\t}\n\t\tnewDR.newcdr = !clonemarker || !rate ? true : false\n\t\treturn newDR\n\t}\n\n\n //todo-james repetitive\n let deleteResource = function(r){\n let index = R.findIndex(function(chr) { return chr.contractor_id() == r.contractor_id()}, resources())\n resources().splice(index, 1)\n vm().selected.resource = {}\n }\n\n let deleteDisciplineR = function(discipline){\n\t\t\tlet index =\n\t\t\t\tcrew_form().capability.crews_discipline_rates\n\t\t\t\t.findIndex((chr) =>\n\t\t\t\t\tchr.crews_discipline_rates_name() == discipline.crews_discipline_rates_name()\n\t\t\t\t\t&& chr.crews_discipline_rates_id() == discipline.crews_discipline_rates_id()\n\t\t\t\t\t&& chr.key == discipline.key\n\t\t\t\t)\n\n\t\t\tcrew_form().capability.crews_discipline_rates.splice(index, 1)\n discipline_vm({})\n }\n\n let deleteCapability = function(){\n let index = R.findIndex(function(chr) { return chr.crew_id() == crew_vm().selected.capability.crew_id()}, form().resource.crews)\n form().resource.crews.splice(index, 1)\n crew_vm().selected.capability = {}\n }\n\n\n\tvar vm = m.prop({\n\t\tpending: m.prop(false)\n\t\t,selected: {\n\t\t\tresource: {}\n\t\t}\n\t})\n\n\tvar crew_vm = m.prop({\n\t\tpending: m.prop(false)\n\t\t,selected: {\n\t\t\tcapability: {}\n\t\t}\n\t})\n\n\tvar discipline_vm = m.prop({})\n\tlet setOptionsMark = m.prop(false)\n\tlet savingProp = m.prop(false)\n\tlet checkMultiple = m.prop({\n\t\tstatus: false\n\t\t,data: []\n\t})\n\n\t// repetitive\n\t\tlet check_dnames = function(returnBoolean){\n\t\t\tconst count = R.countBy( chr =>\n\t\t\t\tchr.crews_discipline_rates_name()\n\t\t\t\t, crew_form().capability.crews_discipline_rates || []\n\t\t\t)\n\t\t\tconst errorArray = [\n\t\t\t\t(d, prop='crews_discipline_rates_name') => !d[prop]()\n\t\t\t\t\t? `Discipline Name must not be empty` : null\n\t\t\t\t,(d, prop='crews_discipline_rates_name') => count[d[prop]()] > 1\n\t\t\t\t\t? `Discipline Names must not be duplicated, check ` + d[prop]() : null\n\t\t\t]\n\n\t\t\treturn elements.errorAlert(\n\t\t\t\t\t`To save, `\n\t\t\t\t\t,' and '\n\t\t\t\t\t,''\n\t\t\t\t\t,crew_form().capability.crews_discipline_rates || []\n\t\t\t\t\t,errorArray\n\t\t\t\t\t,returnBoolean\n\t\t\t\t\t,false\n\t\t\t)\n\t\t}\n\n\t\tlet check_cnames = function(){\n\t\t\treturn resources().some((res) =>\n\t\t\t\t\t!res.contractor_name()\n\t\t\t\t)\n\t\t}\n\t\tlet check_crew_names = function(){\n\t\t\treturn form().resource.crews.some(\n\t\t\t\t\t(crew) =>\n\t\t\t\t\t!crew.crew_name()\n\t\t\t\t)\n\t\t}\n\n\n\tvar resetForm = function(){\n\t\tlet form = {\n\t\t\tresource: {\n\t\t\t\torganization_id: m.prop(\"\")\n\t\t\t\t,contractor_id: m.prop(uuid.v4())\n\t\t\t\t,contractor_name: m.prop(\"\")\n\t\t\t\t,contractor_yard: m.prop(\"\")\n\t\t\t\t,contractor_comfortable_work_zone: m.prop(\"Suburban\")\n\t\t\t\t,contractor_mixed_crews: m.prop(0)\n\t\t\t\t,contractor_first_onsite_start_date: m.prop(new Date().getTime())\n\t\t\t\t,contractor_total_rating: m.prop(0)\n\t\t\t\t,contractor_quality_rating: m.prop(0.8)\n\t\t\t\t,contractor_common: m.prop(\"Not utilized across previous disciplines\")\n\t\t\t\t,contractor_utilized: m.prop(\"\")\n\t\t\t\t,user_id: m.prop()\n\t\t\t\t,crews: []\n\t\t\t\t,showWork: m.prop(false)\n\t\t\t}\n\t\t}\n\t\treturn form\n\t}\n\n\tvar resetCrewForm = function(){\n\t\tlet crew_form = {\n\t\t\tcapability: {\n\t\t\t\tteamresourcename: m.prop(\"\")\n\t\t\t\t,contractor_id: m.prop(\"\")\n\t\t\t\t,crew_id: m.prop(\"\")\n\t\t\t\t,crew_invalid: m.prop(\"\")\n\t\t\t\t,crew_excess: m.prop(\"\")\n\t\t\t\t,crew_utilized: m.prop(\"\")\n\t\t\t\t,crew_name: m.prop(\"\")\n\t\t\t\t,crew_rating: m.prop(0)\n\t\t\t\t,user_id: m.prop(null)\n\t\t\t\t,crew_common: m.prop(\"Not utilized across previous disciplines\")\n\t\t\t\t,crew_work_completed: m.prop(0)\n\t\t\t\t,crews_discipline_rates: []\n\t\t\t\t,showWork: m.prop(false)\n\t\t\t}\n\t\t}\n\t\treturn crew_form\n\t}\n\n\tvar resetDRateForm = function(){\n\t\treturn {\n\t\t\torganizations_disciplines_id: m.prop(\"\")\n\t\t\t,crews_discipline_rates_id : m.prop(\"\")\n\t\t\t,crew_id : m.prop(\"\")\n\t\t\t,newcdr: true\n\t\t\t,created: false\n\t\t\t,crews_discipline_rates_rate: m.prop(1)\n\t\t\t,crews_discipline_rates_description: m.prop(\"\")\n\t\t\t,crews_discipline_rates_name: m.prop(\"\")\n\t\t\t,crews_discipline_rates_feedback_rate: m.prop(0)\n\t\t\t,crews_discipline_rates_uom: m.prop(null)\n\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t,organizations_disciplines_nominal_expenditure_rate: m.prop(0)\n\t\t\t,createcontracts: m.prop(false)\n\t\t}\n\t}\n\n\tlet DeleteDisabled = function(r){\n\t\tlet state = false\n\t\tif ( resources().length == 0\n\t\t\t|| r.contractor_name == null\n\t\t\t|| stillWorking(true, null, r)\n\t\t\t|| loadingMeta()\n\t\t) {state = true}\n\t\treturn state\n\t}\n\n\tlet DeleteDisabledCapability = function(team){\n\t\treturn form().resource.crews.length == 0\n\t\t\t|| team.crew_name == null\n\t\t\t|| stillWorking(true, team)\n\t\t\t|| loadingMeta()\n\t}\n\n\tlet crew_edit = m.prop(false)\n\n\tlet contractor_edit = m.prop(false)\n\n\tlet SaveRDisabled = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.contractor_name()\n\t\t\t,resources().filter((r) =>\n\t\t\t\tr.contractor_id() != form().resource.contractor_id()\n\t\t\t).concat(form().resource)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.contractor_name() ? `Resource Name must not be empty` : null\n\t\t\t,(d) => !d.contractor_comfortable_work_zone() ? `Work Zone must not be empty` : null\n\t\t\t,(d) => !d.contractor_yard() ? `Base Of Operations must not be empty` : null\n\t\t\t,(d) =>\tcount[d.contractor_name()] > 1 ? `Resource Names must not be duplicated` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t,[form().resource]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,Object.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\n\tlet SaveCDisabled = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.crew_name()\n\t\t\t, form().resource.crews.filter((c) =>\n\t\t\t\tc.crew_id() != crew_form().capability.crew_id()\n\t\t\t).concat(crew_form().capability)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.crew_name() ? `Team Name must not be empty` : null\n\t\t\t,(d) => count[d.crew_name()] > 1 ? `Team Names must not be duplicated`: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and '\n\t\t\t\t,''\n\t\t\t\t,[crew_form().capability]\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t,null\n\t\t\t\t,Object.keys(errors())\n\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t.concat(check_dnames(true))\n\t\t\t\t\t.filter((a) => a)\n\t\t\t)\n\t}\n\n const stillWorking = function(returnBoolean, team, r){\n\t\tconst resource = r || vm().selected.resource\n\t\tconst crew = team || crew_vm().selected.capability\n\t\tconst indexArray = ['','','']\n \tconst errorArray = [\n\t\t\t(d) => {\n\t\t\t\tif (d.contractor_id){\n\n\t\t\t\t\tvar Dindex = resourceWorkList()[d.contractor_id()]\n\t\t\t\t\tvar Tindex = crew.crew_id && teamWorkList()[crew.crew_id()]\n\t\t\t\t\tvar Cindex = checkMultiple().data.length\n\t\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\t\tR.pluck(\n\t\t\t\t\t\t\t\t'disciplines'\n\t\t\t\t\t\t\t\t,(teamWorkList()[crew.crew_id()] || {workList:[]}).workList\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.filter((dc) =>\n\t\t\t\t\t\t\tcheckMultiple().data.find((cd) =>\n\t\t\t\t\t\t\t\tcd.crews_discipline_rates_name()\n\t\t\t\t\t\t\t\t== dc\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t).length\n\t\t\t\t\t\t: [].length\n\n\t\t\t\t\tindexArray[0] = Dindex && !form().resource.contractor_id && !crew_form().capability.crew_id\n\t\t\t\t\t\t? `resource from working projects before deleting their records`\n\t\t\t\t\t\t: ''\n\t\t\t\t\tindexArray[1] = Dindex && Tindex && !crew_form().capability.crew_id\n\t\t\t\t\t\t? `team from working projects before deleting their records`\n\t\t\t\t\t\t: ''\n\t\t\t\t\tindexArray[2] = Dindex && Tindex && Cindex\n\t\t\t\t\t\t? `discipline from working projects of this team before deleting their records`\n\t\t\t\t\t\t: ''\n\t\t\t\t}\n\n\t\t\t\treturn Dindex && !form().resource.contractor_id && !crew_form().capability.crew_id\n\t\t\t\t|| Dindex && Tindex && !crew_form().capability.crew_id\n\t\t\t\t|| Dindex && Tindex && Cindex\n\t\t\t\t\t? indexArray.filter((m) => m).join()\n\t\t\t\t\t: ''\n\t\t\t}\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t\t`Remove this `\n\t\t\t\t,''\n\t\t\t\t,'. Including those from other schedules'\n\t\t\t\t,[resource]\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t)\n }\n\n\tlet getUser = function(resource){\n\t\tconst userObj = users().find(\n\t\t\t\t(chr) => chr.user_id() == resource.user_id()\n\t\t\t)\n\t\treturn userObj\n\t\t\t? userObj.user_username()\n\t\t\t: null\n\t}\n\n\tlet viewtype = ListResource\n\n permissions.map(function(p){\n\n\t\teditResourcePermissions(Permissions.hasRead(p, 'resource_management'))\n\t\teditToolPermissions(Permissions.hasRead(p, 'tool_management'))\n\t\teditAssignedToolPermissions(Permissions.hasRead(p, 'assigned_tools'))\n\n\t\tm.redraw()\n\n\t\treturn null\n\t})\n\n\n\tlet baseFilterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: \"contractor_name\", better_name: \"Resource Name\"}\n\t\t\t,{ugly_name: \"contractor_yard\", better_name: \"Resource Base\"}\n\t\t\t,{ugly_name: \"contractor_comfortable_work_zone\", better_name: \"Resource Comfortable Work Zone\"}\n\t\t\t,{ugly_name: \"contractor_first_onsite_start_date\", better_name: \"Resource First Start Date\"}\n\t\t\t,{ugly_name: \"contractor_quality_rating\", better_name: \"Resource Quality Rating\"}\n\t\t\t,{ugly_name: \"crews_discipline_rates_rate\", better_name: \"Discipline Rate\"}\n\t\t\t,{ugly_name: \"crews_discipline_rates_name\", better_name: \"Discipline Name\"}\n\t\t\t,{ugly_name: \"crews_discipline_rates_description\", better_name: \"Discipline Description\"}\n\t\t\t,{ugly_name: \"crews_discipline_rates\", better_name: \"Amount Of Disciplines\" }\n\t\t\t,{ugly_name: \"crews\", better_name: \"Amount Of Teams\" }\n\t\t\t,{ugly_name: \"crew_name\", better_name: \"Team Name\" }\n\t\t]\n\t\t,uniqueArrays: [\n\t\t\t{array_name: 'crews_discipline_rates', unique: \"crews_discipline_rates_name\"}\n\t\t]\n\t\t,template: {\n\t\t\tcontractor_name: \"\"\n\t\t\t,contractor_yard: \"\"\n\t\t\t,contractor_comfortable_work_zone: \"\"\n\t\t\t,contractor_first_onsite_start_date: \"date\"\n\t\t\t,contractor_quality_rating: 0\n\t\t\t,crews: [{\n\t\t\t\tcrew_name: \"\"\n\t\t\t\t,crews_discipline_rates: [{\n crews_discipline_rates_rate: 0\n ,crews_discipline_rates_name: \"\"\n\t\t\t\t\t,crews_discipline_rates_description: \"\"\n }]\n\t\t\t}]\n\t\t}\n\t}\n\tlet I = R.identity\n\tlet resourceFilters = {\n\t\tmarker: \"Resources\"\n\t\t,filters: m.prop([])\n\t\t,disabled: () => resources().length == 0\n\t\t,changeNames: baseFilterFunction.changeNames\n\t\t,uniqueArrays: baseFilterFunction.uniqueArrays\n\t\t,template: baseFilterFunction.template\n\t\t,scoped: data.scoped\n\t\t,tableHeadings: [\n\t\t\t'Manage'\n\t\t\t, 'Resource'\n\t\t\t, 'Rating'\n\t\t\t, 'Assigned User Responsibility'\n\t\t\t, 'Expenditure'\n\t\t\t, 'Forecasted Expenditure'\n\t\t\t, 'Teams'\n\t\t\t, 'Scheduled Work'\n\t\t]\n\t\t,resources: R.pipe(resources, R.reverse)\n\n\t\t,resourceView: (resource) => [\n\t\t\telements.checkbox({\n\t\t\t\tonchange: m.withAttr('checked', function(checked){\n\t\t\t\t\tvm().selected.resource = checked ? resource : {}\n\t\t\t\t})\n\t\t\t\t,checked: (vm().selected.resource.contractor_id || I)() == resource.contractor_id()\n\t\t\t\t,disabled: !(vm().selected.resource.contractor_id || I)() == resource.contractor_id()\n\t\t\t})\n\t\t\t,resource.contractor_name()\n\t\t\t,Number(resource.contractor_quality_rating()).toFixed(2)\n\n\t\t\t,getUser(resource)\n\n\t\t\t,!data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: R.find(\n\t\t\t\t\t(a) => a.crew_id\n\t\t\t\t\t== resource.contractor_id()\n\t\t\t\t\t,deleteDisciplinesResourceArrays()\n\t\t\t\t)\n\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\tdata.coalatedSelectedVersion()[resource.contractrecognitionid]\n\t\t\t\t\t\t? \t\t\t\t\t\t\tdata.coalatedSelectedVersion()[resource.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t+ data.coalatedSelectedVersion()[resource.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t\t: 0\n\t\t\t\t\t)\n\n\t\t\t,!data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: R.find(\n\t\t\t\t\t(a) => a.crew_id\n\t\t\t\t\t== resource.contractor_id()\n\t\t\t\t\t,deleteDisciplinesResourceArrays()\n\t\t\t\t)\n\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tdata.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t[resource.contractrecognitionid]\n\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t).forecastedProfits\n\t\t\t\t\t)\n\n\t\t\t,resource.crews.length\n\n\t\t\t,!data.readProjectPermissions()\n\t\t\t\t? elements.alert(`info`, \"Requires Project Permissions are required to see scheduled works\")\n\t\t\t\t: loadingMeta()\n\t\t\t\t\t? ' ... '\n\t\t\t\t\t: !resourceWorkList()[resource.contractor_id()]\n\t\t\t\t\t\t? \"This Resource has no scheduled work\"\n\t\t\t\t\t\t: !resourceWorkList()[resource.contractor_id()].workList.length\n\t\t\t\t\t\t&& resourceWorkList()[resource.contractor_id()].totalcount\n\t\t\t\t\t\t&& !deleteDisciplinesResourceArrays().some((r) =>\n\t\t\t\t\t\t\tr.contractor_id == resource.contractor_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? 'Busy on other scheduled works'\n\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tresource.showWork(\n\t\t\t\t\t\t\t\t\t\t\t\tresource.showWork()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,resource.showWork()\n\t\t\t\t\t\t\t\t\t\t? \"Hide Detail\"\n\t\t\t\t\t\t\t\t\t\t: \"Show Works\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,resource.showWork()\n\t\t\t\t\t\t\t\t&& deleteDisciplinesResourceArrays().length\n\t\t\t\t\t\t\t\t\t? elements.confirmDelete(\n\t\t\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\t\t\tPromise.all([\n\t\t\t\t\t\t\t\t\t\t\t\tdeleteProjectResource(true)\n\t\t\t\t\t\t\t\t\t\t\t\t,deleteProjectTeam(true)\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t.then(() => fetchWorkList('contractor_id'))\n\t\t\t\t\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t\t\t\t\t, R.F\n\t\t\t\t\t\t\t\t\t\t, deleteWorkProp\n\t\t\t\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t\t\t\t, 'Remove Works'\n\t\t\t\t\t\t\t\t\t\t, 'Irrecoverable'\n\t\t\t\t\t\t\t\t\t\t, reinstateWork\n\t\t\t\t\t\t\t\t\t\t, R.T\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t])\n\n\n\t\t\t,!resource.showWork()\n\t\t\t|| !resourceWorkList()[resource.contractor_id()]\n\t\t\t\t? ''\n\t\t\t\t: resourceWorkList()[resource.contractor_id()].workList.length\n\t\t\t\t&& resourceWorkList()[resource.contractor_id()].totalcount\n\t\t\t\t\t? elements.table(data, ['Project', 'Disciplines/Tasks'],\n\t\t\t\t\t\tworkMapping(\n\t\t\t\t\t\t\tresourceWorkList\n\t\t\t\t\t\t\t,deleteDisciplinesResourceArrays\n\t\t\t\t\t\t\t,resource\n\t\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: ''\n\n\t\t]\n\n\t\t,sortField: 'contractor_name'\n\t}\n\n\tlet crewFilters = {\n\t\tmarker: \"Teams\"\n\t\t,filters: m.prop([])\n\t\t,disabled: () => form().resource.crews.length == 0\n\t\t,changeNames: baseFilterFunction.changeNames\n\t\t,uniqueArrays: baseFilterFunction.uniqueArrays\n\t\t,template: baseFilterFunction.template.crews[0]\n\t\t,scoped: data.scoped\n\t}\n\n\tlet crewratesFilters = {\n\t\tmarker: \"Capabilities\"\n\t\t,filters: m.prop([])\n\t\t,disabled: () => crew_form().capability.crews_discipline_rates.length == 0\n\t\t,changeNames: baseFilterFunction.changeNames\n\t\t,uniqueArrays: baseFilterFunction.uniqueArrays\n\t\t,template: baseFilterFunction.template.crews[0].crews_discipline_rates[0]\n\t\t,scoped: data.scoped\n\t}\n\n\tlet getFilterInputs =\n\t\tR.pipe(\n\t\tgetFilters,\n\t\tR.prop('generatedElements')\n\t)\n\n\n\tfunction getFilters(datainput){\n\t\treturn filterView( datainput.template, datainput.filters(), datainput.changeNames, datainput.uniqueArrays, datainput.disabled, datainput.marker, data.scoped )\n\t}\n\n\n\tgetFilterInputs(crewratesFilters)\n\tgetFilterInputs(crewFilters)\n\n\tconst masterLIST = function(mcreate){\n\t\tif (mcreate){\n\t\t\tCONSTANTdisciplines(\n\t\t\t\tR.unnest(\n\t\t\t\t\tR.partition(\n\t\t\t\t\t\t(c) => c.created,\n\t\t\t\t\t\tcrew_form().capability.crews_discipline_rates\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\treturn ListProcessing(\n\t\t\t\tCONSTANTdisciplines()\n\t\t\t\t,crewratesFilters.filters()\n\t\t\t\t,CONSTANTdisciplines().filter((c) => c.created).length > 0\n\t\t\t\t\t? null\n\t\t\t\t\t: \"discipline_order\"\n\t\t\t\t,filteredRateOptions\n\t\t\t)\n\t}\n\n\tlet cloningTools = function(){\n\t\tlet newList = tools().map((t) => {\n\t\t\tlet newtool = {\n\t\t\t\ttools_id: m.prop( t.tools_id() )\n\t\t\t\t,crew_id: m.prop( t.crew_id() )\n\t\t\t\t,teamresourcename: m.prop( t.teamresourcename )\n\t\t\t\t,organization_id: m.prop( t.organization_id())\n\t\t\t\t,tools_description: m.prop( t.tools_description() )\n\t\t\t\t,tools_name: m.prop(t.tools_name())\n\t\t\t\t,tools_condition: m.prop(t.tools_condition())\n\t\t\t\t,tools_location: m.prop(t.tools_location())\n\t\t\t\t,tools_ownership: m.prop(t.tools_ownership() )\n\t\t\t\t,tools_type: m.prop(t.tools_type())\n\t\t\t\t,assigneduser: t.assigneduser\n\t\t\t}\n\t\t\treturn newtool\n\t\t})\n\t\ttools_vm( newList )\n\t}\n\n\n\n\tconst setOptions = function(value, prop){\n\t\tvalue || value == false || value == '' || value == 0\n\t\t\t? checkMultiple().data\n\t\t\t\t.forEach((d) => {\n\t\t\t\t\td[prop](value)\n\t\t\t\t})\n\t\t\t: null\n\t\treturn checkMultiple().data[0][prop]()\n\t}\n\n\tconst adjustPercenageValue = data.scoped(0)\n\tconst adjustPercenage = (value, dataObject) => {\n\t\tR.map(\n\t\t\t(aitem) =>\n\t\t\t\t[\n\t\t\t\t\t'crews_discipline_rates_rate'\n\t\t\t\t]\n\t\t\t\t.forEach((iRate) => {\n\t\t\t\t\taitem[iRate](\n\t\t\t\t\t\taitem[iRate]() * ( 1 + Number(value/100) )\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t,dataObject\n\t\t)\n\t}\n\n\tconst createContractsCheckbox =\n\t\t(ctrl) =>\n\t\t\telements.list([\n\t\t\t\tm('label.control-label.mb1', 'Create Financial Contracts')\n\t\t\t\t,elements.checkbox({\n\t\t\t\t\tonchange: m.withAttr('checked', (value) => setOptions(value, 'createcontracts'))\n\t\t\t\t\t,title: \"Create contracts for this item to register pay for this team when work is completed\"\n\t\t\t\t\t,checked: ctrl.model.checkMultiple().data.some((r) => r.createcontracts())\n\t\t\t\t})\n\t\t\t])\n\n\tconst detailPaneInputs = function(D, ctrl){\n\n\t\tconst rateItem = () => checkMultiple().data[0]\n\t\treturn [\n\t\t\telements.list(\n\t\t\t\t[\n\t\t\t\t\tctrl.model.SaveCDisabled(true)\n\t\t\t\t\t|| ctrl.model.check_dnames(true)\n\t\t\t\t\t|| identical(ctrl.model.crew_vm().selected.capability, ctrl.model.crew_form().capability)\n\t\t\t\t\t&& identical(ctrl.model.tools(), ctrl.model.tools_vm())\n\t\t\t\t\t\t? m('button.btn', {\n\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t}, 'Save')\n\t\t\t\t\t\t: elements.action('Save', ctrl.intent.sendResource, ctrl.model.savingProp)\n\t\t\t\t]\n\t\t\t\t.concat(\n\t\t\t\t\telements.undoDiscard({\n\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteDisciplineRate()\n\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t!!ctrl.model.stillWorking(true)\n\t\t\t\t\t\t\t\t\t\t|| ctrl.model.checkMultiple().data.length == 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\tidentical(\n\t\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability\n\t\t\t\t\t\t\t\t\t,ctrl.model.crew_form().capability\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\t\tcrew_form().capability = cloningResourceCapability(false, true)\n\t\t\t\t\t\t\t\t\tcheckMultiple().status = false\n\t\t\t\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\t\t\t\tsetOptionsMark(false)\n\t\t\t\t\t\t\t\t\tdeleteRates([])\n\t\t\t\t\t\t\t\t\tcloningTools()\n\t\t\t\t\t\t\t\t\tmasterLIST(true)\n\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: `Discard all changes made to these tools since last saving them`\n\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t\t,check_dnames()\n\t\t\t,crew_form().capability.crews_discipline_rates\n\t\t\t&& organizations_disciplines()\n\t\t\t&& organizations_disciplines().length\n\t\t\t== crew_form().capability.crews_discipline_rates.length\n\t\t\t&& crew_form().capability.crews_discipline_rates.every((cdr) => cdr.organizations_disciplines_id())\n\t\t\t\t? `This team is capable of all organizational works`\n\t\t\t\t: ''\n\n\t\t\t,rateItem()\n\t\t\t&& rateItem().crews_discipline_rates_id\n\t\t\t&& checkMultiple().data.length == 1\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\torganizations_disciplines().length\n\t\t\t\t\t\t== crew_form().capability.crews_discipline_rates.length\n\t\t\t\t\t\t&& crew_form().capability.crews_discipline_rates.every((cdr) => cdr.organizations_disciplines_id())\n\t\t\t\t\t\t|| rateItem().crews_discipline_rates_id()\n\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\tm('label.control-label.mb1', 'Discipline Name ')\n\t\t\t\t\t\t\t\t, rateItem().crews_discipline_rates_name()\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t: m('label.control-label.mb1'\n\t\t\t\t\t\t\t\t,'Discipline Name '\n\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t() => rateItem().crews_discipline_rates_name()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\t\t\trestrictedOrgDisc\n\t\t\t\t\t\t\t\t\t\t\t,(v) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\t\t\t\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.find( R.propEq('orgDisciplineNameDescription', v) )\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| organizations_disciplines().find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.propEq(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, rateItem().organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t\t\tv || v == ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t? rateItem().crews_discipline_rates_name(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj.organizations_disciplines_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: v\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t){\n\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().crews_discipline_rates_uom(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_uom\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().organizations_disciplines_id(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().crews_discipline_rates_description(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_description\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().crews_discipline_rates_rate(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.organizations_disciplines_nominal_rate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().organizations_disciplines_nominal_expenditure_rate(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.organizations_disciplines_nominal_expenditure_rate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t} else if( !ReturnedAutocompleteObj ){\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().crews_discipline_rates_uom(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\trateItem().organizations_disciplines_id(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t!rateItem().crews_discipline_rates_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? rateItem().crews_discipline_rates_rate(1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn ReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t\t\t\t\t: rateItem().crews_discipline_rates_name()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,'orgDisciplineNameDescription'\n\t\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\t\tkey: rateItem().key\n\t\t\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& organizations_disciplines().length\n\t\t\t\t\t\t\t\t\t\t\t\t\t== crew_form().capability.crews_discipline_rates.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& crew_form().capability.crews_discipline_rates.every((cdr) => cdr.organizations_disciplines_id())\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t, 'Description '\n\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t() => rateItem().crews_discipline_rates_description()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\trateItem().crews_discipline_rates_description\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\ttitle: \"Description of the discipline\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t, 'Unit of Measure'\n\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t() => rateItem().crews_discipline_rates_uom()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\t\tavailableUOMS\n\t\t\t\t\t\t\t\t\t\t,(value) => setOptions(value, 'crews_discipline_rates_uom')\n\t\t\t\t\t\t\t\t\t\t,'organizations_disciplines_uom'\n\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t,'Work Rate Per Day'\n\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Work Rate Per Day'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: rateItem().crews_discipline_rates_rate\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,data.editContractPermissions()\n\t\t\t\t\t&& checkMultiple().data.every(R.prop('newcdr'))\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Pay Amount Per UOM')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => makeMoney(rateItem().organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Pay Amount Per UOM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: rateItem().organizations_disciplines_nominal_expenditure_rate\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmax: 0\n\t\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,title: `Average amount that would be paid when a team or resource conducts this discipline. May be altered for specific teams via financials and the contract selection`\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: data.readContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Pay Amount Per UOM')\n\t\t\t\t\t\t,makeMoney(rateItem().organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t\t,errors()['Pay Amount Per UOM']\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t`warning`\n\t\t\t\t\t\t, `Pay Amounts must be negative as this is money that would be expenditures of the organization`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\t\t,createContractsCheckbox(ctrl)\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('button.btn.btn-secondary', {\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tadjustPercenage(adjustPercenageValue(), checkMultiple().data)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 'Adjust')\n\t\t\t\t\t\t,m('label.control-label.mb1' ,' Rates by ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => adjustPercenageValue()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Rate Adjustment'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: adjustPercenageValue\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('label.control-label.mb1' ,'Percent')\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t,'Performance'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,rateItem().crews_discipline_rates_feedback_rate() != null\n\t\t\t\t\t\t\t? rateItem().crews_discipline_rates_feedback_rate()\n\t\t\t\t\t\t\t: 'I have not calculated a Performance value yet'\n\t\t\t\t\t])\n\n\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\tcheckMultiple().data.length > 1\n\t\t\t\t\t\t? [\n\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm('label.control-label.mb1', 'Discipline Name')\n\t\t\t\t\t\t\t\t,ctrl.model.checkMultiple().data\n\t\t\t\t\t\t\t\t.map((s) =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t'p.pv1.ma0'\n\t\t\t\t\t\t\t\t\t\t,s.crews_discipline_rates_name()\n\t\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t\t+s.crews_discipline_rates_description()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t\t\t, 'Unit of Measure'\n\t\t\t\t\t\t\t\t\t, autocomplete.all(\n\t\t\t\t\t\t\t\t\t\tavailableUOMS\n\t\t\t\t\t\t\t\t\t\t,(value) => setOptions(value, 'crews_discipline_rates_uom')\n\t\t\t\t\t\t\t\t\t\t,'organizations_disciplines_uom'\n\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\tstyle: { height: '3em' }\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t\t\t,'Work Rate Per Day'\n\t\t\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Work Rate Per Day'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'crews_discipline_rates_rate')\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t,createContractsCheckbox(ctrl)\n\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\tm('button.btn.btn-secondary', {\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\tadjustPercenage(adjustPercenageValue(), checkMultiple().data)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 'Adjust')\n\t\t\t\t\t\t\t\t,m('label.control-label.mb1' ,' Rates by ')\n\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t() => adjustPercenageValue()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Rate Adjustment'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: adjustPercenageValue\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('label.control-label.mb1' ,'Percent')\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: []\n\t\t\t\t]\n\n\t\t\t,crew_form().capability.crews_discipline_rates\n\t\t\t&& organizations_disciplines()\n\t\t\t&& organizations_disciplines().length\n\t\t\t&& organizations_disciplines().length\n\t\t\t!= crew_form().capability.crews_discipline_rates.length\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: 'Apply a set of the organizations default capabilities'\n\t\t\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\t\t\tcrew_form().capability.crews_discipline_rates =\n\t\t\t\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t\t\t\t.filter((ods) =>\n\t\t\t\t\t\t\t\t\t\t!crew_form().capability.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t\t.find((cr) =>\n\t\t\t\t\t\t\t\t\t\t\tcr.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t== ods.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map((o) => {\n\t\t\t\t\t\t\t\t\t\tconst newD = cloningResourceCapabilityRate()\n\n\t\t\t\t\t\t\t\t\t\tnewD.crews_discipline_rates_uom(\n\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_uom\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tnewD.organizations_disciplines_id(\n\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tnewD.crews_discipline_rates_rate(\n\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_nominal_rate\n\t\t\t\t\t\t\t\t\t\t\t|| 1\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tnewD.crews_discipline_rates_name(\n\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_name\n\t\t\t\t\t\t\t\t\t\t\t// o.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tnewD.crews_discipline_rates_description(\n\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_description\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\treturn newD\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\tcrew_form().capability.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t\t.filter((cr) => cr.organizations_disciplines_id())\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\tcheckMultiple().status = true\n\t\t\t\t\t\t\t\tdiscipline_vm(crew_form().capability.crews_discipline_rates[0])\n\t\t\t\t\t\t\t\tmasterLIST(true)\n\n\t\t\t\t\t\t\t\tcrew_form().capability.crews_discipline_rates\n\t\t\t\t\t\t\t\t.forEach((a) => checkMultiple().data.push(a))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Apply'\n\t\t\t\t\t)\n\t\t\t\t\t,m(`label`, ' All Organization Capabilities')\n\t\t\t\t])\n\t\t\t\t: null\n\t\t]\n\t}\n\tlet detailsPaneOpen = () => discipline_vm().crews_discipline_rates_id || checkMultiple().data.length > 0\n\n\tfunction reinstateWork(){\n\t\tdeleteDisciplinesResourceArrays()\n\t\t\t.map((w) =>\n\t\t\t\tresourceWorkList()[w.contractor_id]\n\t\t\t\t.workList.find((p) => p.project == w.project_name)\n\t\t\t\t.disciplines\n\t\t\t\t.push(w)\n\t\t\t)\n\t\tdeleteDisciplinesResourceArrays([])\n\n\t\tdeleteDisciplinesTeamsArrays()\n\t\t\t.map((w) =>\n\t\t\t\tteamWorkList()[w.crew_id]\n\t\t\t\t.workList.find((p) => p.project == w.project_name)\n\t\t\t\t.disciplines\n\t\t\t\t.push(w)\n\t\t\t)\n\t\tdeleteDisciplinesTeamsArrays([])\n\t\treturn true\n\t}\n\n\n function fetchWorkList(indexing){\n\t\tloadingMeta(true)\n\n\t\tconst modelProp =\n\t\t\tindexing == 'contractor_id'\n\t\t\t? resourceWorkList\n\t\t\t: teamWorkList\n\n\n\t\tconst mapList =\n\t\t\tindexing == 'contractor_id'\n\t\t\t&& form().resource.contractor_name\n\t\t\t? resources().filter((r) =>\n\t\t\t\tr.contractor_name()\n\t\t\t\t== form().resource.contractor_name()\n\t\t\t)\n\t\t\t: indexing == 'contractor_id'\n\t\t\t? resources()\n\t\t\t: vm().selected.resource.crews\n\n\t\tconst resUnnest =\n\t\t\tindexing == 'contractor_id'\n\t\t\t\t? R.pipe(\n\t\t\t\t\tR.map(R.prop('workingarray'))\n\t\t\t\t\t, R.unnest\n\t\t\t\t\t, R.uniqBy(R.prop('disciplines_contractors_id'))\n\t\t\t\t)\n\t\t\t\t: R.prop('workingarray')\n\n\t\tconst resReducer = indexing == 'contractor_id'\n\t\t\t\t? R.pipe(R.map(R.prop('totalcount')), R.sum)\n\t\t\t\t: (a) => Number(R.prop('totalcount')(a))\n\n\t\tconst resID =\n\t\t\tindexing == 'contractor_id'\n\t\t\t\t? R.pipe(R.last, R.prop('contractor_id') )\n\t\t\t\t: R.prop('contractor_id')\n\n\t\tconst teamID =\n\t\t\tindexing == 'contractor_id'\n\t\t\t\t? R.pipe(R.last, R.prop('crew_id') )\n\t\t\t\t: R.prop('crew_id')\n\n\t\tconst unWrapper = indexing == 'contractor_id'\n\t\t\t\t? R.filter(R.prop('length'))\n\t\t\t\t: R.unnest\n\n return Promise.all(\n\t\t\tmapList\n\t\t\t.map((a) =>\n\t\t\t\tdata.api.contractors.fetch.workList({\n\t\t\t\t\tcontractor_id: a.contractor_id\n\t\t\t\t\t,crew_id: a.crew_id\n\t\t\t\t\t,schedule_id: data.schedule_id()\n\t\t\t\t\t,schedule_version_id: data.schedule_version_id()\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\t\t\t.then(\n\t\t\t\tR.pipe(\n\t\t\t\t\tunWrapper\n\t\t\t\t\t,R.map((a) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tcrew_id: teamID(a)\n\t\t\t\t\t\t\t,contractor_id: resID(a)\n\t\t\t\t\t\t\t,totalcount: resReducer(a)\n\t\t\t\t\t\t\t,workList: R.pipe(\n\t\t\t\t\t\t\t\tR.groupBy(R.prop('project_id'))\n\t\t\t\t\t\t\t\t,R.map((p) => ({\n\t\t\t\t\t\t\t\t\tproject: p[0].project_name\n\t\t\t\t\t\t\t\t\t,disciplines: p\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t,R.toPairs\n\t\t\t\t\t\t\t\t,R.map(R.last)\n\t\t\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t\t)(resUnnest(a))\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t,R.indexBy( R.prop(indexing) )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then((newIndex) =>\n\t\t\t\tmodelProp(\n\t\t\t\t\tR.merge(\n\t\t\t\t\t\tmodelProp()\n\t\t\t\t\t\t,newIndex\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then( () =>\n\t\t\t\tresources().length\n\t\t\t\t&& loadingMeta(false)\n\t\t\t)\n\t\t\t.then( m.redraw )\n }\n\n\n\tfunction workMapping(wObject, deleteBay, rObject, prop){\n\t\tconst id = rObject[prop]()\n\t\tconst wList = wObject()[id].workList\n\t\treturn wList.map((p) =>\n\t\t\t[\n\t\t\t\telements.inlinestrikeList(\n\t\t\t\t\t[{\n\t\t\t\t\t\tlabel: p.project\n\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\tdeleteBay(deleteBay().concat(p.disciplines))\n\t\t\t\t\t\t\tp.disciplines = []\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t)\n\t\t\t\t,elements.inlinestrikeList(\n\t\t\t\t\tp.disciplines.map((label, k, dArray) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tlabel: label.discipline_name + ' - ' + label.discipline_description\n\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\tdeleteBay(deleteBay().concat(label))\n\t\t\t\t\t\t\t\tdArray.splice(\n\t\t\t\t\t\t\t\t\tp.disciplines.findIndex((di) =>\n\t\t\t\t\t\t\t\t\t\tdi.discipline_name\n\t\t\t\t\t\t\t\t\t\t== label.discipline_name\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t]\n\t\t)\n\t}\n\n\tfunction createNewWorkRate(){\n\t\tlet newD = cloningResourceCapabilityRate()\n\t\tcheckMultiple().status = false\n\t\tcheckMultiple().data = []\n\t\tdiscipline_vm({})\n\t\tcrew_form().capability.crews_discipline_rates.unshift(newD)\n\t\tcheckMultiple().data.unshift(newD)\n\t\tdiscipline_vm(newD)\n\t\tmasterLIST(true)\n\t\tm.redraw()\n\t}\n\n\tfunction getActivateDeleteButton(o){\n\n\t\tif (o.crews_discipline_rates_id){\n\t\t\tlet activated =\n\t\t\t\tcheckMultiple().data\n\t\t\t\t.findIndex((chr) =>\n\t\t\t\t\tchr.crews_discipline_rates_name() == o.crews_discipline_rates_name()\n\t\t\t\t\t&& chr.crews_discipline_rates_id() == o.crews_discipline_rates_id()\n\t\t\t\t\t&& chr.key == o.key\n\t\t\t\t)\n\n\t\t\tlet vmEntry = discipline_vm().crews_discipline_rates_name\n\t\t\tlet vmDetail = vmEntry != null ? o.key == discipline_vm().key : false\n\n\t\t\treturn {\n\t\t\t\tdisabled: false\n\t\t\t\t,type: 'checkbox'\n\t\t\t\t,onclick:\n\t\t\t\t\t(v) => {\n\t\t\t\t\t\tif( !v.currentTarget.checked ){\n\t\t\t\t\t\t\tcheckMultiple().status = false\n\t\t\t\t\t\t\tcheckMultiple().data.splice(activated, 1)\n\t\t\t\t\t\t\tif (vmDetail == true && checkMultiple().data.length > 0 ){\n\t\t\t\t\t\t\t\tdiscipline_vm(checkMultiple().data[0])\n\t\t\t\t\t\t\t} else if (vmDetail == true && checkMultiple().data.length <= 0){\n\t\t\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdiscipline_vm(o)\n\t\t\t\t\t\t\tcheckMultiple().data.push(o)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t,checked: activated >= 0 || vmDetail\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn {\n\t\t\t\tonchange: function(event){\n\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\to.crew_id(crew_form().capability.crew_id())\n\t\t\t\t\t\to.teamresourcename(\n\t\t\t\t\t\t\tform().resource.contractor_name() + \" - \" + crew_form().capability.crew_name()\n\t\t\t\t\t\t)\n\t\t\t\t\t\to.assigneduser = data.auth.stream().user_id\n\t\t\t\t\t}\n\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\to.teamresourcename('Unassigned')\n\t\t\t\t\t\to.crew_id(null)\n\t\t\t\t\t\to.assigneduser = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,type: 'checkbox'\n\t\t\t\t,checked: o.crew_id() == crew_form().capability.crew_id()\n\t\t\t\t,disabled:\n\t\t\t\t\t!editToolPermissions()\n\t\t\t\t\t&& !editAssignedToolPermissions()\n\t\t\t\t\t|| !editToolPermissions()\n\t\t\t\t\t\t&& editAssignedToolPermissions()\n\t\t\t\t\t\t&& !!o.crew_id()\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\to.crew_id() != crew_form().capability.crew_id()\n\t\t\t\t\t\t\t|| o.crew_id() == crew_form().capability.crew_id()\n\t\t\t\t\t\t\t&& crew_form().capability.user_id()\n\t\t\t\t\t\t\t!= data.auth.stream().user_id\n\t\t\t\t\t\t)\n\t\t\t\t,title: \"Take possession of a tool. I can only do this if it's released by the current team who occupies it\"\n\t\t\t}\n\t\t}\n\t}\n\n\n\tconst ratedata =\n\t\t(r) => ({\n\t\t\t'Discipline': r.crews_discipline_rates_name() + ' - ' + r.crews_discipline_rates_description()\n\t\t\t,'Unit of Measure': r.crews_discipline_rates_uom() || 'N/A'\n\t\t\t,'Work Rate Per Day': r.crews_discipline_rates_rate()\n\t\t\t,'Performance': r.crews_discipline_rates_feedback_rate()\n\n\t\t\t,'Expenditure': !data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: makeMoney(\n\t\t\t\t\tdata.coalatedSelectedVersion()[r.contractrecognitionid]\n\t\t\t\t\t? data.coalatedSelectedVersion()[r.contractrecognitionid].currentProfits\n\t\t\t\t\t\t+ data.coalatedSelectedVersion()[r.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t: 0\n\t\t\t\t)\n\n\t\t\t,'Forecasted Expenditure': !data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: makeMoney(\n\t\t\t\t\t(\n\t\t\t\t\t\tdata.coalatedSelectedVersion()\n\t\t\t\t\t\t\t[r.contractrecognitionid]\n\t\t\t\t\t\t|| {}\n\t\t\t\t\t)\n\t\t\t\t\t.forecastedProfits\n\t\t\t\t)\n\t\t})\n\n\tconst largeRatesTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tmasterLIST()\n\t\t\t\t.map((r, rindex) => ({\n\t\t\t\t\tkey: r.key\n\t\t\t\t\t,selection: getActivateDeleteButton(r)\n\t\t\t\t\t,header:\n\t\t\t\t\t\trindex != 0\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,editResourcePermissions()\n\t\t\t\t\t\t\t\t? m(`button.pl2`\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\tdisabled: !!check_dnames(true) || metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t,onclick: createNewWorkRate\n\t\t\t\t\t\t\t\t\t\t,title: \"Create a type of work this team is capable of conducting\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Create a New Team Discipline'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, rindex == 0 && false\n\t\t\t\t\t\t\t? discardChangesButton()\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1.5fr 0.75fr 0.75fr 0.75fr 1fr 1fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: ratedata(r)\n\t\t\t\t}))\n\t\t})\n\n\tconst smallRatesTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tmasterLIST()\n\t\t\t\t.map((r, rindex) => ({\n\t\t\t\t\tkey: r.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,getActivateDeleteButton(r)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,editResourcePermissions()\n\t\t\t\t\t\t\t\t? m(`button.pl2`\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\tdisabled: !!check_dnames(true) || metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tlet newD = cloningResourceCapabilityRate()\n\t\t\t\t\t\t\t\t\t\t\tcheckMultiple().status = false\n\t\t\t\t\t\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\t\t\t\t\t\tdiscipline_vm(newD)\n\t\t\t\t\t\t\t\t\t\t\tcrew_form().capability.crews_discipline_rates.unshift(newD)\n\t\t\t\t\t\t\t\t\t\t\tmasterLIST(true)\n\t\t\t\t\t\t\t\t\t\t\tcheckMultiple().data.unshift(newD)\n\t\t\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,title: \"Create a type of work this team is capable of conducting\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Create a new Team Discipline'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t, rindex == 0 && false\n\t\t\t\t\t\t\t? discardChangesButton()\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Discipline', 'Unit of Measure']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Work Rate Per Day', 'Performance', 'Expenditure', 'Forecasted Expenditure']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t\t,data: ratedata(r)\n\t\t\t\t}))\n\t\t})\n\n\n\tconst ratesTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeRatesTable )\n\t\t\t\t,desktopOnly( largeRatesTable )\n\t\t\t\t,mobileOnly( smallRatesTable )\n\t\t\t\t,tabletOnly( smallRatesTable )\n\t\t\t]\n\t\t)\n\n\t\tfunction editAllButton(){\n\n\t\t\tconst activated =\n\t\t\t\tcheckMultiple().status\n\t\t\t\t&& checkMultiple().data.length > 0\n\n\t\t\treturn elements.checkbox({\n\t\t\t\tonchange: () => {\n\t\t\t\t\tif( activated ){\n\t\t\t\t\t\tsetOptionsMark(false)\n\t\t\t\t\t\tcheckMultiple().status = false\n\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcheckMultiple().status = true\n\t\t\t\t\t\tcheckMultiple().data =\n\t\t\t\t\t\t\tfilteredRateOptions().length\n\t\t\t\t\t\t\t\t? filteredRateOptions()\n\t\t\t\t\t\t\t\t: crew_form().capability.crews_discipline_rates\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,title: \"Select or De-select viewed rates\"\n\t\t\t\t,disabled: crew_form().capability.crews_discipline_rates.length <= 1\n\t\t\t})\n\t\t}\n\n\t\tconst discardChangesButton =\n\t\t\t() =>\n\t\t\t\tsavingProp()\n\t\t\t\t|| identical(crew_vm().selected.capability, crew_form().capability)\n\t\t\t\t&& identical(tools_vm(), tools())\n\t\t\t\t? m('span'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t`\n\t\t\t\t\t,''\n\t\t\t\t)\n\t\t\t\t: m(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled: false\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\terrors({})\n\t\t\t\t\t\tcrew_form().capability = cloningResourceCapability(false, true)\n\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\tsetOptionsMark(false)\n\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\tdeleteRates([])\n\t\t\t\t\t\tcloningTools()\n\t\t\t\t\t\tmasterLIST(true)\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard all changes since last saving this team\"\n\t\t\t\t},\"Discard Changes\")\n\n\n\n\t\tconst tooldata =\n\t\t\t(tool) => ({\n\t\t\t\t'Tool Name': tool.tools_name()\n\t\t\t\t,'Description': tool.tools_description()\n\t\t\t\t,'Ownership': tool.tools_ownership()\n\t\t\t\t,'Condition': tool.tools_condition()\n\t\t\t\t,'Location': tool.tools_location()\n\t\t\t\t,'':\n\t\t\t\t\telements.list([\n\t\t\t\t\t\t!tool.crew_id()\n\t\t\t\t\t\t\t? 'Assign this Team'\n\t\t\t\t\t\t\t: tool.teamresourcename()\n\t\t\t\t\t\t,!tool.crew_id()\n\t\t\t\t\t\t|| tool.crew_id() == crew_form().capability.crew_id()\n\t\t\t\t\t\t|| tool.crew_id() != crew_form().capability.crew_id()\n\t\t\t\t\t\t&& tool.assigneduser == data.auth.stream().user_id\n\t\t\t\t\t\t\t? elements.checkbox(getActivateDeleteButton(tool))\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t])\n\t\t\t})\n\n\t\tconst largeToolsTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\ttools_vm()\n\t\t\t\t\t.map((tool, tindex) => ({\n\t\t\t\t\t\tkey: tool.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 1.15fr 0.75fr 0.65fr 0.65fr 0.65fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: tooldata(tool)\n\t\t\t\t\t}))\n\t\t\t})\n\n\t\tconst smallToolsTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\ttools_vm()\n\t\t\t\t\t.map((tool) => ({\n\t\t\t\t\t\tkey: tool.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['Tool Name', 'Description']\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['Ownership', 'Condition', 'Location', '']\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: tooldata(tool)\n\t\t\t\t\t}))\n\t\t\t})\n\n\n\t\tconst toolsTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile:0\n\t\t\t\t\t\t,desktop:900\n\t\t\t\t\t\t,tablet:700\n\t\t\t\t\t\t,hd:1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeToolsTable )\n\t\t\t\t\t,desktopOnly( largeToolsTable )\n\t\t\t\t\t,mobileOnly( smallToolsTable )\n\t\t\t\t\t,tabletOnly( smallToolsTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\tfunction uploadmetadata({only}){\n\t\t\treturn R.pickBy(\n\t\t\t\t(a, k) => a && (!only || !Object.keys(only).length || (only && only[k]) || k == 'user_id' || k == 'organization_id')\n\t\t\t\t,{\n\t\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t\t, contractor_id:\n\t\t\t\t\t\tvm().selected.resource\n\t\t\t\t\t\t&& vm().selected.resource.contractor_id()\n\t\t\t\t\t, user_id:\n\t\t\t\t\t\tdata.auth.stream().user_id\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\n\treturn {\n\t\tresources, geographies, data, form, crew_form, resetForm, resetDRateForm, vm, crew_vm, discipline_vm, resetCrewForm, tools, availableDisciplineSelections\n\t\t,deleteCapability, deleteResource, deleteDisciplineR, cloningResourceCapability, cloningResource, check_dnames, check_cnames, check_crew_names\n\t\t,availableUOMS, DeleteDisabled, DeleteDisabledCapability, crew_edit, contractor_edit, SaveRDisabled, SaveCDisabled, process_geo, viewtype, crewratesFilters\n\t\t,request: data.request, suburbs, stillWorking, permissions, crewFilters, resourceFilters, getFilterInputs, users\n\t\t, loading\n\t\t, masterLIST\n\t\t, placeLong\n\t\t, suburbsInput\n\t\t, tools_vm\n\t\t, cloningTools\n\t\t, organizations_disciplines\n\t\t, deleteTeams\n\t\t, deleteRates\n\t\t, cloningResourceCapabilityRate\n\t\t, CONSTANTdisciplines\n\t\t, deleteProjectResource\n\t\t, deleteProjectTeam\n\t\t, deleteDisciplinesTeamsArrays\n\t\t, deleteDisciplinesResourceArrays\n\t\t, disciplinesResources\n\t\t, detailPaneInputs\n\t\t, detailsPaneOpen\n\t\t, setOptionsMark\n\t\t, savingProp\n\t\t, checkMultiple\n\t\t, deleteStateProp\n\t\t, deleteWorkProp\n\t\t, api: data.api\n\t\t, restrictedOrgDisc\n\t\t, errors\n\t\t, missingPermissions\n\t\t, editResourcePermissions\n\t\t, editAssignedToolPermissions\n\t\t, teamWorkList\n\t\t, resourceWorkList\n\t\t, loadingMeta\n\t\t, workMapping\n\t\t, fetchWorkList\n\t\t, reinstateWork\n\t\t, editToolPermissions\n\t\t, filteredRateOptions\n\t\t, metaDataLoading\n\t\t, getUser\n\t\t, ratesTable\n\t\t, editAllButton\n\t\t, discardChangesButton\n\t\t, toolsTable\n\t\t, createNewWorkRate\n\t\t, uploadmetadata\n\t}\n}\n\n/*\n\tThe controller is the glue that sticks the model and intent together.\n\tIt exposes the model and intent to the view by returning them.\n\n\tThe controller \"controls\" how each layer interacts.\n*/\n\nfunction Main({ attrs: { data } }){\n\n\tlet model = Model(data)\n\tlet intent = Intent(model)\n\tlet activeTeamTab = m.prop('Team Disciplines')\n\tconst ctrl =\n\t\t{model, intent, activeTeamTab}\n\n\tfunction view(){\n\n\t\treturn m('div'\n\t\t\t,ctrl.model.viewtype(ctrl)\n\t\t\t,DetailsPane(\n\t\t\t\tctrl.model.detailsPaneOpen\n\t\t\t\t,ctrl.model.checkMultiple().data.length > 0\n\t\t\t\t\t? 'Editing Multiple Disciplines'\n\t\t\t\t\t: ctrl.model.discipline_vm().crews_discipline_rates_name\n\t\t\t\t\t\t? ctrl.model.discipline_vm().crews_discipline_rates_name()\n\t\t\t\t\t\t: ''\n\t\t\t\t,() => ctrl.model.detailPaneInputs(\n\t\t\t\t\tctrl.model.discipline_vm\n\t\t\t\t\t,ctrl\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\n\n\nfunction ListResource(ctrl){\n\treturn m('div.harth.mb6'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t\tgap: 1em;\n\t\t`\n\t\t, [\n\n\t\tm(''\n\t\t\t+ css`\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-flow: wrap;\n\t\t\t\tcolumn-gap: 2em;\n\t\t\t\trow-gap: 1em;\n\t\t\t\tpadding-bottom: 1em;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tpadding-bottom: 2em;\n\t\t\t`\n\t\t\t,[\n\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tgrid-template-rows: 0.6fr 0.4fr;\n\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\tmax-width: 40em;\n\t\t\t\t\t`\n\t\t\t\t\t.$nest('p', `margin: 0em;`)\n\t\t\t\t\t,[\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\tm('h4'+css`margin: 0em;`, `Resource Pool`)\n\t\t\t\t\t\t\t,ctrl.model.editResourcePermissions()\n\t\t\t\t\t\t\t? m(`button`\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\t\tpadding: 0.7em 1em;\n\t\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: !!ctrl.model.check_cnames()\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\tctrl.model.vm().selected.resource =\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.resetForm().resource\n\t\t\t\t\t\t\t\t\t\tctrl.model.form().resource =\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.cloningResource(false, true)\n\t\t\t\t\t\t\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\t\t\t\t\t\t\tctrl.model.contractor_edit(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Create a resource and its individual work teams\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, '+ Resource '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,m('p', `Create both Internal and External resources to work on your projects.`)\n\t\t\t\t\t\t,m('p', `Internal Resources include full and part time employees, each employee is designated as a team inside the resource.`)\n\t\t\t\t\t\t,m('p',`External resources (business and contractors) would encompass atleast 1 team to quantify updates, time spent and contract rates for each type of work completed.`)\n\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t]\n\t\t)\n\n\t\t,ctrl.model.resources().length == 0\n\t\t\t? null\n\t\t\t: !ctrl.model.data.readProjectPermissions()\n\t\t\t\t? 'Project permissions are required to see scheduled works'\n\t\t\t\t: ctrl.model.data.schedules().length == 0 && ctrl.model.data.readSchedulePermissions()\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t'info'\n\t\t\t\t\t\t, `I have no records of any projects,\n\t\t\t\t\t\tsome can be created to assign these resources to work`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t\t// elements.alert(\n\t\t\t\t\t// \t'info'\n\t\t\t\t\t// \t,`Scheduled work for these resources `\n\t\t\t\t\t// \t+ (\n\t\t\t\t\t// \t\t!ctrl.model.data.schedule_id()\n\t\t\t\t\t// \t\t\t? ` pertains to all existing schedules`\n\t\t\t\t\t// \t\t\t: ` only pertains to this schedule and the latest version of this schedule`\n\t\t\t\t\t// \t)\n\t\t\t\t\t// )\n\n\n\t\t,m(FilterInputs, ctrl.model.resourceFilters)\n\t\t// ,m.component(FilterTable, ctrl.model.resourceFilters)\n\n\t\t,ctrl.model.loading() && ctrl.model.resources().length\n\t\t? elements.centeredSpinner()\n\t\t: elements.table(ctrl.model.data,\n\t\t\t[\n\t\t\t\t'Resource'\n\t\t\t\t, 'Rating'\n\t\t\t\t, 'Assigned User Responsibility'\n\t\t\t\t, 'Expenditure'\n\t\t\t\t, 'Forecasted Expenditure'\n\t\t\t\t, ''\n\t\t\t\t, 'Teams'\n\t\t\t\t, ''\n\t\t\t\t, 'Current Scheduled Work'\n\t\t\t]\n\t\t\t,ListProcessing(\n\t\t\t\tctrl.model.loading()\n\t\t\t\t\t? []\n\t\t\t\t\t: ctrl.model.resources()\n\t\t\t\t, ctrl.model.resourceFilters.filters()\n\t\t\t\t, 'contractor_name'\n\t\t\t).map((resource) => [\n\t\t\t\tm(`a`\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tctrl.model.vm().selected.resource = resource\n\t\t\t\t\t\t\t\tctrl.model.fetchWorkList('crew_id')\n\t\t\t\t\t\t\t\tctrl.model.form().resource = ctrl.model.cloningResource(false, true)\n\t\t\t\t\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\t\t\t\t\tctrl.model.contractor_edit(true)\n\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = {}\n\t\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\t\trouteids: ctrl.model.vm().selected.resource.crews.map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t\t\t,specificproject: null\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,resource.contractor_name()\n\t\t\t\t)\n\t\t\t\t,Number(resource.contractor_quality_rating()).toFixed(2)\n\n\t\t\t\t,ctrl.model.getUser(resource)\n\n\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t? ' ... '\n\t\t\t\t\t: R.find(\n\t\t\t\t\t\t(a) => a.contractor_id\n\t\t\t\t\t\t== resource.contractor_id()\n\t\t\t\t\t\t,ctrl.model.deleteDisciplinesResourceArrays()\n\t\t\t\t\t)\n\t\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[resource.contractrecognitionid]\n\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[resource.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[resource.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t)\n\n\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t? ' ... '\n\t\t\t\t\t: R.find(\n\t\t\t\t\t\t(a) => a.contractor_id\n\t\t\t\t\t\t== resource.contractor_id()\n\t\t\t\t\t\t,ctrl.model.deleteDisciplinesResourceArrays()\n\t\t\t\t\t)\n\t\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t[resource.contractrecognitionid]\n\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t).forecastedProfits\n\t\t\t\t\t\t)\n\n\t\t\t\t,m(`a`\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tctrl.model.vm().selected.resource = resource\n\t\t\t\t\t\t\t\tctrl.model.form().resource = ctrl.model.cloningResource(true, false)\n\t\t\t\t\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\t\t\t\t\tctrl.model.contractor_edit(false)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\tctrl.model.savingProp()\n\t\t\t\t\t\t\t|| !!ctrl.model.check_cnames()\n\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t,title: \"Copy all the details of another team to create a new team\"\n\t\t\t\t\t}\n\t\t\t\t\t,'Clone'\n\t\t\t\t)\n\n\t\t\t\t,resource.crews.length\n\n\t\t\t\t,m(''\n\t\t\t\t\t+css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\twidth: ` + (!ctrl.model.stillWorking(true, null, resource) ? '5em' : '20em')\n\t\t\t\t\t,[\n\n\t\t\t\t\t\tctrl.model.editResourcePermissions()\n\t\t\t\t\t\t&& !ctrl.model.stillWorking(true, null, resource)\n\t\t\t\t\t\t? elements.confirmDelete(\n\t\t\t\t\t\t\t() => ctrl.intent.deleteResource(resource)\n\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t, () => ctrl.model.DeleteDisabled(resource)\n\t\t\t\t\t\t\t, (a) =>\n\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t? ctrl.model.deleteStateProp()[resource.contractor_id()] = a\n\t\t\t\t\t\t\t\t: a == false\n\t\t\t\t\t\t\t\t? ctrl.model.deleteStateProp({})\n\t\t\t\t\t\t\t\t: ctrl.model.deleteStateProp()[resource.contractor_id()]\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: ctrl.model.stillWorking(true, null, resource)\n\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\t\t\t,!ctrl.model.data.readProjectPermissions()\n\t\t\t\t\t? elements.alert(`info`, \"Requires Project Permissions are required to see scheduled works\")\n\t\t\t\t\t: ctrl.model.loadingMeta()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: !ctrl.model.resourceWorkList()[resource.contractor_id()]\n\t\t\t\t\t\t\t? \"This Resource has no scheduled work\"\n\t\t\t\t\t\t\t: !ctrl.model.resourceWorkList()[resource.contractor_id()].workList.length\n\t\t\t\t\t\t\t&& ctrl.model.resourceWorkList()[resource.contractor_id()].totalcount\n\t\t\t\t\t\t\t&& !ctrl.model.deleteDisciplinesResourceArrays().some((r) =>\n\t\t\t\t\t\t\t\tr.contractor_id == resource.contractor_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t? 'Busy on other scheduled works'\n\t\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\tresource.showWork(\n\t\t\t\t\t\t\t\t\t\t\t\t\tresource.showWork()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,resource.showWork()\n\t\t\t\t\t\t\t\t\t\t\t? \"Hide Detail\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Show Works\"\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,resource.showWork()\n\t\t\t\t\t\t\t\t\t&& ctrl.model.deleteDisciplinesResourceArrays().length\n\t\t\t\t\t\t\t\t\t\t? elements.confirmDelete(\n\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteProjectResource(true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.deleteProjectTeam(true)\n\t\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.currentRoute('Nothing')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.currentRoute('contractors')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.fetchWorkList('contractor_id')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t\t\t\t\t, R.F\n\t\t\t\t\t\t\t\t\t\t\t, (state) => {\n\t\t\t\t\t\t\t\t\t\t\t\tstate != null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.deleteWorkProp(state)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\treturn ctrl.model.deleteWorkProp()\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.deleteDisciplinesResourceArrays()\n\t\t\t\t\t\t\t\t\t\t\t\t.some((a) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\ta.contractor_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t== resource.contractor_id()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t\t\t\t\t, 'Remove Works'\n\t\t\t\t\t\t\t\t\t\t\t, 'Irrecoverable'\n\t\t\t\t\t\t\t\t\t\t\t, ctrl.model.reinstateWork\n\t\t\t\t\t\t\t\t\t\t\t, R.T\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t])\n\n\n\t\t\t\t,!resource.showWork()\n\t\t\t\t|| !ctrl.model.resourceWorkList()[resource.contractor_id()]\n\t\t\t\t\t? ''\n\t\t\t\t\t: ctrl.model.resourceWorkList()[resource.contractor_id()].workList.length\n\t\t\t\t\t&& ctrl.model.resourceWorkList()[resource.contractor_id()].totalcount\n\t\t\t\t\t\t? elements.table(ctrl.model.data, ['Project', 'Disciplines/Tasks'],\n\t\t\t\t\t\t\tctrl.model.workMapping(\n\t\t\t\t\t\t\t\tctrl.model.resourceWorkList\n\t\t\t\t\t\t\t\t,ctrl.model.deleteDisciplinesResourceArrays\n\t\t\t\t\t\t\t\t,resource\n\t\t\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: ''\n\n\t\t\t])\n\t\t)\n\n\n\t\t,m('br')\n\t\t,ctrl.model.resources().length\n\t\t\t? null\n\t\t\t: ctrl.model.loading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: elements.alert('info',`I don't have resources or teams that can be assigned to project work`)\n\t])\n}\n\nfunction ResourceHeader(ctrl){\n\treturn [\n\t\tm(''\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: auto minmax(0em, 10em) minmax(0em, 10em);\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: start;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t,[\n\n\t\t\t\tm('h4'\n\t\t\t\t\t,ctrl.model.contractor_edit() == true\n\t\t\t\t\t\t? ctrl.model.form().resource.contractor_name()\n\t\t\t\t\t\t: 'Create a new resource '\n\t\t\t\t)\n\n\n\t\t\t\t,ctrl.model.contractor_edit() == true\n\t\t\t\t? ' is associated with '\n\t\t\t\t: ' associated with '\n\n\n\t\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t? Pencil(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tctrl.model.users().length > 0\n\t\t\t\t\t\t? (R.find(\n\t\t\t\t\t\t\t(c) => c.user_id()\n\t\t\t\t\t\t\t== ctrl.model.form().resource.user_id()\n\t\t\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t.user_username()\n\t\t\t\t\t\t: '...'\n\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\tctrl.model.users\n\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\tctrl.model.form().resource.user_id(v.user_id())\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t, 'usersFullName'\n\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\tplaceholder: \"John Smith\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: (R.find(\n\t\t\t\t\t(c) => c.user_id()\n\t\t\t\t\t== ctrl.model.form().resource.user_id()\n\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t)\n\t\t\t\t|| nullUser)\n\t\t\t\t.user_username()\n\t\t\t]\n\t\t)\n\t]\n}\n\n\n\nfunction EditResource(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tResourceHeader(ctrl)\n\t\t,m('br')\n\t\t,ctrl.model.editResourcePermissions() ? [\n\t\t\telements.list([\n\t\t\t\tctrl.model.contractor_edit() == true\n\t\t\t\t? elements.list([\n\t\t\t\t\t\telements.back(\n\t\t\t\t\t\t\t\"Go back to the resource list without saving\"\n\t\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\t\tctrl.model.cloningResource(false, true)\n\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = {}\n\t\t\t\t\t\t\t\tctrl.model.deleteTeams = []\n\t\t\t\t\t\t\t\tctrl.model.viewtype = ListResource\n\t\t\t\t\t\t\t\tctrl.model.form().resource = {}\n\t\t\t\t\t\t\t\tctrl.model.deleteDisciplinesResourceArrays([])\n\t\t\t\t\t\t\t\tctrl.model.deleteDisciplinesTeamsArrays([])\n\t\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\t\trouteids: ctrl.model.resources().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t\t\t,specificproject: null\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{disabled: ctrl.model.savingProp()}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t\t\t\t|| !ctrl.model.deleteDisciplinesTeamsArrays().length\n\t\t\t\t\t\t\t\t&& !ctrl.model.deleteDisciplinesResourceArrays().length\n\t\t\t\t\t\t\t\t&& identical(ctrl.model.vm().selected.resource, ctrl.model.form().resource)\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\t\tctrl.model.cloningResource(false, true)\n\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = {}\n\t\t\t\t\t\t\t\tctrl.model.deleteTeams = []\n\t\t\t\t\t\t\t\tctrl.model.reinstateWork()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Discard all changes since last saving this resource\"\n\t\t\t\t\t\t},\"Discard Changes\")\n\t\t\t\t])\n\t\t\t\t: elements.list([\n\t\t\t\t\tm(\"button.btn.btn-warning\", {\n\t\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.form().resource = {}\n\t\t\t\t\t\t\tctrl.model.resetCrewForm()\n\t\t\t\t\t\t\tctrl.model.vm().selected.resource = {}\n\t\t\t\t\t\t\tctrl.model.viewtype = ListResource\n\t\t\t\t\t\t\tctrl.model.deleteTeams = []\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Discard this resource without saving\"\n\t\t\t\t\t},\"Discard\")\n\t\t\t\t])\n\t\t\t\t,!ctrl.model.SaveRDisabled(true)\n\t\t\t\t&& (\n\t\t\t\t\t!identical(ctrl.model.vm().selected.resource, ctrl.model.form().resource)\n\t\t\t\t\t|| ctrl.model.deleteDisciplinesTeamsArrays().length\n\t\t\t\t\t|| ctrl.model.deleteDisciplinesResourceArrays().length\n\t\t\t\t)\n\t\t\t\t\t? elements.action('Save', ctrl.intent.sendResource, ctrl.model.savingProp)\n\t\t\t\t\t: m('button.btn', {\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t,title: \"Save this Resource\"\n\t\t\t\t\t}, 'Save')\n\t\t\t\t,elements.alert('warn', ctrl.model.SaveRDisabled(true))\n\t\t\t])\n ]\n\t\t: elements.list([\n\t\t\telements.back(\n\t\t\t\t\"Go back to the resource list without saving\"\n\t\t\t\t,() => {\n\t\t\t\t\tctrl.model.form().resource = {}\n\t\t\t\t\tctrl.model.errors({})\n ctrl.model.resetCrewForm()\n ctrl.model.vm().selected.resource = {}\n\t\t\t\t\tctrl.model.viewtype = ListResource\n\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\trouteids: ctrl.model.resources().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t,specificproject: null\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t)\n ])\n\n\t\t,m('hr')\n\n\t\t,m('h4','Details')\n\t\t,m('br')\n\t\t,elements.splitPane(\n\t\t\t[\n\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label', 'Resource Name'\n\t\t\t\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t() => ctrl.model.form().resource.contractor_name()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\tctrl.model.form().resource.contractor_name\n\t\t\t\t\t\t\t\t\t\t,{ disabled: !ctrl.model.editResourcePermissions()\n\t\t\t\t\t\t\t\t\t\t,placeholder: 'Internal Resources'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: elements.plainTxt(ctrl.model.form().resource.contractor_name())\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Base of Operations'\n\t\t\t\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t() => ctrl.model.form().resource.contractor_yard()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tautocomplete.Main\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tlist: ctrl.model.placeLong\n\t\t\t\t\t\t\t\t\t\t\t,field: null\n\t\t\t\t\t\t\t\t\t\t\t,onselect: ctrl.model.form().resource.contractor_yard\n\t\t\t\t\t\t\t\t\t\t\t,oninput: ctrl.model.suburbsInput\n\t\t\t\t\t\t\t\t\t\t\t,placeholder: \"Suburb of choice\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: elements.plainTxt(ctrl.model.form().resource.contractor_yard())\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Estimated Quality Rating (Between 0 and 1)'\n\t\t\t\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t() => ctrl.model.form().resource.contractor_quality_rating()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Work Rate Per Day'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: ctrl.model.form().resource.contractor_quality_rating\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t, max: 1\n\t\t\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t\t\t, disabled: !ctrl.model.editResourcePermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t, title: \"An estimate or actual rating of the quality of this resource and their work between 0 and 1. This will be used to match resource's to projects\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: elements.plainTxt(ctrl.model.form().resource.contractor_quality_rating())\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm(\"label\" , \"First Start Date\"\n\t\t\t\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t() => moment(ctrl.model.form().resource.contractor_first_onsite_start_date()).format(\"ll\")\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\tctrl.model.form().resource.contractor_first_onsite_start_date\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editResourcePermissions()\n\t\t\t\t\t\t\t\t\t\t\t, title: \"The resource's first availability to work on projects\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: elements.plainTxt(\n\t\t\t\t\t\t\t\tmoment(\n\t\t\t\t\t\t\t\t\tctrl.model.form()\n\t\t\t\t\t\t\t\t\t.resource\n\t\t\t\t\t\t\t\t\t.contractor_first_onsite_start_date()\n\t\t\t\t\t\t\t\t).format(\"ll\")\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Comfortable Work Zone'\n\t\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t\t['Rural', 'Suburban', 'CBD']\n\t\t\t\t\t\t,ctrl.model.form().resource.contractor_comfortable_work_zone\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tdisabled: !ctrl.model.editResourcePermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t,title: \"The most productive environment for this resource\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t],\n\t\t\t[\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tgrid-template-rows: 0.6fr 0.4fr;\n\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\talign-items: end;\n\t\t\t\t\t\tmargin-bottom: 2em\n\t\t\t\t\t`\n\t\t\t\t\t,m('p', `Resource details are used to match the most suitable Resources to running Projects in Odin's automatic scheduling`)\n\t\t\t\t\t,m('p', `Odin can designate works and run your schedules automatically which can help the business re-focus\n\t\t\t\t\tand find the best solutions for project delivery without spending any admin effort. If this is not ideal, resources can be manually assigned via projects`)\n\t\t\t\t)\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({})\n\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t})\n\t\t\t]\n\t\t)\n\n\t\t,m('h4.pt1'\n\t\t\t,elements.list([\n\t\t\t\t'Teams in this Resource'\n\t\t\t\t,ctrl.model.editResourcePermissions()\n\t\t\t\t? m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\tpadding: 0.7em 1em;\n\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t,{\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t? true : ctrl.model.check_crew_names()\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = ctrl.model.resetCrewForm().capability\n\t\t\t\t\t\t\tctrl.model.crew_form().capability = ctrl.model.cloningResourceCapability(false, true)\n\t\t\t\t\t\t\tctrl.model.viewtype = EditCapabilities\n\t\t\t\t\t\t\tctrl.model.crew_edit(false)\n\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Create a team that is a part of this resource\"\n\t\t\t\t\t}\n\t\t\t\t\t, '+ Team '\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t])\n\t\t)\n\n\t\t,m(''\n\t\t\t+ css`s\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\tgrid-template-rows: 0.6fr 0.4fr;\n\t\t\t\tgap: 0.5em;\n\t\t\t\talign-items: end;\n\t\t\t\tmargin-top: 2em\n\t\t\t`\n\t\t\t,[\n\t\t\t\tm('p', `Each team will be used to forecast and record work responsibilities across projects`)\n\t\t\t\t,m('p', `The team can represent a group of people or an individual and should be linked to a user when collecting real world updates.\n\t\t\t\tThe teams may also be used to model future growth and project capacity.`)\n\t\t\t]\n\t\t)\n\t\t,m('hr')\n\n\t\t,ctrl.model.getFilterInputs(ctrl.model.crewFilters)\n\n\t\t,ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: elements.table(ctrl.model.data,\n\t\t\t[\n\t\t\t\t 'Team Name'\n\t\t\t\t, 'Rating'\n\t\t\t\t, 'Assigned User Responsibility'\n\t\t\t\t, ''\n\t\t\t\t, 'Expenditure'\n\t\t\t\t, 'Forecasted Expenditure'\n\t\t\t\t, ''\n\t\t\t\t, 'Current Scheduled Work'\n\t\t\t]\n\t\t\t,ListProcessing(\n\t\t\t\tctrl.model.form().resource.crews\n\t\t\t\t, ctrl.model.crewFilters.filters()\n\t\t\t\t, 'crew_name'\n\t\t\t).map(\n\t\t\t\t(rc) => [\n\n\t\t\t\t\tm(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = rc\n\t\t\t\t\t\t\t\t\tctrl.model.crew_form().capability = ctrl.model.cloningResourceCapability(false, true)\n\t\t\t\t\t\t\t\t\tctrl.model.viewtype = EditCapabilities\n\t\t\t\t\t\t\t\t\tctrl.model.crew_edit(true)\n\t\t\t\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\t\t\trouteids: ctrl.model.crew_vm().selected.capability.crews_discipline_rates.map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t\t\t\t,specificproject: null\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,rc.crew_name()\n\t\t\t\t\t)\n\t\t\t\t\t,Number(rc.crew_rating()).toFixed(2)\n\n\t\t\t\t\t,ctrl.model.editResourcePermissions()\n\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t(R.find(\n\t\t\t\t\t\t\t\t\t(c) => c.user_id() == rc.user_id()\n\t\t\t\t\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t\t\t.user_username()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tctrl.model.users\n\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\trc.user_id(v.user_id())\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t, 'usersFullName'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\tplaceholder: \"John Smith\"\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: (R.find(\n\t\t\t\t\t\t\t(c) => c.user_id() == rc.user_id()\n\t\t\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t.user_username()\n\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = rc\n\t\t\t\t\t\t\t\t\tctrl.model.crew_form().capability = ctrl.model.cloningResourceCapability(true, false)\n\t\t\t\t\t\t\t\t\tctrl.model.viewtype = EditCapabilities\n\t\t\t\t\t\t\t\t\tctrl.model.crew_edit(false)\n\t\t\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\tctrl.model.savingProp()\n\t\t\t\t\t\t\t\t|| !!ctrl.model.check_cnames()\n\t\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t,title: \"Copy all the details of another team to create a new team\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Clone'\n\t\t\t\t\t)\n\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: R.find(\n\t\t\t\t\t\t\t(a) => a.crew_id\n\t\t\t\t\t\t\t== rc.crew_id()\n\t\t\t\t\t\t\t,ctrl.model.deleteDisciplinesTeamsArrays()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[rc.contractrecognitionid]\n\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[rc.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[rc.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: R.find(\n\t\t\t\t\t\t\t(a) => a.crew_id\n\t\t\t\t\t\t\t== rc.crew_id()\n\t\t\t\t\t\t\t,ctrl.model.deleteDisciplinesTeamsArrays()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? 'Save to re-calculate'\n\t\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t\t[rc.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t\t).forecastedProfits\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t+css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\twidth: ` + (!ctrl.model.stillWorking(true, rc) ? '5em' : '20em')\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\tctrl.model.editResourcePermissions()\n\t\t\t\t\t\t\t&& !ctrl.model.stillWorking(true, rc)\n\t\t\t\t\t\t\t? elements.xRemoval({\n\t\t\t\t\t\t\t\tdisabled: ctrl.model.DeleteDisabledCapability(rc)\n\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = rc\n\t\t\t\t\t\t\t\t\tctrl.intent.deleteCapability()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: ctrl.model.stillWorking(true, rc)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\n\t\t\t\t\t,!ctrl.model.data.readProjectPermissions()\n\t\t\t\t\t\t? elements.list(['Project permissions are required to see scheduled works'])\n\t\t\t\t\t\t: ctrl.model.loadingMeta()\n\t\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t\t: !ctrl.model.teamWorkList()[rc.crew_id()]\n\t\t\t\t\t\t\t\t? \"This Team has no scheduled work\"\n\t\t\t\t\t\t\t\t: !ctrl.model.teamWorkList()[rc.crew_id()].workList.length\n\t\t\t\t\t\t\t\t&& ctrl.model.teamWorkList()[rc.crew_id()].totalcount\n\t\t\t\t\t\t\t\t&& !ctrl.model.deleteDisciplinesTeamsArrays().some((t) =>\n\t\t\t\t\t\t\t\t\tt.crew_id == rc.crew_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t? 'Busy on other scheduled works'\n\t\t\t\t\t\t\t\t\t: m(\"button.btn.\", {\n\t\t\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\trc.showWork(\n\t\t\t\t\t\t\t\t\t\t\t\t\trc.showWork()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,title: rc.showWork()\n\t\t\t\t\t\t\t\t\t\t\t\t? \"Hide the next organized work for this team\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"Show the next organized work for this team\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,rc.showWork()\n\t\t\t\t\t\t\t\t\t\t\t? \"Hide Detail\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Show Works\"\n\t\t\t\t\t\t\t\t\t)\n\n\n\n\t\t\t\t\t,!rc.showWork()\n\t\t\t\t\t|| !ctrl.model.teamWorkList()[rc.crew_id()]\n\t\t\t\t\t|| ctrl.model.loadingMeta()\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: ctrl.model.teamWorkList()[rc.crew_id()].workList.length\n\t\t\t\t\t\t&& ctrl.model.teamWorkList()[rc.crew_id()].totalcount\n\t\t\t\t\t\t\t? elements.table(ctrl.model.data, ['Project', 'Disciplines/Tasks'],\n\t\t\t\t\t\t\t\tctrl.model.workMapping(\n\t\t\t\t\t\t\t\t\tctrl.model.teamWorkList\n\t\t\t\t\t\t\t\t\t,ctrl.model.deleteDisciplinesTeamsArrays\n\t\t\t\t\t\t\t\t\t,rc\n\t\t\t\t\t\t\t\t\t,'crew_id'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: ''\n\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\t\t// ,ctrl.model.form().resource.crews.length == 0 && !ctrl.model.metaDataLoading()\n\t\t// \t? elements.alert(\n\t\t// \t\t'info'\n\t\t// \t\t,`I haven't found any teams that are a part of this resource. Teams are required to schedule work`\n\t\t// \t)\n\t\t// \t: null\n\t])\n}\n\n\nfunction CapabilityHeader(ctrl){\n\treturn [\n\t\tm('h4',\n\t\t\t(\n\t\t\t\tctrl.model.crew_edit()\n\t\t\t\t\t? ''\n\t\t\t\t\t: 'Create a new Team '\n\t\t\t)\n\t\t\t+ ctrl.model.crew_form().capability.crew_name()\n\t\t\t+ ' in ' + ctrl.model.form().resource.contractor_name()\n\t\t)\n\t\t,m('br')\n\t\t,elements.list([\n\t\t\tm('label', 'Team')\n\t\t\t,elements.textInput(\n\t\t\t\tctrl.model.crew_form().capability.crew_name\n\t\t\t\t,{\n\t\t\t\t\tdisabled: !ctrl.model.editResourcePermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t}\n\t\t\t)\n\t\t\t,m('label', ' is associated with')\n\n\t\t\t,ctrl.model.editResourcePermissions() && !ctrl.model.metaDataLoading()\n\t\t\t\t? Pencil(\n\t\t\t\t\t() =>\n\t\t\t\t\t\t(R.find(\n\t\t\t\t\t\t\t(c) => c.user_id()\n\t\t\t\t\t\t\t== ctrl.model.crew_form().capability.user_id()\n\t\t\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t.user_username()\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\tctrl.model.users\n\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\t ctrl.model.crew_form().capability.user_id(v.user_id())\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t, 'usersFullName'\n\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\tplaceholder: \"John Smith\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: (R.find(\n\t\t\t\t\t(c) => c.user_id()\n\t\t\t\t\t== ctrl.model.crew_form().capability.user_id()\n\t\t\t\t\t, ctrl.model.users()\n\t\t\t\t)\n\t\t\t\t|| nullUser)\n\t\t\t\t.user_username()\n\t\t])\n\t]\n}\n\n\nlet WorkRatesTab = function(ctrl){\n\treturn [\n\t\tm('br')\n\n\t\t,ctrl.model.crew_form().capability.crews_discipline_rates.length\n\t\t\t? elements.list([\n\t\t\t\tctrl.model.getFilterInputs(ctrl.model.crewratesFilters)\n\t\t\t\t,ctrl.model.editAllButton()\n\t\t\t])\n\t\t\t: null\n\t\t,ctrl.model.crew_form().capability.crews_discipline_rates.length == 0\n\t\t\t? m('div'\n\t\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\theight: 15vh;\n\t\t\t\talign-content: center;\n\t\t\t\t`\n\t\t\t\t,ctrl.model.editToolPermissions() && false\n\t\t\t\t? m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\tborder: solid 1px #3380c2;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\twidth: 10em;\n\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\tborder-radius: 0.25em;\n\t\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick: ctrl.model.createNewWorkRate\n\t\t\t\t\t\t,disabled: !!ctrl.model.check_dnames(true) || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t,title: \"Create a type of work this team is capable of conducting\"\n\t\t\t\t\t}\n\t\t\t\t\t,'Create a New Team Discipline '\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t\t,m('br')\n\t\t\t\t,m('div'\n\t\t\t\t\t+ css`\n\t\t\t\t\talign-items: center;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\tpadding: 10px;\n\t\t\t\t\t`\n\t\t\t\t\t,`Team Disciplines will represent the team's prodcutivity for a discipline\n\t\t\t\t\tand can be connected to contracts for monetary compensation after works are completed`\n\t\t\t\t)\n\t\t\t)\n\t\t\t: null\n\n\n\t\t,ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: [].concat(\n\t\t\tR.unnest(\n\t\t\t\tR.partition(\n\t\t\t\t\t(c) => c.created\n\t\t\t\t\t,ctrl.model.crew_form().capability.crews_discipline_rates\n\t\t\t\t)\n\t\t\t)\n\t\t).length != 0\n\t\t? ctrl.model.ratesTable()\n\t\t: null\n\t]\n}\n\nlet ToolsTab = function(ctrl){\n\treturn [\n\t\tctrl.model.tools_vm().length != 0 || !ctrl.model.crew_edit()\n\t\t\t? ctrl.model.toolsTable()\n\t\t\t: elements.alert('info'\n\t\t\t,`I have no records of any tools, they can be created`\n\t\t\t + ` for tracking via the Tools route `\n\t\t)\n\t]\n}\n\n\nfunction EditCapabilities(ctrl){\n\treturn m('div.harth.mb6', [\n\n\t\tCapabilityHeader(ctrl)\n\t\t,ctrl.model.editResourcePermissions()\n\t\t? elements.list([\n\t\t\tctrl.model.crew_edit() == true\n\t\t\t? elements.list([\n\t\t\t\telements.back(\n\t\t\t\t\t\"Return to the team list without saving\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\tctrl.model.crew_form().capability = {}\n\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\tctrl.model.setOptionsMark(false)\n\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\tctrl.model.deleteRates([])\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\trouteids: ctrl.model.vm().selected.resource.crews.map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t,specificproject: null\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t,{disabled: ctrl.model.savingProp()}\n\t\t\t\t)\n\n\t\t\t\t,ctrl.model.SaveCDisabled(true)\n\t\t\t\t|| ctrl.model.check_dnames(true)\n\t\t\t\t|| identical(ctrl.model.crew_vm().selected.capability, ctrl.model.crew_form().capability)\n\t\t\t\t&& identical(ctrl.model.tools(), ctrl.model.tools_vm())\n\t\t\t\t\t? m('button.btn', {\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t}, 'Save')\n\t\t\t\t\t: elements.action('Save', ctrl.intent.sendResource, ctrl.model.savingProp)\n\n\t\t\t\t,ctrl.model.discardChangesButton(ctrl)\n\t\t\t\t,ctrl.model.SaveCDisabled(true)\n\t\t\t])\n\t\t\t: elements.list([\n\t\t\t\tctrl.model.SaveCDisabled(true)\n\t\t\t\t|| identical(ctrl.model.crew_vm().selected.capability, ctrl.model.crew_form().capability)\n\t\t\t\t\t? m('button.btn', {\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t}, 'Save')\n\t\t\t\t\t: elements.action('Save', ctrl.intent.sendResource, ctrl.model.savingProp)\n\t\t\t\t,m(\"button.btn.\", {\n\t\t\t\t\tdisabled: false\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.crew_form().capability = {}\n\t\t\t\t\t\tctrl.model.crew_vm().selected.capability = {}\n\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\tctrl.model.setOptionsMark(false)\n\t\t\t\t\t\tctrl.model.deleteRates([])\n\t\t\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard this team without saving\"\n\t\t\t\t},\"Discard\")\n\t\t\t\t,elements.alert('error', ctrl.model.SaveCDisabled(true))\n\t\t\t])\n\t\t])\n\t\t: elements.back(\n\t\t\t\"Return to the team list without saving\"\n\t\t\t,() => {\n\t\t\t\tctrl.model.crew_form().capability = {}\n\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\tctrl.model.setOptionsMark(false)\n\t\t\t\tctrl.model.errors({})\n\t\t\t\tctrl.model.viewtype = EditResource\n\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\trouteids: ctrl.model.vm().selected.resource.crews.map(R.prop('contractrecognitionid'))\n\t\t\t\t\t,getledgers: false\n\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t,specificproject: null\n\t\t\t\t})\n\t\t\t}\n\t\t)\n\n\t\t,m('hr')\n\n\t\t,m(''\n\t\t\t+ css`s\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\tgrid-template-rows: 0.6fr 0.4fr;\n\t\t\t\tgap: 0.5em;\n\t\t\t\talign-items: end;\n\t\t\t\tmargin-top: 2em\n\t\t\t`\n\t\t\t,[\n\t\t\t\telements.list([\n\t\t\t\t\tm('h4', ctrl.activeTeamTab() )\n\t\t\t\t\t,ctrl.model.editResourcePermissions()\n\t\t\t\t\t&& ctrl.activeTeamTab() == 'Team Disciplines'\n\t\t\t\t\t? m(`button`\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\tpadding: 0.7em 1em;\n\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tdisabled: !!ctrl.model.check_dnames(true) || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t,onclick: ctrl.model.createNewWorkRate\n\t\t\t\t\t\t\t,title: \"Create a type of work this team is capable of conducting\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, '+ Disciplines '\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t])\n\t\t\t\t, elements.alert(\n\t\t\t\t\t'verbose'\n\t\t\t\t\t,ctrl.activeTeamTab() == 'Team Disciplines'\n\t\t\t\t\t? `Team Disciplines describe this team's capabilities and how fast they can complete the works. This is used in Odins automatic schedulling to allocate works to projects. `\n\t\t\t\t\t+ `A team discipline may be assigned a rate to pay the team for work completed. Alternatively teams may be designated an hourly rate instead of discipline rates.\n\t\t\t\t\tOr, they can be combined to pay a team a base hourly rate with a commisions based on completed discipline quantities.`\n\t\t\t\t\t: `Tools may be assigned to teams to track their use and stored liabilities`\n\t\t\t\t)\n\t\t\t]\n\t\t)\n\n\t\t,ctrl.model.stillWorking()\n\n\n\t\t,ctrl.model.metaDataLoading()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: [\n\t\t\t\telements.tabset(['Team Disciplines', 'Assign a Tool'], ctrl.activeTeamTab)\n\t\t\t\t,ctrl.activeTeamTab() == 'Assign a Tool' ? ToolsTab(ctrl) : WorkRatesTab(ctrl)\n\t\t\t]\n\t])\n}\n\n\n/*\n\tIn order for mithril to mount this component. We have to expose these two properties.\n*/\nexport default Main","/* globals window */\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport css from 'bss'\nconst downArrow =\n\tm.trust(`\n\t\t\n\t`)\nfunction Main({\n\tattrs: {\n\t\topen=m.prop(false)\n\t}\n}){\n\tlet rootNode;\n\tfunction onclick(e){\n\t\ttry {\n\t\t\tif( rootNode ){\n\t\t\t\tif(\n\t\t\t\t\t\trootNode != e.target\n\t\t\t\t\t\t&& !rootNode.contains(e.target)\n\t\t\t\t) {\n\t\t\t\t\topen(false)\n\t\t\t\t\tm.redraw()\n\t\t\t\t}\n\t\t\t}\n\t\t} catch(e) {\n\t\t\t// console.error(e)\n\t\t}\n\t}\n\twindow.addEventListener('click', onclick)\n\tfunction view({\n\tattrs\n\t}){\n\tconst {\n\t\toptions\n\t\t, text\n\t\t, onselect=()=>{}\n\t\t, defaultOption\n\t} = attrs\n\t\treturn m('.dropdown-button'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: auto auto;\n\t\t\t\tbackground-color: rgba(0,0,0,0.1);\n\t\t\t\tjustify-content: start;\n\t\t\t\tmax-width: max-content;\n\t\t\t\ttransition: opacity 0.2s;\n\t\t\t\tborder-radius: 4px\n\t\t\t\tuser-select: none;\n\t\t\t\tposition: relative;\n\t\t\t\ttransform: translateY(1px);\n\t\t\t\tz-index: 1;\n\t\t\t`\n\t\t\t.$hover(\n\t\t\t\t!open()\n\t\t\t\t? `opacity: 0.8;`\n\t\t\t\t: `\n\t\t\t\t\topacity: 1;\n\t\t\t\t\ttransition: opacity 0s;\n\t\t\t\t`\n\t\t\t)\n\t\t\t, {\n\t\t\t\toncreate: ({ dom }) => rootNode = dom\n\t\t\t}\n\t\t\t, m('button'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackground-color: rgba(0,0,0,0);\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\toutline: none;\n\t\t\t\t\t\tpadding: 6px 12px\n\t\t\t\t\t\tmin-width: 6em;\n\t\t\t\t\t\tmin-height: 2.4em;\n\t\t\t\t\t`\n\t\t\t\t\t,R.merge(\n\t\t\t\t\t\tattrs\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\tfunction(e){\n\t\t\t\t\t\t\t\t\t\topen(false)\n\n\t\t\t\t\t\t\t\t\t\tonselect(defaultOption || options[0])\n\t\t\t\t\t\t\t\t\t\tif( attrs.onclick ) {\n\t\t\t\t\t\t\t\t\t\t\tattrs.onclick(e)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t, text\n\t\t\t\t)\n\t\t\t, m('.down-arrow'\n\t\t\t\t+ css`\n\t\t\t\t\ttransform: scale(0.7) translateY(6px) translateX(-10px);\n\t\t\t\t\tposition: relative;\n\t\t\t\t`\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tonclick: e => {\n\n\t\t\t\t\t\tconst [left, right, align] =\n\t\t\t\t\t\t\te.x / window.innerWidth > 0.5\n\t\t\t\t\t\t\t? ['unset', '0%', 'right']\n\t\t\t\t\t\t\t: ['0%', 'unset', 'left']\n\n\t\t\t\t\t\trootNode.style.setProperty(\n\t\t\t\t\t\t\t'--left'\n\t\t\t\t\t\t\t, left\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\trootNode.style.setProperty(\n\t\t\t\t\t\t\t'--right'\n\t\t\t\t\t\t\t, right\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\trootNode.style.setProperty('--text-align', align)\n\n\t\t\t\t\t\topen(!open())\n\t\t\t\t\t}\n\t\t\t\t\t,disabled: !options.length || attrs.disabled\n\t\t\t\t}\n\t\t\t\t, m('.hitbox'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tpadding: 6px 12px\n\t\t\t\t\t\tmin-width: 4em;\n\t\t\t\t\t\tmin-height: 2.4em;\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t`\n\t\t\t\t)\n\t\t\t\t, downArrow\n\t\t\t)\n\t\t\t, m('.popup'\n\t\t\t\t+ ( open() ? '.open' : '')\n\t\t\t\t+ css`\n\t\t\t\t\tborder: solid 0.5px rgba(0,0,0,0.5)\n\t\t\t\t\tborder-radius: 0.2em;\n\t\t\t\t\tpadding: 1em;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 105%;\n\t\t\t\t\tleft: var(--left, unset);\n\t\t\t\t\tright: var(--right, unset);\n\t\t\t\t\twidth: 10em;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\tfont-size: 0.8em;\n\t\t\t\t\ttransform: scaleY(0);\n\t\t\t\t\ttransition: 0.1s;\n\t\t\t\t\ttransform-origin: top left;\n\t\t\t\t\twidth: max-content;\n\t\t\t\t\ttext-align: var(--text-align);\n\t\t\t\t`\n\t\t\t\t.$nest('&.open', `\n\t\t\t\t\ttransform: scaleY(1);\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t`)\n\t\t\t\t.$nest('.item', `\n\t\t\t\t\ttransform-origin: top left;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tfont-size: 1.25em;\n\t\t\t\t`)\n\t\t\t\t.$nest('.item:hover', `\n\t\t\t\t\topacity: 0.8;\n\t\t\t\t`)\n\t\t\t\t.$nest('.item:active', `\n\t\t\t\t\ttransform: scale(1.05);\n\t\t\t\t`)\n\t\t\t\t, options.map(\n\t\t\t\t\t\toption =>\n\t\t\t\t\t\t\tm('.item'\n\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t{ onclick: () => {\n\t\t\t\t\t\t\t\t\tonselect(option)\n\t\t\t\t\t\t\t\t\topen(false)\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t, option\n\t\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\treturn {\n\t\tview\n\t\t,onremove(){\n\t\t\twindow.removeEventListener('click', onclick)\n\t\t}\n\t}\n}\nexport default Main","/* globals requestAnimationFrame, window, document, setTimeout */\nimport m from 'bacta'\nimport css from 'bss'\nimport { prop as stream } from '../../../stream'\n\nm.stream = stream\n\nlet dragging = false\n\nwindow.addEventListener('mousedown', () => {\n\tdragging = true\n})\n\nwindow.addEventListener('mouseup', () => {\n\tdragging = false\n})\n\nfunction __selector(){\n\treturn ''\n}\n\nfunction __unformat(x){\n\tif( typeof x != 'string' ) {\n\t\treturn NaN\n\t} else if ( x.match(/^\\s+$/)) {\n\t\treturn NaN\n\t}\n\treturn Number(x)\n}\n\nfunction __formatNatural(x){\n\treturn x\n}\n\nfunction __formatDecimal(x){\n\treturn x\n}\n\nfunction __validate(value, { min, max, required }={}){\n\tif( value == null ) {\n\t\tif( required ) {\n\t\t\treturn 'required'\n\t\t}\n\t\treturn null\n\t} else if( value < min ) {\n\t\treturn 'must be greater than ' + min\n\t} else if( value > max ) {\n\t\treturn 'must be less than ' + max\n\t} else {\n\t\treturn null\n\t}\n}\n\nfunction Main({\n\tattrs: {\n\t\tprop\n\t\t, unformat:theirUnformat=__unformat\n\t\t, formatNatural: theirFormatNatural=__formatNatural\n\t\t, formatDecimal: theirFormatDecimal=__formatDecimal\n\t\t, selector: theirSelector=__selector\n\t\t, toFixed\n\t\t, validate=__validate\n\t}\n}){\n\n\tlet prevPropValue;\n\tlet natural, decimal, rootEl;\n\n\tlet refreshInputs = ({ preferSkipSelectionChange=true }={}) => {\n\t\tconst proposal = theirFormatNatural(~~prop())\n\t\tupdateTargetValue(natural, proposal, { preferSkipSelectionChange })\n\n\t\tif(decimal) {\n\t\t\tconst proposal = theirFormatDecimal(prop().toFixed(toFixed)\n\t\t\t\t.slice(-toFixed)).padEnd(toFixed, '0')\n\n\t\t\tif ( Number('0.'+decimal.value) != Number('0.'+proposal) ) {\n\t\t\t\tupdateTargetValue(decimal, proposal, { preferSkipSelectionChange })\n\t\t\t}\n\t\t}\n\t}\n\n\tlet diffValue = () => {\n\t\tif( prevPropValue != prop() ) {\n\t\t\trefreshInputs()\n\t\t}\n\t\tprevPropValue = prop()\n\t}\n\n\tfunction updateSelection(target, start, end){\n\t\ttarget.setSelectionRange(start, end)\n\t}\n\n\tfunction updateTargetValue(\n\t\ttarget\n\t\t, value\n\t\t,\n\t\t{ visitor=x => x\n\t\t, start=target.selectionStart\n\t\t, end=target.selectionEnd\n\t\t, preferSkipSelectionChange=false\n\t\t}={}\n\t){\n\t\trequestAnimationFrame(() => {\n\t\t\tvalue = value + ''\n\t\t\tconst old = target.value\n\t\t\tif( old == value ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif( old.length != value.length ) {\n\t\t\t\tconst delta = old.length - value.length\n\t\t\t\tstart -= delta\n\t\t\t\tend -= delta\n\t\t\t}\n\n\t\t\tif( value.length >= old.length ) {\n\t\t\t\t// we were only guarding against backspace\n\t\t\t\tpreferSkipSelectionChange = false\n\t\t\t}\n\t\t\tconst { start: a, end: b } = visitor({ start, end })\n\t\t\ttarget.value = value\n\t\t\tif( !preferSkipSelectionChange ) {\n\t\t\t\tupdateSelection(target, a, b)\n\t\t\t}\n\t\t\treturn;\n\t\t})\n\t\treturn value\n\t}\n\n\tlet selectableMode = true\n\n\tfunction oncopy(e){\n\n\t\t// For now, when they copy, we always give them\n\t\t// the prop value, instead of whatever they actually selected\n\t\t// it's super hard to extract the exact selection text from the selection\n\t\t// API across multiple selected elements\n\t\t// or at least I can't figure it out at 10:30PM 😂\n\n\t\tif(\n\t\t\tselectableMode\n\t\t\t|| e.target.selectionStart == 0\n\t\t\t&& e.target.selectionEnd == e.target.value.length\n\t\t) {\n\t\t\te.preventDefault()\n\t\t\t// e.target.value = natural.value + '.' + decimal.value\n\t\t\t// e.target.selectionEnd = e.target.value.length\n\t\t\te.clipboardData.setData('text/plain', prop());\n\t\t}\n\t}\n\tlet lastPaste;\n\tlet history = []\n\tconst isPropValid = x => {\n\t\treturn typeof x == 'number' && !Number.isNaN(x)\n\t}\n\n\tfunction selectionModeScenario({ scenarioA, scenarioB, scenarioBAutoFocus }){\n\n\t\tif( scenarioA ) {\n\t\t\tselectableMode = true\n\t\t} else if ( scenarioB ) {\n\t\t\tselectableMode = false\n\t\t\tif( scenarioBAutoFocus ) {\n\t\t\t\tnatural.focus()\n\t\t\t}\n\t\t}\n\n\t\tif( scenarioA || scenarioB ) {\n\t\t\t// hide the fake elements\n\t\t\t// unhide the real elements\n\t\t\tArray.from(\n\t\t\t\trootEl.querySelectorAll('.fake-natural,.fake-decimal,.natural,.decimal')\n\t\t\t)\n\t\t\t.forEach(\n\t\t\t\tel => {\n\t\t\t\t\tel.classList.toggle('number-hide')\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\t// todo-james just use toggle hide\n\t\tif([decimal, natural].includes(document.activeElement)){\n\t\t\tdocument.activeElement.selectionStart = 0\n\t\t\tdocument.activeElement.selectionEnd = document.activeElement.value.length\n\t\t}\n\t}\n\n\tfunction manageSelectionModeFromFocusEvent(e){\n\n\t\t// Scenario A =\n\t\t// if we're focusing out, and the activeElement isn't decimal or natural\n\t\t// then selectableMode should be on\n\t\t// if its not already on, toggle everything, if it is, do nothing.\n\n\t\t// Scenario B =\n\t\t// if we're focusing in, selectable mode should always be off\n\t\t// if the activeELement is the rootEl, then focus natural\n\t\t// otherwise accept the existing focus element\n\n\t\tconst scenarioA =\n\t\t\te.type == 'focusout'\n\t\t\t&& ![natural,decimal].includes(e.relatedTarget)\n\t\t\t&& !selectableMode\n\n\t\tconst scenarioB =\n\t\t\te.type == 'focusin'\n\t\t\t&& selectableMode\n\t\t\t&& !dragging\n\n\t\tconst scenarioBAutoFocus =\n\t\t\tscenarioB && document.activeElement == rootEl\n\n\t\tselectionModeScenario({\n\t\t\tscenarioA, scenarioB, scenarioBAutoFocus\n\t\t})\n\n\t\t// todo-james just use toggle hide\n\t\tif([decimal, natural].includes(document.activeElement)){\n\t\t\tdocument.activeElement.selectionStart = 0\n\t\t\tdocument.activeElement.selectionEnd = document.activeElement.value.length\n\t\t}\n\t}\n\n\tfunction view({\n\t\tattrs: {\n\t\t\ttoFixed=0\n\t\t\t, prefix= () => ''\n\t\t\t, suffix= () => ''\n\t\t\t, min=-Infinity\n\t\t\t, max=+Infinity\n\t\t\t, required=false\n\t\t\t, title=null\n\t\t\t, name=null\n\t\t\t, id=null\n\t\t\t, attrs = {}\n\t\t}\n\t}){\n\t\tconst prefixed = prefix(prop())\n\t\tconst suffixed = suffix(prop())\n\n\t\tlet lastValidValue = () => prop()\n\n\t\treturn m('.number-input'\n\t\t\t+ theirSelector(prop())\n\n\t\t\t+ (selectableMode ? '.selectable' : '.editable')\n\t\t\t// just while debugging read only mode\n\t\t\t+ (\n\t\t\t\ttoFixed > 0\n\t\t\t\t? css`\n\t\t\t\t\tgrid-template-columns: var(--prefix) 1fr 0.5em var(--fixed) var(--suffix);\n\t\t\t\t`\n\t\t\t\t: css`\n\t\t\t\t\tgrid-template-columns: var(--prefix) 1fr var(--suffix);\n\t\t\t\t\tgap: var(--gap, ${prefixed || suffixed ? '0.3em' : '0em'});\n\t\t\t\t`\n\t\t\t)\n\t\t\t+ css`\n\t\t\t\t--fixed: ${toFixed*0.92}ch;\n\t\t\t\t--prefix: ${prefixed.length *0.6}ch;\n\t\t\t\t--suffix: ${suffixed.length *0.6}ch;\n\t\t\t`\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tborder-bottom: solid 1px rgba(0,0,0,0.1);\n\t\t\t\tgrid-template-rows: 1.5em;\n\t\t\t\talign-items: center;\n\t\t\t`\n\t\t\t// .$nest('.natural::selection,.decimal::selection', `\n\t\t\t// \tbackground: var(--selection-bg-color, rgb(51 144 255 / 0.9));\n\t\t\t// \tcolor: var(--selection-color, white);\n\t\t\t// `)\n\t\t\t.$nest('.group', `\n\t\t\t\tdisplay: grid;\n\t\t\t`)\n\t\t\t.$nest('.number-hide,.number-hide *', `\n\t\t\t\tbackground-color: yellow;\n\t\t\t\tmax-height: 0;\n\t\t\t\tmin-height: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\tfont-size: 0em;\n\t\t\t`)\n\t\t\t.$nest('&& .selected', `\n\t\t\t\tbackground-color: hsl(228deg 100% 97% / 90%);\n\t\t\t\tcolor: black;\n\t\t\t`)\n\t\t\t.$nest('*', `\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding: 0em;\n\t\t\t\tmargin: 0em;\n\t\t\t`)\n\t\t\t.$nest('.point', `\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: grid;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: end;\n\t\t\t\tmax-height: 0.75em;\n\t\t\t`)\n\n\t\t\t.$nest('.natural,.decimal,.fake-natural,.fake-decimal', `\n\t\t\t\tfont-feature-settings: \"tnum\";\n\t\t\t\ttext-align: right;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmin-width: 0em;\n\t\t\t\tborder: none;\n\t\t\t\tletter-spacing: 1px;\n\t\t\t\theight: 100%;\n\t\t\t\tline-height: calc(1.5); // the calc is to stop bss from auto pixeling\n\t\t\t`)\n\t\t\t.$nest('input:focus', `\n\t\t\t\toutline: none;\n\t\t\t`)\n\t\t\t.$nest('.decimal,.fake-decimal', `\n\t\t\t\ttext-align: left;\n\t\t\t\tfont-size: 0.8em;\n\t\t\t\theight: 1.5em;\n\t\t\t`)\n\t\t\t.$nest('.fake-decimal', `\n\t\t\t\tpadding-bottom: 0em;\n\t\t\t`)\n\t\t\t// .$nest('&& .prefix', `\n\t\t\t// \ttext-align: right;\n\t\t\t// `)\n\t\t\t.$nest('.prefix,.suffix', `\n\t\t\t\tfont-size: 0.8em;\n\t\t\t\tcolor: rgba(0,0,0,0.5);\n\t\t\t\twhitespace: pre-wrap;\n\t\t\t`)\n\t\t\t, Object.assign(\n\t\t\t\t{ onupdate: diffValue\n\t\t\t\t, oncreate({ dom }){\n\t\t\t\t\trootEl = dom\n\t\t\t\t\tsetTimeout(diffValue)\n\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t}, 100)\n\t\t\t\t}\n\t\t\t\t, title\n\t\t\t\t, onmouseup(){\n\t\t\t\t\tif(\n\t\t\t\t\t\tdocument.getSelection().type != 'Range'\n\t\t\t\t\t\t&& document.activeElement != natural\n\t\t\t\t\t) {\n\t\t\t\t\t\tselectionModeScenario({ scenarioB: true, scenarioBAutoFocus: true })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, onfocusin(e){\n\t\t\t\t\tmanageSelectionModeFromFocusEvent(e)\n\t\t\t\t}\n\t\t\t\t,oncopy\n\t\t\t\t,onfocusout(e){\n\t\t\t\t\tmanageSelectionModeFromFocusEvent(e)\n\t\t\t\t}\n\t\t\t\t,tabIndex: selectableMode ? 0 : -1\n\t\t\t\t,onkeydown(e){\n\t\t\t\t\tif(e.target == natural){\n\t\t\t\t\t\tif( e.key == 'ArrowRight' && natural.selectionStart == natural.value.length ) {\n\t\t\t\t\t\t\tdecimal.focus()\n\t\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\t\tupdateSelection(decimal, 0, 0)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if (e.key =='ArrowUp' ) {\n\t\t\t\t\t\t\tif( prop() + 1 <= max ) {\n\t\t\t\t\t\t\t\tprop( prevPropValue = prop() + 1 )\n\t\t\t\t\t\t\t\trefreshInputs({ preferSkipSelectionChange: false })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (e.key =='ArrowDown' ) {\n\t\t\t\t\t\t\tif( prop() -1 >= min ) {\n\t\t\t\t\t\t\t\tprop( prevPropValue = prop() - 1 )\n\t\t\t\t\t\t\t\trefreshInputs({ preferSkipSelectionChange: false })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.target == decimal) {\n\t\t\t\t\t\tif( e.key == 'ArrowLeft' && decimal.selectionEnd == 0 ) {\n\t\t\t\t\t\t\tnatural.focus()\n\t\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\t\tupdateSelection(natural, natural.value.length+1, natural.value.length+1)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if ( e.key == 'Backspace' && decimal.selectionEnd == 0 ) {\n\n\t\t\t\t\t\t\tif( decimal.value ) {\n\t\t\t\t\t\t\t\t// trying to delete decimal point\n\t\t\t\t\t\t\t\tconst out =\n\t\t\t\t\t\t\t\t\ttheirUnformat(\n\t\t\t\t\t\t\t\t\t\t(natural.value == '0' ? '' : natural.value)\n\t\t\t\t\t\t\t\t\t\t+ (decimal.value || '')\n\t\t\t\t\t\t\t\t\t\t\t.padEnd(toFixed, '0')\n\t\t\t\t\t\t\t\t\t\t\t.slice(0, toFixed)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\tif( isPropValid(out) ) {\n\t\t\t\t\t\t\t\t\tprop(out)\n\t\t\t\t\t\t\t\t\t// skip diff\n\t\t\t\t\t\t\t\t\tprevPropValue = out\n\t\t\t\t\t\t\t\t\t// manually update values\n\t\t\t\t\t\t\t\t\t// now we won't have 2 different cursor updates\n\t\t\t\t\t\t\t\t\trefreshInputs({ preferSkipSelectionChange: false })\n\n\t\t\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst start = natural.value.length\n\t\t\t\t\t\t\tconst end = natural.value.length\n\t\t\t\t\t\t\trequestAnimationFrame( () => {\n\t\t\t\t\t\t\t\tnatural.focus()\n\n\t\t\t\t\t\t\t\t// todo-james I need this to happen after diff\n\t\t\t\t\t\t\t\tupdateSelection(natural, start, end)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if (e.key =='ArrowUp' ) {\n\t\t\t\t\t\t\tif( prop() + 0.1 <= max ) {\n\t\t\t\t\t\t\t\tprop( prevPropValue = prop() + 0.1 )\n\t\t\t\t\t\t\t\trefreshInputs({ preferSkipSelectionChange: false })\n\t\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (e.key =='ArrowDown' ) {\n\n\t\t\t\t\t\t\tif( prop() - 0.1 >= min ) {\n\t\t\t\t\t\t\t\tprop( prevPropValue = prop() - 0.1 )\n\t\t\t\t\t\t\t\trefreshInputs({ preferSkipSelectionChange: false })\n\n\t\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,onpaste(e){\n\t\t\t\t\tlastPaste = e.clipboardData.getData('text/plain')\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, attrs\n\t\t\t)\n\t\t\t,m('.prefix',prefixed)\n\t\t\t,m('.group'\n\t\t\t\t,m('span.fake-natural', natural && natural.value)\n\t\t\t\t,m('input.natural.number-hide', {\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t\t,name\n\t\t\t\t\t,id\n\t\t\t\t\t,oncopy\n\t\t\t\t\t,inputmode: 'decimal'\n\t\t\t\t\t,oninput(e){\n\t\t\t\t\t\tlet data = e.data || ''\n\t\t\t\t\t\tconst inputType = e.inputType || ''\n\t\t\t\t\t\tlet _update = false\n\t\t\t\t\t\tlet negate = 1 / prop() < 0\n\t\t\t\t\t\tlet scheduledValue = e.target.value\n\n\t\t\t\t\t\tif( scheduledValue == '.' ) {\n\t\t\t\t\t\t\t// todo-james hopefully updating the value doesn't lose decimal focus\n\t\t\t\t\t\t\tscheduledValue =\n\t\t\t\t\t\t\t\tupdateTargetValue(e.target, theirFormatNatural(~~prop()))\n\t\t\t\t\t\t\tdecimal.focus()\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( inputType.includes('Paste') ){\n\t\t\t\t\t\tdata = lastPaste\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( toFixed && data && data.includes('.') ) {\n\t\t\t\t\t\t\tconst original = scheduledValue\n\t\t\t\t\t\t\tconst i = scheduledValue.lastIndexOf('.')\n\n\t\t\t\t\t\t\tif( e.inputType == 'insertText' ) {\n\t\t\t\t\t\t\t\tdecimal.focus()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet newDecimal =\n\t\t\t\t\t\t\t\t\t((original.slice(i+1) + decimal.value).match(/\\d+/g)||[])\n\t\t\t\t\t\t\t\t\t\t.join('')\n\t\t\t\t\t\t\t\t\t\t.slice(0, toFixed)\n\n\t\t\t\t\t\t\t\tupdateTargetValue(\n\t\t\t\t\t\t\t\t\tdecimal, newDecimal, { start: 0, end: 0 }\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscheduledValue = updateTargetValue(e.target, original.slice(0, i))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\tinputType == 'deleteContentBackward'\n\t\t\t\t\t\t\t\t|| inputType == 'deleteContentForward'\n\t\t\t\t\t\t\t\t|| inputType == 'deleteByCut'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// allow deletion\n\t\t\t\t\t\t\t_update = false\n\t\t\t\t\t\t} else if ( data == '-' ) {\n\t\t\t\t\t\t\tif( e.target.value == '-' ) {\n\t\t\t\t\t\t\t\tprop(-0)\n\t\t\t\t\t\t\t\tprevPropValue = -0\n\t\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscheduledValue = updateTargetValue(e.target, scheduledValue.replace('-', ''), {\n\t\t\t\t\t\t\t\t// visitor: ({ start, end }) => ({ start: start -1, end: end - 1 })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tnegate = true\n\t\t\t\t\t\t} else if ( data == '+' ) {\n\t\t\t\t\t\t\tif( e.target.value == '+' ) {\n\t\t\t\t\t\t\t\tprop(0)\n\t\t\t\t\t\t\t\tprevPropValue = 0\n\t\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscheduledValue = updateTargetValue(e.target, scheduledValue.replace('+', ''), {\n\t\t\t\t\t\t\t\t// visitor: ({ start, end }) => ({ start: start -1, end: end - 1 })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tnegate = false\n\t\t\t\t\t\t} else if( !data.match(/^-?\\s*\\d+$/g) ) {\n\t\t\t\t\t\t\t_update = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet unformatted = theirUnformat(\n\t\t\t\t\t\t\tscheduledValue\n\t\t\t\t\t\t\t+ (toFixed > 0 ? '.' + decimal.value : '' )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t* ( negate ? -1 : 1 )\n\n\t\t\t\t\t\tif( isPropValid(unformatted) ){\n\t\t\t\t\t\t\thistory.push(unformatted)\n\t\t\t\t\t\t\tprop(unformatted)\n\n\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\tinputType == 'deleteContentBackward'\n\t\t\t\t\t\t\t\t|| inputType == 'deleteContentForward'\n\t\t\t\t\t\t\t\t|| inputType == 'deleteByCut'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tprevPropValue = prop()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( _update ) {\n\t\t\t\t\t\t\tlet out = theirFormatNatural(Math.floor(lastValidValue()))\n\n\t\t\t\t\t\t\tscheduledValue = updateTargetValue(e.target, out)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,onblur(e){\n\t\t\t\t\t\tconst out = theirFormatNatural(~~lastValidValue())\n\t\t\t\t\t\te.target.value = out\n\t\t\t\t\t}\n\t\t\t\t\t,oncreate({ dom: $ }){\n\t\t\t\t\t\tnatural = $\n\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t, toFixed > 0\n\t\t\t\t&& m('.point'\n\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\twidth: 2px;\n\t\t\t\t\t\t\t\theight: 2px;\n\t\t\t\t\t\t\t\tborder-radius: 100%;\n\t\t\t\t\t\t\t\tbackground-color: rgba(0,0,0,0.5);\n\t\t\t\t\t\t\t\tuser-select: none;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t, toFixed > 0 && m('.group'\n\t\t\t\t, m('span.fake-decimal'\n\t\t\t\t\t, decimal && (decimal.value || '').padEnd(toFixed, '0')\n\t\t\t\t)\n\t\t\t\t, m('input.decimal.number-hide', {\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t\t,placeholder: Array(toFixed).fill(null).map( () => 0).join('')\n\t\t\t\t\t,inputmode: 'decimal'\n\t\t\t\t\t,oncreate({ dom: $ }){\n\t\t\t\t\t\tdecimal = $\n\t\t\t\t\t}\n\t\t\t\t\t,oninput(e){\n\t\t\t\t\t\tlet value = e.target.value\n\t\t\t\t\t\tlet scheduledValue = value\n\n\t\t\t\t\t\tif( value.length > toFixed ) {\n\t\t\t\t\t\t\tvalue = value.slice(0, toFixed)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( value == '' ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else if( !value.match(/^\\d+$/g) ) {\n\t\t\t\t\t\t\tvalue = theirFormatDecimal(value.match(/\\d+/g) || []).join('')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet proposal = value\n\n\t\t\t\t\t\tproposal = proposal.slice(0, toFixed)\n\n\t\t\t\t\t\tscheduledValue = updateTargetValue(\n\t\t\t\t\t\t\te.target\n\t\t\t\t\t\t\t, proposal\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tlet unformatted = theirUnformat(\n\t\t\t\t\t\t\tnatural.value + '.' + scheduledValue\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tif( isPropValid(unformatted) ){\n\t\t\t\t\t\t\thistory.push(unformatted)\n\t\t\t\t\t\t\tprop(unformatted)\n\t\t\t\t\t\t\tnatural.setCustomValidity(\n\t\t\t\t\t\t\t\tvalidate(prop(), {min, max, required})\n\t\t\t\t\t\t\t\t|| ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,onblur(e){\n\t\t\t\t\t\tlet out =\n\t\t\t\t\t\ttheirFormatDecimal(e.target.value.match(/\\d+/g) || []).join('')\n\t\t\t\t\t\t\t.padEnd(toFixed, '0')\n\n\t\t\t\t\t\tupdateTargetValue(e.target, out)\n\t\t\t\t\t}\n\t\t\t\t\t,oncopy\n\t\t\t\t})\n\t\t\t)\n\t\t\t, m('.suffix', suffixed)\n\t\t)\n\t}\n\n\tfunction selectionchange(){\n\t\tconst activeElement = document.activeElement\n\t\tif(decimal && natural){\n\t\t\tif( ![decimal, natural].includes(activeElement) ){\n\t\t\t\tdecimal.classList.remove('selected')\n\t\t\t\tnatural.classList.remove('selected')\n\t\t\t} else {\n\t\t\t\tconst el = activeElement\n\t\t\t\tif(\n\t\t\t\t\tel.selectionStart == 0\n\t\t\t\t\t&& el.selectionEnd == el.value.length\n\t\t\t\t) {\n\t\t\t\t\tnatural.classList.add('selected')\n\t\t\t\t\tdecimal.classList.add('selected')\n\t\t\t\t} else {\n\t\t\t\t\tnatural.classList.remove('selected')\n\t\t\t\t\tdecimal.classList.remove('selected')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tview\n\t\t,oncreate(){\n\t\t\tdocument.addEventListener('selectionchange', selectionchange)\n\t\t}\n\t\t,onremove(){\n\t\t\tdocument.removeEventListener('selectionchange', selectionchange)\n\t\t}\n\t}\n}\n\nfunction MoneyInput({ attrs }){\n\n\tfunction view(){\n\t\treturn m(Main, Object.assign({\n\t\t\ttoFixed: 2\n\t\t\t, prefix: x => (1 / x < 0 ? '-' : ' ') + ' $'\n\t\t\t, formatNatural: x =>\n\t\t\t\tMath.abs(x).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n\t\t\t, unformat(x){\n\t\t\t\treturn __unformat(x.replace(/\\,/g, ''))\n\t\t\t}\n\t\t\t, selector(x){\n\t\t\t\treturn (\n\t\t\t\t\tx < 0\n\t\t\t\t\t\t? '.negative'\n\t\t\t\t\t: x > 0\n\t\t\t\t\t\t? '.positive'\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t}\n\t\t}, attrs))\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\n\nexport default {\n\tcomponent: Main, MoneyInput, unformat: __unformat,\n}\n","const traverse = R => input => visit => {\n\n let paths = Object.keys(input).map( s => [s])\n let out = input\n\n let keys = x =>\n Object.prototype.toString.call(x) == '[object Object]'\n ? Object.keys(x)\n : Array.isArray(x)\n ? Object.keys(x).map(Number)\n : []\n\n while ( paths.length > 0 ) {\n let path = paths.shift()\n\n let target = R.path(path, out)\n\n let newPaths =\n keys(target)\n .map( x => [].concat(path, x) )\n\n paths.push(...newPaths)\n\n let parentPath = path.slice(0, -1)\n\n let resultFn = visit({\n target\n , path\n , parentPath\n , paths\n , root: out\n , parent: R.path(parentPath, out)\n })\n\n out = resultFn(out)\n\n let result = R.path(path, out)\n\n const newExpandedObject =\n typeof target == 'string' && typeof result != 'string'\n\n if ( newExpandedObject ) {\n paths.push(\n ...keys(result)\n .map( x => [].concat(path, x) )\n )\n }\n }\n\n return out\n}\n\n\nexport default traverse","/* globals document, setTimeout, clearTimeout, localStorage, Promise */\nimport * as R from 'ramda'\nimport css from 'bss'\nimport m from 'bacta'\n// import * as z from './z/index.js'\n\nimport * as z from '../../../how/z/index.js'\nimport { prop } from '../../../stream'\nimport Traverse from '../utils/traverse2'\nconst traverse = Traverse(R)\nconst octagonAlert = m.trust(`\n\t\n`)\n\nconst abbreviations = {\n\tcvc: true\n}\n\nconst __toRamdaPath = name => name.split('.').map(\n\tx => isNaN(x) ? x : Number(x)\n)\n\nconst magic = s => {\n\ts= s || ''\n\ts= s.split('_').join(' ')\n\ts= s.split('-').join(' ')\n\ts= s.split(' ').map(\n\t\tx => x[0].toUpperCase() + x.slice(1)\n\t)\n\t.join(' ')\n\n\ts= s.split(' ').map(\n\t\tx => {\n\t\t\tif (x.toLowerCase() in abbreviations) {\n\t\t\t\treturn x.toUpperCase()\n\t\t\t}\n\t\t\treturn x\n\t\t}\n\t)\n\t.join(' ')\n\n\treturn s\n}\n\nlet proceedTimer;\n\nconst Model = ({\n\tinitialValues=prop({})\n\t,key=null\n\t,errors=initialValues.map( () => ({}) )\n\t,theirErrors=initialValues.map( () => ({}) )\n\t,touched=prop({})\n\t,changes=prop({})\n\t,saving=prop(false)\n\t,errored=prop(true)\n\t,changed=prop(false)\n\t,toRamdaPath=__toRamdaPath\n\t,mergedErrors=prop.merge([errors, theirErrors]).map(\n\t\t([a,b]) => {\n\t\t\tconst out = R.mergeDeepLeft(a,b)\n\t\t\treturn out\n\t\t}\n\t)\n\n\t// when the original values change we reset ours\n\t,values=initialValues.map( x => x )\n\t,pathCache={}\n\t,validate=() =>({})\n\t,onsubmit\n}={}) => {\n\n\n\tconst $ = z.Z({ state: values }).$\n\n\tconst initialSnapShot = JSON.parse(JSON.stringify(initialValues()))\n\n\tif( key != null ) {\n\t\ttry {\n\t\t\tconst saved = JSON.parse(localStorage.getItem('form.unsaved.'+key))\n\t\t\tconst merged = R.mergeDeepRight( initialValues(), saved )\n\t\t\tinitialValues(merged)\n\t\t\tchanges(merged)\n\t\t} catch (e){}\n\n\t\tvalues.map(\n\t\t\tx => localStorage.setItem('form.unsaved.'+key, JSON.stringify(x))\n\t\t)\n\t}\n\n\tconst clearStorage = () => {\n\t\tif( key != null ) {\n\t\t\tlocalStorage.removeItem('form.unsaved.'+key)\n\t\t}\n\t}\n\n\tlet nextInputOriginName = null\n\tlet nextInputDelay = null\n\tlet nextInputRevision=Date.now\n\n\tconst clearNextInputTimer = () => {\n\t\tclearTimeout(proceedTimer)\n\t\tnextInputOriginName = null\n\t\tnextInputDelay=0\n\t}\n\n\tconst nextInputImmediate = (predicate) => {\n\t\tif(\n\t\t\tpredicate()\n\t\t) {\n\t\t\tlet $0 = document.activeElement\n\t\t\tlet $$ = x => Array.from(document.querySelectorAll(x))\n\t\t\tlet xs = $$('form input')\n\t\t\txs[(xs.indexOf($0)+1) % xs.length].focus()\n\t\t}\n\n\t\tnextInputOriginName = null\n\t\tnextInputDelay=0\n\t}\n\n\tconst nextInput = (predicate=() => true, { delay=1000 }={}) => {\n\t\tconst validateDelay = 200\n\t\tconst ourDelay = validateDelay+1\n\n\t\tdelay = delay - ourDelay\n\n\t\tclearTimeout(proceedTimer)\n\t\tnextInputOriginName = null\n\t\tnextInputDelay=0\n\n\t\tm.redraw()\n\n\t\t// wait for validation to catch up\n\t\tproceedTimer=setTimeout( () => {\n\t\t\tif( predicate() ) {\n\t\t\t\tconst $0 = document.activeElement\n\n\t\t\t\tnextInputOriginName = $0.name || $0.id\n\t\t\t\tnextInputDelay = delay\n\t\t\t\tnextInputRevision=Date.now()\n\n\t\t\t\tm.redraw()\n\n\t\t\t\tclearTimeout(proceedTimer)\n\t\t\t\tproceedTimer = setTimeout( () => {\n\t\t\t\t\tnextInputImmediate(() => {\n\t\t\t\t\t\treturn $0 == document.activeElement\n\t\t\t\t\t\t\t&& predicate()\n\t\t\t\t\t})\n\t\t\t\t}, delay )\n\t\t\t}\n\t\t}, 201)\n\n\t}\n\n\tconst getNextInputOriginName = () =>\n\t\tnextInputOriginName\n\n\tconst getNextInputDelay = () =>\n\t\tnextInputDelay\n\n\tconst getNextInputRevision = () =>\n\t\tnextInputRevision\n\n\tlet validateTimeout = 200\n\tlet validateTimeoutId;\n\tvalues.map( x => {\n\t\tclearTimeout(validateTimeoutId)\n\t\tvalidateTimeoutId = setTimeout( () => {\n\t\t\tconst o = validate(x) || {}\n\t\t\ttheirErrors(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries(o).filter(\n\t\t\t\t\t\t([_,v]) => v // error must be truthy\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\tm.redraw()\n\t\t}, validateTimeout )\n\t\treturn null\n\t})\n\n\t// track if there's any changes the changes stream\n\tchanges.map( x => Object.keys(x).length > 0 )\n\t\t.map(changed)\n\n\t// track if there's any errors in the errors stream\n\tmergedErrors\n\t\t.map( x => Object.keys(x).length > 0 )\n\t\t.map(errored)\n\n\terrored.map( () => m.redraw() )\n\n\tconst errorInfo = (theirKeys, { checkTouched=true }={}) =>\n\t\ttheirErrors && errors\n\t\t&& m('label.error'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-auto-flow: column;\n\t\t\t\tgap: 1em;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin-top: 0em;\n\t\t\t\tjustify-content: start;\n\t\t\t`\n\t\t\t+ (\n\t\t\t\t[].concat(theirKeys).some(\n\t\t\t\t\tk => mergedErrors()[k]\n\t\t\t\t\t\t&& (!checkTouched || touched()[k])\n\t\t\t\t)\n\t\t\t\t? '.error-show' : ''\n\t\t\t)\n\t\t\t, m('.icon'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\talign-content: center;\n\t\t\t\t`\n\t\t\t\t, octagonAlert\n\t\t\t)\n\t\t\t, m('span'\n\t\t\t\t,\n\t\t\t\t{ oncreate: ({ dom }) => {\n\t\t\t\t\tconst s = [].concat(theirKeys).flatMap(\n\t\t\t\t\t\tk => mergedErrors()[k]\n\t\t\t\t\t\t\t&& (!checkTouched || touched()[k])\n\t\t\t\t\t\t\t? [mergedErrors()[k]]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t)\n\t\t\t\t\t.shift()\n\n\t\t\t\t\tif(s) {\n\t\t\t\t\t\tm.render(dom, s)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, onupdate: ({ dom }) => {\n\t\t\t\t\tconst s = [].concat(theirKeys).flatMap(\n\t\t\t\t\t\tk => mergedErrors()[k]\n\t\t\t\t\t\t\t&& (!checkTouched || touched()[k])\n\t\t\t\t\t\t\t? [mergedErrors()[k]]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t)\n\t\t\t\t\t.shift()\n\n\t\t\t\t\tif(s) {\n\t\t\t\t\t\tm.render(dom, s)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\n\tfunction nextInputProgress(k){\n\t\treturn m(''\n\t\t\t+ css`\n\t\t\t\topacity: ${\n\t\t\t\t\tgetNextInputOriginName() == k\n\t\t\t\t\t? 1\n\t\t\t\t\t: 0\n\t\t\t\t}\n\t\t\t\ttransition: ${\n\t\t\t\t\tgetNextInputOriginName() == k\n\t\t\t\t\t? 0\n\t\t\t\t\t: 1\n\t\t\t\t}\n\t\t\t`\n\t\t\t, m(''\n\t\t\t\t+ css`\n\t\t\t\t\twidth: 0%;\n\t\t\t\t\tborder: solid 1px #00ff1f;\n\t\t\t\t`\n\t\t\t\t+ css\n\t\t\t\t.$animate(`ease-in-out ${getNextInputDelay()}ms forwards`, {\n\t\t\t\t\tfrom: 'width: 0%'\n\t\t\t\t\t,to: 'width: 100%'\n\t\t\t\t})\n\t\t\t\t, { key:\n\t\t\t\t\tString(getNextInputOriginName())\n\t\t\t\t\t+ String(getNextInputRevision())\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\t}\n\n\tfunction isSaveDisabled(){\n\t\t// todo: model.saveDisabled()\n\t\treturn !changed()\n\t\t\t|| errored()\n\t\t\t|| saving()\n\t}\n\n\tfunction reset({\n\t\tvalues:_values=initialSnapShot\n\t\t, changes:_changes={}\n\t\t, errors:_errors={}\n\t\t, touched:_touched={}\n\t}={}){\n\t\ttheirErrors({})\n\t\tchanges(_changes)\n\t\terrors(_errors)\n\t\tvalues(_values)\n\t\ttouched(_touched)\n\t\tclearStorage()\n\t}\n\n\tfunction saveWith(f=onsubmit, childrenArgs){\n\t\tsaving(true)\n\t\treturn new Promise( (Y,N) => {\n\t\t\treturn Promise.resolve(f(childrenArgs)).then(Y,N)\n\t\t})\n\t\t\t.then( (options={}) => {\n\t\t\t\treset(options)\n\t\t\t})\n\t\t\t.finally( () => {\n\t\t\t\tsaving(false)\n\t\t\t} )\n\t}\n\n\tfunction setTouch(path, value){\n\t\tif( value ) {\n\t\t\ttouched(R.assocPath(path, Date.now(), touched()))\n\t\t} else {\n\t\t\ttouched(R.dissocPath(path, touched()))\n\t\t}\n\t}\n\n\tfunction setValue(path, value){\n\t\tif( value != null ) {\n\t\t\tvalues(R.assocPath(path, value, values()))\n\t\t} else {\n\t\t\tvalues(R.dissocPath(path, values()))\n\t\t}\n\t}\n\n\tfunction setError(path, value){\n\t\tif( value != null ) {\n\t\t\ttheirErrors(R.assocPath(path, value, theirErrors()))\n\t\t} else {\n\t\t\ttheirErrors(R.dissocPath(path, theirErrors()))\n\t\t}\n\t}\n\n\t// bind an event target to a stream/prop\n\tfunction bind(mapping){\n\t\tlet stream;\n\n\t\treturn {\n\t\t\toncreate: (vnode) => {\n\t\t\t\tstream = initialValues.map( () => {\n\t\t\t\t\tObject.entries(mapping).forEach( ([k,v]) => {\n\t\t\t\t\t\tvnode.dom[k] = v() ?? ''\n\t\t\t\t\t})\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t}\n\t\t\t, onremove: () => stream?.end(true)\n\t\t}\n\t}\n\n\treturn {\n\t\tinitialValues\n\t\t, errors\n\t\t, setTouch, setValue, setError\n\t\t, isSaveDisabled\n\t\t, saveWith\n\t\t, onsubmit\n\t\t, theirErrors\n\t\t, mergedErrors\n\t\t, touched\n\t\t, reset\n\t\t, changes\n\t\t, errored\n\t\t, changed\n\t\t, values\n\t\t, validate\n\t\t, errorInfo\n\t\t, nextInput\n\t\t, nextInputImmediate\n\t\t, clearStorage\n\t\t, pathCache\n\t\t, isModel: true\n\t\t, getNextInputOriginName\n\t\t, nextInputProgress\n\t\t, clearNextInputTimer\n\t\t, saving\n\t\t, toRamdaPath\n\t\t, $\n\t\t, bind\n\t}\n}\n\nconst Form = ({\n\tattrs\n}) => {\n\n\tconst model =\n\t\tattrs.isModel\n\t\t? attrs\n\t\t: Model(attrs)\n\n\tconst {\n\t\tinitialValues\n\t\t,errors\n\t\t,theirErrors\n\t\t,mergedErrors\n\t\t,touched\n\t\t,changes\n\t\t,errored\n\t\t,changed\n\t\t,values\n\t\t,$\n\t\t,nextInput\n\t\t,toRamdaPath\n\t} = model\n\n\tconst modelKeys = Object.keys(model)\n\n\tconst el = prop()\n\n\t// window.form = {\n\t// \terrors, theirErrors, values, originalValues: initialValues, changes\n\t// }\n\n\tlet prev = {}\n\t// update validation message of matching form elements when key changes\n\tprop.merge([el, theirErrors])\n\t\t.map(\n\t\t\t([el, latest]) => {\n\n\t\t\t\ttraverse ( R.mergeDeepLeft(latest, prev) ) (\n\t\t\t\t\t({ path }) => {\n\n\t\t\t\t\t\tconst x = R.path(path, latest)\n\n\t\t\t\t\t\tif( !x || typeof x == 'string' ) {\n\t\t\t\t\t\t\tconst name = path.join('.')\n\n\t\t\t\t\t\t\tconst found = el.querySelector('[name=\"'+name+'\"]')\n\n\t\t\t\t\t\t\tif( found ) {\n\t\t\t\t\t\t\t\tfound.setCustomValidity( x || '')\n\n\t\t\t\t\t\t\t\tif( x ) {\n\t\t\t\t\t\t\t\t\terrors(R.assocPath( path, x, errors() ))\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\terrors(R.dissocPath( path, errors() ))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetTitle(found)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn () => x\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\treturn prev = latest\n\t\t\t}\n\t\t)\n\n\tconst scanFormElements = el => {\n\t\tconst o =\n\t\t\tArray.from(el.querySelectorAll('[name]'))\n\t\t\t.reduce( (p, x) => {\n\t\t\t\tif( x.validationMessage ) {\n\t\t\t\t\treturn R.assocPath(\n\t\t\t\t\t\ttoRamdaPath(x.id || x.name)\n\t\t\t\t\t\t, `${magic(x.name || x.id)} ${x.validationMessage}`\n\t\t\t\t\t\t, p\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn p\n\t\t\t}, errors())\n\n\t\treturn errors(o)\n\t}\n\n\tel.map(\n\t\t// make sure value has been set by prop\n\t\tel => setTimeout( () => scanFormElements(el), 1000 )\n\t)\n\n\tconst over = f => s => s(f(s()))\n\n\tconst getValidValue = target => {\n\t\t// todo-james add more as needed\n\t\tif( target.type == 'date' ) {\n\t\t\treturn target.valueAsDate\n\t\t} else if (target.type == 'number' ) {\n\t\t\treturn target.valueAsNumber\n\t\t} else {\n\t\t\treturn target.value\n\t\t}\n\t}\n\n\tconst recordError = x => {\n\t\tconst path = toRamdaPath(x.id || x.name)\n\n\t\tif( x.validationMessage ) {\n\t\t\tconst useMagic =\n\t\t\t\tx.validationMessage\n\t\t\t\t\t!= R.path( toRamdaPath(x.id || x.name), theirErrors())\n\t\t\tconst s =\n\t\t\t\tuseMagic\n\t\t\t\t? `${magic(x.name || x.id)} ${x.validationMessage}`\n\t\t\t\t: x.validationMessage\n\n\t\t\tover( R.assocPath(path, s) ) ( errors )\n\t\t} else {\n\t\t\tover( R.dissocPath(path) ) (errors)\n\t\t}\n\t}\n\n\tconst setTitle = target => {\n\t\tif( typeof target.oldTitle == 'undefined' ) {\n\t\t\ttarget.oldTitle = target.title || \"\"\n\t\t}\n\n\t\tif( target.validationMessage ) {\n\t\t\ttarget.title = target.validationMessage\n\t\t} else if (\n\t\t\ttarget.title != target.oldTitle\n\t\t) {\n\t\t\ttarget.title = target.oldTitle\n\t\t}\n\t}\n\n\tconst inputHandler = ({ path:pathStr, target=null, value=null }) => {\n\t\tconst path = toRamdaPath(pathStr)\n\n\t\tconst original = R.path(path, initialValues())\n\t\tconst latest =\n\t\t\tmodel.pathCache[pathStr]\n\t\t\t\t? model.pathCache[pathStr]()\n\t\t\t: target\n\t\t\t\t? getValidValue(target)\n\t\t\t\t: value\n\n\t\tif( original !== latest ) {\n\t\t\tover(\n\t\t\t\tR.assocPath(path, latest)\n\t\t\t) (changes)\n\t\t} else {\n\t\t\tover( R.dissocPath(path) ) (changes)\n\t\t}\n\n\n\n\t\tif( target ) {\n\t\t\trecordError(target)\n\t\t\tsetTitle(target)\n\t\t}\n\n\t\t// record new value\n\t\tover( R.assocPath(path, latest) ) ( values )\n\t}\n\n\tconst oninput = ({target}) => {\n\t\tif( target.name || target.id ) {\n\n\t\t\tconst pathStr = target.id || target.name\n\n\t\t\tinputHandler({ path: pathStr, target })\n\t\t}\n\t}\n\n\tconst childrenArgs = {\n\t\toninput\n\n\t\t, values\n\t\t, originalValues: initialValues\n\t\t, errors: mergedErrors\n\t\t, touched\n\t\t, changes\n\n\t\t, errored\n\t\t, changed\n\t\t, errorInfo: model.errorInfo\n\n\t\t, scanFormElements: () => {\n\t\t\terrors({})\n\t\t\tscanFormElements(el())\n\t\t}\n\t\t, nextInput\n\t\t, isSaveDisabled: model.isSaveDisabled\n\t\t, reset: model.reset\n\t\t, $\n\t\t, inputHandler\n\t\t, bind: model.bind\n\t}\n\n\treturn {\n\t\tonbeforeremove(){\n\t\t\t$.$end()\n\t\t}\n\t\t,view: ({ attrs: theirAttrs, children }) => {\n\t\t\tconst attrs = R.omit(modelKeys, theirAttrs)\n\n\t\t\tconst onsubmit = theirAttrs.onsubmit || (() => {})\n\n\t\t\treturn m('form'\n\t\t\t\t+ ( attrs.showFocused ? '.show-focused' : '' )\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`\n\t\t\t\t.$nest('.touched:invalid:not(:focus)', `\n\t\t\t\t\tcolor: red;\n\t\t\t\t\tborder-color: red;\n\t\t\t\t`)\n\t\t\t\t.$nest('.show-focused input:focus:not(:invalid)', `\n\t\t\t\t\tborder-bottom: solid 2px #00ff1f;\n\t\t\t\t`)\n\t\t\t\t.$nest('.error',\n\t\t\t\t\tcss`\n\t\t\t\t\t\tmax-height: 0px;\n\t\t\t\t\t\tpadding: 0px;\n\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\ttransition: 1s 0.5s;\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t`\n\t\t\t\t)\n\t\t\t\t.$nest('.error.error-show',\n\t\t\t\t\tcss`\n\t\t\t\t\t\tmax-height: 4em;\n\t\t\t\t\t`\n\t\t\t\t)\n\t\t\t\t,\n\t\t\t\tObject.assign(\n\t\t\t\t\t{}\n\t\t\t\t\t, attrs\n\t\t\t\t\t,\n\t\t\t\t\t{ onsubmit: e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tmodel.saveWith(onsubmit, childrenArgs)\n\t\t\t\t\t}\n\t\t\t\t\t, oninput: e => oninput(e)\n\t\t\t\t\t, onfocusout: e => {\n\t\t\t\t\t\tmodel.clearNextInputTimer()\n\t\t\t\t\t\toninput(e)\n\t\t\t\t\t\tif( e.target.name || e.target.id ) {\n\t\t\t\t\t\t\tover(\n\t\t\t\t\t\t\t\tR.assocPath(\n\t\t\t\t\t\t\t\t\ttoRamdaPath(e.target.id || e.target.name), Date.now()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) (touched)\n\t\t\t\t\t\t\te.target.classList.add('touched')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, oncreate: ({ dom }) => el(dom)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t, children.map(\n\t\t\t\t\tf => f(childrenArgs)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n\nForm.Model = Model\n\nForm.legacyRenderProps = true\nexport default Form","/* globals setTimeout */\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport * as elements from '../components/elements'\nimport Responsive from '../components/responsive'\nimport HarthUppy from '../components/harth-uppy'\nimport NumberInput2 from '../components/number2'\nimport Form from '../components/form'\nimport { money as makeMoney } from '../utils/regExes'\nimport css from 'bss'\nimport Autocomplete from '../modules/autocomplete'\nimport * as uuid from 'uuid'\nimport * as ContextBar from '../components/context-bar'\n\nfunction Main({\n\tattrs: {\n\t\tctrl, discardProjectButton, saveProjectButton\n\t}\n}){\n\n\tconst duration = ctrl.model.data.scoped(0)\n\n\tconst pdata =\n\t\t(p) => ({\n\t\t\t'Name':\n\t\t\t\telements.textInput(\n\t\t\t\t\tp.project_name\n\t\t\t\t\t,{\n\t\t\t\t\t\tname: 'Project Name'\n\t\t\t\t\t\t,required: true\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t,'Duration':\n\t\t\t\tm(NumberInput2.component, {\n\t\t\t\t\tname: 'Duration'\n\t\t\t\t\t,prop:\n\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\tif( v ){\n\t\t\t\t\t\t\t\tp.project_start_date(new Date().getTime())\n\t\t\t\t\t\t\t\tp.project_dead_date(new Date().getTime()+v*1000*60*60*24)\n\n\t\t\t\t\t\t\t\tp.disciplines\n\t\t\t\t\t\t\t\t.forEach((d) => d.discipline_end_date(p.project_dead_date()) )\n\n\t\t\t\t\t\t\t\tduration(v)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn duration()\n\t\t\t\t\t\t}\n\t\t\t\t\t,suffix: () => ' (Days)'\n\t\t\t\t\t,title: \"Duration of the project\"\n\t\t\t\t\t// ,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t,novalidate: true\n\t\t\t\t\t,required: true\n\t\t\t\t\t,min: 0\n\t\t\t\t})\n\t\t\t,'Contract':\n\t\t\t\tAutocomplete.all(\n\t\t\t\t\tctrl.model.data.contracts\n\t\t\t\t\t,(v) => {\n\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\tconst cobj =\n\t\t\t\t\t\t\t\tctrl.model.data.contracts()\n\t\t\t\t\t\t\t\t.find((u) => u.contract_name == v)\n\t\t\t\t\t\t\t\t|| { contract_id: uuid.v4(), contract_name: v}\n\n\t\t\t\t\t\t\tctrl.model.form().project.contract_id( cobj.contract_id )\n\t\t\t\t\t\t\tctrl.model.form().project.contract_name = cobj.contract_name\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t? v.contract_name\n\t\t\t\t\t\t\t: ctrl.model.form().project.contract_name\n\t\t\t\t\t\t}\n\t\t\t\t\t,'contract_name'\n\t\t\t\t\t, () => ({\n\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t|| ctrl.model.loading()\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t})\n\n\tconst addDisplinePlus = () =>\n\t\tm('.data'\n\t\t\t, m(`button`\n\t\t\t\t+ css`\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\twidth: 1.8em;\n\t\t\t\t\theight: 1.8em;\n\t\t\t\t`\n\t\t\t\t,{\n\t\t\t\t\tonclick: ctrl.model.addNewDiscipline\n\t\t\t\t}\n\t\t\t\t, '+'\n\t\t\t)\n\t\t)\n\n\tconst removeDiscipline = (d, after=x=>x) =>\n\t\tm('.data'\n\t\t\t, m(`button`\n\t\t\t\t+ css`\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\twidth: 1.8em;\n\t\t\t\t\theight: 1.8em;\n\t\t\t\t`\n\t\t\t\t.$nest('.no-border &', `\n\t\t\t\t\tborder: none;\n\t\t\t\t`)\n\t\t\t\t,{\n\t\t\t\t\tonclick(){\n\t\t\t\t\t\tctrl.model.checkMultiple().data = [d]\n\t\t\t\t\t\treturn Promise.resolve(ctrl.intent.deleteDiscipline())\n\t\t\t\t\t\t\t.then( () => new Promise(Y => setTimeout(Y, 100)))\n\t\t\t\t\t\t\t.then( after )\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, '×' // ⨉\n\t\t\t)\n\t\t)\n\n\tconst inlineHeader = (title='', content) =>\n\t\ttitle\n\t\t? m('.inline-header'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 0em;\n\t\t\t`\n\t\t\t.$nest('.title', `\n\t\t\t\tfont-size: 0.6em;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tcolor: rgba(0,0,0,0.5);\n\t\t\t\tletter-spacing: 1.3px;\n\t\t\t\tfont-weight: 600;\n\t\t\t`)\n\t\t\t, m('.title', title)\n\t\t\t, m('.content', content)\n\t\t)\n\t\t: content\n\n\tconst disciplineTable2 = ({ scanFormElements }) => {\n\n\n\t\tconst bigMobile = () => mobile({ big: true })\n\t\tconst smallMobile = () => mobile({ big: false })\n\n\t\tconst mobile = ({ big=false }) =>\n\t\t\tm('.discipline-table'\n\t\t\t\t+ (big ? '.big' : '')\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`\n\t\t\t\t.$nest('.data-rows', `\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row', `\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\tpadding: 1em;\n\t\t\t\t\tbox-shadow: 0px 0px 3px 0px rgba(0,0,0,0.1);\n\t\t\t\t\tposition: relative;\n\t\t\t\t`)\n\t\t\t\t.$nest('.actions', `\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 0.3em;\n\t\t\t\t\tright: 0.3em;\n\t\t\t\t\tz-index: 1;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row>.group', `\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row>.group.top', `\n\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\talign-items: center;\n\t\t\t\t`)\n\t\t\t\t.$nest('.slash', `\n\t\t\t\t\ttext-align: center;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row>.group.middle', `\n\t\t\t\t\tgrid-template-columns: 6em 1em 1fr;\n\t\t\t\t\talign-items: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('&.big .data-row>.group.middle', `\n\t\t\t\t\tgrid-template-columns: 6em 1em 1fr 1fr 1fr;\n\t\t\t\t\talign-items: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('&.big .total-row', `\n\t\t\t\t\tgrid-template-columns: 6em 1em 1fr 1fr 1fr;\n\t\t\t\t\talign-items: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row>.group.bottom', `\n\t\t\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\t\t\talign-items: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('.total-row',`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\t\t\tpadding: 1em;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`)\n\t\t\t\t.$nest('.total-row>*', `\n\t\t\t\t\ttext-align: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('.data-row:focus-within .inline-header .title', `\n\t\t\t\t\tcolor: var(--color-mid);\n\t\t\t\t`)\n\t\t\t\t, m('.data-rows'\n\t\t\t\t\t, ctrl.model.form().project.disciplines.slice().map( (d, i) =>\n\t\t\t\t\t\tm('.data-row'\n\t\t\t\t\t\t\t,m('.actions.no-border'\n\t\t\t\t\t\t\t\t, removeDiscipline(d, i)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.top.group'\n\t\t\t\t\t\t\t\t, inlineHeader('Name', disciplineName(d,i))\n\t\t\t\t\t\t\t\t, inlineHeader('Workers', assignSomeone(d,i))\n\t\t\t\t\t\t\t\t, inlineHeader(' ', assignees(d,i))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.middle.group'\n\t\t\t\t\t\t\t\t, inlineHeader('Amount', workAmount(d,i))\n\t\t\t\t\t\t\t\t, inlineHeader('', m('.slash', '/'))\n\t\t\t\t\t\t\t\t, inlineHeader('Unit of Measure', uom(d, i))\n\t\t\t\t\t\t\t\t, big && inlineHeader('Pay Rate', payRate(d,i))\n\t\t\t\t\t\t\t\t, big && inlineHeader('Charge Rate', chargeRate(d,i))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, !big && m('.bottom.group'\n\t\t\t\t\t\t\t\t, inlineHeader('Pay Rate', payRate(d,i))\n\t\t\t\t\t\t\t\t, inlineHeader('Charge Rate', chargeRate(d,i))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, m('.total-row'\n\t\t\t\t\t, big && m('.spacer')\n\t\t\t\t\t, big && m('.spacer')\n\t\t\t\t\t, big && m('.spacer')\n\t\t\t\t\t, inlineHeader('Total Pay', totalPay())\n\t\t\t\t\t, inlineHeader('Total Charge', totalCharge())\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst removeItem = (d, i) =>\n\t\t\tm('.verb'\n\t\t\t\t,{ key: 'disciplines.'+i+'.removal' }\n\t\t\t\t, removeDiscipline(d, scanFormElements)\n\t\t\t)\n\n\t\tconst disciplineName = (d,i) =>\n\t\t\tm('.value'\n\t\t\t\t,{ key: 'disciplines.'+i+'.discipline_name' }\n\t\t\t\t, ctrl.model.disciplineSelectAutocomplete(d, {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tinputStyle: css``\n\t\t\t\t\t\t,inputClassName: 'form-control'\n\t\t\t\t\t}\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tstyle: {} // overwrite height=3em\n\t\t\t\t\t\t,name: 'Discipline Name'\n\t\t\t\t\t\t,id: 'disciplines.'+i+'.discipline_name'\n\t\t\t\t\t\t,required: true\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst workAmount = (d,i) =>\n\t\t\tm('.value.numeric'\n\t\t\t\t,{ key: 'disciplines.'+i+'.discipline_planned' }\n\t\t\t\t, m(NumberInput2.component, {\n\t\t\t\t\tprop: d.discipline_planned\n\t\t\t\t\t,name: 'Work Amount'\n\t\t\t\t\t,id: 'disciplines.'+i+'.discipline_planned'\n\t\t\t\t\t,moneyMode: true\n\t\t\t\t\t,min: 0.01\n\t\t\t\t\t,title: \"Amount of work there is to complete\"\n\t\t\t\t\t,toFixed: 2\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst assignSomeone = (d) =>\n\t\t\tm(``\n\t\t\t\t,{ key: d.key + 'assigned' + ctrl.model.userSelectionIndex()[d.key]().length }\n\t\t\t\t,Autocomplete.strict(\n\t\t\t\t\tctrl.model.userSelectionIndex()[d.key]\n\t\t\t\t\t,(v, model) => {\n\n\t\t\t\t\t\tif(\n\t\t\t\t\t\t\tv.user_id()\n\t\t\t\t\t\t\t&& !d.users().find((du) =>\n\t\t\t\t\t\t\t\tdu.user_id()\n\t\t\t\t\t\t\t\t== v.user_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t){\n\t\t\t\t\t\t\td.users().unshift(v)\n\t\t\t\t\t\t\tctrl.model.users(ctrl.model.users())\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\tmodel.chosen(null)\n\n\t\t\t\t\t}\n\t\t\t\t\t, 'usersFullName'\n\t\t\t\t\t, () => ({\n\t\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t!ctrl.model.userSelectionIndex()[d.key]\n\t\t\t\t\t\t\t|| !ctrl.model.userSelectionIndex()[d.key]\n\t\t\t\t\t\t\t&& !ctrl.model.userSelectionIndex()[d.key]().length\n\t\t\t\t\t\t,title: \"Assigned to task\"\n\t\t\t\t\t\t,id: d.key + 'assigned' + ctrl.model.userSelectionIndex()[d.key]().length\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst assignees = (d) =>\n\t\t\tm(``\n\t\t\t\t,{key: d.key + 'assignees' + ctrl.model.userSelectionIndex()[d.key]().length}\n\t\t\t\t,d.users().length > 0\n\t\t\t\t&& elements.inlineStrikeList2(\n\t\t\t\t\td.users()\n\t\t\t\t\t.map(\n\t\t\t\t\t\tod => ({\n\t\t\t\t\t\t\tlabel: od.user_username()\n\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\td.users()\n\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\td.users()\n\t\t\t\t\t\t\t\t\t.findIndex((ds) =>\n\t\t\t\t\t\t\t\t\t\tds.user_id()\n\t\t\t\t\t\t\t\t\t\t== od.user_id()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst uom = (d,i) =>\n\t\t\tm(''\n\t\t\t\t,{ key: 'disciplines.'+i+'.discipline_uom' }\n\t\t\t\t,m(Autocomplete.Main, {\n\t\t\t\t\tlist: ctrl.model.organizations_disciplines\n\t\t\t\t\t,field: 'organizations_disciplines_uom'\n\t\t\t\t\t,onselect(x){\n\t\t\t\t\t\td.discipline_uom(x.organizations_disciplines_uom)\n\t\t\t\t\t}\n\t\t\t\t\t,oninput(x){\n\t\t\t\t\t\tx && d.discipline_uom(x)\n\t\t\t\t\t}\n\t\t\t\t\t,inputStyle: css`\n\t\t\t\t\t\theight: auto;\n\t\t\t\t\t\ttext-align: end;\n\t\t\t\t\t\tline-height: calc(1.6em - 1px);\n\t\t\t\t\t`\n\t\t\t\t\t,inputClassName: 'form-control'\n\t\t\t\t\t,initialValue: d.discipline_uom()\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tname: 'Unit of Measure'\n\t\t\t\t\t\t,id: 'disciplines.'+i+'.discipline_uom'\n\t\t\t\t\t\t,value: d.discipline_uom()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst payRate = (d,i) =>\n\t\t\tm('.value.numeric'\n\t\t\t\t,{ key: 'disciplines.'+i+'.organizations_disciplines_nominal_expenditure_rate' }\n\t\t\t\t, m(NumberInput2.MoneyInput, {\n\t\t\t\t\tprop:\n\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\tv != null\n\t\t\t\t\t\t\t? d.organizations_disciplines_nominal_expenditure_rate(\n\t\t\t\t\t\t\t\tMath.abs(v) * -1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\treturn d.organizations_disciplines_nominal_expenditure_rate()\n\t\t\t\t\t\t}\n\t\t\t\t\t,name: 'Pay Rate'\n\t\t\t\t\t,id: 'disciplines.'+i+'.organizations_disciplines_nominal_expenditure_rate'\n\t\t\t\t\t,moneyMode: true\n\t\t\t\t\t,max: 0\n\t\t\t\t\t,title: `Average amount that would be paid when a team or resource conducts this discipline. May be altered for specific teams via financials and the contract selection`\n\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst chargeRate = (d,i) =>\n\t\t\tm('.value.numeric'\n\t\t\t\t,{ key: 'disciplines.'+i+'.organizations_disciplines_nominal_revenue_rate' }\n\t\t\t\t, m(NumberInput2.MoneyInput, {\n\t\t\t\t\tprop: (value) => ctrl.model.disciplineChargeRate(value, [d])\n\t\t\t\t\t,name: 'Charge Rate'\n\t\t\t\t\t,id: 'disciplines.'+i+'.organizations_disciplines_nominal_revenue_rate'\n\t\t\t\t\t,min: 0\n\t\t\t\t\t,title: `Average amount to charge clients when this disciplines is used. May be altered for specific clients via financials and the contract selection`\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst totalPay = () =>\n\t\t\tm('.value.numeric'\n\t\t\t\t, m('.data'\n\t\t\t\t\t,makeMoney(\n\t\t\t\t\t\tR.sum(ctrl.model.form().project.disciplines.map( (d) =>\n\t\t\t\t\t\t\td.discipline_planned()\n\t\t\t\t\t\t\t* d.organizations_disciplines_nominal_expenditure_rate()\n\t\t\t\t\t\t))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst totalCharge = () =>\n\t\t\tm('.value.numeric'\n\t\t\t\t, m('.data'\n\t\t\t\t\t,makeMoney(\n\t\t\t\t\t\tR.sum(ctrl.model.form().project.disciplines.map((d) =>\n\t\t\t\t\t\t\td.discipline_planned()\n\t\t\t\t\t\t\t* d.organizations_disciplines_nominal_revenue_rate()\n\t\t\t\t\t\t\t* d.discipline_contract_multiplier()\n\t\t\t\t\t\t))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst tablet = () =>\n\t\t\tm('.discipline-table.tablet'\n\t\t\t\t+ css`\n\t\t\t\t\t--verb: 2em;\n\t\t\t\t\t--name: 5em;\n\t\t\t\t\t--uom: 5em;\n\t\t\t\t\t--work: 5em;\n\t\t\t\t\t--pay: 5em;\n\t\t\t\t\t--charge: 5em;\n\t\t\t\t\t--assign: 8em;\n\t\t\t\t\t--assignee: 15em;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`\n\t\t\t\t.tablet`\n\t\t\t\t\t--name: 16em;\n\t\t\t\t\t--work: 6em;\n\t\t\t\t\t--pay: 6em;\n\t\t\t\t\t--charge: 6em;\n\t\t\t\t\t--uom: 9em;\n\t\t\t\t\t--assign: 8em;\n\t\t\t\t\t--assignee: 15em;\n\t\t\t\t`\n\t\t\t\t.$nest('.header-row,.data-row,.total-row', `\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: var(--verb) var(--name) var(--work) var(--uom) var(--pay) var(--charge) var(--assign) var(--assignee);\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\talign-items: end;\n\t\t\t\t`)\n\t\t\t\t.$nest('.numeric', `\n\t\t\t\t\ttext-align: right;\n\t\t\t\t`)\n\t\t\t\t.$nest('.numeric *', `\n\t\t\t\t\ttext-align: right;\n\t\t\t\t`)\n\t\t\t\t, m('.header-row'\n\t\t\t\t\t, m('.spacer')\n\t\t\t\t\t, m('.header', 'Name')\n\t\t\t\t\t, m('.header.numeric', 'Work Amount')\n\t\t\t\t\t, m('.header.numeric', 'Unit of Measure')\n\t\t\t\t\t, m('.header.numeric', 'Pay Rate')\n\t\t\t\t\t, m('.header.numeric', 'Charge Rate')\n\t\t\t\t\t, m('.header', 'Workers')\n\t\t\t\t\t, m('.header', ' ')\n\t\t\t\t)\n\t\t\t\t, m('.data-rows'\n\t\t\t\t\t, ctrl.model.form().project.disciplines.slice().map( (d, i) =>\n\t\t\t\t\t\t// .row is bootstrap 😡\n\t\t\t\t\t\tm('.data-row'\n\t\t\t\t\t\t\t, { key: d.key || d.id }\n\t\t\t\t\t\t\t, removeItem(d, i)\n\t\t\t\t\t\t\t, disciplineName(d, i)\n\t\t\t\t\t\t\t, workAmount(d, i)\n\t\t\t\t\t\t\t, uom(d, i)\n\t\t\t\t\t\t\t, payRate(d, i)\n\t\t\t\t\t\t\t, chargeRate(d, i)\n\t\t\t\t\t\t\t, assignSomeone(d,i)\n\t\t\t\t\t\t\t, assignees(d,i)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, m('.total-row'\n\t\t\t\t\t, m('.verb'\n\t\t\t\t\t\t, addDisplinePlus()\n\t\t\t\t\t)\n\t\t\t\t\t, Array(3).fill().map( () =>\n\t\t\t\t\t\tm('.value.spacer'\n\t\t\t\t\t\t\t, m('.data', '')\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,totalPay()\n\t\t\t\t\t,totalCharge()\n\t\t\t\t)\n\t\t\t)\n\n\t\treturn m(Responsive, {\n\t\t\tbreakpoints: {\n\t\t\t\tsmallMobile: 0\n\t\t\t\t,bigMobile: 500\n\t\t\t\t,tablet: 700\n\t\t\t}\n\t\t}, ({ smallMobileOnly, bigMobileOnly, tablet: gtMobile }) => [\n\t\t\tsmallMobileOnly(smallMobile)\n\t\t\t, bigMobileOnly(bigMobile)\n\t\t\t, gtMobile(tablet)\n\t\t])\n\t}\n\n\n\tconst legacy_errored = () =>\n\t\tctrl.model.SaveDisabled(true)\n\t\t|| ctrl.model.check_dnames(true)\n\t\t|| ctrl.model.checkTaskDates(true)\n\n\tconst view = () =>\n\t\tm(Form\n\t\t\t, { toRamdaPath: x => [x] } , ({ errors, errored, scanFormElements }) => [\n\t\t\tm('div.initial-project-view'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t/* this lets us have position sticky later */\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tgap: 2em;\n\t\t\t\t`\n\t\t\t\t.tablet`\n\t\t\t\t\t/*\n\t\t\t\t\t\tThis is a trick to make the content centered with a\n\t\t\t\t\t\tmax width. Effectively the container is full width\n\t\t\t\t\t\tbecause thats what grid does by default, but we've said\n\t\t\t\t\t\tthe column width is max 60em\n\n\t\t\t\t\t\tNo margins, no need for lots and lots of different\n\t\t\t\t\t\tbreakpoints.\n\t\t\t\t\t*/\n\t\t\t\t\tgrid-template-columns: minmax(0em, 90em);\n\t\t\t\t`\n\t\t\t\t.$nest('.sticky-header', `\n\t\t\t\t\tposition: sticky;\n\t\t\t\t\ttop: -1em;\n\t\t\t\t\tz-index: 2;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t`)\n\t\t\t\t, m('.project-details',\n\t\t\t\t\tm('.sticky-header'\n\t\t\t\t\t\t, m('h1'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, 'Project Details'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\tgap: 5em;\n\t\t\t\t\t\t\tpadding: 1em 0em;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t// Keep this stuff as a once off override for now\n\t\t\t\t\t\t// We'll fix it via css vars organized centrally later\n\t\t\t\t\t\t.tablet(\n\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\tgrid-template-columns: minmax(15em, 35em) 20em 15em;\n\t\t\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t// number input align height with bootstrap input\n\t\t\t\t\t\t\t.$nest('&& .number-input', `\n\t\t\t\t\t\t\t\tgrid-template-rows: 34px;\n\t\t\t\t\t\t\t`)\n\n\t\t\t\t\t\t\t// contract input align height with bootstrap input\n\t\t\t\t\t\t\t.$nest('&& .manuel-complete', `\n\t\t\t\t\t\t\t\theight: 34px;\n\t\t\t\t\t\t\t`)\n\n\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Name'\n\t\t\t\t\t\t\t\t, key: 'Name'\n\t\t\t\t\t\t\t\t, desc: 'A memorable name for your project'\n\t\t\t\t\t\t\t\t, subdesc: 'You can change this at any time.'\n\t\t\t\t\t\t\t\t, addon: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tlabel: 'Forecasted Duration'\n\t\t\t\t\t\t\t\t,key: 'Duration'\n\t\t\t\t\t\t\t\t,desc: 'Estimate how long your project will take to complete.'\n\t\t\t\t\t\t\t\t,subdesc: 'This helps Odin automatically generate a schedule for your project.'\n\t\t\t\t\t\t\t\t,addon: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tlabel: 'Contract'\n\t\t\t\t\t\t\t\t,key: 'Contract'\n\t\t\t\t\t\t\t\t,desc: 'Stores financial information for forecasting and invoicing'\n\t\t\t\t\t\t\t\t,subdesc: 'This helps automate tenders'\n\t\t\t\t\t\t\t\t,addon: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map(({ key, label, desc, subdesc, addon }) =>\n\t\t\t\t\t\t\tm('.data.no-validate'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.2fr 0.2fr 4fr;\n\t\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('label.control-label', label)\n\t\t\t\t\t\t\t\t\t,m('.addon'\n\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\taddon\n\t\t\t\t\t\t\t\t\t\t\t? css`\n\t\t\t\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 0em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, pdata(ctrl.model.form().project)[key]\n\t\t\t\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tright: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t, addon\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('.info'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$nest('.subdesc', `\n\t\t\t\t\t\t\t\t\t\t\tcolor: #717171;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, m('.desc', desc)\n\t\t\t\t\t\t\t\t\t\t, m('.subdesc', subdesc )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('.project-files'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tjustify-content: start;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t`\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t,m('label.control-label', 'Project Files')\n\t\t\t\t\t\t,m('.desc', 'Upload project plans, photos, spreadsheets, anything that would be helpful for this project.')\n\t\t\t\t\t)\n\t\t\t\t\t,m(Responsive, { breakpoints: { mobile: 0, tablet: 850 } }, ({ tablet, mobileOnly }) => [\n\t\t\t\t\t\tmobileOnly( () =>\n\t\t\t\t\t\t\tm('.uppy-wrapper'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tmin-height: 350px;\n\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: minmax(0px, 400px);\n\t\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({uploadbox: 'projectfiles'})\n\t\t\t\t\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t\t\t\t\t\t, width: 400\n\t\t\t\t\t\t\t\t\t, height: 350\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,tablet( () =>\n\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tmin-height: 350px;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 840px;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: min(350px, max-content);\n\t\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.uppy-wrapper'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\t\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({uploadbox: 'projectfiles'})\n\t\t\t\t\t\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t\t\t\t\t\t\t, width: 840\n\t\t\t\t\t\t\t\t\t\t, height: 350\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('.discipline-table'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t// + css`\n\t\t\t\t\t// \topacity: ${ duration() ? 1 : 0.4 };\n\t\t\t\t\t// `\n\t\t\t\t\t,m('.sticky-header'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,m('h1'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, 'Project Disciplines'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,addDisplinePlus()\n\t\t\t\t\t)\n\t\t\t\t\t,m('.desc', 'Types of work involved in completing your project, including how much work there is to do, what they are paid, and how much they cost.')\n\t\t\t\t\t, true\n\t\t\t\t\t\t? disciplineTable2({ scanFormElements })\n\t\t\t\t\t\t: null\n\t\t\t\t)\n\n\t\t\t\t,m(ContextBar.Content, {\n\t\t\t\t\ticon: errored() ? ContextBar.icon.error() : ContextBar.icon.info()\n\t\t\t\t\t, message:\n\t\t\t\t\t\terrored()\n\t\t\t\t\t\t\t? (Object.values(errors())[0] || '')\n\t\t\t\t\t\t\t\t.replace('Please fill out this field', 'must be completed')\n\t\t\t\t\t\t\t: legacy_errored()\n\t\t\t\t\t, actions: [\n\t\t\t\t\t\tdiscardProjectButton(ctrl)\n\t\t\t\t\t\t,saveProjectButton(ctrl)\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t)\n\t\t])\n\n\treturn {\n\t\tview\n\t}\n}\n\nexport default Main","import m from 'bacta'\n\nconst ProjectDocument = {\n\ttoString: x =>\n\t\t[ x.project_documents_label || 'Untitled'\n\t\t, ProjectDocument.toStringDeliverable(x)\n\t\t]\n\t\t.join(' ')\n\t,toStringDeliverable: x =>\n\t\tx.project_documents_is_deliverable\n\t\t? ' (Deliverable)'\n\t\t: ''\n\t,toTitle: x =>\n\t\tx.project_documents_label +' ('+x.project_documents_href+')'\n\n\t,toVTree: x =>\n\t\tm('a',\n\t\t\t{ href: x.project_documents_href\n\t\t\t, key: x.project_documents_id\n\t\t\t, onclick: e => e.stopImmediatePropagation()\n\t\t\t, rel: 'noopener noreferrer'\n\t\t\t, title: ProjectDocument.toTitle(x)\n\t\t\t}\n\t\t\t, ProjectDocument.toString(x)\n\t\t)\n\n\t,filter: ({editProjectPermissions}) => x =>\n\t\tx.project_documents_is_deliverable\n\t\t? editProjectPermissions\n\t\t: true\n}\n\nexport default ProjectDocument","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define('Chartist', [], function () {\n return (root['Chartist'] = factory());\n });\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n root['Chartist'] = factory();\n }\n}(this, function () {\n\n/* Chartist.js 0.11.4\n * Copyright © 2019 Gion Kunz\n * Free to use under either the WTFPL license or the MIT license.\n * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL\n * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT\n */\n/**\n * The core module of Chartist that is mainly providing static functions and higher level functions for chart modules.\n *\n * @module Chartist.Core\n */\nvar Chartist = {\n version: '0.11.4'\n};\n\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * This object contains all namespaces used within Chartist.\n *\n * @memberof Chartist.Core\n * @type {{svg: string, xmlns: string, xhtml: string, xlink: string, ct: string}}\n */\n Chartist.namespaces = {\n svg: 'http://www.w3.org/2000/svg',\n xmlns: 'http://www.w3.org/2000/xmlns/',\n xhtml: 'http://www.w3.org/1999/xhtml',\n xlink: 'http://www.w3.org/1999/xlink',\n ct: 'http://gionkunz.github.com/chartist-js/ct'\n };\n\n /**\n * Helps to simplify functional style code\n *\n * @memberof Chartist.Core\n * @param {*} n This exact value will be returned by the noop function\n * @return {*} The same value that was provided to the n parameter\n */\n Chartist.noop = function (n) {\n return n;\n };\n\n /**\n * Generates a-z from a number 0 to 26\n *\n * @memberof Chartist.Core\n * @param {Number} n A number from 0 to 26 that will result in a letter a-z\n * @return {String} A character from a-z based on the input number n\n */\n Chartist.alphaNumerate = function (n) {\n // Limit to a-z\n return String.fromCharCode(97 + n % 26);\n };\n\n /**\n * Simple recursive object extend\n *\n * @memberof Chartist.Core\n * @param {Object} target Target object where the source will be merged into\n * @param {Object...} sources This object (objects) will be merged into target and then target is returned\n * @return {Object} An object that has the same reference as target but is extended and merged with the properties of source\n */\n Chartist.extend = function (target) {\n var i, source, sourceProp;\n target = target || {};\n\n for (i = 1; i < arguments.length; i++) {\n source = arguments[i];\n for (var prop in source) {\n sourceProp = source[prop];\n if (typeof sourceProp === 'object' && sourceProp !== null && !(sourceProp instanceof Array)) {\n target[prop] = Chartist.extend(target[prop], sourceProp);\n } else {\n target[prop] = sourceProp;\n }\n }\n }\n\n return target;\n };\n\n /**\n * Replaces all occurrences of subStr in str with newSubStr and returns a new string.\n *\n * @memberof Chartist.Core\n * @param {String} str\n * @param {String} subStr\n * @param {String} newSubStr\n * @return {String}\n */\n Chartist.replaceAll = function(str, subStr, newSubStr) {\n return str.replace(new RegExp(subStr, 'g'), newSubStr);\n };\n\n /**\n * Converts a number to a string with a unit. If a string is passed then this will be returned unmodified.\n *\n * @memberof Chartist.Core\n * @param {Number} value\n * @param {String} unit\n * @return {String} Returns the passed number value with unit.\n */\n Chartist.ensureUnit = function(value, unit) {\n if(typeof value === 'number') {\n value = value + unit;\n }\n\n return value;\n };\n\n /**\n * Converts a number or string to a quantity object.\n *\n * @memberof Chartist.Core\n * @param {String|Number} input\n * @return {Object} Returns an object containing the value as number and the unit as string.\n */\n Chartist.quantity = function(input) {\n if (typeof input === 'string') {\n var match = (/^(\\d+)\\s*(.*)$/g).exec(input);\n return {\n value : +match[1],\n unit: match[2] || undefined\n };\n }\n return { value: input };\n };\n\n /**\n * This is a wrapper around document.querySelector that will return the query if it's already of type Node\n *\n * @memberof Chartist.Core\n * @param {String|Node} query The query to use for selecting a Node or a DOM node that will be returned directly\n * @return {Node}\n */\n Chartist.querySelector = function(query) {\n return query instanceof Node ? query : document.querySelector(query);\n };\n\n /**\n * Functional style helper to produce array with given length initialized with undefined values\n *\n * @memberof Chartist.Core\n * @param length\n * @return {Array}\n */\n Chartist.times = function(length) {\n return Array.apply(null, new Array(length));\n };\n\n /**\n * Sum helper to be used in reduce functions\n *\n * @memberof Chartist.Core\n * @param previous\n * @param current\n * @return {*}\n */\n Chartist.sum = function(previous, current) {\n return previous + (current ? current : 0);\n };\n\n /**\n * Multiply helper to be used in `Array.map` for multiplying each value of an array with a factor.\n *\n * @memberof Chartist.Core\n * @param {Number} factor\n * @returns {Function} Function that can be used in `Array.map` to multiply each value in an array\n */\n Chartist.mapMultiply = function(factor) {\n return function(num) {\n return num * factor;\n };\n };\n\n /**\n * Add helper to be used in `Array.map` for adding a addend to each value of an array.\n *\n * @memberof Chartist.Core\n * @param {Number} addend\n * @returns {Function} Function that can be used in `Array.map` to add a addend to each value in an array\n */\n Chartist.mapAdd = function(addend) {\n return function(num) {\n return num + addend;\n };\n };\n\n /**\n * Map for multi dimensional arrays where their nested arrays will be mapped in serial. The output array will have the length of the largest nested array. The callback function is called with variable arguments where each argument is the nested array value (or undefined if there are no more values).\n *\n * @memberof Chartist.Core\n * @param arr\n * @param cb\n * @return {Array}\n */\n Chartist.serialMap = function(arr, cb) {\n var result = [],\n length = Math.max.apply(null, arr.map(function(e) {\n return e.length;\n }));\n\n Chartist.times(length).forEach(function(e, index) {\n var args = arr.map(function(e) {\n return e[index];\n });\n\n result[index] = cb.apply(null, args);\n });\n\n return result;\n };\n\n /**\n * This helper function can be used to round values with certain precision level after decimal. This is used to prevent rounding errors near float point precision limit.\n *\n * @memberof Chartist.Core\n * @param {Number} value The value that should be rounded with precision\n * @param {Number} [digits] The number of digits after decimal used to do the rounding\n * @returns {number} Rounded value\n */\n Chartist.roundWithPrecision = function(value, digits) {\n var precision = Math.pow(10, digits || Chartist.precision);\n return Math.round(value * precision) / precision;\n };\n\n /**\n * Precision level used internally in Chartist for rounding. If you require more decimal places you can increase this number.\n *\n * @memberof Chartist.Core\n * @type {number}\n */\n Chartist.precision = 8;\n\n /**\n * A map with characters to escape for strings to be safely used as attribute values.\n *\n * @memberof Chartist.Core\n * @type {Object}\n */\n Chartist.escapingMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n };\n\n /**\n * This function serializes arbitrary data to a string. In case of data that can't be easily converted to a string, this function will create a wrapper object and serialize the data using JSON.stringify. The outcoming string will always be escaped using Chartist.escapingMap.\n * If called with null or undefined the function will return immediately with null or undefined.\n *\n * @memberof Chartist.Core\n * @param {Number|String|Object} data\n * @return {String}\n */\n Chartist.serialize = function(data) {\n if(data === null || data === undefined) {\n return data;\n } else if(typeof data === 'number') {\n data = ''+data;\n } else if(typeof data === 'object') {\n data = JSON.stringify({data: data});\n }\n\n return Object.keys(Chartist.escapingMap).reduce(function(result, key) {\n return Chartist.replaceAll(result, key, Chartist.escapingMap[key]);\n }, data);\n };\n\n /**\n * This function de-serializes a string previously serialized with Chartist.serialize. The string will always be unescaped using Chartist.escapingMap before it's returned. Based on the input value the return type can be Number, String or Object. JSON.parse is used with try / catch to see if the unescaped string can be parsed into an Object and this Object will be returned on success.\n *\n * @memberof Chartist.Core\n * @param {String} data\n * @return {String|Number|Object}\n */\n Chartist.deserialize = function(data) {\n if(typeof data !== 'string') {\n return data;\n }\n\n data = Object.keys(Chartist.escapingMap).reduce(function(result, key) {\n return Chartist.replaceAll(result, Chartist.escapingMap[key], key);\n }, data);\n\n try {\n data = JSON.parse(data);\n data = data.data !== undefined ? data.data : data;\n } catch(e) {}\n\n return data;\n };\n\n /**\n * Create or reinitialize the SVG element for the chart\n *\n * @memberof Chartist.Core\n * @param {Node} container The containing DOM Node object that will be used to plant the SVG element\n * @param {String} width Set the width of the SVG element. Default is 100%\n * @param {String} height Set the height of the SVG element. Default is 100%\n * @param {String} className Specify a class to be added to the SVG element\n * @return {Object} The created/reinitialized SVG element\n */\n Chartist.createSvg = function (container, width, height, className) {\n var svg;\n\n width = width || '100%';\n height = height || '100%';\n\n // Check if there is a previous SVG element in the container that contains the Chartist XML namespace and remove it\n // Since the DOM API does not support namespaces we need to manually search the returned list http://www.w3.org/TR/selectors-api/\n Array.prototype.slice.call(container.querySelectorAll('svg')).filter(function filterChartistSvgObjects(svg) {\n return svg.getAttributeNS(Chartist.namespaces.xmlns, 'ct');\n }).forEach(function removePreviousElement(svg) {\n container.removeChild(svg);\n });\n\n // Create svg object with width and height or use 100% as default\n svg = new Chartist.Svg('svg').attr({\n width: width,\n height: height\n }).addClass(className);\n\n svg._node.style.width = width;\n svg._node.style.height = height;\n\n // Add the DOM node to our container\n container.appendChild(svg._node);\n\n return svg;\n };\n\n /**\n * Ensures that the data object passed as second argument to the charts is present and correctly initialized.\n *\n * @param {Object} data The data object that is passed as second argument to the charts\n * @return {Object} The normalized data object\n */\n Chartist.normalizeData = function(data, reverse, multi) {\n var labelCount;\n var output = {\n raw: data,\n normalized: {}\n };\n\n // Check if we should generate some labels based on existing series data\n output.normalized.series = Chartist.getDataArray({\n series: data.series || []\n }, reverse, multi);\n\n // If all elements of the normalized data array are arrays we're dealing with\n // multi series data and we need to find the largest series if they are un-even\n if (output.normalized.series.every(function(value) {\n return value instanceof Array;\n })) {\n // Getting the series with the the most elements\n labelCount = Math.max.apply(null, output.normalized.series.map(function(series) {\n return series.length;\n }));\n } else {\n // We're dealing with Pie data so we just take the normalized array length\n labelCount = output.normalized.series.length;\n }\n\n output.normalized.labels = (data.labels || []).slice();\n // Padding the labels to labelCount with empty strings\n Array.prototype.push.apply(\n output.normalized.labels,\n Chartist.times(Math.max(0, labelCount - output.normalized.labels.length)).map(function() {\n return '';\n })\n );\n\n if(reverse) {\n Chartist.reverseData(output.normalized);\n }\n\n return output;\n };\n\n /**\n * This function safely checks if an objects has an owned property.\n *\n * @param {Object} object The object where to check for a property\n * @param {string} property The property name\n * @returns {boolean} Returns true if the object owns the specified property\n */\n Chartist.safeHasProperty = function(object, property) {\n return object !== null &&\n typeof object === 'object' &&\n object.hasOwnProperty(property);\n };\n\n /**\n * Checks if a value is considered a hole in the data series.\n *\n * @param {*} value\n * @returns {boolean} True if the value is considered a data hole\n */\n Chartist.isDataHoleValue = function(value) {\n return value === null ||\n value === undefined ||\n (typeof value === 'number' && isNaN(value));\n };\n\n /**\n * Reverses the series, labels and series data arrays.\n *\n * @memberof Chartist.Core\n * @param data\n */\n Chartist.reverseData = function(data) {\n data.labels.reverse();\n data.series.reverse();\n for (var i = 0; i < data.series.length; i++) {\n if(typeof(data.series[i]) === 'object' && data.series[i].data !== undefined) {\n data.series[i].data.reverse();\n } else if(data.series[i] instanceof Array) {\n data.series[i].reverse();\n }\n }\n };\n\n /**\n * Convert data series into plain array\n *\n * @memberof Chartist.Core\n * @param {Object} data The series object that contains the data to be visualized in the chart\n * @param {Boolean} [reverse] If true the whole data is reversed by the getDataArray call. This will modify the data object passed as first parameter. The labels as well as the series order is reversed. The whole series data arrays are reversed too.\n * @param {Boolean} [multi] Create a multi dimensional array from a series data array where a value object with `x` and `y` values will be created.\n * @return {Array} A plain array that contains the data to be visualized in the chart\n */\n Chartist.getDataArray = function(data, reverse, multi) {\n // Recursively walks through nested arrays and convert string values to numbers and objects with value properties\n // to values. Check the tests in data core -> data normalization for a detailed specification of expected values\n function recursiveConvert(value) {\n if(Chartist.safeHasProperty(value, 'value')) {\n // We are dealing with value object notation so we need to recurse on value property\n return recursiveConvert(value.value);\n } else if(Chartist.safeHasProperty(value, 'data')) {\n // We are dealing with series object notation so we need to recurse on data property\n return recursiveConvert(value.data);\n } else if(value instanceof Array) {\n // Data is of type array so we need to recurse on the series\n return value.map(recursiveConvert);\n } else if(Chartist.isDataHoleValue(value)) {\n // We're dealing with a hole in the data and therefore need to return undefined\n // We're also returning undefined for multi value output\n return undefined;\n } else {\n // We need to prepare multi value output (x and y data)\n if(multi) {\n var multiValue = {};\n\n // Single series value arrays are assumed to specify the Y-Axis value\n // For example: [1, 2] => [{x: undefined, y: 1}, {x: undefined, y: 2}]\n // If multi is a string then it's assumed that it specified which dimension should be filled as default\n if(typeof multi === 'string') {\n multiValue[multi] = Chartist.getNumberOrUndefined(value);\n } else {\n multiValue.y = Chartist.getNumberOrUndefined(value);\n }\n\n multiValue.x = value.hasOwnProperty('x') ? Chartist.getNumberOrUndefined(value.x) : multiValue.x;\n multiValue.y = value.hasOwnProperty('y') ? Chartist.getNumberOrUndefined(value.y) : multiValue.y;\n\n return multiValue;\n\n } else {\n // We can return simple data\n return Chartist.getNumberOrUndefined(value);\n }\n }\n }\n\n return data.series.map(recursiveConvert);\n };\n\n /**\n * Converts a number into a padding object.\n *\n * @memberof Chartist.Core\n * @param {Object|Number} padding\n * @param {Number} [fallback] This value is used to fill missing values if a incomplete padding object was passed\n * @returns {Object} Returns a padding object containing top, right, bottom, left properties filled with the padding number passed in as argument. If the argument is something else than a number (presumably already a correct padding object) then this argument is directly returned.\n */\n Chartist.normalizePadding = function(padding, fallback) {\n fallback = fallback || 0;\n\n return typeof padding === 'number' ? {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n } : {\n top: typeof padding.top === 'number' ? padding.top : fallback,\n right: typeof padding.right === 'number' ? padding.right : fallback,\n bottom: typeof padding.bottom === 'number' ? padding.bottom : fallback,\n left: typeof padding.left === 'number' ? padding.left : fallback\n };\n };\n\n Chartist.getMetaData = function(series, index) {\n var value = series.data ? series.data[index] : series[index];\n return value ? value.meta : undefined;\n };\n\n /**\n * Calculate the order of magnitude for the chart scale\n *\n * @memberof Chartist.Core\n * @param {Number} value The value Range of the chart\n * @return {Number} The order of magnitude\n */\n Chartist.orderOfMagnitude = function (value) {\n return Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n };\n\n /**\n * Project a data length into screen coordinates (pixels)\n *\n * @memberof Chartist.Core\n * @param {Object} axisLength The svg element for the chart\n * @param {Number} length Single data value from a series array\n * @param {Object} bounds All the values to set the bounds of the chart\n * @return {Number} The projected data length in pixels\n */\n Chartist.projectLength = function (axisLength, length, bounds) {\n return length / bounds.range * axisLength;\n };\n\n /**\n * Get the height of the area in the chart for the data series\n *\n * @memberof Chartist.Core\n * @param {Object} svg The svg element for the chart\n * @param {Object} options The Object that contains all the optional values for the chart\n * @return {Number} The height of the area in the chart for the data series\n */\n Chartist.getAvailableHeight = function (svg, options) {\n return Math.max((Chartist.quantity(options.height).value || svg.height()) - (options.chartPadding.top + options.chartPadding.bottom) - options.axisX.offset, 0);\n };\n\n /**\n * Get highest and lowest value of data array. This Array contains the data that will be visualized in the chart.\n *\n * @memberof Chartist.Core\n * @param {Array} data The array that contains the data to be visualized in the chart\n * @param {Object} options The Object that contains the chart options\n * @param {String} dimension Axis dimension 'x' or 'y' used to access the correct value and high / low configuration\n * @return {Object} An object that contains the highest and lowest value that will be visualized on the chart.\n */\n Chartist.getHighLow = function (data, options, dimension) {\n // TODO: Remove workaround for deprecated global high / low config. Axis high / low configuration is preferred\n options = Chartist.extend({}, options, dimension ? options['axis' + dimension.toUpperCase()] : {});\n\n var highLow = {\n high: options.high === undefined ? -Number.MAX_VALUE : +options.high,\n low: options.low === undefined ? Number.MAX_VALUE : +options.low\n };\n var findHigh = options.high === undefined;\n var findLow = options.low === undefined;\n\n // Function to recursively walk through arrays and find highest and lowest number\n function recursiveHighLow(data) {\n if(data === undefined) {\n return undefined;\n } else if(data instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n recursiveHighLow(data[i]);\n }\n } else {\n var value = dimension ? +data[dimension] : +data;\n\n if (findHigh && value > highLow.high) {\n highLow.high = value;\n }\n\n if (findLow && value < highLow.low) {\n highLow.low = value;\n }\n }\n }\n\n // Start to find highest and lowest number recursively\n if(findHigh || findLow) {\n recursiveHighLow(data);\n }\n\n // Overrides of high / low based on reference value, it will make sure that the invisible reference value is\n // used to generate the chart. This is useful when the chart always needs to contain the position of the\n // invisible reference value in the view i.e. for bipolar scales.\n if (options.referenceValue || options.referenceValue === 0) {\n highLow.high = Math.max(options.referenceValue, highLow.high);\n highLow.low = Math.min(options.referenceValue, highLow.low);\n }\n\n // If high and low are the same because of misconfiguration or flat data (only the same value) we need\n // to set the high or low to 0 depending on the polarity\n if (highLow.high <= highLow.low) {\n // If both values are 0 we set high to 1\n if (highLow.low === 0) {\n highLow.high = 1;\n } else if (highLow.low < 0) {\n // If we have the same negative value for the bounds we set bounds.high to 0\n highLow.high = 0;\n } else if (highLow.high > 0) {\n // If we have the same positive value for the bounds we set bounds.low to 0\n highLow.low = 0;\n } else {\n // If data array was empty, values are Number.MAX_VALUE and -Number.MAX_VALUE. Set bounds to prevent errors\n highLow.high = 1;\n highLow.low = 0;\n }\n }\n\n return highLow;\n };\n\n /**\n * Checks if a value can be safely coerced to a number. This includes all values except null which result in finite numbers when coerced. This excludes NaN, since it's not finite.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {Boolean}\n */\n Chartist.isNumeric = function(value) {\n return value === null ? false : isFinite(value);\n };\n\n /**\n * Returns true on all falsey values except the numeric value 0.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {boolean}\n */\n Chartist.isFalseyButZero = function(value) {\n return !value && value !== 0;\n };\n\n /**\n * Returns a number if the passed parameter is a valid number or the function will return undefined. On all other values than a valid number, this function will return undefined.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {*}\n */\n Chartist.getNumberOrUndefined = function(value) {\n return Chartist.isNumeric(value) ? +value : undefined;\n };\n\n /**\n * Checks if provided value object is multi value (contains x or y properties)\n *\n * @memberof Chartist.Core\n * @param value\n */\n Chartist.isMultiValue = function(value) {\n return typeof value === 'object' && ('x' in value || 'y' in value);\n };\n\n /**\n * Gets a value from a dimension `value.x` or `value.y` while returning value directly if it's a valid numeric value. If the value is not numeric and it's falsey this function will return `defaultValue`.\n *\n * @memberof Chartist.Core\n * @param value\n * @param dimension\n * @param defaultValue\n * @returns {*}\n */\n Chartist.getMultiValue = function(value, dimension) {\n if(Chartist.isMultiValue(value)) {\n return Chartist.getNumberOrUndefined(value[dimension || 'y']);\n } else {\n return Chartist.getNumberOrUndefined(value);\n }\n };\n\n /**\n * Pollard Rho Algorithm to find smallest factor of an integer value. There are more efficient algorithms for factorization, but this one is quite efficient and not so complex.\n *\n * @memberof Chartist.Core\n * @param {Number} num An integer number where the smallest factor should be searched for\n * @returns {Number} The smallest integer factor of the parameter num.\n */\n Chartist.rho = function(num) {\n if(num === 1) {\n return num;\n }\n\n function gcd(p, q) {\n if (p % q === 0) {\n return q;\n } else {\n return gcd(q, p % q);\n }\n }\n\n function f(x) {\n return x * x + 1;\n }\n\n var x1 = 2, x2 = 2, divisor;\n if (num % 2 === 0) {\n return 2;\n }\n\n do {\n x1 = f(x1) % num;\n x2 = f(f(x2)) % num;\n divisor = gcd(Math.abs(x1 - x2), num);\n } while (divisor === 1);\n\n return divisor;\n };\n\n /**\n * Calculate and retrieve all the bounds for the chart and return them in one array\n *\n * @memberof Chartist.Core\n * @param {Number} axisLength The length of the Axis used for\n * @param {Object} highLow An object containing a high and low property indicating the value range of the chart.\n * @param {Number} scaleMinSpace The minimum projected length a step should result in\n * @param {Boolean} onlyInteger\n * @return {Object} All the values to set the bounds of the chart\n */\n Chartist.getBounds = function (axisLength, highLow, scaleMinSpace, onlyInteger) {\n var i,\n optimizationCounter = 0,\n newMin,\n newMax,\n bounds = {\n high: highLow.high,\n low: highLow.low\n };\n\n bounds.valueRange = bounds.high - bounds.low;\n bounds.oom = Chartist.orderOfMagnitude(bounds.valueRange);\n bounds.step = Math.pow(10, bounds.oom);\n bounds.min = Math.floor(bounds.low / bounds.step) * bounds.step;\n bounds.max = Math.ceil(bounds.high / bounds.step) * bounds.step;\n bounds.range = bounds.max - bounds.min;\n bounds.numberOfSteps = Math.round(bounds.range / bounds.step);\n\n // Optimize scale step by checking if subdivision is possible based on horizontalGridMinSpace\n // If we are already below the scaleMinSpace value we will scale up\n var length = Chartist.projectLength(axisLength, bounds.step, bounds);\n var scaleUp = length < scaleMinSpace;\n var smallestFactor = onlyInteger ? Chartist.rho(bounds.range) : 0;\n\n // First check if we should only use integer steps and if step 1 is still larger than scaleMinSpace so we can use 1\n if(onlyInteger && Chartist.projectLength(axisLength, 1, bounds) >= scaleMinSpace) {\n bounds.step = 1;\n } else if(onlyInteger && smallestFactor < bounds.step && Chartist.projectLength(axisLength, smallestFactor, bounds) >= scaleMinSpace) {\n // If step 1 was too small, we can try the smallest factor of range\n // If the smallest factor is smaller than the current bounds.step and the projected length of smallest factor\n // is larger than the scaleMinSpace we should go for it.\n bounds.step = smallestFactor;\n } else {\n // Trying to divide or multiply by 2 and find the best step value\n while (true) {\n if (scaleUp && Chartist.projectLength(axisLength, bounds.step, bounds) <= scaleMinSpace) {\n bounds.step *= 2;\n } else if (!scaleUp && Chartist.projectLength(axisLength, bounds.step / 2, bounds) >= scaleMinSpace) {\n bounds.step /= 2;\n if(onlyInteger && bounds.step % 1 !== 0) {\n bounds.step *= 2;\n break;\n }\n } else {\n break;\n }\n\n if(optimizationCounter++ > 1000) {\n throw new Error('Exceeded maximum number of iterations while optimizing scale step!');\n }\n }\n }\n\n var EPSILON = 2.221E-16;\n bounds.step = Math.max(bounds.step, EPSILON);\n function safeIncrement(value, increment) {\n // If increment is too small use *= (1+EPSILON) as a simple nextafter\n if (value === (value += increment)) {\n \tvalue *= (1 + (increment > 0 ? EPSILON : -EPSILON));\n }\n return value;\n }\n\n // Narrow min and max based on new step\n newMin = bounds.min;\n newMax = bounds.max;\n while (newMin + bounds.step <= bounds.low) {\n \tnewMin = safeIncrement(newMin, bounds.step);\n }\n while (newMax - bounds.step >= bounds.high) {\n \tnewMax = safeIncrement(newMax, -bounds.step);\n }\n bounds.min = newMin;\n bounds.max = newMax;\n bounds.range = bounds.max - bounds.min;\n\n var values = [];\n for (i = bounds.min; i <= bounds.max; i = safeIncrement(i, bounds.step)) {\n var value = Chartist.roundWithPrecision(i);\n if (value !== values[values.length - 1]) {\n values.push(value);\n }\n }\n bounds.values = values;\n return bounds;\n };\n\n /**\n * Calculate cartesian coordinates of polar coordinates\n *\n * @memberof Chartist.Core\n * @param {Number} centerX X-axis coordinates of center point of circle segment\n * @param {Number} centerY X-axis coordinates of center point of circle segment\n * @param {Number} radius Radius of circle segment\n * @param {Number} angleInDegrees Angle of circle segment in degrees\n * @return {{x:Number, y:Number}} Coordinates of point on circumference\n */\n Chartist.polarToCartesian = function (centerX, centerY, radius, angleInDegrees) {\n var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n\n return {\n x: centerX + (radius * Math.cos(angleInRadians)),\n y: centerY + (radius * Math.sin(angleInRadians))\n };\n };\n\n /**\n * Initialize chart drawing rectangle (area where chart is drawn) x1,y1 = bottom left / x2,y2 = top right\n *\n * @memberof Chartist.Core\n * @param {Object} svg The svg element for the chart\n * @param {Object} options The Object that contains all the optional values for the chart\n * @param {Number} [fallbackPadding] The fallback padding if partial padding objects are used\n * @return {Object} The chart rectangles coordinates inside the svg element plus the rectangles measurements\n */\n Chartist.createChartRect = function (svg, options, fallbackPadding) {\n var hasAxis = !!(options.axisX || options.axisY);\n var yAxisOffset = hasAxis ? options.axisY.offset : 0;\n var xAxisOffset = hasAxis ? options.axisX.offset : 0;\n // If width or height results in invalid value (including 0) we fallback to the unitless settings or even 0\n var width = svg.width() || Chartist.quantity(options.width).value || 0;\n var height = svg.height() || Chartist.quantity(options.height).value || 0;\n var normalizedPadding = Chartist.normalizePadding(options.chartPadding, fallbackPadding);\n\n // If settings were to small to cope with offset (legacy) and padding, we'll adjust\n width = Math.max(width, yAxisOffset + normalizedPadding.left + normalizedPadding.right);\n height = Math.max(height, xAxisOffset + normalizedPadding.top + normalizedPadding.bottom);\n\n var chartRect = {\n padding: normalizedPadding,\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y1 - this.y2;\n }\n };\n\n if(hasAxis) {\n if (options.axisX.position === 'start') {\n chartRect.y2 = normalizedPadding.top + xAxisOffset;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom, chartRect.y2 + 1);\n } else {\n chartRect.y2 = normalizedPadding.top;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom - xAxisOffset, chartRect.y2 + 1);\n }\n\n if (options.axisY.position === 'start') {\n chartRect.x1 = normalizedPadding.left + yAxisOffset;\n chartRect.x2 = Math.max(width - normalizedPadding.right, chartRect.x1 + 1);\n } else {\n chartRect.x1 = normalizedPadding.left;\n chartRect.x2 = Math.max(width - normalizedPadding.right - yAxisOffset, chartRect.x1 + 1);\n }\n } else {\n chartRect.x1 = normalizedPadding.left;\n chartRect.x2 = Math.max(width - normalizedPadding.right, chartRect.x1 + 1);\n chartRect.y2 = normalizedPadding.top;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom, chartRect.y2 + 1);\n }\n\n return chartRect;\n };\n\n /**\n * Creates a grid line based on a projected value.\n *\n * @memberof Chartist.Core\n * @param position\n * @param index\n * @param axis\n * @param offset\n * @param length\n * @param group\n * @param classes\n * @param eventEmitter\n */\n Chartist.createGrid = function(position, index, axis, offset, length, group, classes, eventEmitter) {\n var positionalData = {};\n positionalData[axis.units.pos + '1'] = position;\n positionalData[axis.units.pos + '2'] = position;\n positionalData[axis.counterUnits.pos + '1'] = offset;\n positionalData[axis.counterUnits.pos + '2'] = offset + length;\n\n var gridElement = group.elem('line', positionalData, classes.join(' '));\n\n // Event for grid draw\n eventEmitter.emit('draw',\n Chartist.extend({\n type: 'grid',\n axis: axis,\n index: index,\n group: group,\n element: gridElement\n }, positionalData)\n );\n };\n\n /**\n * Creates a grid background rect and emits the draw event.\n *\n * @memberof Chartist.Core\n * @param gridGroup\n * @param chartRect\n * @param className\n * @param eventEmitter\n */\n Chartist.createGridBackground = function (gridGroup, chartRect, className, eventEmitter) {\n var gridBackground = gridGroup.elem('rect', {\n x: chartRect.x1,\n y: chartRect.y2,\n width: chartRect.width(),\n height: chartRect.height(),\n }, className, true);\n\n // Event for grid background draw\n eventEmitter.emit('draw', {\n type: 'gridBackground',\n group: gridGroup,\n element: gridBackground\n });\n };\n\n /**\n * Creates a label based on a projected value and an axis.\n *\n * @memberof Chartist.Core\n * @param position\n * @param length\n * @param index\n * @param labels\n * @param axis\n * @param axisOffset\n * @param labelOffset\n * @param group\n * @param classes\n * @param useForeignObject\n * @param eventEmitter\n */\n Chartist.createLabel = function(position, length, index, labels, axis, axisOffset, labelOffset, group, classes, useForeignObject, eventEmitter) {\n var labelElement;\n var positionalData = {};\n\n positionalData[axis.units.pos] = position + labelOffset[axis.units.pos];\n positionalData[axis.counterUnits.pos] = labelOffset[axis.counterUnits.pos];\n positionalData[axis.units.len] = length;\n positionalData[axis.counterUnits.len] = Math.max(0, axisOffset - 10);\n\n if(useForeignObject) {\n // We need to set width and height explicitly to px as span will not expand with width and height being\n // 100% in all browsers\n var content = document.createElement('span');\n content.className = classes.join(' ');\n content.setAttribute('xmlns', Chartist.namespaces.xhtml);\n content.innerText = labels[index];\n content.style[axis.units.len] = Math.round(positionalData[axis.units.len]) + 'px';\n content.style[axis.counterUnits.len] = Math.round(positionalData[axis.counterUnits.len]) + 'px';\n\n labelElement = group.foreignObject(content, Chartist.extend({\n style: 'overflow: visible;'\n }, positionalData));\n } else {\n labelElement = group.elem('text', positionalData, classes.join(' ')).text(labels[index]);\n }\n\n eventEmitter.emit('draw', Chartist.extend({\n type: 'label',\n axis: axis,\n index: index,\n group: group,\n element: labelElement,\n text: labels[index]\n }, positionalData));\n };\n\n /**\n * Helper to read series specific options from options object. It automatically falls back to the global option if\n * there is no option in the series options.\n *\n * @param {Object} series Series object\n * @param {Object} options Chartist options object\n * @param {string} key The options key that should be used to obtain the options\n * @returns {*}\n */\n Chartist.getSeriesOption = function(series, options, key) {\n if(series.name && options.series && options.series[series.name]) {\n var seriesOptions = options.series[series.name];\n return seriesOptions.hasOwnProperty(key) ? seriesOptions[key] : options[key];\n } else {\n return options[key];\n }\n };\n\n /**\n * Provides options handling functionality with callback for options changes triggered by responsive options and media query matches\n *\n * @memberof Chartist.Core\n * @param {Object} options Options set by user\n * @param {Array} responsiveOptions Optional functions to add responsive behavior to chart\n * @param {Object} eventEmitter The event emitter that will be used to emit the options changed events\n * @return {Object} The consolidated options object from the defaults, base and matching responsive options\n */\n Chartist.optionsProvider = function (options, responsiveOptions, eventEmitter) {\n var baseOptions = Chartist.extend({}, options),\n currentOptions,\n mediaQueryListeners = [],\n i;\n\n function updateCurrentOptions(mediaEvent) {\n var previousOptions = currentOptions;\n currentOptions = Chartist.extend({}, baseOptions);\n\n if (responsiveOptions) {\n for (i = 0; i < responsiveOptions.length; i++) {\n var mql = window.matchMedia(responsiveOptions[i][0]);\n if (mql.matches) {\n currentOptions = Chartist.extend(currentOptions, responsiveOptions[i][1]);\n }\n }\n }\n\n if(eventEmitter && mediaEvent) {\n eventEmitter.emit('optionsChanged', {\n previousOptions: previousOptions,\n currentOptions: currentOptions\n });\n }\n }\n\n function removeMediaQueryListeners() {\n mediaQueryListeners.forEach(function(mql) {\n mql.removeListener(updateCurrentOptions);\n });\n }\n\n if (!window.matchMedia) {\n throw 'window.matchMedia not found! Make sure you\\'re using a polyfill.';\n } else if (responsiveOptions) {\n\n for (i = 0; i < responsiveOptions.length; i++) {\n var mql = window.matchMedia(responsiveOptions[i][0]);\n mql.addListener(updateCurrentOptions);\n mediaQueryListeners.push(mql);\n }\n }\n // Execute initially without an event argument so we get the correct options\n updateCurrentOptions();\n\n return {\n removeMediaQueryListeners: removeMediaQueryListeners,\n getCurrentOptions: function getCurrentOptions() {\n return Chartist.extend({}, currentOptions);\n }\n };\n };\n\n\n /**\n * Splits a list of coordinates and associated values into segments. Each returned segment contains a pathCoordinates\n * valueData property describing the segment.\n *\n * With the default options, segments consist of contiguous sets of points that do not have an undefined value. Any\n * points with undefined values are discarded.\n *\n * **Options**\n * The following options are used to determine how segments are formed\n * ```javascript\n * var options = {\n * // If fillHoles is true, undefined values are simply discarded without creating a new segment. Assuming other options are default, this returns single segment.\n * fillHoles: false,\n * // If increasingX is true, the coordinates in all segments have strictly increasing x-values.\n * increasingX: false\n * };\n * ```\n *\n * @memberof Chartist.Core\n * @param {Array} pathCoordinates List of point coordinates to be split in the form [x1, y1, x2, y2 ... xn, yn]\n * @param {Array} values List of associated point values in the form [v1, v2 .. vn]\n * @param {Object} options Options set by user\n * @return {Array} List of segments, each containing a pathCoordinates and valueData property.\n */\n Chartist.splitIntoSegments = function(pathCoordinates, valueData, options) {\n var defaultOptions = {\n increasingX: false,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n var segments = [];\n var hole = true;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n // If this value is a \"hole\" we set the hole flag\n if(Chartist.getMultiValue(valueData[i / 2].value) === undefined) {\n // if(valueData[i / 2].value === undefined) {\n if(!options.fillHoles) {\n hole = true;\n }\n } else {\n if(options.increasingX && i >= 2 && pathCoordinates[i] <= pathCoordinates[i-2]) {\n // X is not increasing, so we need to make sure we start a new segment\n hole = true;\n }\n\n\n // If it's a valid value we need to check if we're coming out of a hole and create a new empty segment\n if(hole) {\n segments.push({\n pathCoordinates: [],\n valueData: []\n });\n // As we have a valid value now, we are not in a \"hole\" anymore\n hole = false;\n }\n\n // Add to the segment pathCoordinates and valueData\n segments[segments.length - 1].pathCoordinates.push(pathCoordinates[i], pathCoordinates[i + 1]);\n segments[segments.length - 1].valueData.push(valueData[i / 2]);\n }\n }\n\n return segments;\n };\n}(this || global, Chartist));\n;/**\n * Chartist path interpolation functions.\n *\n * @module Chartist.Interpolation\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n Chartist.Interpolation = {};\n\n /**\n * This interpolation function does not smooth the path and the result is only containing lines and no curves.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.none({\n * fillHoles: false\n * })\n * });\n *\n *\n * @memberof Chartist.Interpolation\n * @return {Function}\n */\n Chartist.Interpolation.none = function(options) {\n var defaultOptions = {\n fillHoles: false\n };\n options = Chartist.extend({}, defaultOptions, options);\n return function none(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n var hole = true;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var currData = valueData[i / 2];\n\n if(Chartist.getMultiValue(currData.value) !== undefined) {\n\n if(hole) {\n path.move(currX, currY, false, currData);\n } else {\n path.line(currX, currY, false, currData);\n }\n\n hole = false;\n } else if(!options.fillHoles) {\n hole = true;\n }\n }\n\n return path;\n };\n };\n\n /**\n * Simple smoothing creates horizontal handles that are positioned with a fraction of the length between two data points. You can use the divisor option to specify the amount of smoothing.\n *\n * Simple smoothing can be used instead of `Chartist.Smoothing.cardinal` if you'd like to get rid of the artifacts it produces sometimes. Simple smoothing produces less flowing lines but is accurate by hitting the points and it also doesn't swing below or above the given data point.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The simple interpolation function accepts one configuration parameter `divisor`, between 1 and ∞, which controls the smoothing characteristics.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.simple({\n * divisor: 2,\n * fillHoles: false\n * })\n * });\n *\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the simple interpolation factory function.\n * @return {Function}\n */\n Chartist.Interpolation.simple = function(options) {\n var defaultOptions = {\n divisor: 2,\n fillHoles: false\n };\n options = Chartist.extend({}, defaultOptions, options);\n\n var d = 1 / Math.max(1, options.divisor);\n\n return function simple(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n var prevX, prevY, prevData;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var length = (currX - prevX) * d;\n var currData = valueData[i / 2];\n\n if(currData.value !== undefined) {\n\n if(prevData === undefined) {\n path.move(currX, currY, false, currData);\n } else {\n path.curve(\n prevX + length,\n prevY,\n currX - length,\n currY,\n currX,\n currY,\n false,\n currData\n );\n }\n\n prevX = currX;\n prevY = currY;\n prevData = currData;\n } else if(!options.fillHoles) {\n prevX = currX = prevData = undefined;\n }\n }\n\n return path;\n };\n };\n\n /**\n * Cardinal / Catmull-Rome spline interpolation is the default smoothing function in Chartist. It produces nice results where the splines will always meet the points. It produces some artifacts though when data values are increased or decreased rapidly. The line may not follow a very accurate path and if the line should be accurate this smoothing function does not produce the best results.\n *\n * Cardinal splines can only be created if there are more than two data points. If this is not the case this smoothing will fallback to `Chartist.Smoothing.none`.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The cardinal interpolation function accepts one configuration parameter `tension`, between 0 and 1, which controls the smoothing intensity.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.cardinal({\n * tension: 1,\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the cardinal factory function.\n * @return {Function}\n */\n Chartist.Interpolation.cardinal = function(options) {\n var defaultOptions = {\n tension: 1,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n var t = Math.min(1, Math.max(0, options.tension)),\n c = 1 - t;\n\n return function cardinal(pathCoordinates, valueData) {\n // First we try to split the coordinates into segments\n // This is necessary to treat \"holes\" in line charts\n var segments = Chartist.splitIntoSegments(pathCoordinates, valueData, {\n fillHoles: options.fillHoles\n });\n\n if(!segments.length) {\n // If there were no segments return 'Chartist.Interpolation.none'\n return Chartist.Interpolation.none()([]);\n } else if(segments.length > 1) {\n // If the split resulted in more that one segment we need to interpolate each segment individually and join them\n // afterwards together into a single path.\n var paths = [];\n // For each segment we will recurse the cardinal function\n segments.forEach(function(segment) {\n paths.push(cardinal(segment.pathCoordinates, segment.valueData));\n });\n // Join the segment path data into a single path and return\n return Chartist.Svg.Path.join(paths);\n } else {\n // If there was only one segment we can proceed regularly by using pathCoordinates and valueData from the first\n // segment\n pathCoordinates = segments[0].pathCoordinates;\n valueData = segments[0].valueData;\n\n // If less than two points we need to fallback to no smoothing\n if(pathCoordinates.length <= 4) {\n return Chartist.Interpolation.none()(pathCoordinates, valueData);\n }\n\n var path = new Chartist.Svg.Path().move(pathCoordinates[0], pathCoordinates[1], false, valueData[0]),\n z;\n\n for (var i = 0, iLen = pathCoordinates.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {x: +pathCoordinates[i - 2], y: +pathCoordinates[i - 1]},\n {x: +pathCoordinates[i], y: +pathCoordinates[i + 1]},\n {x: +pathCoordinates[i + 2], y: +pathCoordinates[i + 3]},\n {x: +pathCoordinates[i + 4], y: +pathCoordinates[i + 5]}\n ];\n if (z) {\n if (!i) {\n p[0] = {x: +pathCoordinates[iLen - 2], y: +pathCoordinates[iLen - 1]};\n } else if (iLen - 4 === i) {\n p[3] = {x: +pathCoordinates[0], y: +pathCoordinates[1]};\n } else if (iLen - 2 === i) {\n p[2] = {x: +pathCoordinates[0], y: +pathCoordinates[1]};\n p[3] = {x: +pathCoordinates[2], y: +pathCoordinates[3]};\n }\n } else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {x: +pathCoordinates[i], y: +pathCoordinates[i + 1]};\n }\n }\n\n path.curve(\n (t * (-p[0].x + 6 * p[1].x + p[2].x) / 6) + (c * p[2].x),\n (t * (-p[0].y + 6 * p[1].y + p[2].y) / 6) + (c * p[2].y),\n (t * (p[1].x + 6 * p[2].x - p[3].x) / 6) + (c * p[2].x),\n (t * (p[1].y + 6 * p[2].y - p[3].y) / 6) + (c * p[2].y),\n p[2].x,\n p[2].y,\n false,\n valueData[(i + 2) / 2]\n );\n }\n\n return path;\n }\n };\n };\n\n /**\n * Monotone Cubic spline interpolation produces a smooth curve which preserves monotonicity. Unlike cardinal splines, the curve will not extend beyond the range of y-values of the original data points.\n *\n * Monotone Cubic splines can only be created if there are more than two data points. If this is not the case this smoothing will fallback to `Chartist.Smoothing.none`.\n *\n * The x-values of subsequent points must be increasing to fit a Monotone Cubic spline. If this condition is not met for a pair of adjacent points, then there will be a break in the curve between those data points.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.monotoneCubic({\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the monotoneCubic factory function.\n * @return {Function}\n */\n Chartist.Interpolation.monotoneCubic = function(options) {\n var defaultOptions = {\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n return function monotoneCubic(pathCoordinates, valueData) {\n // First we try to split the coordinates into segments\n // This is necessary to treat \"holes\" in line charts\n var segments = Chartist.splitIntoSegments(pathCoordinates, valueData, {\n fillHoles: options.fillHoles,\n increasingX: true\n });\n\n if(!segments.length) {\n // If there were no segments return 'Chartist.Interpolation.none'\n return Chartist.Interpolation.none()([]);\n } else if(segments.length > 1) {\n // If the split resulted in more that one segment we need to interpolate each segment individually and join them\n // afterwards together into a single path.\n var paths = [];\n // For each segment we will recurse the monotoneCubic fn function\n segments.forEach(function(segment) {\n paths.push(monotoneCubic(segment.pathCoordinates, segment.valueData));\n });\n // Join the segment path data into a single path and return\n return Chartist.Svg.Path.join(paths);\n } else {\n // If there was only one segment we can proceed regularly by using pathCoordinates and valueData from the first\n // segment\n pathCoordinates = segments[0].pathCoordinates;\n valueData = segments[0].valueData;\n\n // If less than three points we need to fallback to no smoothing\n if(pathCoordinates.length <= 4) {\n return Chartist.Interpolation.none()(pathCoordinates, valueData);\n }\n\n var xs = [],\n ys = [],\n i,\n n = pathCoordinates.length / 2,\n ms = [],\n ds = [], dys = [], dxs = [],\n path;\n\n // Populate x and y coordinates into separate arrays, for readability\n\n for(i = 0; i < n; i++) {\n xs[i] = pathCoordinates[i * 2];\n ys[i] = pathCoordinates[i * 2 + 1];\n }\n\n // Calculate deltas and derivative\n\n for(i = 0; i < n - 1; i++) {\n dys[i] = ys[i + 1] - ys[i];\n dxs[i] = xs[i + 1] - xs[i];\n ds[i] = dys[i] / dxs[i];\n }\n\n // Determine desired slope (m) at each point using Fritsch-Carlson method\n // See: http://math.stackexchange.com/questions/45218/implementation-of-monotone-cubic-interpolation\n\n ms[0] = ds[0];\n ms[n - 1] = ds[n - 2];\n\n for(i = 1; i < n - 1; i++) {\n if(ds[i] === 0 || ds[i - 1] === 0 || (ds[i - 1] > 0) !== (ds[i] > 0)) {\n ms[i] = 0;\n } else {\n ms[i] = 3 * (dxs[i - 1] + dxs[i]) / (\n (2 * dxs[i] + dxs[i - 1]) / ds[i - 1] +\n (dxs[i] + 2 * dxs[i - 1]) / ds[i]);\n\n if(!isFinite(ms[i])) {\n ms[i] = 0;\n }\n }\n }\n\n // Now build a path from the slopes\n\n path = new Chartist.Svg.Path().move(xs[0], ys[0], false, valueData[0]);\n\n for(i = 0; i < n - 1; i++) {\n path.curve(\n // First control point\n xs[i] + dxs[i] / 3,\n ys[i] + ms[i] * dxs[i] / 3,\n // Second control point\n xs[i + 1] - dxs[i] / 3,\n ys[i + 1] - ms[i + 1] * dxs[i] / 3,\n // End point\n xs[i + 1],\n ys[i + 1],\n\n false,\n valueData[i + 1]\n );\n }\n\n return path;\n }\n };\n };\n\n /**\n * Step interpolation will cause the line chart to move in steps rather than diagonal or smoothed lines. This interpolation will create additional points that will also be drawn when the `showPoint` option is enabled.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The step interpolation function accepts one configuration parameter `postpone`, that can be `true` or `false`. The default value is `true` and will cause the step to occur where the value actually changes. If a different behaviour is needed where the step is shifted to the left and happens before the actual value, this option can be set to `false`.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.step({\n * postpone: true,\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param options\n * @returns {Function}\n */\n Chartist.Interpolation.step = function(options) {\n var defaultOptions = {\n postpone: true,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n return function step(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n\n var prevX, prevY, prevData;\n\n for (var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var currData = valueData[i / 2];\n\n // If the current point is also not a hole we can draw the step lines\n if(currData.value !== undefined) {\n if(prevData === undefined) {\n path.move(currX, currY, false, currData);\n } else {\n if(options.postpone) {\n // If postponed we should draw the step line with the value of the previous value\n path.line(currX, prevY, false, prevData);\n } else {\n // If not postponed we should draw the step line with the value of the current value\n path.line(prevX, currY, false, currData);\n }\n // Line to the actual point (this should only be a Y-Axis movement\n path.line(currX, currY, false, currData);\n }\n\n prevX = currX;\n prevY = currY;\n prevData = currData;\n } else if(!options.fillHoles) {\n prevX = prevY = prevData = undefined;\n }\n }\n\n return path;\n };\n };\n\n}(this || global, Chartist));\n;/**\n * A very basic event module that helps to generate and catch events.\n *\n * @module Chartist.Event\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n Chartist.EventEmitter = function () {\n var handlers = [];\n\n /**\n * Add an event handler for a specific event\n *\n * @memberof Chartist.Event\n * @param {String} event The event name\n * @param {Function} handler A event handler function\n */\n function addEventHandler(event, handler) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n }\n\n /**\n * Remove an event handler of a specific event name or remove all event handlers for a specific event.\n *\n * @memberof Chartist.Event\n * @param {String} event The event name where a specific or all handlers should be removed\n * @param {Function} [handler] An optional event handler function. If specified only this specific handler will be removed and otherwise all handlers are removed.\n */\n function removeEventHandler(event, handler) {\n // Only do something if there are event handlers with this name existing\n if(handlers[event]) {\n // If handler is set we will look for a specific handler and only remove this\n if(handler) {\n handlers[event].splice(handlers[event].indexOf(handler), 1);\n if(handlers[event].length === 0) {\n delete handlers[event];\n }\n } else {\n // If no handler is specified we remove all handlers for this event\n delete handlers[event];\n }\n }\n }\n\n /**\n * Use this function to emit an event. All handlers that are listening for this event will be triggered with the data parameter.\n *\n * @memberof Chartist.Event\n * @param {String} event The event name that should be triggered\n * @param {*} data Arbitrary data that will be passed to the event handler callback functions\n */\n function emit(event, data) {\n // Only do something if there are event handlers with this name existing\n if(handlers[event]) {\n handlers[event].forEach(function(handler) {\n handler(data);\n });\n }\n\n // Emit event to star event handlers\n if(handlers['*']) {\n handlers['*'].forEach(function(starHandler) {\n starHandler(event, data);\n });\n }\n }\n\n return {\n addEventHandler: addEventHandler,\n removeEventHandler: removeEventHandler,\n emit: emit\n };\n };\n\n}(this || global, Chartist));\n;/**\n * This module provides some basic prototype inheritance utilities.\n *\n * @module Chartist.Class\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n function listToArray(list) {\n var arr = [];\n if (list.length) {\n for (var i = 0; i < list.length; i++) {\n arr.push(list[i]);\n }\n }\n return arr;\n }\n\n /**\n * Method to extend from current prototype.\n *\n * @memberof Chartist.Class\n * @param {Object} properties The object that serves as definition for the prototype that gets created for the new class. This object should always contain a constructor property that is the desired constructor for the newly created class.\n * @param {Object} [superProtoOverride] By default extens will use the current class prototype or Chartist.class. With this parameter you can specify any super prototype that will be used.\n * @return {Function} Constructor function of the new class\n *\n * @example\n * var Fruit = Class.extend({\n * color: undefined,\n * sugar: undefined,\n *\n * constructor: function(color, sugar) {\n * this.color = color;\n * this.sugar = sugar;\n * },\n *\n * eat: function() {\n * this.sugar = 0;\n * return this;\n * }\n * });\n *\n * var Banana = Fruit.extend({\n * length: undefined,\n *\n * constructor: function(length, sugar) {\n * Banana.super.constructor.call(this, 'Yellow', sugar);\n * this.length = length;\n * }\n * });\n *\n * var banana = new Banana(20, 40);\n * console.log('banana instanceof Fruit', banana instanceof Fruit);\n * console.log('Fruit is prototype of banana', Fruit.prototype.isPrototypeOf(banana));\n * console.log('bananas prototype is Fruit', Object.getPrototypeOf(banana) === Fruit.prototype);\n * console.log(banana.sugar);\n * console.log(banana.eat().sugar);\n * console.log(banana.color);\n */\n function extend(properties, superProtoOverride) {\n var superProto = superProtoOverride || this.prototype || Chartist.Class;\n var proto = Object.create(superProto);\n\n Chartist.Class.cloneDefinitions(proto, properties);\n\n var constr = function() {\n var fn = proto.constructor || function () {},\n instance;\n\n // If this is linked to the Chartist namespace the constructor was not called with new\n // To provide a fallback we will instantiate here and return the instance\n instance = this === Chartist ? Object.create(proto) : this;\n fn.apply(instance, Array.prototype.slice.call(arguments, 0));\n\n // If this constructor was not called with new we need to return the instance\n // This will not harm when the constructor has been called with new as the returned value is ignored\n return instance;\n };\n\n constr.prototype = proto;\n constr.super = superProto;\n constr.extend = this.extend;\n\n return constr;\n }\n\n // Variable argument list clones args > 0 into args[0] and retruns modified args[0]\n function cloneDefinitions() {\n var args = listToArray(arguments);\n var target = args[0];\n\n args.splice(1, args.length - 1).forEach(function (source) {\n Object.getOwnPropertyNames(source).forEach(function (propName) {\n // If this property already exist in target we delete it first\n delete target[propName];\n // Define the property with the descriptor from source\n Object.defineProperty(target, propName,\n Object.getOwnPropertyDescriptor(source, propName));\n });\n });\n\n return target;\n }\n\n Chartist.Class = {\n extend: extend,\n cloneDefinitions: cloneDefinitions\n };\n\n}(this || global, Chartist));\n;/**\n * Base for all chart types. The methods in Chartist.Base are inherited to all chart types.\n *\n * @module Chartist.Base\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n\n // TODO: Currently we need to re-draw the chart on window resize. This is usually very bad and will affect performance.\n // This is done because we can't work with relative coordinates when drawing the chart because SVG Path does not\n // work with relative positions yet. We need to check if we can do a viewBox hack to switch to percentage.\n // See http://mozilla.6506.n7.nabble.com/Specyfing-paths-with-percentages-unit-td247474.html\n // Update: can be done using the above method tested here: http://codepen.io/gionkunz/pen/KDvLj\n // The problem is with the label offsets that can't be converted into percentage and affecting the chart container\n /**\n * Updates the chart which currently does a full reconstruction of the SVG DOM\n *\n * @param {Object} [data] Optional data you'd like to set for the chart before it will update. If not specified the update method will use the data that is already configured with the chart.\n * @param {Object} [options] Optional options you'd like to add to the previous options for the chart before it will update. If not specified the update method will use the options that have been already configured with the chart.\n * @param {Boolean} [override] If set to true, the passed options will be used to extend the options that have been configured already. Otherwise the chart default options will be used as the base\n * @memberof Chartist.Base\n */\n function update(data, options, override) {\n if(data) {\n this.data = data || {};\n this.data.labels = this.data.labels || [];\n this.data.series = this.data.series || [];\n // Event for data transformation that allows to manipulate the data before it gets rendered in the charts\n this.eventEmitter.emit('data', {\n type: 'update',\n data: this.data\n });\n }\n\n if(options) {\n this.options = Chartist.extend({}, override ? this.options : this.defaultOptions, options);\n\n // If chartist was not initialized yet, we just set the options and leave the rest to the initialization\n // Otherwise we re-create the optionsProvider at this point\n if(!this.initializeTimeoutId) {\n this.optionsProvider.removeMediaQueryListeners();\n this.optionsProvider = Chartist.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter);\n }\n }\n\n // Only re-created the chart if it has been initialized yet\n if(!this.initializeTimeoutId) {\n this.createChart(this.optionsProvider.getCurrentOptions());\n }\n\n // Return a reference to the chart object to chain up calls\n return this;\n }\n\n /**\n * This method can be called on the API object of each chart and will un-register all event listeners that were added to other components. This currently includes a window.resize listener as well as media query listeners if any responsive options have been provided. Use this function if you need to destroy and recreate Chartist charts dynamically.\n *\n * @memberof Chartist.Base\n */\n function detach() {\n // Only detach if initialization already occurred on this chart. If this chart still hasn't initialized (therefore\n // the initializationTimeoutId is still a valid timeout reference, we will clear the timeout\n if(!this.initializeTimeoutId) {\n window.removeEventListener('resize', this.resizeListener);\n this.optionsProvider.removeMediaQueryListeners();\n } else {\n window.clearTimeout(this.initializeTimeoutId);\n }\n\n return this;\n }\n\n /**\n * Use this function to register event handlers. The handler callbacks are synchronous and will run in the main thread rather than the event loop.\n *\n * @memberof Chartist.Base\n * @param {String} event Name of the event. Check the examples for supported events.\n * @param {Function} handler The handler function that will be called when an event with the given name was emitted. This function will receive a data argument which contains event data. See the example for more details.\n */\n function on(event, handler) {\n this.eventEmitter.addEventHandler(event, handler);\n return this;\n }\n\n /**\n * Use this function to un-register event handlers. If the handler function parameter is omitted all handlers for the given event will be un-registered.\n *\n * @memberof Chartist.Base\n * @param {String} event Name of the event for which a handler should be removed\n * @param {Function} [handler] The handler function that that was previously used to register a new event handler. This handler will be removed from the event handler list. If this parameter is omitted then all event handlers for the given event are removed from the list.\n */\n function off(event, handler) {\n this.eventEmitter.removeEventHandler(event, handler);\n return this;\n }\n\n function initialize() {\n // Add window resize listener that re-creates the chart\n window.addEventListener('resize', this.resizeListener);\n\n // Obtain current options based on matching media queries (if responsive options are given)\n // This will also register a listener that is re-creating the chart based on media changes\n this.optionsProvider = Chartist.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter);\n // Register options change listener that will trigger a chart update\n this.eventEmitter.addEventHandler('optionsChanged', function() {\n this.update();\n }.bind(this));\n\n // Before the first chart creation we need to register us with all plugins that are configured\n // Initialize all relevant plugins with our chart object and the plugin options specified in the config\n if(this.options.plugins) {\n this.options.plugins.forEach(function(plugin) {\n if(plugin instanceof Array) {\n plugin[0](this, plugin[1]);\n } else {\n plugin(this);\n }\n }.bind(this));\n }\n\n // Event for data transformation that allows to manipulate the data before it gets rendered in the charts\n this.eventEmitter.emit('data', {\n type: 'initial',\n data: this.data\n });\n\n // Create the first chart\n this.createChart(this.optionsProvider.getCurrentOptions());\n\n // As chart is initialized from the event loop now we can reset our timeout reference\n // This is important if the chart gets initialized on the same element twice\n this.initializeTimeoutId = undefined;\n }\n\n /**\n * Constructor of chart base class.\n *\n * @param query\n * @param data\n * @param defaultOptions\n * @param options\n * @param responsiveOptions\n * @constructor\n */\n function Base(query, data, defaultOptions, options, responsiveOptions) {\n this.container = Chartist.querySelector(query);\n this.data = data || {};\n this.data.labels = this.data.labels || [];\n this.data.series = this.data.series || [];\n this.defaultOptions = defaultOptions;\n this.options = options;\n this.responsiveOptions = responsiveOptions;\n this.eventEmitter = Chartist.EventEmitter();\n this.supportsForeignObject = Chartist.Svg.isSupported('Extensibility');\n this.supportsAnimations = Chartist.Svg.isSupported('AnimationEventsAttribute');\n this.resizeListener = function resizeListener(){\n this.update();\n }.bind(this);\n\n if(this.container) {\n // If chartist was already initialized in this container we are detaching all event listeners first\n if(this.container.__chartist__) {\n this.container.__chartist__.detach();\n }\n\n this.container.__chartist__ = this;\n }\n\n // Using event loop for first draw to make it possible to register event listeners in the same call stack where\n // the chart was created.\n this.initializeTimeoutId = setTimeout(initialize.bind(this), 0);\n }\n\n // Creating the chart base class\n Chartist.Base = Chartist.Class.extend({\n constructor: Base,\n optionsProvider: undefined,\n container: undefined,\n svg: undefined,\n eventEmitter: undefined,\n createChart: function() {\n throw new Error('Base chart type can\\'t be instantiated!');\n },\n update: update,\n detach: detach,\n on: on,\n off: off,\n version: Chartist.version,\n supportsForeignObject: false\n });\n\n}(this || global, Chartist));\n;/**\n * Chartist SVG module for simple SVG DOM abstraction\n *\n * @module Chartist.Svg\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var document = globalRoot.document;\n\n /**\n * Chartist.Svg creates a new SVG object wrapper with a starting element. You can use the wrapper to fluently create sub-elements and modify them.\n *\n * @memberof Chartist.Svg\n * @constructor\n * @param {String|Element} name The name of the SVG element to create or an SVG dom element which should be wrapped into Chartist.Svg\n * @param {Object} attributes An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added.\n * @param {String} className This class or class list will be added to the SVG element\n * @param {Object} parent The parent SVG wrapper object where this newly created wrapper and it's element will be attached to as child\n * @param {Boolean} insertFirst If this param is set to true in conjunction with a parent element the newly created element will be added as first child element in the parent element\n */\n function Svg(name, attributes, className, parent, insertFirst) {\n // If Svg is getting called with an SVG element we just return the wrapper\n if(name instanceof Element) {\n this._node = name;\n } else {\n this._node = document.createElementNS(Chartist.namespaces.svg, name);\n\n // If this is an SVG element created then custom namespace\n if(name === 'svg') {\n this.attr({\n 'xmlns:ct': Chartist.namespaces.ct\n });\n }\n }\n\n if(attributes) {\n this.attr(attributes);\n }\n\n if(className) {\n this.addClass(className);\n }\n\n if(parent) {\n if (insertFirst && parent._node.firstChild) {\n parent._node.insertBefore(this._node, parent._node.firstChild);\n } else {\n parent._node.appendChild(this._node);\n }\n }\n }\n\n /**\n * Set attributes on the current SVG element of the wrapper you're currently working on.\n *\n * @memberof Chartist.Svg\n * @param {Object|String} attributes An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added. If this parameter is a String then the function is used as a getter and will return the attribute value.\n * @param {String} [ns] If specified, the attribute will be obtained using getAttributeNs. In order to write namepsaced attributes you can use the namespace:attribute notation within the attributes object.\n * @return {Object|String} The current wrapper object will be returned so it can be used for chaining or the attribute value if used as getter function.\n */\n function attr(attributes, ns) {\n if(typeof attributes === 'string') {\n if(ns) {\n return this._node.getAttributeNS(ns, attributes);\n } else {\n return this._node.getAttribute(attributes);\n }\n }\n\n Object.keys(attributes).forEach(function(key) {\n // If the attribute value is undefined we can skip this one\n if(attributes[key] === undefined) {\n return;\n }\n\n if (key.indexOf(':') !== -1) {\n var namespacedAttribute = key.split(':');\n this._node.setAttributeNS(Chartist.namespaces[namespacedAttribute[0]], key, attributes[key]);\n } else {\n this._node.setAttribute(key, attributes[key]);\n }\n }.bind(this));\n\n return this;\n }\n\n /**\n * Create a new SVG element whose wrapper object will be selected for further operations. This way you can also create nested groups easily.\n *\n * @memberof Chartist.Svg\n * @param {String} name The name of the SVG element that should be created as child element of the currently selected element wrapper\n * @param {Object} [attributes] An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added.\n * @param {String} [className] This class or class list will be added to the SVG element\n * @param {Boolean} [insertFirst] If this param is set to true in conjunction with a parent element the newly created element will be added as first child element in the parent element\n * @return {Chartist.Svg} Returns a Chartist.Svg wrapper object that can be used to modify the containing SVG data\n */\n function elem(name, attributes, className, insertFirst) {\n return new Chartist.Svg(name, attributes, className, this, insertFirst);\n }\n\n /**\n * Returns the parent Chartist.SVG wrapper object\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} Returns a Chartist.Svg wrapper around the parent node of the current node. If the parent node is not existing or it's not an SVG node then this function will return null.\n */\n function parent() {\n return this._node.parentNode instanceof SVGElement ? new Chartist.Svg(this._node.parentNode) : null;\n }\n\n /**\n * This method returns a Chartist.Svg wrapper around the root SVG element of the current tree.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The root SVG element wrapped in a Chartist.Svg element\n */\n function root() {\n var node = this._node;\n while(node.nodeName !== 'svg') {\n node = node.parentNode;\n }\n return new Chartist.Svg(node);\n }\n\n /**\n * Find the first child SVG element of the current element that matches a CSS selector. The returned object is a Chartist.Svg wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} selector A CSS selector that is used to query for child SVG elements\n * @return {Chartist.Svg} The SVG wrapper for the element found or null if no element was found\n */\n function querySelector(selector) {\n var foundNode = this._node.querySelector(selector);\n return foundNode ? new Chartist.Svg(foundNode) : null;\n }\n\n /**\n * Find the all child SVG elements of the current element that match a CSS selector. The returned object is a Chartist.Svg.List wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} selector A CSS selector that is used to query for child SVG elements\n * @return {Chartist.Svg.List} The SVG wrapper list for the element found or null if no element was found\n */\n function querySelectorAll(selector) {\n var foundNodes = this._node.querySelectorAll(selector);\n return foundNodes.length ? new Chartist.Svg.List(foundNodes) : null;\n }\n\n /**\n * Returns the underlying SVG node for the current element.\n *\n * @memberof Chartist.Svg\n * @returns {Node}\n */\n function getNode() {\n return this._node;\n }\n\n /**\n * This method creates a foreignObject (see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject) that allows to embed HTML content into a SVG graphic. With the help of foreignObjects you can enable the usage of regular HTML elements inside of SVG where they are subject for SVG positioning and transformation but the Browser will use the HTML rendering capabilities for the containing DOM.\n *\n * @memberof Chartist.Svg\n * @param {Node|String} content The DOM Node, or HTML string that will be converted to a DOM Node, that is then placed into and wrapped by the foreignObject\n * @param {String} [attributes] An object with properties that will be added as attributes to the foreignObject element that is created. Attributes with undefined values will not be added.\n * @param {String} [className] This class or class list will be added to the SVG element\n * @param {Boolean} [insertFirst] Specifies if the foreignObject should be inserted as first child\n * @return {Chartist.Svg} New wrapper object that wraps the foreignObject element\n */\n function foreignObject(content, attributes, className, insertFirst) {\n // If content is string then we convert it to DOM\n // TODO: Handle case where content is not a string nor a DOM Node\n if(typeof content === 'string') {\n var container = document.createElement('div');\n container.innerHTML = content;\n content = container.firstChild;\n }\n\n // Adding namespace to content element\n content.setAttribute('xmlns', Chartist.namespaces.xmlns);\n\n // Creating the foreignObject without required extension attribute (as described here\n // http://www.w3.org/TR/SVG/extend.html#ForeignObjectElement)\n var fnObj = this.elem('foreignObject', attributes, className, insertFirst);\n\n // Add content to foreignObjectElement\n fnObj._node.appendChild(content);\n\n return fnObj;\n }\n\n /**\n * This method adds a new text element to the current Chartist.Svg wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} t The text that should be added to the text element that is created\n * @return {Chartist.Svg} The same wrapper object that was used to add the newly created element\n */\n function text(t) {\n this._node.appendChild(document.createTextNode(t));\n return this;\n }\n\n /**\n * This method will clear all child nodes of the current wrapper object.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The same wrapper object that got emptied\n */\n function empty() {\n while (this._node.firstChild) {\n this._node.removeChild(this._node.firstChild);\n }\n\n return this;\n }\n\n /**\n * This method will cause the current wrapper to remove itself from its parent wrapper. Use this method if you'd like to get rid of an element in a given DOM structure.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The parent wrapper object of the element that got removed\n */\n function remove() {\n this._node.parentNode.removeChild(this._node);\n return this.parent();\n }\n\n /**\n * This method will replace the element with a new element that can be created outside of the current DOM.\n *\n * @memberof Chartist.Svg\n * @param {Chartist.Svg} newElement The new Chartist.Svg object that will be used to replace the current wrapper object\n * @return {Chartist.Svg} The wrapper of the new element\n */\n function replace(newElement) {\n this._node.parentNode.replaceChild(newElement._node, this._node);\n return newElement;\n }\n\n /**\n * This method will append an element to the current element as a child.\n *\n * @memberof Chartist.Svg\n * @param {Chartist.Svg} element The Chartist.Svg element that should be added as a child\n * @param {Boolean} [insertFirst] Specifies if the element should be inserted as first child\n * @return {Chartist.Svg} The wrapper of the appended object\n */\n function append(element, insertFirst) {\n if(insertFirst && this._node.firstChild) {\n this._node.insertBefore(element._node, this._node.firstChild);\n } else {\n this._node.appendChild(element._node);\n }\n\n return this;\n }\n\n /**\n * Returns an array of class names that are attached to the current wrapper element. This method can not be chained further.\n *\n * @memberof Chartist.Svg\n * @return {Array} A list of classes or an empty array if there are no classes on the current element\n */\n function classes() {\n return this._node.getAttribute('class') ? this._node.getAttribute('class').trim().split(/\\s+/) : [];\n }\n\n /**\n * Adds one or a space separated list of classes to the current element and ensures the classes are only existing once.\n *\n * @memberof Chartist.Svg\n * @param {String} names A white space separated list of class names\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function addClass(names) {\n this._node.setAttribute('class',\n this.classes(this._node)\n .concat(names.trim().split(/\\s+/))\n .filter(function(elem, pos, self) {\n return self.indexOf(elem) === pos;\n }).join(' ')\n );\n\n return this;\n }\n\n /**\n * Removes one or a space separated list of classes from the current element.\n *\n * @memberof Chartist.Svg\n * @param {String} names A white space separated list of class names\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function removeClass(names) {\n var removedClasses = names.trim().split(/\\s+/);\n\n this._node.setAttribute('class', this.classes(this._node).filter(function(name) {\n return removedClasses.indexOf(name) === -1;\n }).join(' '));\n\n return this;\n }\n\n /**\n * Removes all classes from the current element.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function removeAllClasses() {\n this._node.setAttribute('class', '');\n\n return this;\n }\n\n /**\n * Get element height using `getBoundingClientRect`\n *\n * @memberof Chartist.Svg\n * @return {Number} The elements height in pixels\n */\n function height() {\n return this._node.getBoundingClientRect().height;\n }\n\n /**\n * Get element width using `getBoundingClientRect`\n *\n * @memberof Chartist.Core\n * @return {Number} The elements width in pixels\n */\n function width() {\n return this._node.getBoundingClientRect().width;\n }\n\n /**\n * The animate function lets you animate the current element with SMIL animations. You can add animations for multiple attributes at the same time by using an animation definition object. This object should contain SMIL animation attributes. Please refer to http://www.w3.org/TR/SVG/animate.html for a detailed specification about the available animation attributes. Additionally an easing property can be passed in the animation definition object. This can be a string with a name of an easing function in `Chartist.Svg.Easing` or an array with four numbers specifying a cubic Bézier curve.\n * **An animations object could look like this:**\n * ```javascript\n * element.animate({\n * opacity: {\n * dur: 1000,\n * from: 0,\n * to: 1\n * },\n * x1: {\n * dur: '1000ms',\n * from: 100,\n * to: 200,\n * easing: 'easeOutQuart'\n * },\n * y1: {\n * dur: '2s',\n * from: 0,\n * to: 100\n * }\n * });\n * ```\n * **Automatic unit conversion**\n * For the `dur` and the `begin` animate attribute you can also omit a unit by passing a number. The number will automatically be converted to milli seconds.\n * **Guided mode**\n * The default behavior of SMIL animations with offset using the `begin` attribute is that the attribute will keep it's original value until the animation starts. Mostly this behavior is not desired as you'd like to have your element attributes already initialized with the animation `from` value even before the animation starts. Also if you don't specify `fill=\"freeze\"` on an animate element or if you delete the animation after it's done (which is done in guided mode) the attribute will switch back to the initial value. This behavior is also not desired when performing simple one-time animations. For one-time animations you'd want to trigger animations immediately instead of relative to the document begin time. That's why in guided mode Chartist.Svg will also use the `begin` property to schedule a timeout and manually start the animation after the timeout. If you're using multiple SMIL definition objects for an attribute (in an array), guided mode will be disabled for this attribute, even if you explicitly enabled it.\n * If guided mode is enabled the following behavior is added:\n * - Before the animation starts (even when delayed with `begin`) the animated attribute will be set already to the `from` value of the animation\n * - `begin` is explicitly set to `indefinite` so it can be started manually without relying on document begin time (creation)\n * - The animate element will be forced to use `fill=\"freeze\"`\n * - The animation will be triggered with `beginElement()` in a timeout where `begin` of the definition object is interpreted in milli seconds. If no `begin` was specified the timeout is triggered immediately.\n * - After the animation the element attribute value will be set to the `to` value of the animation\n * - The animate element is deleted from the DOM\n *\n * @memberof Chartist.Svg\n * @param {Object} animations An animations object where the property keys are the attributes you'd like to animate. The properties should be objects again that contain the SMIL animation attributes (usually begin, dur, from, and to). The property begin and dur is auto converted (see Automatic unit conversion). You can also schedule multiple animations for the same attribute by passing an Array of SMIL definition objects. Attributes that contain an array of SMIL definition objects will not be executed in guided mode.\n * @param {Boolean} guided Specify if guided mode should be activated for this animation (see Guided mode). If not otherwise specified, guided mode will be activated.\n * @param {Object} eventEmitter If specified, this event emitter will be notified when an animation starts or ends.\n * @return {Chartist.Svg} The current element where the animation was added\n */\n function animate(animations, guided, eventEmitter) {\n if(guided === undefined) {\n guided = true;\n }\n\n Object.keys(animations).forEach(function createAnimateForAttributes(attribute) {\n\n function createAnimate(animationDefinition, guided) {\n var attributeProperties = {},\n animate,\n timeout,\n easing;\n\n // Check if an easing is specified in the definition object and delete it from the object as it will not\n // be part of the animate element attributes.\n if(animationDefinition.easing) {\n // If already an easing Bézier curve array we take it or we lookup a easing array in the Easing object\n easing = animationDefinition.easing instanceof Array ?\n animationDefinition.easing :\n Chartist.Svg.Easing[animationDefinition.easing];\n delete animationDefinition.easing;\n }\n\n // If numeric dur or begin was provided we assume milli seconds\n animationDefinition.begin = Chartist.ensureUnit(animationDefinition.begin, 'ms');\n animationDefinition.dur = Chartist.ensureUnit(animationDefinition.dur, 'ms');\n\n if(easing) {\n animationDefinition.calcMode = 'spline';\n animationDefinition.keySplines = easing.join(' ');\n animationDefinition.keyTimes = '0;1';\n }\n\n // Adding \"fill: freeze\" if we are in guided mode and set initial attribute values\n if(guided) {\n animationDefinition.fill = 'freeze';\n // Animated property on our element should already be set to the animation from value in guided mode\n attributeProperties[attribute] = animationDefinition.from;\n this.attr(attributeProperties);\n\n // In guided mode we also set begin to indefinite so we can trigger the start manually and put the begin\n // which needs to be in ms aside\n timeout = Chartist.quantity(animationDefinition.begin || 0).value;\n animationDefinition.begin = 'indefinite';\n }\n\n animate = this.elem('animate', Chartist.extend({\n attributeName: attribute\n }, animationDefinition));\n\n if(guided) {\n // If guided we take the value that was put aside in timeout and trigger the animation manually with a timeout\n setTimeout(function() {\n // If beginElement fails we set the animated attribute to the end position and remove the animate element\n // This happens if the SMIL ElementTimeControl interface is not supported or any other problems occured in\n // the browser. (Currently FF 34 does not support animate elements in foreignObjects)\n try {\n animate._node.beginElement();\n } catch(err) {\n // Set animated attribute to current animated value\n attributeProperties[attribute] = animationDefinition.to;\n this.attr(attributeProperties);\n // Remove the animate element as it's no longer required\n animate.remove();\n }\n }.bind(this), timeout);\n }\n\n if(eventEmitter) {\n animate._node.addEventListener('beginEvent', function handleBeginEvent() {\n eventEmitter.emit('animationBegin', {\n element: this,\n animate: animate._node,\n params: animationDefinition\n });\n }.bind(this));\n }\n\n animate._node.addEventListener('endEvent', function handleEndEvent() {\n if(eventEmitter) {\n eventEmitter.emit('animationEnd', {\n element: this,\n animate: animate._node,\n params: animationDefinition\n });\n }\n\n if(guided) {\n // Set animated attribute to current animated value\n attributeProperties[attribute] = animationDefinition.to;\n this.attr(attributeProperties);\n // Remove the animate element as it's no longer required\n animate.remove();\n }\n }.bind(this));\n }\n\n // If current attribute is an array of definition objects we create an animate for each and disable guided mode\n if(animations[attribute] instanceof Array) {\n animations[attribute].forEach(function(animationDefinition) {\n createAnimate.bind(this)(animationDefinition, false);\n }.bind(this));\n } else {\n createAnimate.bind(this)(animations[attribute], guided);\n }\n\n }.bind(this));\n\n return this;\n }\n\n Chartist.Svg = Chartist.Class.extend({\n constructor: Svg,\n attr: attr,\n elem: elem,\n parent: parent,\n root: root,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n getNode: getNode,\n foreignObject: foreignObject,\n text: text,\n empty: empty,\n remove: remove,\n replace: replace,\n append: append,\n classes: classes,\n addClass: addClass,\n removeClass: removeClass,\n removeAllClasses: removeAllClasses,\n height: height,\n width: width,\n animate: animate\n });\n\n /**\n * This method checks for support of a given SVG feature like Extensibility, SVG-animation or the like. Check http://www.w3.org/TR/SVG11/feature for a detailed list.\n *\n * @memberof Chartist.Svg\n * @param {String} feature The SVG 1.1 feature that should be checked for support.\n * @return {Boolean} True of false if the feature is supported or not\n */\n Chartist.Svg.isSupported = function(feature) {\n return document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#' + feature, '1.1');\n };\n\n /**\n * This Object contains some standard easing cubic bezier curves. Then can be used with their name in the `Chartist.Svg.animate`. You can also extend the list and use your own name in the `animate` function. Click the show code button to see the available bezier functions.\n *\n * @memberof Chartist.Svg\n */\n var easingCubicBeziers = {\n easeInSine: [0.47, 0, 0.745, 0.715],\n easeOutSine: [0.39, 0.575, 0.565, 1],\n easeInOutSine: [0.445, 0.05, 0.55, 0.95],\n easeInQuad: [0.55, 0.085, 0.68, 0.53],\n easeOutQuad: [0.25, 0.46, 0.45, 0.94],\n easeInOutQuad: [0.455, 0.03, 0.515, 0.955],\n easeInCubic: [0.55, 0.055, 0.675, 0.19],\n easeOutCubic: [0.215, 0.61, 0.355, 1],\n easeInOutCubic: [0.645, 0.045, 0.355, 1],\n easeInQuart: [0.895, 0.03, 0.685, 0.22],\n easeOutQuart: [0.165, 0.84, 0.44, 1],\n easeInOutQuart: [0.77, 0, 0.175, 1],\n easeInQuint: [0.755, 0.05, 0.855, 0.06],\n easeOutQuint: [0.23, 1, 0.32, 1],\n easeInOutQuint: [0.86, 0, 0.07, 1],\n easeInExpo: [0.95, 0.05, 0.795, 0.035],\n easeOutExpo: [0.19, 1, 0.22, 1],\n easeInOutExpo: [1, 0, 0, 1],\n easeInCirc: [0.6, 0.04, 0.98, 0.335],\n easeOutCirc: [0.075, 0.82, 0.165, 1],\n easeInOutCirc: [0.785, 0.135, 0.15, 0.86],\n easeInBack: [0.6, -0.28, 0.735, 0.045],\n easeOutBack: [0.175, 0.885, 0.32, 1.275],\n easeInOutBack: [0.68, -0.55, 0.265, 1.55]\n };\n\n Chartist.Svg.Easing = easingCubicBeziers;\n\n /**\n * This helper class is to wrap multiple `Chartist.Svg` elements into a list where you can call the `Chartist.Svg` functions on all elements in the list with one call. This is helpful when you'd like to perform calls with `Chartist.Svg` on multiple elements.\n * An instance of this class is also returned by `Chartist.Svg.querySelectorAll`.\n *\n * @memberof Chartist.Svg\n * @param {Array|NodeList} nodeList An Array of SVG DOM nodes or a SVG DOM NodeList (as returned by document.querySelectorAll)\n * @constructor\n */\n function SvgList(nodeList) {\n var list = this;\n\n this.svgElements = [];\n for(var i = 0; i < nodeList.length; i++) {\n this.svgElements.push(new Chartist.Svg(nodeList[i]));\n }\n\n // Add delegation methods for Chartist.Svg\n Object.keys(Chartist.Svg.prototype).filter(function(prototypeProperty) {\n return ['constructor',\n 'parent',\n 'querySelector',\n 'querySelectorAll',\n 'replace',\n 'append',\n 'classes',\n 'height',\n 'width'].indexOf(prototypeProperty) === -1;\n }).forEach(function(prototypeProperty) {\n list[prototypeProperty] = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n list.svgElements.forEach(function(element) {\n Chartist.Svg.prototype[prototypeProperty].apply(element, args);\n });\n return list;\n };\n });\n }\n\n Chartist.Svg.List = Chartist.Class.extend({\n constructor: SvgList\n });\n}(this || global, Chartist));\n;/**\n * Chartist SVG path module for SVG path description creation and modification.\n *\n * @module Chartist.Svg.Path\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n /**\n * Contains the descriptors of supported element types in a SVG path. Currently only move, line and curve are supported.\n *\n * @memberof Chartist.Svg.Path\n * @type {Object}\n */\n var elementDescriptions = {\n m: ['x', 'y'],\n l: ['x', 'y'],\n c: ['x1', 'y1', 'x2', 'y2', 'x', 'y'],\n a: ['rx', 'ry', 'xAr', 'lAf', 'sf', 'x', 'y']\n };\n\n /**\n * Default options for newly created SVG path objects.\n *\n * @memberof Chartist.Svg.Path\n * @type {Object}\n */\n var defaultOptions = {\n // The accuracy in digit count after the decimal point. This will be used to round numbers in the SVG path. If this option is set to false then no rounding will be performed.\n accuracy: 3\n };\n\n function element(command, params, pathElements, pos, relative, data) {\n var pathElement = Chartist.extend({\n command: relative ? command.toLowerCase() : command.toUpperCase()\n }, params, data ? { data: data } : {} );\n\n pathElements.splice(pos, 0, pathElement);\n }\n\n function forEachParam(pathElements, cb) {\n pathElements.forEach(function(pathElement, pathElementIndex) {\n elementDescriptions[pathElement.command.toLowerCase()].forEach(function(paramName, paramIndex) {\n cb(pathElement, paramName, pathElementIndex, paramIndex, pathElements);\n });\n });\n }\n\n /**\n * Used to construct a new path object.\n *\n * @memberof Chartist.Svg.Path\n * @param {Boolean} close If set to true then this path will be closed when stringified (with a Z at the end)\n * @param {Object} options Options object that overrides the default objects. See default options for more details.\n * @constructor\n */\n function SvgPath(close, options) {\n this.pathElements = [];\n this.pos = 0;\n this.close = close;\n this.options = Chartist.extend({}, defaultOptions, options);\n }\n\n /**\n * Gets or sets the current position (cursor) inside of the path. You can move around the cursor freely but limited to 0 or the count of existing elements. All modifications with element functions will insert new elements at the position of this cursor.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} [pos] If a number is passed then the cursor is set to this position in the path element array.\n * @return {Chartist.Svg.Path|Number} If the position parameter was passed then the return value will be the path object for easy call chaining. If no position parameter was passed then the current position is returned.\n */\n function position(pos) {\n if(pos !== undefined) {\n this.pos = Math.max(0, Math.min(this.pathElements.length, pos));\n return this;\n } else {\n return this.pos;\n }\n }\n\n /**\n * Removes elements from the path starting at the current position.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} count Number of path elements that should be removed from the current position.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function remove(count) {\n this.pathElements.splice(this.pos, count);\n return this;\n }\n\n /**\n * Use this function to add a new move SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The x coordinate for the move element.\n * @param {Number} y The y coordinate for the move element.\n * @param {Boolean} [relative] If set to true the move element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function move(x, y, relative, data) {\n element('M', {\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new line SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The x coordinate for the line element.\n * @param {Number} y The y coordinate for the line element.\n * @param {Boolean} [relative] If set to true the line element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function line(x, y, relative, data) {\n element('L', {\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new curve SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x1 The x coordinate for the first control point of the bezier curve.\n * @param {Number} y1 The y coordinate for the first control point of the bezier curve.\n * @param {Number} x2 The x coordinate for the second control point of the bezier curve.\n * @param {Number} y2 The y coordinate for the second control point of the bezier curve.\n * @param {Number} x The x coordinate for the target point of the curve element.\n * @param {Number} y The y coordinate for the target point of the curve element.\n * @param {Boolean} [relative] If set to true the curve element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function curve(x1, y1, x2, y2, x, y, relative, data) {\n element('C', {\n x1: +x1,\n y1: +y1,\n x2: +x2,\n y2: +y2,\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new non-bezier curve SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} rx The radius to be used for the x-axis of the arc.\n * @param {Number} ry The radius to be used for the y-axis of the arc.\n * @param {Number} xAr Defines the orientation of the arc\n * @param {Number} lAf Large arc flag\n * @param {Number} sf Sweep flag\n * @param {Number} x The x coordinate for the target point of the curve element.\n * @param {Number} y The y coordinate for the target point of the curve element.\n * @param {Boolean} [relative] If set to true the curve element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function arc(rx, ry, xAr, lAf, sf, x, y, relative, data) {\n element('A', {\n rx: +rx,\n ry: +ry,\n xAr: +xAr,\n lAf: +lAf,\n sf: +sf,\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Parses an SVG path seen in the d attribute of path elements, and inserts the parsed elements into the existing path object at the current cursor position. Any closing path indicators (Z at the end of the path) will be ignored by the parser as this is provided by the close option in the options of the path object.\n *\n * @memberof Chartist.Svg.Path\n * @param {String} path Any SVG path that contains move (m), line (l) or curve (c) components.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function parse(path) {\n // Parsing the SVG path string into an array of arrays [['M', '10', '10'], ['L', '100', '100']]\n var chunks = path.replace(/([A-Za-z])([0-9])/g, '$1 $2')\n .replace(/([0-9])([A-Za-z])/g, '$1 $2')\n .split(/[\\s,]+/)\n .reduce(function(result, element) {\n if(element.match(/[A-Za-z]/)) {\n result.push([]);\n }\n\n result[result.length - 1].push(element);\n return result;\n }, []);\n\n // If this is a closed path we remove the Z at the end because this is determined by the close option\n if(chunks[chunks.length - 1][0].toUpperCase() === 'Z') {\n chunks.pop();\n }\n\n // Using svgPathElementDescriptions to map raw path arrays into objects that contain the command and the parameters\n // For example {command: 'M', x: '10', y: '10'}\n var elements = chunks.map(function(chunk) {\n var command = chunk.shift(),\n description = elementDescriptions[command.toLowerCase()];\n\n return Chartist.extend({\n command: command\n }, description.reduce(function(result, paramName, index) {\n result[paramName] = +chunk[index];\n return result;\n }, {}));\n });\n\n // Preparing a splice call with the elements array as var arg params and insert the parsed elements at the current position\n var spliceArgs = [this.pos, 0];\n Array.prototype.push.apply(spliceArgs, elements);\n Array.prototype.splice.apply(this.pathElements, spliceArgs);\n // Increase the internal position by the element count\n this.pos += elements.length;\n\n return this;\n }\n\n /**\n * This function renders to current SVG path object into a final SVG string that can be used in the d attribute of SVG path elements. It uses the accuracy option to round big decimals. If the close parameter was set in the constructor of this path object then a path closing Z will be appended to the output string.\n *\n * @memberof Chartist.Svg.Path\n * @return {String}\n */\n function stringify() {\n var accuracyMultiplier = Math.pow(10, this.options.accuracy);\n\n return this.pathElements.reduce(function(path, pathElement) {\n var params = elementDescriptions[pathElement.command.toLowerCase()].map(function(paramName) {\n return this.options.accuracy ?\n (Math.round(pathElement[paramName] * accuracyMultiplier) / accuracyMultiplier) :\n pathElement[paramName];\n }.bind(this));\n\n return path + pathElement.command + params.join(',');\n }.bind(this), '') + (this.close ? 'Z' : '');\n }\n\n /**\n * Scales all elements in the current SVG path object. There is an individual parameter for each coordinate. Scaling will also be done for control points of curves, affecting the given coordinate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The number which will be used to scale the x, x1 and x2 of all path elements.\n * @param {Number} y The number which will be used to scale the y, y1 and y2 of all path elements.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function scale(x, y) {\n forEachParam(this.pathElements, function(pathElement, paramName) {\n pathElement[paramName] *= paramName[0] === 'x' ? x : y;\n });\n return this;\n }\n\n /**\n * Translates all elements in the current SVG path object. The translation is relative and there is an individual parameter for each coordinate. Translation will also be done for control points of curves, affecting the given coordinate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The number which will be used to translate the x, x1 and x2 of all path elements.\n * @param {Number} y The number which will be used to translate the y, y1 and y2 of all path elements.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function translate(x, y) {\n forEachParam(this.pathElements, function(pathElement, paramName) {\n pathElement[paramName] += paramName[0] === 'x' ? x : y;\n });\n return this;\n }\n\n /**\n * This function will run over all existing path elements and then loop over their attributes. The callback function will be called for every path element attribute that exists in the current path.\n * The method signature of the callback function looks like this:\n * ```javascript\n * function(pathElement, paramName, pathElementIndex, paramIndex, pathElements)\n * ```\n * If something else than undefined is returned by the callback function, this value will be used to replace the old value. This allows you to build custom transformations of path objects that can't be achieved using the basic transformation functions scale and translate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Function} transformFnc The callback function for the transformation. Check the signature in the function description.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function transform(transformFnc) {\n forEachParam(this.pathElements, function(pathElement, paramName, pathElementIndex, paramIndex, pathElements) {\n var transformed = transformFnc(pathElement, paramName, pathElementIndex, paramIndex, pathElements);\n if(transformed || transformed === 0) {\n pathElement[paramName] = transformed;\n }\n });\n return this;\n }\n\n /**\n * This function clones a whole path object with all its properties. This is a deep clone and path element objects will also be cloned.\n *\n * @memberof Chartist.Svg.Path\n * @param {Boolean} [close] Optional option to set the new cloned path to closed. If not specified or false, the original path close option will be used.\n * @return {Chartist.Svg.Path}\n */\n function clone(close) {\n var c = new Chartist.Svg.Path(close || this.close);\n c.pos = this.pos;\n c.pathElements = this.pathElements.slice().map(function cloneElements(pathElement) {\n return Chartist.extend({}, pathElement);\n });\n c.options = Chartist.extend({}, this.options);\n return c;\n }\n\n /**\n * Split a Svg.Path object by a specific command in the path chain. The path chain will be split and an array of newly created paths objects will be returned. This is useful if you'd like to split an SVG path by it's move commands, for example, in order to isolate chunks of drawings.\n *\n * @memberof Chartist.Svg.Path\n * @param {String} command The command you'd like to use to split the path\n * @return {Array}\n */\n function splitByCommand(command) {\n var split = [\n new Chartist.Svg.Path()\n ];\n\n this.pathElements.forEach(function(pathElement) {\n if(pathElement.command === command.toUpperCase() && split[split.length - 1].pathElements.length !== 0) {\n split.push(new Chartist.Svg.Path());\n }\n\n split[split.length - 1].pathElements.push(pathElement);\n });\n\n return split;\n }\n\n /**\n * This static function on `Chartist.Svg.Path` is joining multiple paths together into one paths.\n *\n * @memberof Chartist.Svg.Path\n * @param {Array} paths A list of paths to be joined together. The order is important.\n * @param {boolean} close If the newly created path should be a closed path\n * @param {Object} options Path options for the newly created path.\n * @return {Chartist.Svg.Path}\n */\n\n function join(paths, close, options) {\n var joinedPath = new Chartist.Svg.Path(close, options);\n for(var i = 0; i < paths.length; i++) {\n var path = paths[i];\n for(var j = 0; j < path.pathElements.length; j++) {\n joinedPath.pathElements.push(path.pathElements[j]);\n }\n }\n return joinedPath;\n }\n\n Chartist.Svg.Path = Chartist.Class.extend({\n constructor: SvgPath,\n position: position,\n remove: remove,\n move: move,\n line: line,\n curve: curve,\n arc: arc,\n scale: scale,\n translate: translate,\n transform: transform,\n parse: parse,\n stringify: stringify,\n clone: clone,\n splitByCommand: splitByCommand\n });\n\n Chartist.Svg.Path.elementDescriptions = elementDescriptions;\n Chartist.Svg.Path.join = join;\n}(this || global, Chartist));\n;/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n var axisUnits = {\n x: {\n pos: 'x',\n len: 'width',\n dir: 'horizontal',\n rectStart: 'x1',\n rectEnd: 'x2',\n rectOffset: 'y2'\n },\n y: {\n pos: 'y',\n len: 'height',\n dir: 'vertical',\n rectStart: 'y2',\n rectEnd: 'y1',\n rectOffset: 'x1'\n }\n };\n\n function Axis(units, chartRect, ticks, options) {\n this.units = units;\n this.counterUnits = units === axisUnits.x ? axisUnits.y : axisUnits.x;\n this.chartRect = chartRect;\n this.axisLength = chartRect[units.rectEnd] - chartRect[units.rectStart];\n this.gridOffset = chartRect[units.rectOffset];\n this.ticks = ticks;\n this.options = options;\n }\n\n function createGridAndLabels(gridGroup, labelGroup, useForeignObject, chartOptions, eventEmitter) {\n var axisOptions = chartOptions['axis' + this.units.pos.toUpperCase()];\n var projectedValues = this.ticks.map(this.projectValue.bind(this));\n var labelValues = this.ticks.map(axisOptions.labelInterpolationFnc);\n\n projectedValues.forEach(function(projectedValue, index) {\n var labelOffset = {\n x: 0,\n y: 0\n };\n\n // TODO: Find better solution for solving this problem\n // Calculate how much space we have available for the label\n var labelLength;\n if(projectedValues[index + 1]) {\n // If we still have one label ahead, we can calculate the distance to the next tick / label\n labelLength = projectedValues[index + 1] - projectedValue;\n } else {\n // If we don't have a label ahead and we have only two labels in total, we just take the remaining distance to\n // on the whole axis length. We limit that to a minimum of 30 pixel, so that labels close to the border will\n // still be visible inside of the chart padding.\n labelLength = Math.max(this.axisLength - projectedValue, 30);\n }\n\n // Skip grid lines and labels where interpolated label values are falsey (execpt for 0)\n if(Chartist.isFalseyButZero(labelValues[index]) && labelValues[index] !== '') {\n return;\n }\n\n // Transform to global coordinates using the chartRect\n // We also need to set the label offset for the createLabel function\n if(this.units.pos === 'x') {\n projectedValue = this.chartRect.x1 + projectedValue;\n labelOffset.x = chartOptions.axisX.labelOffset.x;\n\n // If the labels should be positioned in start position (top side for vertical axis) we need to set a\n // different offset as for positioned with end (bottom)\n if(chartOptions.axisX.position === 'start') {\n labelOffset.y = this.chartRect.padding.top + chartOptions.axisX.labelOffset.y + (useForeignObject ? 5 : 20);\n } else {\n labelOffset.y = this.chartRect.y1 + chartOptions.axisX.labelOffset.y + (useForeignObject ? 5 : 20);\n }\n } else {\n projectedValue = this.chartRect.y1 - projectedValue;\n labelOffset.y = chartOptions.axisY.labelOffset.y - (useForeignObject ? labelLength : 0);\n\n // If the labels should be positioned in start position (left side for horizontal axis) we need to set a\n // different offset as for positioned with end (right side)\n if(chartOptions.axisY.position === 'start') {\n labelOffset.x = useForeignObject ? this.chartRect.padding.left + chartOptions.axisY.labelOffset.x : this.chartRect.x1 - 10;\n } else {\n labelOffset.x = this.chartRect.x2 + chartOptions.axisY.labelOffset.x + 10;\n }\n }\n\n if(axisOptions.showGrid) {\n Chartist.createGrid(projectedValue, index, this, this.gridOffset, this.chartRect[this.counterUnits.len](), gridGroup, [\n chartOptions.classNames.grid,\n chartOptions.classNames[this.units.dir]\n ], eventEmitter);\n }\n\n if(axisOptions.showLabel) {\n Chartist.createLabel(projectedValue, labelLength, index, labelValues, this, axisOptions.offset, labelOffset, labelGroup, [\n chartOptions.classNames.label,\n chartOptions.classNames[this.units.dir],\n (axisOptions.position === 'start' ? chartOptions.classNames[axisOptions.position] : chartOptions.classNames['end'])\n ], useForeignObject, eventEmitter);\n }\n }.bind(this));\n }\n\n Chartist.Axis = Chartist.Class.extend({\n constructor: Axis,\n createGridAndLabels: createGridAndLabels,\n projectValue: function(value, index, data) {\n throw new Error('Base axis can\\'t be instantiated!');\n }\n });\n\n Chartist.Axis.units = axisUnits;\n\n}(this || global, Chartist));\n;/**\n * The auto scale axis uses standard linear scale projection of values along an axis. It uses order of magnitude to find a scale automatically and evaluates the available space in order to find the perfect amount of ticks for your chart.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // If high is specified then the axis will display values explicitly up to this value and the computed maximum from the data is ignored\n * high: 100,\n * // If low is specified then the axis will display values explicitly down to this value and the computed minimum from the data is ignored\n * low: 0,\n * // This option will be used when finding the right scale division settings. The amount of ticks on the scale will be determined so that as many ticks as possible will be displayed, while not violating this minimum required space (in pixel).\n * scaleMinSpace: 20,\n * // Can be set to true or false. If set to true, the scale will be generated with whole numbers only.\n * onlyInteger: true,\n * // The reference value can be used to make sure that this value will always be on the chart. This is especially useful on bipolar charts where the bipolar center always needs to be part of the chart.\n * referenceValue: 5\n * };\n * ```\n *\n * @module Chartist.AutoScaleAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function AutoScaleAxis(axisUnit, data, chartRect, options) {\n // Usually we calculate highLow based on the data but this can be overriden by a highLow object in the options\n var highLow = options.highLow || Chartist.getHighLow(data, options, axisUnit.pos);\n this.bounds = Chartist.getBounds(chartRect[axisUnit.rectEnd] - chartRect[axisUnit.rectStart], highLow, options.scaleMinSpace || 20, options.onlyInteger);\n this.range = {\n min: this.bounds.min,\n max: this.bounds.max\n };\n\n Chartist.AutoScaleAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n this.bounds.values,\n options);\n }\n\n function projectValue(value) {\n return this.axisLength * (+Chartist.getMultiValue(value, this.units.pos) - this.bounds.min) / this.bounds.range;\n }\n\n Chartist.AutoScaleAxis = Chartist.Axis.extend({\n constructor: AutoScaleAxis,\n projectValue: projectValue\n });\n\n}(this || global, Chartist));\n;/**\n * The fixed scale axis uses standard linear projection of values along an axis. It makes use of a divisor option to divide the range provided from the minimum and maximum value or the options high and low that will override the computed minimum and maximum.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // If high is specified then the axis will display values explicitly up to this value and the computed maximum from the data is ignored\n * high: 100,\n * // If low is specified then the axis will display values explicitly down to this value and the computed minimum from the data is ignored\n * low: 0,\n * // If specified then the value range determined from minimum to maximum (or low and high) will be divided by this number and ticks will be generated at those division points. The default divisor is 1.\n * divisor: 4,\n * // If ticks is explicitly set, then the axis will not compute the ticks with the divisor, but directly use the data in ticks to determine at what points on the axis a tick need to be generated.\n * ticks: [1, 10, 20, 30]\n * };\n * ```\n *\n * @module Chartist.FixedScaleAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function FixedScaleAxis(axisUnit, data, chartRect, options) {\n var highLow = options.highLow || Chartist.getHighLow(data, options, axisUnit.pos);\n this.divisor = options.divisor || 1;\n this.ticks = options.ticks || Chartist.times(this.divisor).map(function(value, index) {\n return highLow.low + (highLow.high - highLow.low) / this.divisor * index;\n }.bind(this));\n this.ticks.sort(function(a, b) {\n return a - b;\n });\n this.range = {\n min: highLow.low,\n max: highLow.high\n };\n\n Chartist.FixedScaleAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n this.ticks,\n options);\n\n this.stepLength = this.axisLength / this.divisor;\n }\n\n function projectValue(value) {\n return this.axisLength * (+Chartist.getMultiValue(value, this.units.pos) - this.range.min) / (this.range.max - this.range.min);\n }\n\n Chartist.FixedScaleAxis = Chartist.Axis.extend({\n constructor: FixedScaleAxis,\n projectValue: projectValue\n });\n\n}(this || global, Chartist));\n;/**\n * The step axis for step based charts like bar chart or step based line charts. It uses a fixed amount of ticks that will be equally distributed across the whole axis length. The projection is done using the index of the data value rather than the value itself and therefore it's only useful for distribution purpose.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // Ticks to be used to distribute across the axis length. As this axis type relies on the index of the value rather than the value, arbitrary data that can be converted to a string can be used as ticks.\n * ticks: ['One', 'Two', 'Three'],\n * // If set to true the full width will be used to distribute the values where the last value will be at the maximum of the axis length. If false the spaces between the ticks will be evenly distributed instead.\n * stretch: true\n * };\n * ```\n *\n * @module Chartist.StepAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function StepAxis(axisUnit, data, chartRect, options) {\n Chartist.StepAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n options.ticks,\n options);\n\n var calc = Math.max(1, options.ticks.length - (options.stretch ? 1 : 0));\n this.stepLength = this.axisLength / calc;\n }\n\n function projectValue(value, index) {\n return this.stepLength * index;\n }\n\n Chartist.StepAxis = Chartist.Axis.extend({\n constructor: StepAxis,\n projectValue: projectValue\n });\n\n}(this || global, Chartist));\n;/**\n * The Chartist line chart can be used to draw Line or Scatter charts. If used in the browser you can access the global `Chartist` namespace where you find the `Line` function as a main entry point.\n *\n * For examples on how to use the line chart please check the examples of the `Chartist.Line` method.\n *\n * @module Chartist.Line\n */\n/* global Chartist */\n(function(globalRoot, Chartist){\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in line charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Line\n */\n var defaultOptions = {\n // Options for X-Axis\n axisX: {\n // The offset of the labels to the chart area\n offset: 30,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'end',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // Set the axis type to be used to project values on this axis. If not defined, Chartist.StepAxis will be used for the X-Axis, where the ticks option will be set to the labels in the data and the stretch option will be set to the global fullWidth option. This type can be changed to any axis constructor available (e.g. Chartist.FixedScaleAxis), where all axis options should be present here.\n type: undefined\n },\n // Options for Y-Axis\n axisY: {\n // The offset of the labels to the chart area\n offset: 40,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'start',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // Set the axis type to be used to project values on this axis. If not defined, Chartist.AutoScaleAxis will be used for the Y-Axis, where the high and low options will be set to the global high and low options. This type can be changed to any axis constructor available (e.g. Chartist.FixedScaleAxis), where all axis options should be present here.\n type: undefined,\n // This value specifies the minimum height in pixel of the scale steps\n scaleMinSpace: 20,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // If the line should be drawn or not\n showLine: true,\n // If dots should be drawn or not\n showPoint: true,\n // If the line chart should draw an area\n showArea: false,\n // The base for the area chart that will be used to close the area shape (is normally 0)\n areaBase: 0,\n // Specify if the lines should be smoothed. This value can be true or false where true will result in smoothing using the default smoothing interpolation function Chartist.Interpolation.cardinal and false results in Chartist.Interpolation.none. You can also choose other smoothing / interpolation functions available in the Chartist.Interpolation module, or write your own interpolation function. Check the examples for a brief description.\n lineSmooth: true,\n // If the line chart should add a background fill to the .ct-grids group.\n showGridBackground: false,\n // Overriding the natural low of the chart allows you to zoom in or limit the charts lowest displayed value\n low: undefined,\n // Overriding the natural high of the chart allows you to zoom in or limit the charts highest displayed value\n high: undefined,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: {\n top: 15,\n right: 15,\n bottom: 5,\n left: 10\n },\n // When set to true, the last grid line on the x-axis is not drawn and the chart elements will expand to the full available width of the chart. For the last label to be drawn correctly you might need to add chart padding or offset the last label with a draw event handler.\n fullWidth: false,\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // Override the class names that get used to generate the SVG structure of the chart\n classNames: {\n chart: 'ct-chart-line',\n label: 'ct-label',\n labelGroup: 'ct-labels',\n series: 'ct-series',\n line: 'ct-line',\n point: 'ct-point',\n area: 'ct-area',\n grid: 'ct-grid',\n gridGroup: 'ct-grids',\n gridBackground: 'ct-grid-background',\n vertical: 'ct-vertical',\n horizontal: 'ct-horizontal',\n start: 'ct-start',\n end: 'ct-end'\n }\n };\n\n /**\n * Creates a new chart\n *\n */\n function createChart(options) {\n var data = Chartist.normalizeData(this.data, options.reverseData, true);\n\n // Create new svg object\n this.svg = Chartist.createSvg(this.container, options.width, options.height, options.classNames.chart);\n // Create groups for labels, grid and series\n var gridGroup = this.svg.elem('g').addClass(options.classNames.gridGroup);\n var seriesGroup = this.svg.elem('g');\n var labelGroup = this.svg.elem('g').addClass(options.classNames.labelGroup);\n\n var chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n var axisX, axisY;\n\n if(options.axisX.type === undefined) {\n axisX = new Chartist.StepAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n ticks: data.normalized.labels,\n stretch: options.fullWidth\n }));\n } else {\n axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, options.axisX);\n }\n\n if(options.axisY.type === undefined) {\n axisY = new Chartist.AutoScaleAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n high: Chartist.isNumeric(options.high) ? options.high : options.axisY.high,\n low: Chartist.isNumeric(options.low) ? options.low : options.axisY.low\n }));\n } else {\n axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, options.axisY);\n }\n\n axisX.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n axisY.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n\n if (options.showGridBackground) {\n Chartist.createGridBackground(gridGroup, chartRect, options.classNames.gridBackground, this.eventEmitter);\n }\n\n // Draw the series\n data.raw.series.forEach(function(series, seriesIndex) {\n var seriesElement = seriesGroup.elem('g');\n\n // Write attributes to series group element. If series name or meta is undefined the attributes will not be written\n seriesElement.attr({\n 'ct:series-name': series.name,\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // Use series class from series data or if not set generate one\n seriesElement.addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(seriesIndex))\n ].join(' '));\n\n var pathCoordinates = [],\n pathData = [];\n\n data.normalized.series[seriesIndex].forEach(function(value, valueIndex) {\n var p = {\n x: chartRect.x1 + axisX.projectValue(value, valueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - axisY.projectValue(value, valueIndex, data.normalized.series[seriesIndex])\n };\n pathCoordinates.push(p.x, p.y);\n pathData.push({\n value: value,\n valueIndex: valueIndex,\n meta: Chartist.getMetaData(series, valueIndex)\n });\n }.bind(this));\n\n var seriesOptions = {\n lineSmooth: Chartist.getSeriesOption(series, options, 'lineSmooth'),\n showPoint: Chartist.getSeriesOption(series, options, 'showPoint'),\n showLine: Chartist.getSeriesOption(series, options, 'showLine'),\n showArea: Chartist.getSeriesOption(series, options, 'showArea'),\n areaBase: Chartist.getSeriesOption(series, options, 'areaBase')\n };\n\n var smoothing = typeof seriesOptions.lineSmooth === 'function' ?\n seriesOptions.lineSmooth : (seriesOptions.lineSmooth ? Chartist.Interpolation.monotoneCubic() : Chartist.Interpolation.none());\n // Interpolating path where pathData will be used to annotate each path element so we can trace back the original\n // index, value and meta data\n var path = smoothing(pathCoordinates, pathData);\n\n // If we should show points we need to create them now to avoid secondary loop\n // Points are drawn from the pathElements returned by the interpolation function\n // Small offset for Firefox to render squares correctly\n if (seriesOptions.showPoint) {\n\n path.pathElements.forEach(function(pathElement) {\n var point = seriesElement.elem('line', {\n x1: pathElement.x,\n y1: pathElement.y,\n x2: pathElement.x + 0.01,\n y2: pathElement.y\n }, options.classNames.point).attr({\n 'ct:value': [pathElement.data.value.x, pathElement.data.value.y].filter(Chartist.isNumeric).join(','),\n 'ct:meta': Chartist.serialize(pathElement.data.meta)\n });\n\n this.eventEmitter.emit('draw', {\n type: 'point',\n value: pathElement.data.value,\n index: pathElement.data.valueIndex,\n meta: pathElement.data.meta,\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n group: seriesElement,\n element: point,\n x: pathElement.x,\n y: pathElement.y\n });\n }.bind(this));\n }\n\n if(seriesOptions.showLine) {\n var line = seriesElement.elem('path', {\n d: path.stringify()\n }, options.classNames.line, true);\n\n this.eventEmitter.emit('draw', {\n type: 'line',\n values: data.normalized.series[seriesIndex],\n path: path.clone(),\n chartRect: chartRect,\n index: seriesIndex,\n series: series,\n seriesIndex: seriesIndex,\n seriesMeta: series.meta,\n axisX: axisX,\n axisY: axisY,\n group: seriesElement,\n element: line\n });\n }\n\n // Area currently only works with axes that support a range!\n if(seriesOptions.showArea && axisY.range) {\n // If areaBase is outside the chart area (< min or > max) we need to set it respectively so that\n // the area is not drawn outside the chart area.\n var areaBase = Math.max(Math.min(seriesOptions.areaBase, axisY.range.max), axisY.range.min);\n\n // We project the areaBase value into screen coordinates\n var areaBaseProjected = chartRect.y1 - axisY.projectValue(areaBase);\n\n // In order to form the area we'll first split the path by move commands so we can chunk it up into segments\n path.splitByCommand('M').filter(function onlySolidSegments(pathSegment) {\n // We filter only \"solid\" segments that contain more than one point. Otherwise there's no need for an area\n return pathSegment.pathElements.length > 1;\n }).map(function convertToArea(solidPathSegments) {\n // Receiving the filtered solid path segments we can now convert those segments into fill areas\n var firstElement = solidPathSegments.pathElements[0];\n var lastElement = solidPathSegments.pathElements[solidPathSegments.pathElements.length - 1];\n\n // Cloning the solid path segment with closing option and removing the first move command from the clone\n // We then insert a new move that should start at the area base and draw a straight line up or down\n // at the end of the path we add an additional straight line to the projected area base value\n // As the closing option is set our path will be automatically closed\n return solidPathSegments.clone(true)\n .position(0)\n .remove(1)\n .move(firstElement.x, areaBaseProjected)\n .line(firstElement.x, firstElement.y)\n .position(solidPathSegments.pathElements.length + 1)\n .line(lastElement.x, areaBaseProjected);\n\n }).forEach(function createArea(areaPath) {\n // For each of our newly created area paths, we'll now create path elements by stringifying our path objects\n // and adding the created DOM elements to the correct series group\n var area = seriesElement.elem('path', {\n d: areaPath.stringify()\n }, options.classNames.area, true);\n\n // Emit an event for each area that was drawn\n this.eventEmitter.emit('draw', {\n type: 'area',\n values: data.normalized.series[seriesIndex],\n path: areaPath.clone(),\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n chartRect: chartRect,\n index: seriesIndex,\n group: seriesElement,\n element: area\n });\n }.bind(this));\n }\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n bounds: axisY.bounds,\n chartRect: chartRect,\n axisX: axisX,\n axisY: axisY,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new line chart.\n *\n * @memberof Chartist.Line\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object that needs to consist of a labels and a series array\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object which exposes the API for the created chart\n *\n * @example\n * // Create a simple line chart\n * var data = {\n * // A labels array that can contain any sort of values\n * labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * // Our series array that contains series objects or in this case series data arrays\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // As options we currently only set a static size of 300x200 px\n * var options = {\n * width: '300px',\n * height: '200px'\n * };\n *\n * // In the global name space Chartist we call the Line function to initialize a line chart. As a first parameter we pass in a selector where we would like to get our chart created. Second parameter is the actual data object and as a third parameter we pass in our options\n * new Chartist.Line('.ct-chart', data, options);\n *\n * @example\n * // Use specific interpolation function with configuration from the Chartist.Interpolation module\n *\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [\n * [1, 1, 8, 1, 7]\n * ]\n * }, {\n * lineSmooth: Chartist.Interpolation.cardinal({\n * tension: 0.2\n * })\n * });\n *\n * @example\n * // Create a line chart with responsive options\n *\n * var data = {\n * // A labels array that can contain any sort of values\n * labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],\n * // Our series array that contains series objects or in this case series data arrays\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // In addition to the regular options we specify responsive option overrides that will override the default configutation based on the matching media queries.\n * var responsiveOptions = [\n * ['screen and (min-width: 641px) and (max-width: 1024px)', {\n * showPoint: false,\n * axisX: {\n * labelInterpolationFnc: function(value) {\n * // Will return Mon, Tue, Wed etc. on medium screens\n * return value.slice(0, 3);\n * }\n * }\n * }],\n * ['screen and (max-width: 640px)', {\n * showLine: false,\n * axisX: {\n * labelInterpolationFnc: function(value) {\n * // Will return M, T, W etc. on small screens\n * return value[0];\n * }\n * }\n * }]\n * ];\n *\n * new Chartist.Line('.ct-chart', data, null, responsiveOptions);\n *\n */\n function Line(query, data, options, responsiveOptions) {\n Chartist.Line.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating line chart type in Chartist namespace\n Chartist.Line = Chartist.Base.extend({\n constructor: Line,\n createChart: createChart\n });\n\n}(this || global, Chartist));\n;/**\n * The bar chart module of Chartist that can be used to draw unipolar or bipolar bar and grouped bar charts.\n *\n * @module Chartist.Bar\n */\n/* global Chartist */\n(function(globalRoot, Chartist){\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in bar charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Bar\n */\n var defaultOptions = {\n // Options for X-Axis\n axisX: {\n // The offset of the chart drawing area to the border of the container\n offset: 30,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'end',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // This value specifies the minimum width in pixel of the scale steps\n scaleMinSpace: 30,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Options for Y-Axis\n axisY: {\n // The offset of the chart drawing area to the border of the container\n offset: 40,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'start',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // This value specifies the minimum height in pixel of the scale steps\n scaleMinSpace: 20,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // Overriding the natural high of the chart allows you to zoom in or limit the charts highest displayed value\n high: undefined,\n // Overriding the natural low of the chart allows you to zoom in or limit the charts lowest displayed value\n low: undefined,\n // Unless low/high are explicitly set, bar chart will be centered at zero by default. Set referenceValue to null to auto scale.\n referenceValue: 0,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: {\n top: 15,\n right: 15,\n bottom: 5,\n left: 10\n },\n // Specify the distance in pixel of bars in a group\n seriesBarDistance: 15,\n // If set to true this property will cause the series bars to be stacked. Check the `stackMode` option for further stacking options.\n stackBars: false,\n // If set to 'overlap' this property will force the stacked bars to draw from the zero line.\n // If set to 'accumulate' this property will form a total for each series point. This will also influence the y-axis and the overall bounds of the chart. In stacked mode the seriesBarDistance property will have no effect.\n stackMode: 'accumulate',\n // Inverts the axes of the bar chart in order to draw a horizontal bar chart. Be aware that you also need to invert your axis settings as the Y Axis will now display the labels and the X Axis the values.\n horizontalBars: false,\n // If set to true then each bar will represent a series and the data array is expected to be a one dimensional array of data values rather than a series array of series. This is useful if the bar chart should represent a profile rather than some data over time.\n distributeSeries: false,\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // If the bar chart should add a background fill to the .ct-grids group.\n showGridBackground: false,\n // Override the class names that get used to generate the SVG structure of the chart\n classNames: {\n chart: 'ct-chart-bar',\n horizontalBars: 'ct-horizontal-bars',\n label: 'ct-label',\n labelGroup: 'ct-labels',\n series: 'ct-series',\n bar: 'ct-bar',\n grid: 'ct-grid',\n gridGroup: 'ct-grids',\n gridBackground: 'ct-grid-background',\n vertical: 'ct-vertical',\n horizontal: 'ct-horizontal',\n start: 'ct-start',\n end: 'ct-end'\n }\n };\n\n /**\n * Creates a new chart\n *\n */\n function createChart(options) {\n var data;\n var highLow;\n\n if(options.distributeSeries) {\n data = Chartist.normalizeData(this.data, options.reverseData, options.horizontalBars ? 'x' : 'y');\n data.normalized.series = data.normalized.series.map(function(value) {\n return [value];\n });\n } else {\n data = Chartist.normalizeData(this.data, options.reverseData, options.horizontalBars ? 'x' : 'y');\n }\n\n // Create new svg element\n this.svg = Chartist.createSvg(\n this.container,\n options.width,\n options.height,\n options.classNames.chart + (options.horizontalBars ? ' ' + options.classNames.horizontalBars : '')\n );\n\n // Drawing groups in correct order\n var gridGroup = this.svg.elem('g').addClass(options.classNames.gridGroup);\n var seriesGroup = this.svg.elem('g');\n var labelGroup = this.svg.elem('g').addClass(options.classNames.labelGroup);\n\n if(options.stackBars && data.normalized.series.length !== 0) {\n\n // If stacked bars we need to calculate the high low from stacked values from each series\n var serialSums = Chartist.serialMap(data.normalized.series, function serialSums() {\n return Array.prototype.slice.call(arguments).map(function(value) {\n return value;\n }).reduce(function(prev, curr) {\n return {\n x: prev.x + (curr && curr.x) || 0,\n y: prev.y + (curr && curr.y) || 0\n };\n }, {x: 0, y: 0});\n });\n\n highLow = Chartist.getHighLow([serialSums], options, options.horizontalBars ? 'x' : 'y');\n\n } else {\n\n highLow = Chartist.getHighLow(data.normalized.series, options, options.horizontalBars ? 'x' : 'y');\n }\n\n // Overrides of high / low from settings\n highLow.high = +options.high || (options.high === 0 ? 0 : highLow.high);\n highLow.low = +options.low || (options.low === 0 ? 0 : highLow.low);\n\n var chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n\n var valueAxis,\n labelAxisTicks,\n labelAxis,\n axisX,\n axisY;\n\n // We need to set step count based on some options combinations\n if(options.distributeSeries && options.stackBars) {\n // If distributed series are enabled and bars need to be stacked, we'll only have one bar and therefore should\n // use only the first label for the step axis\n labelAxisTicks = data.normalized.labels.slice(0, 1);\n } else {\n // If distributed series are enabled but stacked bars aren't, we should use the series labels\n // If we are drawing a regular bar chart with two dimensional series data, we just use the labels array\n // as the bars are normalized\n labelAxisTicks = data.normalized.labels;\n }\n\n // Set labelAxis and valueAxis based on the horizontalBars setting. This setting will flip the axes if necessary.\n if(options.horizontalBars) {\n if(options.axisX.type === undefined) {\n valueAxis = axisX = new Chartist.AutoScaleAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n highLow: highLow,\n referenceValue: 0\n }));\n } else {\n valueAxis = axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n highLow: highLow,\n referenceValue: 0\n }));\n }\n\n if(options.axisY.type === undefined) {\n labelAxis = axisY = new Chartist.StepAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, {\n ticks: labelAxisTicks\n });\n } else {\n labelAxis = axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, options.axisY);\n }\n } else {\n if(options.axisX.type === undefined) {\n labelAxis = axisX = new Chartist.StepAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, {\n ticks: labelAxisTicks\n });\n } else {\n labelAxis = axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, options.axisX);\n }\n\n if(options.axisY.type === undefined) {\n valueAxis = axisY = new Chartist.AutoScaleAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n highLow: highLow,\n referenceValue: 0\n }));\n } else {\n valueAxis = axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n highLow: highLow,\n referenceValue: 0\n }));\n }\n }\n\n // Projected 0 point\n var zeroPoint = options.horizontalBars ? (chartRect.x1 + valueAxis.projectValue(0)) : (chartRect.y1 - valueAxis.projectValue(0));\n // Used to track the screen coordinates of stacked bars\n var stackedBarValues = [];\n\n labelAxis.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n valueAxis.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n\n if (options.showGridBackground) {\n Chartist.createGridBackground(gridGroup, chartRect, options.classNames.gridBackground, this.eventEmitter);\n }\n\n // Draw the series\n data.raw.series.forEach(function(series, seriesIndex) {\n // Calculating bi-polar value of index for seriesOffset. For i = 0..4 biPol will be -1.5, -0.5, 0.5, 1.5 etc.\n var biPol = seriesIndex - (data.raw.series.length - 1) / 2;\n // Half of the period width between vertical grid lines used to position bars\n var periodHalfLength;\n // Current series SVG element\n var seriesElement;\n\n // We need to set periodHalfLength based on some options combinations\n if(options.distributeSeries && !options.stackBars) {\n // If distributed series are enabled but stacked bars aren't, we need to use the length of the normaizedData array\n // which is the series count and divide by 2\n periodHalfLength = labelAxis.axisLength / data.normalized.series.length / 2;\n } else if(options.distributeSeries && options.stackBars) {\n // If distributed series and stacked bars are enabled we'll only get one bar so we should just divide the axis\n // length by 2\n periodHalfLength = labelAxis.axisLength / 2;\n } else {\n // On regular bar charts we should just use the series length\n periodHalfLength = labelAxis.axisLength / data.normalized.series[seriesIndex].length / 2;\n }\n\n // Adding the series group to the series element\n seriesElement = seriesGroup.elem('g');\n\n // Write attributes to series group element. If series name or meta is undefined the attributes will not be written\n seriesElement.attr({\n 'ct:series-name': series.name,\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // Use series class from series data or if not set generate one\n seriesElement.addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(seriesIndex))\n ].join(' '));\n\n data.normalized.series[seriesIndex].forEach(function(value, valueIndex) {\n var projected,\n bar,\n previousStack,\n labelAxisValueIndex;\n\n // We need to set labelAxisValueIndex based on some options combinations\n if(options.distributeSeries && !options.stackBars) {\n // If distributed series are enabled but stacked bars aren't, we can use the seriesIndex for later projection\n // on the step axis for label positioning\n labelAxisValueIndex = seriesIndex;\n } else if(options.distributeSeries && options.stackBars) {\n // If distributed series and stacked bars are enabled, we will only get one bar and therefore always use\n // 0 for projection on the label step axis\n labelAxisValueIndex = 0;\n } else {\n // On regular bar charts we just use the value index to project on the label step axis\n labelAxisValueIndex = valueIndex;\n }\n\n // We need to transform coordinates differently based on the chart layout\n if(options.horizontalBars) {\n projected = {\n x: chartRect.x1 + valueAxis.projectValue(value && value.x ? value.x : 0, valueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - labelAxis.projectValue(value && value.y ? value.y : 0, labelAxisValueIndex, data.normalized.series[seriesIndex])\n };\n } else {\n projected = {\n x: chartRect.x1 + labelAxis.projectValue(value && value.x ? value.x : 0, labelAxisValueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - valueAxis.projectValue(value && value.y ? value.y : 0, valueIndex, data.normalized.series[seriesIndex])\n }\n }\n\n // If the label axis is a step based axis we will offset the bar into the middle of between two steps using\n // the periodHalfLength value. Also we do arrange the different series so that they align up to each other using\n // the seriesBarDistance. If we don't have a step axis, the bar positions can be chosen freely so we should not\n // add any automated positioning.\n if(labelAxis instanceof Chartist.StepAxis) {\n // Offset to center bar between grid lines, but only if the step axis is not stretched\n if(!labelAxis.options.stretch) {\n projected[labelAxis.units.pos] += periodHalfLength * (options.horizontalBars ? -1 : 1);\n }\n // Using bi-polar offset for multiple series if no stacked bars or series distribution is used\n projected[labelAxis.units.pos] += (options.stackBars || options.distributeSeries) ? 0 : biPol * options.seriesBarDistance * (options.horizontalBars ? -1 : 1);\n }\n\n // Enter value in stacked bar values used to remember previous screen value for stacking up bars\n previousStack = stackedBarValues[valueIndex] || zeroPoint;\n stackedBarValues[valueIndex] = previousStack - (zeroPoint - projected[labelAxis.counterUnits.pos]);\n\n // Skip if value is undefined\n if(value === undefined) {\n return;\n }\n\n var positions = {};\n positions[labelAxis.units.pos + '1'] = projected[labelAxis.units.pos];\n positions[labelAxis.units.pos + '2'] = projected[labelAxis.units.pos];\n\n if(options.stackBars && (options.stackMode === 'accumulate' || !options.stackMode)) {\n // Stack mode: accumulate (default)\n // If bars are stacked we use the stackedBarValues reference and otherwise base all bars off the zero line\n // We want backwards compatibility, so the expected fallback without the 'stackMode' option\n // to be the original behaviour (accumulate)\n positions[labelAxis.counterUnits.pos + '1'] = previousStack;\n positions[labelAxis.counterUnits.pos + '2'] = stackedBarValues[valueIndex];\n } else {\n // Draw from the zero line normally\n // This is also the same code for Stack mode: overlap\n positions[labelAxis.counterUnits.pos + '1'] = zeroPoint;\n positions[labelAxis.counterUnits.pos + '2'] = projected[labelAxis.counterUnits.pos];\n }\n\n // Limit x and y so that they are within the chart rect\n positions.x1 = Math.min(Math.max(positions.x1, chartRect.x1), chartRect.x2);\n positions.x2 = Math.min(Math.max(positions.x2, chartRect.x1), chartRect.x2);\n positions.y1 = Math.min(Math.max(positions.y1, chartRect.y2), chartRect.y1);\n positions.y2 = Math.min(Math.max(positions.y2, chartRect.y2), chartRect.y1);\n\n var metaData = Chartist.getMetaData(series, valueIndex);\n\n // Create bar element\n bar = seriesElement.elem('line', positions, options.classNames.bar).attr({\n 'ct:value': [value.x, value.y].filter(Chartist.isNumeric).join(','),\n 'ct:meta': Chartist.serialize(metaData)\n });\n\n this.eventEmitter.emit('draw', Chartist.extend({\n type: 'bar',\n value: value,\n index: valueIndex,\n meta: metaData,\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n chartRect: chartRect,\n group: seriesElement,\n element: bar\n }, positions));\n }.bind(this));\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n bounds: valueAxis.bounds,\n chartRect: chartRect,\n axisX: axisX,\n axisY: axisY,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new bar chart and returns API object that you can use for later changes.\n *\n * @memberof Chartist.Bar\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object that needs to consist of a labels and a series array\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object which exposes the API for the created chart\n *\n * @example\n * // Create a simple bar chart\n * var data = {\n * labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // In the global name space Chartist we call the Bar function to initialize a bar chart. As a first parameter we pass in a selector where we would like to get our chart created and as a second parameter we pass our data object.\n * new Chartist.Bar('.ct-chart', data);\n *\n * @example\n * // This example creates a bipolar grouped bar chart where the boundaries are limitted to -10 and 10\n * new Chartist.Bar('.ct-chart', {\n * labels: [1, 2, 3, 4, 5, 6, 7],\n * series: [\n * [1, 3, 2, -5, -3, 1, -6],\n * [-5, -2, -4, -1, 2, -3, 1]\n * ]\n * }, {\n * seriesBarDistance: 12,\n * low: -10,\n * high: 10\n * });\n *\n */\n function Bar(query, data, options, responsiveOptions) {\n Chartist.Bar.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating bar chart type in Chartist namespace\n Chartist.Bar = Chartist.Base.extend({\n constructor: Bar,\n createChart: createChart\n });\n\n}(this || global, Chartist));\n;/**\n * The pie chart module of Chartist that can be used to draw pie, donut or gauge charts\n *\n * @module Chartist.Pie\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in line charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Pie\n */\n var defaultOptions = {\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: 5,\n // Override the class names that are used to generate the SVG structure of the chart\n classNames: {\n chartPie: 'ct-chart-pie',\n chartDonut: 'ct-chart-donut',\n series: 'ct-series',\n slicePie: 'ct-slice-pie',\n sliceDonut: 'ct-slice-donut',\n sliceDonutSolid: 'ct-slice-donut-solid',\n label: 'ct-label'\n },\n // The start angle of the pie chart in degrees where 0 points north. A higher value offsets the start angle clockwise.\n startAngle: 0,\n // An optional total you can specify. By specifying a total value, the sum of the values in the series must be this total in order to draw a full pie. You can use this parameter to draw only parts of a pie or gauge charts.\n total: undefined,\n // If specified the donut CSS classes will be used and strokes will be drawn instead of pie slices.\n donut: false,\n // If specified the donut segments will be drawn as shapes instead of strokes.\n donutSolid: false,\n // Specify the donut stroke width, currently done in javascript for convenience. May move to CSS styles in the future.\n // This option can be set as number or string to specify a relative width (i.e. 100 or '30%').\n donutWidth: 60,\n // If a label should be shown or not\n showLabel: true,\n // Label position offset from the standard position which is half distance of the radius. This value can be either positive or negative. Positive values will position the label away from the center.\n labelOffset: 0,\n // This option can be set to 'inside', 'outside' or 'center'. Positioned with 'inside' the labels will be placed on half the distance of the radius to the border of the Pie by respecting the 'labelOffset'. The 'outside' option will place the labels at the border of the pie and 'center' will place the labels in the absolute center point of the chart. The 'center' option only makes sense in conjunction with the 'labelOffset' option.\n labelPosition: 'inside',\n // An interpolation function for the label value\n labelInterpolationFnc: Chartist.noop,\n // Label direction can be 'neutral', 'explode' or 'implode'. The labels anchor will be positioned based on those settings as well as the fact if the labels are on the right or left side of the center of the chart. Usually explode is useful when labels are positioned far away from the center.\n labelDirection: 'neutral',\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // If true empty values will be ignored to avoid drawing unncessary slices and labels\n ignoreEmptyValues: false\n };\n\n /**\n * Determines SVG anchor position based on direction and center parameter\n *\n * @param center\n * @param label\n * @param direction\n * @return {string}\n */\n function determineAnchorPosition(center, label, direction) {\n var toTheRight = label.x > center.x;\n\n if(toTheRight && direction === 'explode' ||\n !toTheRight && direction === 'implode') {\n return 'start';\n } else if(toTheRight && direction === 'implode' ||\n !toTheRight && direction === 'explode') {\n return 'end';\n } else {\n return 'middle';\n }\n }\n\n /**\n * Creates the pie chart\n *\n * @param options\n */\n function createChart(options) {\n var data = Chartist.normalizeData(this.data);\n var seriesGroups = [],\n labelsGroup,\n chartRect,\n radius,\n labelRadius,\n totalDataSum,\n startAngle = options.startAngle;\n\n // Create SVG.js draw\n this.svg = Chartist.createSvg(this.container, options.width, options.height,options.donut ? options.classNames.chartDonut : options.classNames.chartPie);\n // Calculate charting rect\n chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n // Get biggest circle radius possible within chartRect\n radius = Math.min(chartRect.width() / 2, chartRect.height() / 2);\n // Calculate total of all series to get reference value or use total reference from optional options\n totalDataSum = options.total || data.normalized.series.reduce(function(previousValue, currentValue) {\n return previousValue + currentValue;\n }, 0);\n\n var donutWidth = Chartist.quantity(options.donutWidth);\n if (donutWidth.unit === '%') {\n donutWidth.value *= radius / 100;\n }\n\n // If this is a donut chart we need to adjust our radius to enable strokes to be drawn inside\n // Unfortunately this is not possible with the current SVG Spec\n // See this proposal for more details: http://lists.w3.org/Archives/Public/www-svg/2003Oct/0000.html\n radius -= options.donut && !options.donutSolid ? donutWidth.value / 2 : 0;\n\n // If labelPosition is set to `outside` or a donut chart is drawn then the label position is at the radius,\n // if regular pie chart it's half of the radius\n if(options.labelPosition === 'outside' || options.donut && !options.donutSolid) {\n labelRadius = radius;\n } else if(options.labelPosition === 'center') {\n // If labelPosition is center we start with 0 and will later wait for the labelOffset\n labelRadius = 0;\n } else if(options.donutSolid) {\n labelRadius = radius - donutWidth.value / 2;\n } else {\n // Default option is 'inside' where we use half the radius so the label will be placed in the center of the pie\n // slice\n labelRadius = radius / 2;\n }\n // Add the offset to the labelRadius where a negative offset means closed to the center of the chart\n labelRadius += options.labelOffset;\n\n // Calculate end angle based on total sum and current data value and offset with padding\n var center = {\n x: chartRect.x1 + chartRect.width() / 2,\n y: chartRect.y2 + chartRect.height() / 2\n };\n\n // Check if there is only one non-zero value in the series array.\n var hasSingleValInSeries = data.raw.series.filter(function(val) {\n return val.hasOwnProperty('value') ? val.value !== 0 : val !== 0;\n }).length === 1;\n\n // Creating the series groups\n data.raw.series.forEach(function(series, index) {\n seriesGroups[index] = this.svg.elem('g', null, null);\n }.bind(this));\n //if we need to show labels we create the label group now\n if(options.showLabel) {\n labelsGroup = this.svg.elem('g', null, null);\n }\n\n // Draw the series\n // initialize series groups\n data.raw.series.forEach(function(series, index) {\n // If current value is zero and we are ignoring empty values then skip to next value\n if (data.normalized.series[index] === 0 && options.ignoreEmptyValues) return;\n\n // If the series is an object and contains a name or meta data we add a custom attribute\n seriesGroups[index].attr({\n 'ct:series-name': series.name\n });\n\n // Use series class from series data or if not set generate one\n seriesGroups[index].addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(index))\n ].join(' '));\n\n // If the whole dataset is 0 endAngle should be zero. Can't divide by 0.\n var endAngle = (totalDataSum > 0 ? startAngle + data.normalized.series[index] / totalDataSum * 360 : 0);\n\n // Use slight offset so there are no transparent hairline issues\n var overlappigStartAngle = Math.max(0, startAngle - (index === 0 || hasSingleValInSeries ? 0 : 0.2));\n\n // If we need to draw the arc for all 360 degrees we need to add a hack where we close the circle\n // with Z and use 359.99 degrees\n if(endAngle - overlappigStartAngle >= 359.99) {\n endAngle = overlappigStartAngle + 359.99;\n }\n\n var start = Chartist.polarToCartesian(center.x, center.y, radius, overlappigStartAngle),\n end = Chartist.polarToCartesian(center.x, center.y, radius, endAngle);\n\n var innerStart,\n innerEnd,\n donutSolidRadius;\n\n // Create a new path element for the pie chart. If this isn't a donut chart we should close the path for a correct stroke\n var path = new Chartist.Svg.Path(!options.donut || options.donutSolid)\n .move(end.x, end.y)\n .arc(radius, radius, 0, endAngle - startAngle > 180, 0, start.x, start.y);\n\n // If regular pie chart (no donut) we add a line to the center of the circle for completing the pie\n if(!options.donut) {\n path.line(center.x, center.y);\n } else if (options.donutSolid) {\n donutSolidRadius = radius - donutWidth.value;\n innerStart = Chartist.polarToCartesian(center.x, center.y, donutSolidRadius, startAngle - (index === 0 || hasSingleValInSeries ? 0 : 0.2));\n innerEnd = Chartist.polarToCartesian(center.x, center.y, donutSolidRadius, endAngle);\n path.line(innerStart.x, innerStart.y);\n path.arc(donutSolidRadius, donutSolidRadius, 0, endAngle - startAngle > 180, 1, innerEnd.x, innerEnd.y);\n }\n\n // Create the SVG path\n // If this is a donut chart we add the donut class, otherwise just a regular slice\n var pathClassName = options.classNames.slicePie;\n if (options.donut) {\n pathClassName = options.classNames.sliceDonut;\n if (options.donutSolid) {\n pathClassName = options.classNames.sliceDonutSolid;\n }\n }\n var pathElement = seriesGroups[index].elem('path', {\n d: path.stringify()\n }, pathClassName);\n\n // Adding the pie series value to the path\n pathElement.attr({\n 'ct:value': data.normalized.series[index],\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // If this is a donut, we add the stroke-width as style attribute\n if(options.donut && !options.donutSolid) {\n pathElement._node.style.strokeWidth = donutWidth.value + 'px';\n }\n\n // Fire off draw event\n this.eventEmitter.emit('draw', {\n type: 'slice',\n value: data.normalized.series[index],\n totalDataSum: totalDataSum,\n index: index,\n meta: series.meta,\n series: series,\n group: seriesGroups[index],\n element: pathElement,\n path: path.clone(),\n center: center,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n // If we need to show labels we need to add the label for this slice now\n if(options.showLabel) {\n var labelPosition;\n if(data.raw.series.length === 1) {\n // If we have only 1 series, we can position the label in the center of the pie\n labelPosition = {\n x: center.x,\n y: center.y\n };\n } else {\n // Position at the labelRadius distance from center and between start and end angle\n labelPosition = Chartist.polarToCartesian(\n center.x,\n center.y,\n labelRadius,\n startAngle + (endAngle - startAngle) / 2\n );\n }\n\n var rawValue;\n if(data.normalized.labels && !Chartist.isFalseyButZero(data.normalized.labels[index])) {\n rawValue = data.normalized.labels[index];\n } else {\n rawValue = data.normalized.series[index];\n }\n\n var interpolatedValue = options.labelInterpolationFnc(rawValue, index);\n\n if(interpolatedValue || interpolatedValue === 0) {\n var labelElement = labelsGroup.elem('text', {\n dx: labelPosition.x,\n dy: labelPosition.y,\n 'text-anchor': determineAnchorPosition(center, labelPosition, options.labelDirection)\n }, options.classNames.label).text('' + interpolatedValue);\n\n // Fire off draw event\n this.eventEmitter.emit('draw', {\n type: 'label',\n index: index,\n group: labelsGroup,\n element: labelElement,\n text: '' + interpolatedValue,\n x: labelPosition.x,\n y: labelPosition.y\n });\n }\n }\n\n // Set next startAngle to current endAngle.\n // (except for last slice)\n startAngle = endAngle;\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n chartRect: chartRect,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new pie chart and returns an object that can be used to redraw the chart.\n *\n * @memberof Chartist.Pie\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object in the pie chart needs to have a series property with a one dimensional data array. The values will be normalized against each other and don't necessarily need to be in percentage. The series property can also be an array of value objects that contain a value property and a className property to override the CSS class name for the series group.\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object with a version and an update method to manually redraw the chart\n *\n * @example\n * // Simple pie chart example with four series\n * new Chartist.Pie('.ct-chart', {\n * series: [10, 2, 4, 3]\n * });\n *\n * @example\n * // Drawing a donut chart\n * new Chartist.Pie('.ct-chart', {\n * series: [10, 2, 4, 3]\n * }, {\n * donut: true\n * });\n *\n * @example\n * // Using donut, startAngle and total to draw a gauge chart\n * new Chartist.Pie('.ct-chart', {\n * series: [20, 10, 30, 40]\n * }, {\n * donut: true,\n * donutWidth: 20,\n * startAngle: 270,\n * total: 200\n * });\n *\n * @example\n * // Drawing a pie chart with padding and labels that are outside the pie\n * new Chartist.Pie('.ct-chart', {\n * series: [20, 10, 30, 40]\n * }, {\n * chartPadding: 30,\n * labelOffset: 50,\n * labelDirection: 'explode'\n * });\n *\n * @example\n * // Overriding the class names for individual series as well as a name and meta data.\n * // The name will be written as ct:series-name attribute and the meta data will be serialized and written\n * // to a ct:meta attribute.\n * new Chartist.Pie('.ct-chart', {\n * series: [{\n * value: 20,\n * name: 'Series 1',\n * className: 'my-custom-class-one',\n * meta: 'Meta One'\n * }, {\n * value: 10,\n * name: 'Series 2',\n * className: 'my-custom-class-two',\n * meta: 'Meta Two'\n * }, {\n * value: 70,\n * name: 'Series 3',\n * className: 'my-custom-class-three',\n * meta: 'Meta Three'\n * }]\n * });\n */\n function Pie(query, data, options, responsiveOptions) {\n Chartist.Pie.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating pie chart type in Chartist namespace\n Chartist.Pie = Chartist.Base.extend({\n constructor: Pie,\n createChart: createChart,\n determineAnchorPosition: determineAnchorPosition\n });\n\n}(this || global, Chartist));\n\nreturn Chartist;\n\n}));\n","/* globals */\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport Chartist from 'chartist'\nimport moment from 'moment'\nimport css from 'bss'\n// const Loaded = sst.yslashn.either('Loaded')\n// const files = data.scoped( Loaded.N([]) )\nimport * as F from '../utils/financialsUtils'\nimport { money as makeMoney } from '../utils/regExes'\nconst milliperday = 1000*60*60*24\nconst spreader =\n\t(a, b, c) => R.mapObjIndexed((objVal, key) => objVal + a[key]/b, c)\n\nconst segmentSeries =\n\t({data, threshold, cumulative, nameappendage, className}) => {\n\t\tconst series = {}\n\t\tconst seriesdata = []\n\n\t\tif( cumulative ){\n\t\t\tR.reduce(\n\t\t\t\t(a, b) => {\n\t\t\t\t\tconst cumulativevalue =\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: b['x']\n\t\t\t\t\t\t\t,y: b['y'] + a['y']\n\t\t\t\t\t\t}\n\n\t\t\t\t\tseriesdata.push(cumulativevalue)\n\t\t\t\t\treturn cumulativevalue\n\t\t\t\t}\n\t\t\t\t,{x:0, y:0}\n\t\t\t\t,data\n\t\t\t)\n\t\t}\n\t\telse { seriesdata.push(data) }\n\n\t\tR.reduce(\n\t\t\t(v) => {\n\n\t\t\t\tconst transitionIndex =\n\t\t\t\t\tv.findIndex((value, i, a) =>\n\t\t\t\t\t\tvalue.y < threshold && i+1 <= a.length-1 && a[i+1].y >= threshold\n\t\t\t\t\t\t|| value.y > threshold && i+1 <= a.length-1 && a[i+1].y <= threshold\n\t\t\t\t\t)\n\n\t\t\t\tconst cutposition = transitionIndex + 1\n\n\t\t\t\tconst splitArray =\n\t\t\t\t\ttransitionIndex == -1\n\t\t\t\t\t? v\n\t\t\t\t\t: R.splitAt(cutposition, v)\n\n\t\t\t\tif( splitArray.length && v.length ){\n\t\t\t\t\tif( transitionIndex == -1 ){\n\t\t\t\t\t\tseries[Object.keys(series).length] = v\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tseries[Object.keys(series).length] = splitArray[0]\n\t\t\t\t\t\tseries[Object.keys(series).length] = [v[transitionIndex], v[transitionIndex+1]]\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn transitionIndex == -1 ? [] : splitArray[1]\n\t\t\t}\n\t\t\t,seriesdata\n\t\t\t,seriesdata\n\t\t)\n\n\t\treturn R.toPairs(series).map((a) => ({\n\t\t\tname: nameappendage+a[0]\n\t\t\t, data: a[1]\n\t\t\t, className\n\t\t}))\n\t}\n\n\nconst drawChart =\n\tfunction({fe, data, features}){\n\t\tconst labels = []\n\t\tconst sdata = data\n\t\tif( features().Charts && sdata && (sdata.chartdata || sdata.series)){\n\n\t\t\tconst series =\n\t\t\t\t(sdata.series || (sdata && [sdata]) || [])\n\t\t\t\t.map((os) => {\n\n\t\t\t\t\tconst actualChartData = []\n\t\t\t\t\tconst forecastChartData = []\n\n\t\t\t\t\tR.pipe(\n\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t(i) =>\n\t\t\t\t\t\t\t\tnew Date(\n\t\t\t\t\t\t\t\t\tR.prop('invoice_date', i)\n\t\t\t\t\t\t\t\t\t|| R.prop('allocations_allocation_date', i)\n\t\t\t\t\t\t\t\t\t|| R.prop('spreaddate', i)\n\t\t\t\t\t\t\t\t).getTime()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,R.mapObjIndexed((i, k, o) => {\n\n\t\t\t\t\t\t\tconst financialposition = F.financialReduce({items: i})\n\t\t\t\t\t\t\tconst date = new Date(Number(k)).getTime()\n\n\t\t\t\t\t\t\tactualChartData.push({\n\t\t\t\t\t\t\t\tx: date\n\t\t\t\t\t\t\t\t,y:\n\t\t\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t\t\t(sdata.ftypeActual || ['currentProfits'])\n\t\t\t\t\t\t\t\t\t\t.map((ft) => financialposition[ft])\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tforecastChartData.push({\n\t\t\t\t\t\t\t\tx: date\n\t\t\t\t\t\t\t\t,y:\n\t\t\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t\t\t(sdata.ftypeForecast || ['forecastedProfits'])\n\t\t\t\t\t\t\t\t\t\t.map((ft) => financialposition[ft])\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tif( Object.keys(o).length == 1 ){\n\n\t\t\t\t\t\t\t\tR.unfold(\n\t\t\t\t\t\t\t\t\t(n) => {\n\t\t\t\t\t\t\t\t\t\tconst vadd =\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tx: n.x - milliperday\n\t\t\t\t\t\t\t\t\t\t\t\t,y: 0\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tactualChartData.push(vadd)\n\t\t\t\t\t\t\t\t\t\tforecastChartData.push(vadd)\n\t\t\t\t\t\t\t\t\t\tlabels.unshift(vadd.x)\n\n\t\t\t\t\t\t\t\t\t\treturn n.x < date - 15*milliperday\n\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t: [ vadd, vadd ]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, R.last(actualChartData)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlabels.push(date)\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tx: date\n\t\t\t\t\t\t\t\t,y: financialposition\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)(\n\t\t\t\t\t\tR.sortBy(\n\t\t\t\t\t\t\t(i) =>\n\t\t\t\t\t\t\t\tnew Date(\n\t\t\t\t\t\t\t\t\tR.prop('invoice_date', i)\n\t\t\t\t\t\t\t\t\t|| R.prop('allocations_allocation_date', i)\n\t\t\t\t\t\t\t\t\t|| R.prop('spreaddate', i)\n\t\t\t\t\t\t\t\t).getTime()\n\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t(os && os.chartdata || [])\n\t\t\t\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\t\t\t\ti.invoice_date\n\t\t\t\t\t\t\t\t\t|| i.allocations_allocation_date\n\t\t\t\t\t\t\t\t\t? i\n\t\t\t\t\t\t\t\t\t: R.unfold(\n\t\t\t\t\t\t\t\t\t\t(n) => {\n\t\t\t\t\t\t\t\t\t\t\tconst vadd =\n\t\t\t\t\t\t\t\t\t\t\t\tR.mergeAll([\n\t\t\t\t\t\t\t\t\t\t\t\t\tn\n\t\t\t\t\t\t\t\t\t\t\t\t\t, spreader(i, (new Date(i.enddate).getTime()-new Date(i.startdate).getTime())/milliperday, R.clone(F.financialprops))\n\t\t\t\t\t\t\t\t\t\t\t\t\t, {spreaddate: new Date(new Date(n.spreaddate || i.startdate).getTime() + milliperday)}\n\t\t\t\t\t\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t\t\t\t\treturn new Date(n.spreaddate).getTime() > new Date(i.enddate).getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t: [ vadd, vadd ]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, i\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tadata: R.sortBy(R.prop('x'), actualChartData)\n\t\t\t\t\t\t, fdata: R.sortBy(R.prop('x'), forecastChartData)\n\t\t\t\t\t\t, bdata: data\n\t\t\t\t\t\t, name: os.chartname || os.contractrecognitionname\n\t\t\t\t\t}\n\t\t\t\t})\n\n\n\t\t\tconst addColours =\n\t\t\t\t(context) => {\n\t\t\t\t\tconst defaultv = {y:0, x: 0}\n\t\t\t\t\tconst threshold = fe.odinsum.currentRevenue*(fe.tp()/100)\n\t\t\t\t\tconst sortedValues = R.sortBy(R.prop('y'), context.values || [{x:0, y:0}])\n\t\t\t\t\tconst high = (R.last(sortedValues) || defaultv).y\n\t\t\t\t\tconst low = (sortedValues[0] || defaultv).y\n\t\t\t\t\tif(context.type == 'point' || context.type == 'line'){\n\t\t\t\t\t\tcontext.element.attr({\n\t\t\t\t\t\t\tstyle: 'stroke: hsl('\n\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\tcontext.type == 'line'\n\t\t\t\t\t\t\t\t\t&& (low < threshold && high >= threshold\n\t\t\t\t\t\t\t\t\t|| low > threshold && high <= threshold)\n\t\t\t\t\t\t\t\t\t? '0, 0%, 50%);'\n\t\t\t\t\t\t\t\t\t: Math.min(\n\t\t\t\t\t\t\t\t\t\tMath.max(\n\t\t\t\t\t\t\t\t\t\t\tMath.floor(\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.type == 'line'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? high\n\t\t\t\t\t\t\t\t\t\t\t\t\t: Chartist.getMultiValue(context.value)\n\t\t\t\t\t\t\t\t\t\t\t\t) * ( high > threshold ? 1 : 0.75) / threshold * 100\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, 0\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, 100\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ ', 50%, 50%);'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tconst getChartData =\n\t\t\t\t({labels, series}) => {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabels: R.sort((a,b)=> a-b, R.uniq(labels))\n\t\t\t\t\t\t,series:\n\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\tseries.map(({adata, fdata, bdata}) =>\n\t\t\t\t\t\t\t\t\tsegmentSeries({\n\t\t\t\t\t\t\t\t\t\tdata: adata\n\t\t\t\t\t\t\t\t\t\t, threshold:\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\tbdata.currentRevenue\n\t\t\t\t\t\t\t\t\t\t\t\t|| bdata.currentRevenue == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? bdata.currentRevenue\n\t\t\t\t\t\t\t\t\t\t\t\t: fe.odinsum.currentRevenue\n\t\t\t\t\t\t\t\t\t\t\t)*(fe.tp()/100)\n\t\t\t\t\t\t\t\t\t\t, cumulative: true\n\t\t\t\t\t\t\t\t\t\t, nameappendage: 'actual'\n\t\t\t\t\t\t\t\t\t\t, className: `.ct-series-a .ct-line`\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\tsegmentSeries({\n\t\t\t\t\t\t\t\t\t\t\tdata: fdata\n\t\t\t\t\t\t\t\t\t\t\t, threshold:\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tbdata.forecastedRevenue\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| bdata.forecastedRevenue == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? bdata.forecastedRevenue\n\t\t\t\t\t\t\t\t\t\t\t\t\t: fe.odinsum.forecastedRevenue\n\t\t\t\t\t\t\t\t\t\t\t\t)*(fe.tp()/100)\n\t\t\t\t\t\t\t\t\t\t\t, cumulative: true\n\t\t\t\t\t\t\t\t\t\t\t, nameappendage: 'forecast'\n\t\t\t\t\t\t\t\t\t\t\t, className: `ct-dash`\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.filter(R.pipe(R.prop('data'), R.prop('length')))\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tconst makeSingleChart =\n\t\t\t\t({series, width, index}) => {\n\t\t\t\t\tconst chartname = R.unnest(series.map(R.propOr('','name')))\n\t\t\t\t\treturn m(\n\t\t\t\t\t\t\t'.ct-chart'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tmax-height: 30em;\n\t\t\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tkey: width + (fe.schedule_version_id || fe.id)\n\t\t\t\t\t\t\t\t,oncreate({ dom }){\n\t\t\t\t\t\t\t\t\tlet tvalue = null\n\t\t\t\t\t\t\t\t\tconst x =\n\t\t\t\t\t\t\t\t\t\tgetChartData({\n\t\t\t\t\t\t\t\t\t\t\tlabels\n\t\t\t\t\t\t\t\t\t\t\t,series\n\t\t\t\t\t\t\t\t\t\t})\n\n\n\t\t\t\t\t\t\t\t\tconst feChart =\n\t\t\t\t\t\t\t\t\t\tnew Chartist.Line(\n\t\t\t\t\t\t\t\t\t\t\tdom\n\t\t\t\t\t\t\t\t\t\t\t,{ labels: x.labels, series: x.series}\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\twidth: '100%'\n\t\t\t\t\t\t\t\t\t\t\t\t,height: '24em'\n\t\t\t\t\t\t\t\t\t\t\t\t,chartPadding: 0\n\t\t\t\t\t\t\t\t\t\t\t\t,fullWidth: true\n\t\t\t\t\t\t\t\t\t\t\t\t,showPoint: false\n\t\t\t\t\t\t\t\t\t\t\t\t,lineSmooth: true\n\t\t\t\t\t\t\t\t\t\t\t\t,axisX: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowGrid: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,showLabel: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,scaleMinSpace: 50\n\t\t\t\t\t\t\t\t\t\t\t\t\t,labelInterpolationFnc: function(value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst t = moment( value ).format(\"ll\")\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderyear =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttvalue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& new Date(value).getYear()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!= new Date(tvalue).getYear()\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttvalue = value\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn renderyear\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: t.split(',')[0]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,type: Chartist.AutoScaleAxis\n\t\t\t\t\t\t\t\t\t\t\t\t\t,offset: 60\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,axisY: {\n\t\t\t\t\t\t\t\t\t\t\t\t\toffset: 60\n\t\t\t\t\t\t\t\t\t\t\t\t\t,showGrid: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,scaleMinSpace: 20\n\t\t\t\t\t\t\t\t\t\t\t\t\t,labelInterpolationFnc: function(value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn makeMoney( value, true );\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,type: Chartist.AutoScaleAxis\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t!fe.chartElements\n\t\t\t\t\t\t\t\t\t? fe.chartElements = [feChart]\n\t\t\t\t\t\t\t\t\t: fe.chartElements.push(feChart)\n\n\t\t\t\t\t\t\t\t\tfeChart.on('draw', addColours);\n\n\t\t\t\t\t\t\t\t\treturn fe.chartElements[index]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,m(`p.v-btm`, chartname.join(' | '))\n\t\t\t\t\t)\n\t\t\t\t}\n\n\n\t\t\tfe.chart =\n\t\t\t\t({width}) =>\n\t\t\t\t\tm('div'\n\t\t\t\t\t\t,(!fe.split ? [series] : series)\n\t\t\t\t\t\t.map((s, i) => makeSingleChart({series: fe.split ? [s] : s, width, index: i}))\n\t\t\t\t\t)\n\n\t\t\t// should the creaion part be in the else?\n\t\t\tif( fe.chartElements ){\n\t\t\t\tfe.chartElements.forEach((fec, i) => {\n\t\t\t\t\tif (series[i]){\n\t\t\t\t\t\tconst x =\n\t\t\t\t\t\tgetChartData({\n\t\t\t\t\t\t\tlabels\n\t\t\t\t\t\t\t,series: [ series[i] ]\n\t\t\t\t\t\t})\n\n\n\t\t\t\t\t\tfec.update( x )\n\t\t\t\t\t\tfec.on('draw', addColours);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tm.redraw()\n\n\t\t}\n\n\n\t\treturn !features().Charts ? m('div', ) : fe.chart\n\t}\n\n\nexport default drawChart","/* globals window, clearInterval, setInterval*/\nimport m from 'bacta'\nimport css from 'bss'\nimport * as elements from '../components/elements'\n\nfunction Main({\n\tattrs: {\n\t\tdata\n\t\t,oauths\n\t\t,saving\n\t}\n}){\n\n\tconst settings = m.prop([])\n\tconst selected = m.prop({})\n\tconst connected = {}\n\n\tconst oauthIndex = {\n\t\tXero: {\n\t\t\tsettingsView:\n\t\t\t\t(data, api) =>\n\t\t\t\t\tm(''+css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,{}\n\t\t\t\t\t\t,data().map((d) =>\n\t\t\t\t\t\t\tm(''+css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-auto-flow: row;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('', d.tenantName)\n\t\t\t\t\t\t\t\t,elements.checkbox(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t\t\t, (c) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\tsaving(true)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn api.xero.xero_tenants_import({...d, imports: c })\n\t\t\t\t\t\t\t\t\t\t\t\t\t.then( () => oauthIndex.Xero.settingsFetch().then(settings) )\n\t\t\t\t\t\t\t\t\t\t\t\t\t.then( m.redraw )\n\t\t\t\t\t\t\t\t\t\t\t\t\t.then( () => saving(false) )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,checked: d.imports\n\t\t\t\t\t\t\t\t\t\t,title: `Import data from your organization to ` + d.tenantName\n\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\t\"justify-content\": \"center\"\n\t\t\t\t\t\t\t\t\t\t\t,\"text-align\": \"center\"\n\t\t\t\t\t\t\t\t\t\t\t,\"height\": '1.5em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,disabled: saving()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t,settingsFetch: data && data.api.xero.xero_tenants_fetch\n\t\t\t\t,authsFetch: data && data.api.xero.xero_auths_fetch\n\t\t}\n\t}\n\n\n\tconst authfetch =\n\t\t(k) => {\n\t\t\tconst o = oauthIndex[k]\n\t\t\treturn o.authsFetch()\n\t\t\t.then((res) => {\n\t\t\t\tconst og = oauths.find((o) => o.name == k)\n\t\t\t\tconnected[o.name] = Number(res.auth_count)\n\t\t\t\tif( connected[o.name] ){\n\t\t\t\t\tclearInterval(og.authpoll)\n\t\t\t\t\treturn o.settingsFetch().then(settings).then( m.redraw ).then(() => connected[o.name])\n\t\t\t\t} else {\n\t\t\t\t\treturn connected[o.name]\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\n\tif( data ) {\n\t\tdata.initiateContractFetch\n\t\t.map((s) => {\n\t\t\tif( s.ochange ){\n\t\t\t\treturn Promise.all(Object.keys(oauthIndex).map( authfetch ))\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn s.ochange\n\t\t\t}\n\t\t})\n\t}\n\n\tfunction view({\n\t\tattrs\n\t}){\n\t\t\tconst {\n\t\t\t\tdata\n\t\t\t\t,oauths\n\t\t\t} = attrs\n\n\t\t\treturn m(''\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t--background-color: rgba(0,0,0,0.1);\n\t\t\t\t\t--justify-content: start;\n\t\t\t\t\t--max-width: max-content;\n\t\t\t\t\ttransition: opacity 0.2s;\n\t\t\t\t\tborder-radius: 4px\n\t\t\t\t\tuser-select: none;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\ttransform: translateY(1px);\n\t\t\t\t\tpadding-bottom: 3em;\n\t\t\t\t\tz-index: 1;\n\t\t\t\t`\n\t\t\t\t.$hover(\n\t\t\t\t\t`opacity: 0.8;`\n\t\t\t\t)\n\t\t\t\t,{\n\t\t\t\t\tonremove(){\n\t\t\t\t\t\toauths.map((k) => k.authpoll ? clearInterval(k.authpoll) : null )\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,m('h1' + css`\n\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tgap: 4em;\n\t\t\t\t\t`\n\t\t\t\t\t, 'Connect to'\n\t\t\t\t)\n\t\t\t\t,m('' + css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t,oauths.map((o) =>\n\t\t\t\t\t\tm('button'\n\t\t\t\t\t\t\t+ css(`\n\t\t\t\t\t\t\t\tbackground-color: rgba(0,0,0,0);\n\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\toutline: none;\n\t\t\t\t\t\t\t\tpadding: 6px 12px\n\t\t\t\t\t\t\t\tmax-width: 6em;\n\t\t\t\t\t\t\t\tmax-height: 2.4em;\n\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\tborder: solid 1px #3380c2;\n\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\ttextDecoration: underline;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\tgap: 3em;\n\t\t\t\t\t\t\t` + (o.name == selected().name ? 'border-width: 0.2rem;' : '')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t...attrs\n\t\t\t\t\t\t\t\t, async onclick () {\n\n\t\t\t\t\t\t\t\t\tselected(o)\n\n\t\t\t\t\t\t\t\t\tif( !connected[o.name] ){\n\t\t\t\t\t\t\t\t\t\tconst res = await authfetch(o.name)\n\t\t\t\t\t\t\t\t\t\tif( !res ){\n\t\t\t\t\t\t\t\t\t\t\tconst {state} = await data.api.request('POST', '/integrations/xero/authorize')\n\t\t\t\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t\t\t\t'/api/integrations/xero/authorize?' + new window.URLSearchParams({ state })\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\tclearInterval(o.authpoll)\n\t\t\t\t\t\t\t\t\t\t\to.authpoll = setInterval(() => authfetch(o.name), 5000)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tsettings(await oauthIndex.Xero.settingsFetch())\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,o.name\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,selected && selected().name\n\t\t\t\t\t? oauthIndex[selected().name].settingsView(settings, data.api)\n\t\t\t\t\t: m('','')\n\t\t\t)\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\nexport default Main","/* globals setTimeout, document, process */\n/* eslint-disable no-var, complexity, max-len */\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport Pencil from '../components/pencil'\nimport DropdownButton from '../components/buttonDropdown'\nimport HarthUppy from '../components/harth-uppy'\nimport scrollableTable from '../components/scrollableTable'\nimport {identical} from '../utils/harth-identical'\nimport humanList from '../utils/human_list'\nimport NumberInput from '../components/number'\nimport m from 'bacta'\nimport css from 'bss'\nimport * as H from '../../../how/index.js'\nimport * as elements from '../components/elements'\nimport Responsive from '../components/responsive'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\nimport autocomplete from './autocomplete'\nimport InitialProjectView from './projects-initial'\nimport Promise from 'bluebird'\nimport * as R from 'ramda';\nimport byProp from '../utils/byProp'\nimport Permissions from '../models/permissions'\nimport ProjectDocument from '../models/project_documents'\nimport { money as makeMoney } from '../utils/regExes'\nimport * as uuid from 'uuid'\nimport drawChart from '../components/harth-chartist'\nimport OAuthConnector from '../components/oauthConnector'\nimport * as modalStack from '../components/modal-stack'\n// import Permissions from '../models/permissions'\nimport moment from 'moment'\nconst milliperday = 1000*60*60*24\nconst aMonth = 1000*60*60*24*28\n\nconst nullUser = {\n\tuser_id: m.prop(null)\n\t, user_username: m.prop('Unassigned')\n\t, usersFullName: 'Unassigned'\n\t, contractrecognitionname: 'Unassigned'\n\t, contractrecognitionid: null\n}\nimport { prop } from '../../../stream'\n\nconst exposer = (prop) =>\n\ttypeof prop == 'function'\n\t\t? R.call(prop)\n\t\t: R.identity(prop)\n\nconst checkprop = (a, b, c) =>\n\tc[a] && b && c[a][b]\n\t\t? typeof c[a][b] == 'function'\n\t\t\t? c[a][b]()\n\t\t\t: c[a][b]\n\t\t: typeof c[a] == 'function'\n\t\t\t? c[a]()\n\t\t\t: c[a]\n\nconst documentLabel = (project_documents, doc) =>\n\tm('label', 'Label'\n\t\t,m('input.validate',\n\t\t\t{ required: true\n\t\t\t, style:\n\t\t\t\t\t{ padding: '0.2em' }\n\t\t\t, placeholder: 'My document'\n\t\t\t, value: doc.project_documents_label\n\t\t\t, oninput: e => {\n\t\t\t\t\tconst project_documents_label = e.target.value\n\t\t\t\t\tconst validationMessage = e.target.validationMessage\n\t\t\t\t\tconst errors = R.merge(doc.errors, {\n\t\t\t\t\t\tproject_documents_label: validationMessage\n\t\t\t\t\t\t\t? doc.defaultErrors.project_documents_label\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t})\n\n\t\t\t\tproject_documents(\n\t\t\t\t\tproject_documents().map(\n\t\t\t\t\t\tx => x.project_documents_id\n\t\t\t\t\t\t\t== doc.project_documents_id\n\t\t\t\t\t\t? R.merge(x, { project_documents_label, errors })\n\t\t\t\t\t\t: x\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}\n\t\t\t}\n\t\t),\n\t)\n\nconst documentLink = (project_documents, doc) =>\n\tm('label', 'Document Link'\n\t\t,m('input.validate',\n\t\t\t{ required: true\n\t\t\t, style:\n\t\t\t\t{ padding: '0.2em' }\n\t\t\t, type: 'url'\n\t\t\t, pattern: \"https://.+\"\n\t\t\t, placeholder: 'https://box.com/yourdoc.pdf'\n\t\t\t, oninput: e => {\n\t\t\t\t\tconst project_documents_href = e.target.value\n\t\t\t\t\tconst validationMessage = e.target.validationMessage\n\t\t\t\t\tconst errors = R.merge(doc.errors, {\n\t\t\t\t\t\tproject_documents_href: validationMessage\n\t\t\t\t\t\t\t? doc.defaultErrors.project_documents_href\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t})\n\t\t\t\t\tproject_documents(\n\t\t\t\t\t\tproject_documents().map(\n\t\t\t\t\t\t\tx =>\n\t\t\t\t\t\t\t\tx.project_documents_id == doc.project_documents_id\n\t\t\t\t\t\t\t? R.merge(x, { project_documents_href, errors })\n\t\t\t\t\t\t\t: x\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t}\n\t\t\t, value: doc.project_documents_href\n\t\t\t, title: 'https://box.com/yourdoc.pdf'\n\t\t\t}\n\t\t),\n\t)\n\nconst documentCheckbox = (project_documents, doc) =>\n\tm('div.checkbox',\n\t\tm('label', [\n\t\t\tm('input[type=checkbox].checkbox-size'\n\t\t\t\t, Object.assign(\n\t\t\t\t\t{ checked: doc.project_documents_is_deliverable\n\t\t\t\t\t, onchange: m.withAttr('checked',\n\t\t\t\t\t\tproject_documents_is_deliverable =>\n\t\t\t\t\t\t\tproject_documents(\n\t\t\t\t\t\t\t\tproject_documents().map(\n\t\t\t\t\t\t\t\t\tx =>\n\t\t\t\t\t\t\t\t\t\tx.project_documents_id\n\t\t\t\t\t\t\t\t\t\t\t== doc.project_documents_id\n\t\t\t\t\t\t\t\t\t? R.merge(\n\t\t\t\t\t\t\t\t\t\tx, { project_documents_is_deliverable }\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: x\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t,'Deliverable'\n\t\t])\n\t)\n\nconst documentWarningList = doc =>\n\t[\n\t\tObject.values(doc.errors).filter(Boolean).map(\n\t\t\terr => m('li', err)\n\t\t)\n\t]\n\t.map(\n\t\txs => xs.length\n\t\t\t? elements.alert('warning', [\n\t\t\t\tm('ul.list', xs)\n\t\t\t])\n\t\t\t: null\n\t)\n\t.shift()\n\nconst documentSaveCancel = ({ doc, project_documents, editing }) =>\n\telements.list([\n\t\tm('button.btn.btn-secondary',\n\t\t\t{ onclick: () => {\n\t\t\t\tediting(false)\n\t\t\t\tproject_documents(\n\t\t\t\t\tproject_documents().filter(\n\t\t\t\t\t\tx => x.project_documents_id\n\t\t\t\t\t\t\t!= doc.project_documents_id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}\n\t\t\t, type: 'button'\n\t\t\t,style:\n\t\t\t{ position: 'relative'\n\t\t\t, fontSize: '0.9em'\n\t\t\t, padding: '0.2em 0.5em'\n\t\t\t}\n\t\t\t}\n\t\t\t, doc.project_documents_href ? 'Remove' : 'Discard'\n\t\t)\n\t\t,m('button.btn.btn-primary',\n\t\t\t{ onclick: e => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopImmediatePropagation()\n\t\t\t\tediting(false)\n\t\t\t}\n\t\t\t,style:\n\t\t\t{ position: 'relative'\n\t\t\t, fontSize: '0.9em'\n\t\t\t, padding: '0.2em 0.5em'\n\t\t\t}\n\t\t\t, disabled:\n\t\t\t\tObject.values(doc.errors).filter(Boolean).length > 0\n\t\t\t, type: 'button'\n\t\t\t}\n\t\t\t, 'Confirm'\n\t\t)\n\t])\n\nconst mergeInDocumentValidationProps = x =>\n\t[x]\n\t.map(\n\t\tR.merge({\n\t\t\tdefaultErrors:\n\t\t\t\t{ project_documents_href:\n\t\t\t\t\t\t'Document link should be a valid https path.'\n\t\t\t\t, project_documents_label:\n\t\t\t\t\t'Document label is a required field.'\n\t\t\t\t}\n\t\t})\n\t)\n\t.map(\n\t\tdoc => R.merge({\n\t\t\terrors:\n\t\t\t\t{ project_documents_href:\n\t\t\t\t\tdoc.project_documents_href\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: doc.defaultErrors.project_documents_href\n\t\t\t\t, project_documents_label:\n\t\t\t\t\tdoc.project_documents_label\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: doc.defaultErrors.project_documents_label\n\t\t\t\t}\n\t\t}, doc)\n\t)\n\t.shift()\n\nconst editProjectDocuments = (project_documents) =>\n\tm('div.db'\n\t\t,elements.list([\n\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t{ style:\n\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t, height: '2.9em'\n\t\t\t\t\t, width: '5em'\n\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t, textDecoration: 'underline'\n\t\t\t\t\t// , fontSize: '0.9em'\n\t\t\t\t\t// , padding: '0.2em 0.5em'\n\t\t\t\t\t}\n\t\t\t\t\t,onclick: () => project_documents(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{ project_documents_href: ''\n\t\t\t\t\t\t\t, project_documents_label: ''\n\t\t\t\t\t\t\t, project_documents_is_deliverable: false\n\t\t\t\t\t\t\t, project_documents_id: uuid.v4()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.concat( project_documents() )\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t, 'Add'\n\t\t\t)\n\t\t\t,m('label.dib.control-label', 'Project Links')\n\t\t])\n\t\t,project_documents().find( x => !x.project_documents_href )\n\t\t\t&& elements.alert(\n\t\t\t\t'warning', 'Unconfirmed documents will be lost on Save'\n\t\t\t)\n\t\t,project_documents()\n\t\t\t.map( mergeInDocumentValidationProps )\n\t\t\t.map(\n\t\t\t\tdoc =>\n\t\t\t\t\tm('div',\n\t\t\t\t\t\t{ key: doc.project_documents_id },\n\t\t\t\t\t\tPencil(\n\t\t\t\t\t\t\t() => doc.project_documents_href\n\t\t\t\t\t\t\t\t? ProjectDocument.toVTree(doc)\n\t\t\t\t\t\t\t\t: 'Untitled Document (Unconfirmed)'\n\t\t\t\t\t\t\t,editing => elements.list([\n\t\t\t\t\t\t\t\t\tm('form'\n\t\t\t\t\t\t\t\t\t\t,m('.hth-input-grid',\n\t\t\t\t\t\t\t\t\t\t\t{ style:\n\t\t\t\t\t\t\t\t\t\t\t\t{ display: 'grid'\n\t\t\t\t\t\t\t\t\t\t\t\t, 'gridTemplateColumns': '1fr 1fr'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,documentLabel( project_documents, doc )\n\t\t\t\t\t\t\t\t\t\t\t,documentLink( project_documents, doc )\n\t\t\t\t\t\t\t\t\t\t\t,documentCheckbox( project_documents, doc )\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,documentWarningList( doc )\n\t\t\t\t\t\t\t\t\t\t,documentSaveCancel({\n\t\t\t\t\t\t\t\t\t\t\tproject_documents\n\t\t\t\t\t\t\t\t\t\t\t, doc\n\t\t\t\t\t\t\t\t\t\t\t, editing\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, { toggleable: true }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t)\n\n/*\n\tIntent: Functions that help the user do what they want to do...\n*/\n\nfunction Intent(model){\n\n\tfunction fetchOrganizationsDisciplines(){\n\t\treturn model.data.fetchOrganizationsDisciplines({})\n\t\t\t.then(model.organizations_disciplines)\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction fetchAllocations(){\n\t\tif (model.data.schedule_id() != null){\n\t\t\tconst schedule_index =\n\t\t\t\tR.findIndex(\n\t\t\t\t\tR.propEq('schedule_id', model.data.schedule_id())\n\t\t\t\t\t, model.data.schedules()\n\t\t\t\t)\n\n\t\t\tif (schedule_index != -1 ){\n\n\t\t\t\tconst most_recent_version = R.sortBy(\n R.prop(\"schedule_version_created\"),\n model.data.schedules()[schedule_index].schedule_versions\n )\n\n\t\t\t\tconst LatestVerionIndex = most_recent_version.length - 1\n\n\t\t\t\tconst schedule_version_id =\n\t\t\t\t\tmodel.data.selectedVersion().schedule_version_id\n\t\t\t\t\t|| most_recent_version[LatestVerionIndex].schedule_version_id\n\n\t\t\t\tconst project_id =\n\t\t\t\t\t!model.form().project.project_id\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: model.form().project.project_id()\n\n\t\t\t\tif ( project_id ){\n\t\t\t\t\treturn model.data\n\t\t\t\t\t.fetchAllocationsbyProjectAndScheduleVersion({\n\t\t\t\t\t\tproject_id: project_id\n\t\t\t\t\t\t, schedule_version_id: schedule_version_id\n\t\t\t\t\t\t, breadth: [\n\t\t\t\t\t\t\t'allocations_vars'\n\t\t\t\t\t\t\t,'allocations_nods'\n\t\t\t\t\t\t\t,'allocations_eots'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\tallocations: [\n\t\t\t\t\t\t\t\t'allocations_work_name'\n\t\t\t\t\t\t\t\t,'allocations_completion_comments'\n\t\t\t\t\t\t\t\t,'allocations_allocation_date'\n\t\t\t\t\t\t\t\t,'allocation_id'\n\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list.map(\n\t\t\t\t\t\t\tfunction(a){\n\n\t\t\t\t\t\t\t\tconst maxLENGTH =\n\t\t\t\t\t\t\t\t\t25\n\n\t\t\t\t\t\t\t\tconst workname =\n\t\t\t\t\t\t\t\t\ta.allocations_work_name()\n\n\t\t\t\t\t\t\t\tconst thiscomment =\n\t\t\t\t\t\t\t\t\t!a.allocations_completion_comments()\n\n\t\t\t\t\t\t\t\tconst sliceINDEX =\n\t\t\t\t\t\t\t\t\tworkname.length > maxLENGTH\n\t\t\t\t\t\t\t\t\t\t? workname.indexOf(\" \", maxLENGTH)\n\t\t\t\t\t\t\t\t\t\t: workname.length\n\n\t\t\t\t\t\t\t\tconst workdisplay =\n\t\t\t\t\t\t\t\t\tworkname.slice(0, sliceINDEX)\n\n\t\t\t\t\t\t\t\tconst commentREF =\n\t\t\t\t\t\t\t\t\tmoment(a.allocations_allocation_date()).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t+ ': (' + workdisplay + ') '\n\n\t\t\t\t\t\t\t\ta.allocations_completion_comments(\n\t\t\t\t\t\t\t\t\tthiscomment\n\t\t\t\t\t\t\t\t\t\t? a.allocations_completion_comments()\n\t\t\t\t\t\t\t\t\t\t: commentREF\n\t\t\t\t\t\t\t\t\t\t+ a.allocations_completion_comments()\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\treturn a\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.then( R.tap(model.allocations))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tlist => list\n\t\t\t\t\t\t\t.filter(a => a.allocations_completion_comments() )\n\t\t\t\t\t)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tR.sortBy( (a) => a.allocations_allocation_date() )\n\t\t\t\t\t)\n\t\t\t\t\t.then(m.redraw)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.resolve([])\n\t}\n\n\tfunction fetchProjects(params){\n\t\treturn model.data.fetchProjectsBySchedule(\n\t\t\tR.merge(\n\t\t\t\t{\n\t\t\t\t\tschedule_id: model.schedule_id()\n\t\t\t\t\t,completedProjects: model.completedProjects()\n\t\t\t\t}\n\t\t\t\t,params\n\t\t\t)\n\t\t)\n\t\t.then( resetView )\n\t}\n\n\tfunction fetchProjectTemplates(){\n\t\treturn model.data.fetchProjectsBySchedule({\n\t\t\tschedule_id: model.schedule_id()\n\t\t\t,completedProjects: null\n\t\t\t,gettemplates: true\n\t\t})\n\t\t.then((res) =>\n\t\t\tmodel.projectTemplates(\n\t\t\t\tres.concat(\n\t\t\t\t\tR.merge(\n\t\t\t\t\t\tmodel.resetPForm()\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tproject_name: m.prop('Custom')\n\t\t\t\t\t\t\t,custom: true\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t\t.then( m.redraw )\n\t}\n\n\tfunction resetView(projectList, state){\n\n\t\tconst comparisonProp =\n\t\t\tmodel.form().project.project_id\n\t\t\t&& model.form().project.project_id()\n\t\t\t? 'project_id'\n\t\t\t: 'project_name'\n\n\t\tmodel.projects(\n\t\t\tR.uniqBy(\n\t\t\t\t(c) => checkprop('project_id', null, c)\n\t\t\t\t,R.sort(\n\t\t\t\t\tR.descend(R.prop('__requestedAt'))\n\t\t\t\t\t,[].concat(\n\t\t\t\t\t\tprojectList.filter((p) =>\n\t\t\t\t\t\t\t(model.completedProjects() == 'inprogress' && !p.project_completion_marker())\n\t\t\t\t\t\t\t|| (model.completedProjects() != 'inprogress' && p.project_completion_marker())\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,model.projects()\n\t\t\t\t\t\t.filter((p) =>\n\t\t\t\t\t\t\tp.schedule_id() == model.data.selectedVersion().schedule_id\n\t\t\t\t\t\t\t&& !projectList.find((np) => np.project_id() == p.project_id())\n\t\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t\tmodel.completedProjects() == 'inprogress'\n\t\t\t\t\t\t\t\t\t? !checkprop('project_completion_marker', null, p)\n\t\t\t\t\t\t\t\t\t: checkprop('project_completion_marker', null, p)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\tconst newProject =\n\t\t\tmodel.form().project.project_id\n\t\t\t&& !model.onProjectList()\n\t\t\t\t? projectList.find((p) =>\n\t\t\t\t\tcheckprop(comparisonProp, null, p)\n\t\t\t\t\t== checkprop(comparisonProp, null, model.form().project)\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\tif(\n\t\t\tnewProject\n\t\t\t&& (\n\t\t\t\t!model.form().project['__requestedAt']\n\t\t\t\t|| newProject['__requestedAt']\n\t\t\t\t>= model.form().project['__requestedAt']\n\t\t\t)\n\t\t){\n\t\t\tmodel.checkMultipleProjects([])\n\t\t\tmodel.checkMultiple().data = []\n\t\t\tmodel.contractPatchIndex({})\n\t\t\tmodel.checkMultipleProjectExtras().data = []\n\t\t\tmodel.discipline_vm({})\n\t\t\tmodel.vm( newProject )\n\t\t\tmodel.checkMultipleProjects().push( newProject )\n\t\t\tmodel.cloningProject(false, true)\n\t\t\tmodel.masterLIST(true)\n\t\t\tmodel.masterPELIST(true)\n\t\t\tmodel.fetchedExtras(false)\n\t\t\t// used to bump the project extras fetch and update the new saved and returned object\n\t\t\t// IF we are on the project extras tab\n\t\t\tmodel.activeTab(model.activeTab())\n\t\t\tmodel.edit(true)\n\t\t}\n\n\t\tif ( !model.metaDataLoading() || state && state.forcereq){\n\t\t\tmodel.form().project.project_id\n\t\t\t\t? model.data.routeids({\n\t\t\t\t\trouteids:\n\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\tnewProject\n\t\t\t\t\t\t\t? newProject.disciplines\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t, model.form().project\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(R.prop('contractrecognitionid'))\n\t\t\t\t\t,getledgers: true\n\t\t\t\t\t,ledgerdetails: true\n\t\t\t\t\t,getmatdata: true\n\t\t\t\t\t,specificproject: [model.form().project.project_id()]\n\t\t\t\t})\n\t\t\t\t: model.data.routeids({\n\t\t\t\t\trouteids: model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t,getledgers: false\n\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t,specificproject: model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t})\n\t\t}\n\n\t\tmodel.newUser(false)\n\n\t\treturn true\n\t}\n\n\tfunction deleteProjectContacts(){\n\t\treturn model.deleteProjectContacts().length\n\t\t? model.api.project_contacts.remove.many(model.deleteProjectContacts())\n\t\t: Promise.resolve([])\n\t}\n\n\tfunction deletetInvoices(){\n\t\treturn Promise.all(\n\t\t\tObject.keys(model.deleteInvoiceItemsHash())\n\t\t\t.map((t) => model.api.invoices.itemsremove.one(t))\n\t\t)\n\t\t.then(() => {\n\t\t\treturn Promise.all(\n\t\t\t\tObject.keys(model.deleteInvoiceHash())\n\t\t\t\t.map((t) => model.api.invoices.remove.one(t))\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction sendInvoices(){\n\t\treturn model.newInvoices().length\n\t\t? model.api.invoices.patch.many(model.newInvoices(), true)\n\t\t: Promise.resolve([])\n\t}\n\n\tfunction sendContractItems(){\n\n\t\tconst currentContract =\n\t\t\tmodel.data.contracts().find((c) =>\n\t\t\t\tmodel.form().project.contract_id\n\t\t\t\t&& c.contract_id\n\t\t\t\t== model.form().project.contract_id()\n\t\t\t)\n\n\t\tconst newitemspatch =\n\t\t\t!model.form().project.contract_id\n\t\t\t|| !model.form().project.contract_id\n\t\t\t&& !model.form().project.contract_id()\n\t\t\t? null\n\t\t\t: R.merge(\n\t\t\t\tmodel.data.contracts().find((c) =>\n\t\t\t\t\tc.contract_id\n\t\t\t\t\t== model.form().project.contract_id()\n\t\t\t\t)\n\t\t\t\t|| {\n\t\t\t\t\tcontract_name: m.prop(model.form().project.contract_name)\n\t\t\t\t\t,contract_id: m.prop(model.form().project.contract_id())\n\t\t\t\t\t,contract_description: m.prop('Initial Contract')\n\t\t\t\t\t,contract_payment_term: m.prop(42)\n\t\t\t\t\t,contract_count_invoices: m.prop(true)\n\t\t\t\t\t,contract_start_date: m.prop( new Date().toISOString() )\n\t\t\t\t\t,contract_end_date: m.prop( new Date ( new Date().getTime() + milliperday * 365 ).toISOString() )\n\t\t\t\t\t,supplier_id: m.prop( null )\n\t\t\t\t\t,supplier_name: m.prop( null )\n\t\t\t\t\t,contract_terms: m.prop(null)\n\t\t\t\t}\n\t\t\t\t,{contract_items: model.newContracts()}\n\t\t\t)\n\n\t\treturn model.newContracts().length || newitemspatch && !currentContract\n\t\t\t? model.api.contracts.patch.many([newitemspatch])\n\t\t\t: Promise.resolve([])\n\t}\n\n\tfunction splitInvoices(){\n\n\t\tconst newapprovedORrecevedinvoices =\n\t\t\tmodel.baseInvoiceRender()\n\t\t\t.filter((i) => i.forcesplit)\n\t\t\t.map((i) => {\n\n\t\t\t\tconst newuidforcesplit = uuid.v4()\n\t\t\t\tconst spliteitems =\n\t\t\t\t\ti.invoice_items.filter((ii) => ii.forcesplit)\n\t\t\t\tconst ratiosplit =\n\t\t\t\t\ti.invoice_items.length\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: Number(i.recqty/i.invoice_amount()).toFixed(0)\n\t\t\t\t\t\t+ (new Date().getTime() + '').slice(0,13)\n\n\t\t\t\tconst newinvoice =\n\t\t\t\t\tR.merge(\n\t\t\t\t\t\tR.last(model.data.cloneInvoice([i]))\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tinvoice_id: m.prop(newuidforcesplit)\n\t\t\t\t\t\t\t,invoice_no: m.prop(i.invoice_no() + '-ST' + i.invoice_items.length + spliteitems.length + ratiosplit)\n\t\t\t\t\t\t\t,invoice_client_reference: m.prop('')\n\t\t\t\t\t\t\t,invoice_items:\n\t\t\t\t\t\t\t\tspliteitems\n\t\t\t\t\t\t\t\t.map((ii) =>({\n\t\t\t\t\t\t\t\t\tinvoice_id: newuidforcesplit\n\t\t\t\t\t\t\t\t\t,invoice_items_id: uuid.v4()\n\t\t\t\t\t\t\t\t\t,invoice_items_received_amount: 0\n\t\t\t\t\t\t\t\t\t,timesheets_id: ii.timesheets_id\n\t\t\t\t\t\t\t\t\t,project_extras_id: ii.project_extras_id\n\t\t\t\t\t\t\t\t\t,invoice_items_amount: ii.invoice_items_amount-ii.invoice_items_received_amount\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t,recqty: i.recqty\n\t\t\t\t\t\t\t,invoice_received: m.prop(false)\n\t\t\t\t\t\t\t,invoice_received_date: m.prop(null)\n\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t,invoice_amount:\n\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\ti.invoice_amount()\n\t\t\t\t\t\t\t\t\t? i.invoice_amount()-i.recqty\n\t\t\t\t\t\t\t\t\t: i.invoice_amount()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,invoice_service_amount:\n\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\ti.invoice_service_amount()\n\t\t\t\t\t\t\t\t\t? i.invoice_service_amount()-i.recqty\n\t\t\t\t\t\t\t\t\t: i.invoice_service_amount()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,invoice_depreciation_amount:\n\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\ti.invoice_depreciation_amount()\n\t\t\t\t\t\t\t\t\t? i.invoice_depreciation_amount()-i.recqty\n\t\t\t\t\t\t\t\t\t: i.invoice_depreciation_amount()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,invoice_appreciation_amount:\n\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\ti.invoice_appreciation_amount()\n\t\t\t\t\t\t\t\t\t? i.invoice_appreciation_amount()-i.recqty\n\t\t\t\t\t\t\t\t\t: i.invoice_appreciation_amount()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,invoice_damages_amount:\n\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\ti.invoice_damages_amount()\n\t\t\t\t\t\t\t\t\t? i.invoice_damages_amount()-i.recqty\n\t\t\t\t\t\t\t\t\t: i.invoice_damages_amount()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\tif( spliteitems.length ){\n\t\t\t\t\tspliteitems.forEach((ii) => ii.invoice_items_amount = ii.invoice_items_received_amount)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ti.invoice_amount(i.invoice_amount() ? i.recqty : i.invoice_amount())\n\t\t\t\t\ti.invoice_service_amount( i.invoice_service_amount() ? i.recqty : i.invoice_service_amount())\n\t\t\t\t\ti.invoice_depreciation_amount( i.invoice_depreciation_amount() ? i.recqty : i.invoice_depreciation_amount())\n\t\t\t\t\ti.invoice_appreciation_amount( i.invoice_appreciation_amount() ? i.recqty : i.invoice_appreciation_amount())\n\t\t\t\t\ti.invoice_damages_amount( i.invoice_damages_amount() ? i.recqty : i.invoice_damages_amount())\n\t\t\t\t}\n\n\t\t\t\treturn newinvoice\n\t\t\t})\n\n\t\tconst newpaymentrefenceinvoices = []\n\n\t\treturn model.baseInvoiceRender()\n\t\t.filter((i) => i.created)\n\t\t.map((i) => {\n\n\t\t\tif( i.created ){\n\n\t\t\t\t[\n\t\t\t\t\ti.invoice_items.filter((ii) => !ii.approved && !ii.received)\n\t\t\t\t\t,i.invoice_items.filter((ii) => !ii.approved && ii.received)\n\t\t\t\t\t,i.invoice_items.filter((ii) => ii.approved && !ii.received)\n\t\t\t\t\t,i.invoice_items.filter((ii) => ii.approved && ii.received)\n\t\t\t\t\t,!i.invoice_items.length ? [i] : []\n\t\t\t\t]\n\t\t\t\t.filter(R.prop('length'))\n\t\t\t\t.forEach((ii, iiindex, iiarray) => {\n\n\t\t\t\t\tconst ref = R.last(ii)\n\t\t\t\t\tconst newuuid = uuid.v4()\n\t\t\t\t\tconst ratiosplit =\n\t\t\t\t\t\ti.invoice_items.length\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: Number(i.recqty/i.invoice_amount()).toFixed(0)\n\t\t\t\t\t\t\t+ (new Date().getTime() + '').slice(10,13)\n\t\t\t\t\tconst refinvoice =\n\t\t\t\t\t\tiiindex < iiarray.length-1\n\t\t\t\t\t\t? R.merge(\n\t\t\t\t\t\t\tR.last(model.data.cloneInvoice([i]))\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tinvoice_id: m.prop(newuuid)\n\t\t\t\t\t\t\t\t,invoice_no: m.prop(i.invoice_no() + '-ST' + (i.invoice_items.length-ii.length) + ii.length + ratiosplit)\n\t\t\t\t\t\t\t\t,invoice_items:\n\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\tii.map((item) =>\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_items.splice(\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((bii) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t== bii.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map((ii) => R.merge(ii, {invoice_id: newuuid}))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: i\n\n\t\t\t\t\tiiindex < iiarray.length-1 ? newapprovedORrecevedinvoices.push(refinvoice) : null\n\n\t\t\t\t\tif(ref.approved){\n\t\t\t\t\t\trefinvoice.invoice_approval(true)\n\t\t\t\t\t\trefinvoice.invoice_approver(model.data.auth.stream().user_id)\n\t\t\t\t\t\t!refinvoice.invoice_due_date()\n\t\t\t\t\t\t\t? refinvoice.invoice_due_date(\n\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t+ Number(refinvoice.contract_payment_term)*milliperday\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t}\n\t\t\t\t\telse if(ref.approved == false){\n\t\t\t\t\t\trefinvoice.invoice_approval(false)\n\t\t\t\t\t\trefinvoice.invoice_approver(null)\n\t\t\t\t\t\t!refinvoice.invoice_due_date()\n\t\t\t\t\t\t\t? refinvoice.invoice_due_date(null)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t}\n\n\t\t\t\t\tif(ref.received){\n\t\t\t\t\t\trefinvoice.invoice_received(true)\n\t\t\t\t\t\trefinvoice.invoice_received_date(\n\t\t\t\t\t\t\tref.receiveddate || new Date().getTime()\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\telse if(ref.received == false) {\n\t\t\t\t\t\trefinvoice.invoice_received(false)\n\t\t\t\t\t\trefinvoice.invoice_received_date(null)\n\t\t\t\t\t}\n\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn i\n\t\t})\n\t\t.concat(newapprovedORrecevedinvoices)\n\t\t.map((i) => {\n\n\t\t\tconst newreceivedtiemsdiffref =\n\t\t\t\ti.invoice_items.filter((ii) => ii.paymentref && ii.paymentref != i.invoice_client_reference())\n\n\t\t\tif(newreceivedtiemsdiffref.length){\n\n\t\t\t\tconst paymentrefIndex =\n\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\tR.prop('paymentref')\n\t\t\t\t\t\t,i.invoice_items\n\t\t\t\t\t)\n\n\t\t\t\tObject.keys(paymentrefIndex).length == 1\n\t\t\t\t? i.invoice_client_reference(R.last(i.invoice_items)['paymentref'] || '')\n\t\t\t\t: R.mapObjIndexed(\n\t\t\t\t\t(o, k) => {\n\t\t\t\t\t\tconst newuuid = uuid.v4()\n\t\t\t\t\t\tnewpaymentrefenceinvoices.push(\n\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\tR.last(model.data.cloneInvoice([i]))\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tinvoice_id: m.prop(newuuid)\n\t\t\t\t\t\t\t\t\t,invoice_no: m.prop(i.invoice_no() + '-ST' + (i.invoice_items.length-o.length) + '' + o.length)\n\t\t\t\t\t\t\t\t\t,invoice_client_reference: m.prop(k || '')\n\t\t\t\t\t\t\t\t\t,invoice_items:\n\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\to.map((item) =>\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_items.splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((bii) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== bii.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map((ii) => R.merge(ii, {invoice_id: newuuid}))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,paymentrefIndex\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn i\n\t\t})\n\t\t.concat(newpaymentrefenceinvoices)\n\t\t.map((i) => {\n\t\t\ti.invoice_type(\n\t\t\t\tNumber(\n\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t) > 0\n\t\t\t\t\t? i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Revenue'\n\t\t\t\t\t\t: 'Accrued Revenue'\n\t\t\t\t\t: i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Expenditure'\n\t\t\t\t\t\t: 'Accrued Expenditure'\n\t\t\t)\n\n\t\t\tif(i.invoice_items.length){\n\n\t\t\t\tconst newamount =\n\t\t\t\t\tR.sum(\n\t\t\t\t\t\ti.invoice_items.map((ii) =>\n\t\t\t\t\t\t\ti.invoice_id() == ii.invoice_id\n\t\t\t\t\t\t\t? ii.invoice_items_received_amount || ii.invoice_items_amount\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\ti.invoice_amount(newamount)\n\t\t\t\ti.invoice_service_amount(newamount)\n\t\t\t\ti.invoice_depreciation_amount(newamount)\n\t\t\t\ti.invoice_appreciation_amount(newamount)\n\t\t\t\ti.invoice_damages_amount(newamount)\n\n\t\t\t}\n\t\t\telse if (i.recqty) {\n\n\t\t\t\ti.invoice_amount(i.recqty)\n\t\t\t\ti.invoice_service_amount(i.recqty)\n\t\t\t\ti.invoice_depreciation_amount(i.recqty)\n\t\t\t\ti.invoice_appreciation_amount(i.recqty)\n\t\t\t\ti.invoice_damages_amount(i.recqty)\n\n\t\t\t}\n\n\t\t\treturn i\n\t\t})\n\n\t}\n\n\tfunction sendNewInvites(){\n\n\t\tconst inviteIndex =\n\t\t\tR.indexBy(\n\t\t\t\t(t) =>\n\t\t\t\t\tmodel.baseProjectDetailsHash()[t.project_extras_id()]\n\t\t\t\t\t? model.baseProjectDetailsHash()[t.project_extras_id()].invite_email + t.invite_email\n\t\t\t\t\t: null\n\t\t\t\t,(model.form().project.project_extras || [])\n\t\t\t)\n\n\t\tconst newInvites =\n\t\t\tR.uniqBy(\n\t\t\t\tR.prop('invite_email')\n\t\t\t\t,(model.form().project.project_extras || [])\n\t\t\t\t.map((t) => {\n\t\t\t\t\tif(\n\t\t\t\t\t\tt.invite_email\n\t\t\t\t\t\t&& inviteIndex[t.invite_email+t.invite_email]\n\t\t\t\t\t){\n\t\t\t\t\t\tconst inviteExists = inviteIndex[t.invite_email+t.invite_email]\n\t\t\t\t\t\tt.user_id(inviteExists.invite_id())\n\t\t\t\t\t\tt.invite_id(inviteExists.invite_id())\n\t\t\t\t\t\tt.project_extras_custom(true)\n\t\t\t\t\t}\n\t\t\t\t\treturn t\n\t\t\t\t})\n\t\t\t\t.filter((t) =>\n\t\t\t\t\tt.invite_email && t.created\n\t\t\t\t\t&& model.baseProjectDetailsHash()[t.project_extras_id()]\n\t\t\t\t\t&& model.baseProjectDetailsHash()[t.project_extras_id()].invite_email != t.invite_email\n\t\t\t\t\t&& !inviteIndex[t.invite_email+t.invite_email]\n\t\t\t\t)\n\t\t\t)\n\n\t\treturn Promise.all(\n\t\t\tnewInvites.map((i) => {\n\t\t\t\tconst newid = uuid.v4()\n\t\t\t\treturn model.data.api.invites.post.one(\n\t\t\t\t\t{\n\t\t\t\t\t\tinvite_id: m.prop(newid)\n\t\t\t\t\t\t,role_id: m.prop(newid)\n\t\t\t\t\t\t,invite_email: m.prop(i.invite_email)\n\t\t\t\t\t\t,invite_creation_time: m.prop(new Date().getTime())\n\t\t\t\t\t\t// todo-james should we just hardcode this to ['Worker'] ?\n\t\t\t\t\t\t,invite_groups: m.prop(\n\t\t\t\t\t\t\tmodel.data.groups().filter((a) => a.group_name == 'Worker')\n\t\t\t\t\t\t\t.map(R.omit('users'))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,organization_id: m.prop(model.data.initiateContractFetch().organization_id)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t})\n\t\t)\n\t\t.then((res) => {\n\n\t\t\tres.forEach((i) =>\n\t\t\t\tmodel.form().project.project_extras\n\t\t\t\t.filter((t) => t.invite_email == i.invite_email())\n\t\t\t\t.forEach((t) => {\n\t\t\t\t\tt.user_id(i.invite_id())\n\t\t\t\t\tt.invite_id(i.invite_id())\n\t\t\t\t\tt.project_extras_custom(true)\n\t\t\t\t})\n\t\t\t)\n\t\t\tmodel.newUser(false)\n\t\t\treturn true\n\t\t})\n\t}\n\n\tfunction sendProjects(projectPatch){\n\n\t\tmodel.metaDataLoading(true)\n\n\t\tif( model.form().project.disciplines ){\n\n\t\t\tmodel.form().project.disciplines\n\t\t\t\t= model.form().project.disciplines.filter((d) => d.discipline_name())\n\n\t\t\tconst { teamAmount } = findidealUOM( model.form().project.disciplines )\n\t\t\tmodel.form().project.disciplines.forEach((d) => {\n\t\t\t\tdelete d.created\n\t\t\t\tif( !d.organizations_disciplines_nominal_rate() ){\n\t\t\t\t\td.organizations_disciplines_nominal_rate(\n\t\t\t\t\t\t(teamAmount[d.discipline_order()] || teamAmount['cons'])\n\t\t\t\t\t\t.find((dt) => dt.discipline_name() == d.discipline_name())\n\t\t\t\t\t\t.uomrate\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tconst newinvoicelist = splitInvoices()\n\t\tconst newResource =\n\t\t\t!model.resources().length\n\t\t\t&& model.firstproject()\n\t\t\t&& model.editResourcePermissions()\n\n\t\tconst firstproject = model.firstproject()\n\t\tconst templateClone =\n\t\t\tmodel.vm().project_template_id\n\t\t\t&& model.vm().project_template_id()\n\t\t\t&& model.vm().organization_id() != model.data.initiateContractFetch().organization_id\n\n\t\tmodel.data.currentRoute('Nothing')\n\n\t\tconst projectlist =\n\t\t\tprojectPatch\n\t\t\t|| [\n\t\t\t\tR.merge(\n\t\t\t\t\tmodel.form().project\n\t\t\t\t\t,{project_extras: []}\n\t\t\t\t)\n\t\t\t]\n\n\t\t;(model.form().project.project_extras || [])\n\t\t.forEach((t) => {\n\t\t\tconst founduser =\n\t\t\t\texposer(t.invite_email)\n\t\t\t\t&& model.users().find((u) =>\n\t\t\t\t\texposer(u.user_email)\n\t\t\t\t\t&& t.invite_email == exposer(u.user_email)\n\t\t\t\t)\n\n\t\t\tif ( founduser ){\n\t\t\t\tt.user_id(founduser.user_id())\n\t\t\t\tt.invite_email = null\n\t\t\t\tt.created = true\n\t\t\t}\n\t\t})\n\n\t\tconst params = {\n\t\t\tprojects: projectlist\n\t\t\t,schedule_id: model.schedule_id()\n\t\t\t,completedProjects: model.completedProjects()\n\t\t}\n\n\t\tconst geop = projectPatch\n\t\t\t? null\n\t\t\t: model.process_geo(projectlist[0].project_suburb())\n\n\t\tconst geolist = geop\n\t\t\t? [geop]\n\t\t\t: []\n\n\t\treturn sendContractItems()\n\t\t.then(() => {\n \t\t\treturn Promise.all([\n\t\t\t\t(\n\t\t\t\t\tgeolist.length\n\t\t\t\t\t? model.api.geographies.patch.many(geolist)\n\t\t\t\t\t: model.api.geographies.fetch.all()\n\t\t\t\t)\n\t\t\t\t\t.then( model.geographies )\n\n\t\t\t\t,sendInvoices()\n\n\t\t\t\t,(\n\t\t\t\t\t!identical(\n\t\t\t\t\t\tmodel.extraContractObligationData()\n\t\t\t\t\t\t,model.clonedContracts()\n\t\t\t\t\t)\n\t\t\t\t\t\t? Promise.all(\n\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\tR.toPairs\n\t\t\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t\t\t,R.filter((pa) => typeof pa == 'object')\n\t\t\t\t\t\t\t\t,R.map(\n\t\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\t\tmodel.api.allocations.patch(\n\t\t\t\t\t\t\t\t\t\t\t[a]\n\t\t\t\t\t\t\t\t\t\t\t, a.schedule_version_id()\n\t\t\t\t\t\t\t\t\t\t\t, a.project_id()\n\t\t\t\t\t\t\t\t\t\t\t, 'disableList'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)(model.contractPatchIndex())\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then(() => resetView([]))\n\t\t\t\t\t\t: Promise.resolve([])\n\t\t\t\t)\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\tdeleteDiscipline(true)\n\t\t\t\t\t\t\t,deletetInvoices()\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\tmodel.deleteDisciplines([])\n\t\t\t\t\t\t\treturn model.api.projects.patch(params)\n\t\t\t\t\t\t\t.then(function(res){\n\t\t\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\t\t\tdeleteProjectExtra(true)\n\t\t\t\t\t\t\t\t\t,deleteProjectContacts()\n\t\t\t\t\t\t\t\t\t,sendNewInvites()\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t.then(function(){\n\n\t\t\t\t\t\t\t\t\tconst newProject = R.last(res)\n\n\t\t\t\t\t\t\t\t\t!model.form().project.project_extras\n\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t: newProject.disciplines.filter((d) => {\n\t\t\t\t\t\t\t\t\t\tconst od =\n\t\t\t\t\t\t\t\t\t\t\tmodel.form().project.disciplines\n\t\t\t\t\t\t\t\t\t\t\t.find((discipline) => discipline.discipline_id() == d.discipline_id()) || {}\n\n\t\t\t\t\t\t\t\t\t\treturn !model.form().project.project_extras.find((pe) =>\n\t\t\t\t\t\t\t\t\t\t\texposer(pe.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t== d.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t&& !model.deleteProjectExtras().find((pe) =>\n\t\t\t\t\t\t\t\t\t\t\tmodel.baseProjectDetailsHash()[pe]\n\t\t\t\t\t\t\t\t\t\t\t&& exposer(model.baseProjectDetailsHash()[pe].organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t== d.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t&& !od.taskcount\n\t\t\t\t\t\t\t\t\t\t&& !od.newdiscipline\n\t\t\t\t\t\t\t\t\t\t&& !d.taskcount\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.forEach((d) => {\n\t\t\t\t\t\t\t\t\t\tconst newD = model.resetPEForm()\n\t\t\t\t\t\t\t\t\t\tnewD.created = true\n\t\t\t\t\t\t\t\t\t\tnewD.project_id(d.project_id())\n\t\t\t\t\t\t\t\t\t\tnewD.discipline_id(d.discipline_id())\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_planned_amount(d.discipline_planned())\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_custom(false)\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_actual_amount(d.discipline_completed())\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_type(d.discipline_name())\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_description(\n\t\t\t\t\t\t\t\t\t\t\td.discipline_name()\n\t\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\t\td.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t\t? ' - ' + d.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_address(newProject.project_suburb())\n\t\t\t\t\t\t\t\t\t\tnewD.project_extras_priority(newProject.project_extras.length + 1)\n\t\t\t\t\t\t\t\t\t\tnewD.organizations_disciplines_id(d.organizations_disciplines_id())\n\t\t\t\t\t\t\t\t\t\tnewD.newtask = 'New Task'\n\t\t\t\t\t\t\t\t\t\tnewD.users =\n\t\t\t\t\t\t\t\t\t\t\tmodel.form().project.disciplines\n\t\t\t\t\t\t\t\t\t\t\t.find((od) => od.discipline_name() == d.discipline_name())\n\t\t\t\t\t\t\t\t\t\t\t.users || []\n\n\t\t\t\t\t\t\t\t\t\tnewD.user_id( (R.last(newD.users()) || nullUser).user_id() )\n\n\t\t\t\t\t\t\t\t\t\tmodel.form().project.project_extras.unshift(newD)\n\n\t\t\t\t\t\t\t\t\t\tconst splitasks =\n\t\t\t\t\t\t\t\t\t\t\t!newD.users().length\n\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t: [newD].map((t) => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet i = 0\n\t\t\t\t\t\t\t\t\t\t\t\tt.project_extras_actual_amount(\n\t\t\t\t\t\t\t\t\t\t\t\t\tNumber(Number(t.project_extras_actual_amount()/t.users().length).toFixed(3)))\n\t\t\t\t\t\t\t\t\t\t\t\tt.project_extras_planned_amount(\n\t\t\t\t\t\t\t\t\t\t\t\t\tNumber(Number(t.project_extras_planned_amount()/t.users().length).toFixed(3)))\n\n\t\t\t\t\t\t\t\t\t\t\t\tmodel.pe_vm(t)\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn R.unfold(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(n) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst tuser = n.users()[i]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst vadd = model.cloningProjectE(false, true)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( tuser) { vadd.user_id(tuser.user_id()) }\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvadd.project_extras_id(uuid.v4())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvadd.allocation_id(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvadd.invite_id = null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvadd.invite_email = null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvadd.created = true\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel.userSelectionIndex()[d.key]\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ti = i + 1\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn i == n.users().length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [ vadd, n ]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t, t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tmodel.form().project.project_extras =\n\t\t\t\t\t\t\t\t\t\t\tmodel.form().project.project_extras.concat(R.unnest(splitasks))\n\n\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\tmodel.deleteProjectContacts([])\n\t\t\t\t\t\t\t\t\tmodel.deleteProjectExtras([])\n\t\t\t\t\t\t\t\t\tif(model.cloning()){\n\t\t\t\t\t\t\t\t\t\tmodel.form().project.project_extras\n\t\t\t\t\t\t\t\t\t\t.forEach((t) => {\n\n\t\t\t\t\t\t\t\t\t\t\tconst relatedd =\n\t\t\t\t\t\t\t\t\t\t\t\tnewProject.disciplines\n\t\t\t\t\t\t\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\td.discipline_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ d.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t\t\t== t.relatedDiscipline\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\tt.project_id(newProject.project_id())\n\n\t\t\t\t\t\t\t\t\t\t\tt.project_extras_actual_amount(0)\n\t\t\t\t\t\t\t\t\t\t\tt.project_extras_date_completed(null)\n\t\t\t\t\t\t\t\t\t\t\tt.project_extras_notes('')\n\n\t\t\t\t\t\t\t\t\t\t\trelatedd\n\t\t\t\t\t\t\t\t\t\t\t\t? t.discipline_id(relatedd.discipline_id())\n\t\t\t\t\t\t\t\t\t\t\t\t: t.discipline_id(null)\n\n\t\t\t\t\t\t\t\t\t\t\trelatedd\n\t\t\t\t\t\t\t\t\t\t\t\t? t.relatedDiscipline =\n\t\t\t\t\t\t\t\t\t\t\t\t\trelatedd.discipline_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trelatedd.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ' - ' + relatedd.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: t.relatedDiscipline = ''\n\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\tmodel.cloning(false)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst projectExtraArray =\n\t\t\t\t\t\t\t\t\t\tR.splitEvery(\n\t\t\t\t\t\t\t\t\t\t\t100\n\t\t\t\t\t\t\t\t\t\t\t,!model.form().project.project_extras\n\t\t\t\t\t\t\t\t\t\t\t|| !model.form().project.project_extras.length\n\t\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t\t: model.form().project.project_extras\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(R.prop('created'))\n\t\t\t\t\t\t\t\t\t\t\t\t.map((t) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst dprops =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tt.project_extras_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? identical(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,model.baseProjectDetailsHash()[t.project_extras_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'returnKeys'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: []\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn R.omit(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t['newtask']\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, R.pick(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.concat(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t['project_extras_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'orphanedFiles'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'invite_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,dprops\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.some((a) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ta == 'user_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'discipline_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'project_extras_planned_amount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'project_extras_actual_amount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'project_extras_date_completed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| a == 'project_extras_date_invalid'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'user_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'discipline_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'project_extras_planned_amount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'project_extras_actual_amount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'allocation_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].concat(dprops)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: dprops\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t!projectPatch\n\t\t\t\t\t\t\t\t\t\t&& projectExtraArray.length\n\t\t\t\t\t\t\t\t\t\t? Promise.all(\n\t\t\t\t\t\t\t\t\t\t\tprojectExtraArray\n\t\t\t\t\t\t\t\t\t\t\t.map((pArray) =>\n\t\t\t\t\t\t\t\t\t\t\t\tmodel.api.project_extras.patch.many(pArray)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.then(R.last)\n\t\t\t\t\t\t\t\t\t\t: res\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then(function(pres){\n\t\t\t\t\t\t\t\t\treturn model.deleteDisciplineC({makeAPICalls: true })\n\t\t\t\t\t\t\t\t\t.then(function(/*res*/){\n\t\t\t\t\t\t\t\t\t\tmodel.deleteDisciplinesCrews([])\n\t\t\t\t\t\t\t\t\t\tmodel.deleteDisciplinesContractors([])\n\t\t\t\t\t\t\t\t\t\tmodel.data.api.invoices.patch.many(newinvoicelist, true)\n\t\t\t\t\t\t\t\t\t\treturn pres\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then(function(res){\n\t\t\t\t\t\t\t\t\treturn model.data.fetchProjectsBySchedule(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tproject_id: R.last(res).project_id()\n\t\t\t\t\t\t\t\t\t\t\t,schedule_id: R.last(res).schedule_id()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((res) => resetView(res, {forcereq:true}))\n\t\t\t\t\t\t\t\t.then(() => {\n\n\t\t\t\t\t\t\t\t\tmodel.viewType(\n\t\t\t\t\t\t\t\t\t\tmodel.viewType() == InitialProject\n\t\t\t\t\t\t\t\t\t\t? EditProject\n\t\t\t\t\t\t\t\t\t\t: model.viewType()\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\treturn Promise.resolve(\n\t\t\t\t\t\t\t\t\t\t!newResource\n\t\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t\t: createIdealResource(model.form().project.disciplines)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.then(function(){\n\n\t\t\t\t\t\t\t\t\t\t\tif(firstproject || templateClone){\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn model.api.projects.patch({\n\t\t\t\t\t\t\t\t\t\t\t\t\tprojects: [model.form().project]\n\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_id: model.schedule_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,completedProjects: model.completedProjects()\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t.then((res) => resetView(res, {forcereq:true}))\n\t\t\t\t\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif( firstproject && !model.data.progress()[model.data.schedule().schedule_id] ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn model.data.api.schedules.patch([\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel.data.schedule()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_parent: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_versions: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_priority: model.data.schedule().schedule_versions[0].schedule_priority\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedules_parameters_id: model.data.schedule().schedule_versions[0].schedules_parameters_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_version_old_id: model.data.schedule().schedule_versions[0].schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse { return true }\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse { return true }\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t])\n\t\t})\n\t\t.then(function(){\n\t\t\tfetchOrganizationsDisciplines()\n\t\t\tfetchAllocations()\n\t\t\tmodel.data.currentRoute('projects')\n\t\t\tmodel.metaDataLoading(false)\n\t\t\tmodel.projectOptions(false)\n\t\t})\n\t\t.then(m.redraw)\n\t}\n\n function deleteProject(){\n return Promise.all(\n\t\t\tmodel.checkMultipleProjects().map((p) =>\n\t\t\t\tmodel.api.projects.remove.one(p.project_id())\n\t\t\t)\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\tmodel.checkMultipleProjects().forEach((p) =>\n\t\t\t\t\tmodel.projects().splice(\n\t\t\t\t\t\tmodel.projects().findIndex((project) =>\n\t\t\t\t\t\t\tproject.project_id() == p.project_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, 1\n \t\t\t)\n\t\t\t\t)\n\t\t\t\tmodel.vm({})\n\t\t\t\tmodel.checkMultipleProjects([])\n\t\t\t\tmodel.projectOptions(false)\n\t\t\t})\n\t\t\t.then(m.redraw)\n }\n\n\n\tfunction deleteDiscipline(makeAPICalls){\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tmodel.deleteDisciplines().map((t) => model.api.disciplines.remove.one(t))\n\t\t\t)\n\t\t\t: model.checkMultiple().data.map((discipline) => {\n\t\t\t\t!discipline.discipline_id()\n\t\t\t\t\t? null\n\t\t\t\t\t: model.deleteDisciplines().push(discipline.discipline_id())\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t&& removeDisciplineForm()\n\t\t\t&& model.masterLIST(true)\n\t}\n\n\tfunction removeDisciplineForm(){\n\t\tmodel.form().project.disciplines =\n\t\t\tR.differenceWith(\n\t\t\t\t(a, b) =>\n\t\t\t\t\ta.discipline_name() == b.discipline_name()\n\t\t\t\t\t&& a.discipline_id() == b.discipline_id()\n\t\t\t\t\t&& a.key == b.key\n\t\t\t\t,model.form().project.disciplines\n\t\t\t\t,model.checkMultiple().data\n\t\t\t)\n\t\tmodel.checkMultiple().data = []\n\t\tmodel.errors({})\n\t\tmodel.discipline_vm({})\n\t\treturn true\n\t}\n\n\n\tfunction deleteProjectExtra(makeAPICalls){\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tmodel.deleteProjectExtras().length\n\t\t\t\t? [model.api.project_extras.remove.many(model.deleteProjectExtras())]\n\t\t\t\t: []\n\t\t\t)\n\t\t\t: model.checkMultipleProjectExtras()\n\t\t\t.data.map((pExtra) => {\n\t\t\t\t!pExtra.project_extras_id()\n\t\t\t\t\t? null\n\t\t\t\t\t: model.deleteProjectExtras()\n\t\t\t\t\t.push(pExtra.project_extras_id())\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t&& removeExtraForm()\n\t\t\t&& model.masterPELIST(true)\n\t}\n\n\n\tfunction removeExtraForm(){\n\t\tmodel.spreading(false)\n\t\tmodel.disciplineSpread([])\n\t\tmodel.form().project.project_extras =\n\t\t\tR.differenceWith(\n\t\t\t\t(a, b) =>\n\t\t\t\t\ta.project_extras_type() == b.project_extras_type()\n\t\t\t\t\t&& a.project_extras_id() == b.project_extras_id()\n\t\t\t\t\t&& a.key == b.key\n\t\t\t\t,model.form().project.project_extras\n\t\t\t\t,model.checkMultipleProjectExtras().data\n\t\t\t)\n\t\tmodel.checkMultipleProjectExtras().data = []\n\t\tmodel.errors({})\n\t\tmodel.pe_vm({})\n\t\treturn true\n\t}\n\n function fetchGeographies(){\n\t\treturn model.data.fetchGeographies()\n \t.then( model.geographies )\n }\n\n\tfunction reOrganizeProjects(){\n\n\t\treturn [\n\t\t\telements.list([\n\n\t\t\t\tm('button.btn.btn-secondary'\n\t\t\t\t\t,{\n\t\t\t\t\t\tdisabled: !model.projects().length\n\t\t\t\t\t\t\t|| !model.projectSortRequired()\n\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tmodel.vm({})\n\t\t\t\t\t\t\tmodel.checkMultipleProjects([])\n\t\t\t\t\t\t\tsendProjects(\n\t\t\t\t\t\t\t\tmodel.projectsSortedResult()\n\t\t\t\t\t\t\t\t.map((p, pindex) => {\n\t\t\t\t\t\t\t\t\tp.project_priority(pindex + 1)\n\t\t\t\t\t\t\t\t\treturn R.merge( p ,{disciplines: []})\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, \"Adjust\"\n\t\t\t\t)\n\t\t\t\t,m(`label`, ' Project Priorities')\n\t\t\t])\n\t\t\t,m('br')\n\t\t\t,model.projectSortRequired()\n\t\t\t\t? m('label', `This will change the priorities of all projects to match the chronological order of their construction end date`)\n\t\t\t\t: m('label', `Project priorities match the chronological order of their construction end date, no changes required`)\n\n\t\t\t,m('br')\n\t\t\t,model.projectsSortedResult()\n\t\t\t.map((s, sIndex) =>\n\t\t\t\tm('p.pv1.ma0'\n\t\t\t\t\t,(\n\t\t\t\t\t\tmodel.projectSortRequired()\n\t\t\t\t\t\t\t? s.project_priority()\n\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\tsIndex + 1 == s.project_priority()\n\t\t\t\t\t\t\t\t\t? ' ⇋ '\n\t\t\t\t\t\t\t\t\t: sIndex + 1 > s.project_priority()\n\t\t\t\t\t\t\t\t\t? ' ↓ '\n\t\t\t\t\t\t\t\t\t: ' ↑ '\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t+ ( sIndex + 1 )\n\t\t\t\t\t+ '. ' + s.project_name()\n\t\t\t\t)\n\t\t\t)\n\t\t]\n\t}\n\n\tfunction showComments(project){\n\t\tconst commentArray =\n\t\t\t!project.project_completion_comments()\n\t\t\t? []\n\t\t\t: project.project_completion_comments().split(\"\\n\")\n\n\t\tconst pencilEdit =\n\t\t\tPencil(\n\t\t\t\t() => commentArray.map(s => m('p.pv1.ma0.f4',s))\n\t\t\t\t,() =>\n\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\tif(v || v == ''){\n\t\t\t\t\t\t\t\tproject.project_completion_comments(v)\n\t\t\t\t\t\t\t\tmodel.notesexpanded[project.project_id()] = true\n\t\t\t\t\t\t\t\tproject.created = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn project.project_completion_comments()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tplaceholder: \"Any types of communications or status\"\n\t\t\t\t\t\t\t, disabled: !model.editPermissions() || model.metaDataLoading()\n\t\t\t\t\t\t\t, style: {\n\t\t\t\t\t\t\t\t\"padding-block-start\": \"0.5em\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onblur:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\treturn project.created\n\t\t\t\t\t\t\t\t\t? sendProjects([\n\t\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t\tproject\n\t\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\t\tdisciplines: []\n\t\t\t\t\t\t\t\t\t\t\t\t,project_extras: []\n\t\t\t\t\t\t\t\t\t\t\t\t,project_contacts: []\n\t\t\t\t\t\t\t\t\t\t\t\t,project_documents: m.prop([])\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t)\n\n\t\treturn elements.details(\n\t\t\t!commentArray.length ? '' : ' ... '\n\t\t\t,pencilEdit\n\t\t\t,{\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => model.notesexpanded[project.project_id()] = true\n\t\t\t\t,open:\n\t\t\t\t\tmodel.notesexpanded[project.project_id()]\n\t\t\t\t\t|| !commentArray.length\n\t\t\t\t\t|| model.vm().project_id && model.vm().project_id() == project.project_id()\n\t\t\t}\n\t\t)\n\t}\n\n\n\tfunction sendOrganizationsDisciplines(orgDList){\n\t\treturn model.api.organizations_disciplines.patch(orgDList)\n\t\t\t.then(fetchOrganizationsDisciplines)\n\t}\n\n\n\tfunction bulkDisciplineAddition(){\n\n\t\tvar orgDiscipline = {\n\t\t\torganizations_disciplines_id: model.discipline_vm().organizations_disciplines_id()\n\t\t\t,organizations_disciplines_name: model.discipline_vm().discipline_name()\n\t\t\t,organizations_disciplines_description: \"\"\n\t\t\t,organizations_disciplines_nominal_rate: model.discipline_vm().discipline_planned()\n\t\t\t,organizations_disciplines_uom: model.discipline_vm().discipline_uom()\n\t\t}\n\t\treturn (\n\t\t\tmodel.discipline_vm().organizations_disciplines_id()\n\t\t\t\t? Promise.resolve([])\n\t\t\t\t: sendOrganizationsDisciplines([orgDiscipline])\n\t\t)\n\t\t.then(function(){\n\n\t\t\tvar newOrganizationDiscipline =\n\t\t\t\tmodel.organizations_disciplines().find((od) =>\n\t\t\t\t\tod.organizations_disciplines_name\n\t\t\t\t\t== model.discipline_vm().discipline_name()\n\t\t\t\t)\n\n\t\t\tmodel.discipline_vm().organizations_disciplines_id(\n\t\t\t\tnewOrganizationDiscipline.organizations_disciplines_id\n\t\t\t)\n\t\t\tmodel.discipline_vm().discipline_uom(\n\t\t\t\tnewOrganizationDiscipline.organizations_disciplines_uom\n\t\t\t)\n\t\t\tmodel.discipline_vm().discipline_description(\n\t\t\t\tnewOrganizationDiscipline.organizations_disciplines_description\n\t\t\t)\n\n\t\t\tmodel.checkMultipleProjects()\n\t\t\t\t.forEach((p) => {\n\n\t\t\t\t\tvar existingD =\n\t\t\t\t\t\tp.disciplines.find((discipline) =>\n\t\t\t\t\t\t\tdiscipline.organizations_disciplines_id()\n\t\t\t\t\t\t\t== model.discipline_vm().organizations_disciplines_id()\n\t\t\t\t\t\t)\n\n\t\t\t\t\tvar newD = existingD\n\t\t\t\t\t\t? R.merge(\n\t\t\t\t\t\t\texistingD\n\t\t\t\t\t\t\t,R.omit(\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t'project_id'\n\t\t\t\t\t\t\t\t\t,'contractrecognitionid'\n\t\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t,'discipline_custom'\n\t\t\t\t\t\t\t\t\t,'discipline_completed'\n\t\t\t\t\t\t\t\t\t,'discipline_percent'\n\t\t\t\t\t\t\t\t\t,'discipline_id'\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t,model.cloningProjectD(false, true)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: model.discipline_vm()\n\n\t\t\t\t\texistingD\n\t\t\t\t\t\t? p.disciplines.splice(\n\t\t\t\t\t\t\tp.disciplines.findIndex((d) =>\n\t\t\t\t\t\t\t\td.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t== model.discipline_vm().organizations_disciplines_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\tp.disciplines.push(newD)\n\t\t\t\t})\n\n\t\t\treturn sendProjects(model.checkMultipleProjects())\n\t\t\t.then(function(){\n\t\t\t\tvar updatedProjects =\n\t\t\t\t\tmodel.checkMultipleProjects()\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\tmodel.projects().find((project) =>\n\t\t\t\t\t\t\tproject.project_id()\n\t\t\t\t\t\t\t== p.project_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\tmodel.checkMultipleProjects(updatedProjects)\n\t\t\t\tmodel.projectOptions(false)\n\t\t\t\t// clear discipline container and remove pane\n\t\t\t\tmodel.discipline_vm({})\n\t\t\t\tmodel.checkMultiple().data = []\n\t\t\t\tmodel.vm(\n\t\t\t\t\tmodel.checkMultipleProjects()\n\t\t\t\t\t.find((p) =>\n\t\t\t\t\t\tmodel.vm().project_id()\n\t\t\t\t\t\t== p.project_id()\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\treturn true\n\t\t\t})\n\t\t})\n\t}\n\n\n\tfunction bulkDisciplineDeletion(){\n\t\tmodel.checkMultipleProjects().map((p) =>\n\t\t\tp.disciplines.filter((d) =>\n\t\t\t\td.organizations_disciplines_id()\n\t\t\t\t== model.discipline_vm().organizations_disciplines_id()\n\t\t\t)\n\t\t\t.forEach((t) => {\n\t\t\t\tmodel.deleteDisciplines().push(t.discipline_id())\n\t\t\t})\n\t\t)\n\t\treturn deleteDiscipline(true)\n\t\t\t.then(function(){\n\t\t\t\tmodel.deleteDisciplines([])\n\t\t\t\tmodel.checkMultipleProjects().forEach((p) => {\n\t\t\t\t\tvar dIndex =\n\t\t\t\t\t\tp.disciplines.findIndex((d) =>\n\t\t\t\t\t\t\t d.organizations_disciplines_id()\n\t\t\t\t\t\t\t == model.discipline_vm().organizations_disciplines_id()\n\t\t\t\t\t\t)\n\n\t\t\t\t\tdIndex > -1\n\t\t\t\t\t\t? p.disciplines.splice(\n\t\t\t\t\t\t\tdIndex\n\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t})\n\t\t\t\tmodel.discipline_vm({})\n\t\t\t\tmodel.checkMultiple().data = []\n\t\t\t\treturn model.projectOptions(false)\n\t\t\t})\n\t}\n\n\tfunction sendResources(r){\n\t\treturn model.api.contractors.patch.one(r)\n\t\t.then(function(){\n\t\t\treturn model.data.fetchResource({\n\t\t\t\tprops: {\n\t\t\t\t\tresources: [\n\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t]\n\t\t\t\t\t,teams: [\n\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t,'crew_name'\n\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t]\n\t\t\t\t\t,rates: [\n\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t,'crews_discipline_rates_id'\n\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\t,organizations_disciplines: model.vm().disciplines.map((a) => a.organizations_disciplines_id()).filter((a) => a)\n\t\t\t})\n\t\t\t.then(function(res){\n\t\t\t\tmodel.resources(res)\n\t\t\t\tmodel.resources_available()\n\t\t\t\tmodel.savingProp(false)\n\t\t\t\treturn res\n\t\t\t})\n\t\t})\n\t}\n\n\tmodel.data.currentRoute('Nothing')\n\tprop.merge(\n\t\t[\n\t\t\tmodel.data.initiateContractFetch\n\t\t]\n\t)\n\t.map(function([i]){ //eslint-disable-line no-unused-vars\n\n\t\tconst schange = i.schange || !model.data.routeInitialized()['projects']\n\t\tconst ochange = i.ochange || !model.data.routeInitialized()['projects']\n\n\n\t\tif ( ochange || schange){\n\t\t\tmodel.vm({})\n\t\t\tmodel.checkMultipleProjects([])\n\t\t\tmodel.projects([])\n\t\t\tmodel.deleteDisciplines([])\n\t\t\tmodel.deleteDisciplinesContractors([])\n\t\t\tmodel.deleteDisciplinesCrews([])\n\t\t\tmodel.deleteProjectExtras([])\n\t\t\tmodel.deleteStateProp(false)\n\t\t}\n\n\t\tmodel.loading(true)\n\t\tmodel.metaDataLoading(true)\n\n\t\treturn Promise.all([\n\t\t\t!ochange ? [] : fetchOrganizationsDisciplines()\n\t\t\t,!ochange ? [] : fetchGeographies()\n\t\t\t,!schange ? [] : fetchProjects({depth:1})\n\t\t\t,!schange ? [] :model.data.fetchProjectsBySchedule({\n\t\t\t\tschedule_id: model.schedule_id()\n\t\t\t\t,completedProjects: model.completedProjects() == 'inprogress'\n\t\t\t\t\t? 'completed'\n\t\t\t\t\t: 'inprogress'\n\t\t\t\t,depth: 1\n\t\t\t\t,props: {\n\t\t\t\t\tprojects: [\n\t\t\t\t\t\t'project_name'\n\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t})\n\t\t\t\t.then( model.inverseProjectsList )\n\t\t\t,!ochange\n\t\t\t\t? []\n\t\t\t\t: model.data.fetchUsers()\n\t\t\t\t\t.then(\n\t\t\t\t\t\tR.concat([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuser_id: m.prop(null)\n\t\t\t\t\t\t\t\t, user_username: m.prop('Unassigned')\n\t\t\t\t\t\t\t\t, usersFullName: 'Unassigned'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t\t.then(model.users)\n\t\t])\n\t\t\t.then(function(){\n\n\t\t\t\tmodel.viewType(\n\t\t\t\t\tmodel.firstproject()\n\t\t\t\t\t&& model.data.features().quickStartProject\n\t\t\t\t\t? InitialProject\n\t\t\t\t\t: ListProject\n\t\t\t\t)\n\t\t\t\tmodel.metaDataLoading(true)\n\t\t\t\tmodel.loading(false)\n\t\t\t\tmodel.usersIndex(\n\t\t\t\t\tR.indexBy(\n\t\t\t\t\t\t(u) => u.user_id()\n\t\t\t\t\t\t,model.users()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tmodel.data.routeids({\n\t\t\t\t\trouteids: model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t,getledgers: false\n\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t,specificproject: model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t})\n\t\t\t\treturn m.redraw()\n\t\t\t})\n\t\t\t.then(function(){\n\t\t\t\tmodel.data.currentRoute('projects')\n\t\t\t\treturn Promise.all([\n\t\t\t\t\t!schange ? [] : fetchProjects()\n\t\t\t\t])\n\t\t\t\t.then(function(){\n\t\t\t\t\tfetchProjectTemplates()\n\t\t\t\t\tmodel.metaDataLoading(false)\n\t\t\t\t\ti.schange = false\n\t\t\t\t\ti.ochange = false\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t})\n\t})\n\n\tconst findidealUOM =\n\t\t(disciplineList) => {\n\n\t\t\tmodel.savingProp(true)\n\t\t\tconst refDisciplines =\n\t\t\t\tdisciplineList || model.checkMultiple().data\n\n\t\t\tconst theTime = new Date().getTime() - milliperday\n\t\t\tconst theTimeString = moment().format(\"ll\")\n\t\t\tconst compromisedTime =\n\t\t\t\t(new Date(model.form().project.project_dead_date()).getTime() - theTime)/(1000*60*60*24)\n\n\t\t\tconst dtindex = {}\n\t\t\tconst dgroups =\n\t\t\t\tR.groupBy(\n\t\t\t\t\t(d) => d.discipline_order()\n\t\t\t\t\t,refDisciplines\n\t\t\t\t)\n\n\t\t\tR.mapObjIndexed((v, k) =>\n\t\t\t\t{\n\t\t\t\t\tv.length == 1\n\t\t\t\t\t? dtindex['cons'] =\n\t\t\t\t\t\tdtindex['cons']\n\t\t\t\t\t\t? dtindex['cons'].concat(v)\n\t\t\t\t\t\t: v\n\t\t\t\t\t: dtindex[k] = v\n\t\t\t\t}\n\t\t\t\t, dgroups\n\t\t\t)\n\n\t\t\tconst teamAmount =\n\t\t\t\tR.uniqBy(\n\t\t\t\t\t(d) => d.discipline_order()\n\t\t\t\t\t,refDisciplines\n\t\t\t\t)\n\t\t\t\t.length\n\t\t\t\t== refDisciplines.length\n\t\t\t\t\t? { ['cons']: refDisciplines }\n\t\t\t\t\t: dtindex\n\n\t\t\tconst teamMultiple =\n\t\t\t\tcompromisedTime >= 30\n\t\t\t\t|| Object.keys(dtindex).length > refDisciplines.length*0.5\n\t\t\t\t? 1\n\t\t\t\t: compromisedTime >= 10\n\t\t\t\t|| Object.keys(dtindex).length > refDisciplines.length*0.35\n\t\t\t\t? 2\n\t\t\t\t: 3\n\n\t\t\tR.mapObjIndexed\n\t\t\t\t((t) => {\n\t\t\t\t\treturn t.forEach((tr) => {\n\t\t\t\t\t\treturn tr.uomrate =\n\t\t\t\t\t\t\tNumber(Number(\n\t\t\t\t\t\t\t\ttr.discipline_work() || tr.discipline_planned() <= 50\n\t\t\t\t\t\t\t\t? ( Math.random() + 1 ) * 3\n\t\t\t\t\t\t\t\t: tr.discipline_work() || tr.discipline_planned() >= 100\n\t\t\t\t\t\t\t\t&& tr.discipline_work() || tr.discipline_planned() <= 150\n\t\t\t\t\t\t\t\t? ( Math.random() + 1 ) * 8\n\t\t\t\t\t\t\t\t: tr.discipline_work() || tr.discipline_planned() >= 150\n\t\t\t\t\t\t\t\t&& tr.discipline_work() || tr.discipline_planned() <= 1000\n\t\t\t\t\t\t\t\t? ( Math.random() + 1 ) * 60\n\t\t\t\t\t\t\t\t: ( Math.random() + 1 ) * 500\n\t\t\t\t\t\t\t).toFixed(2))\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t, teamAmount\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tteamMultiple\n\t\t\t\t,teamAmount\n\t\t\t\t,refDisciplines\n\t\t\t\t,theTime\n\t\t\t\t,theTimeString\n\t\t\t}\n\t\t}\n\n\tconst createIdealResource =\n\t\t(disciplineList) => {\n\n\t\t\tconst {\n\t\t\t\tteamMultiple\n\t\t\t\t,teamAmount\n\t\t\t\t,refDisciplines\n\t\t\t\t,theTime\n\t\t\t\t,theTimeString\n\t\t\t} = findidealUOM(disciplineList)\n\n\t\t\tlet teamcount = teamMultiple + 2\n\t\t\tconst newResource =\n\t\t\t\t{\n\t\t\t\t\torganization_id: m.prop(model.data.auth.stream().organization_id)\n\t\t\t\t\t,contractor_id: m.prop(\"\")\n\t\t\t\t\t,contractor_name: m.prop(model.idealResourceName() || \"New Resource \" + theTimeString)\n\t\t\t\t\t,contractor_yard: m.prop(\n\t\t\t\t\t\tmodel.form().project.project_material_suburb()\n\t\t\t\t\t)\n\t\t\t\t\t,contractor_comfortable_work_zone: m.prop(\n\t\t\t\t\t\tmodel.form().project.project_site_type()\n\t\t\t\t\t)\n\t\t\t\t\t,contractor_first_onsite_start_date: m.prop(theTime)\n\t\t\t\t\t,contractor_total_rating: m.prop(0)\n\t\t\t\t\t,contractor_quality_rating: m.prop(0.8)\n\t\t\t\t\t,contractor_common: m.prop(\"Not utilized across previous disciplines\")\n\t\t\t\t\t,contractor_utilized: m.prop(\"\")\n\t\t\t\t\t,user_id: m.prop(null)\n\t\t\t\t\t,contractor_mixed_crews: m.prop(0)\n\t\t\t\t\t,contract_id: model.form().project.contract_id()\n\t\t\t\t\t,crews:\n\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\tObject.keys(teamAmount)\n\t\t\t\t\t\t\t.map((t) =>\n\t\t\t\t\t\t\t\tR.times(\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\tteamcount = teamcount - 1\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tcontractor_id: m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t,crew_id: m.prop(null)\n\t\t\t\t\t\t\t\t\t\t\t,crew_invalid: m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t,crew_excess: m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t,crew_utilized: m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t,crew_name: m.prop(\"New Team \" + ( teamcount - 1 ) + \" \" + theTimeString)\n\t\t\t\t\t\t\t\t\t\t\t,crew_rating: m.prop(0)\n\t\t\t\t\t\t\t\t\t\t\t,user_id: m.prop(null)\n\t\t\t\t\t\t\t\t\t\t\t,crew_common: m.prop(\"Not utilized across previous disciplines\")\n\t\t\t\t\t\t\t\t\t\t\t,crew_work_completed: m.prop(0)\n\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates:\n\t\t\t\t\t\t\t\t\t\t\t\tteamAmount[t].map((tr) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst trate = tr.uomrate\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\torganizations_disciplines_id: m.prop(tr.organizations_disciplines_id())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_id : m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crew_id : m.prop(\"\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,createcontracts: m.prop(true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,organizations_disciplines_nominal_rate: m.prop()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_rate: m.prop(Number(trate))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_description: m.prop(tr.discipline_description())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_name: m.prop(tr.discipline_name())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_feedback_rate: m.prop(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,crews_discipline_rates_uom: m.prop(tr.discipline_uom())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,organizations_disciplines_nominal_expenditure_rate: m.prop(tr.organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,teamMultiple\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tmodel.idealResourceName(newResource.contractor_name())\n\n\t\t\treturn (\n\t\t\t\tsendResources( newResource )\n\t\t\t\t.then(function(res){\n\t\t\t\t\tconst newresource =\n\t\t\t\t\t\tres.find((r) => r.contractor_name && r.contractor_name() == model.idealResourceName())\n\n\t\t\t\t\tmodel.dc_mapping(newresource, refDisciplines)\n\t\t\t\t\tmodel.idealResourceName('')\n\t\t\t\t\tm.redraw()\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\tfunction sendQI({generateOnly}){\n\t\tmodel.reconloading(true)\n\t\tmodel.data.currentRoute(\"Nothing\")\n\t\treturn model.api.invoices.generateqi({\n\t\t\tgenerateOnly\n\t\t\t,type: model.qiSelection()\n\t\t\t,project_extras:\n\t\t\t\tmodel.qiSelection()\n\t\t\t\t== 'Quote'\n\t\t\t\t? model.requestedItems().map(R.pipe(R.prop('project_extras_id'), R.call))\n\t\t\t\t: []\n\t\t\t,invoices:\n\t\t\t\tmodel.qiSelection()\n\t\t\t\t!= 'Quote'\n\t\t\t\t? model.requestedItems().map(R.prop('invoice_id'))\n\t\t\t\t: []\n\t\t\t,chargeDetails: {\n\t\t\t\tcontract_payment_term: model.newqi().contract_payment_term()\n\t\t\t\t, contract_terms: model.newqi().contract_terms()\n\t\t\t}\n\t\t\t,contract_id: model.vm().contract_id\n\t\t\t,contacts: model.qiContactList()\n\t\t})\n\t\t.then((res) => {\n\t\t\tmodel.reconloading(true)\n\t\t\tmodel.data.currentRoute(\"projects\")\n\t\t\treturn res\n\t\t})\n\t}\n\n\n return {\n\t\tsendProjects\n\t\t, fetchGeographies\n\t\t, reOrganizeProjects\n\t\t, showComments\n\t\t, deleteProject\n\t\t, deleteDiscipline\n\t\t, fetchProjects\n\t\t, suburbs: model.suburbs\n , fetchAllocations\n\t\t, bulkDisciplineAddition\n\t\t, bulkDisciplineDeletion\n\t\t, sendOrganizationsDisciplines\n\t\t, deleteProjectExtra\n\t\t, sendResources\n\t\t, createIdealResource\n\t\t, sendNewInvites\n\t\t, deletetInvoices\n\t\t, sendQI\n }\n}\n\n/*\n\tModel: Data storage and functions that interact with that data.\n\n\tThe vm represents the view model, any thing to do with the state of the UI\n\tthat doesn't map to a database record is stored on the view model.\n\n\tIt could be whether or not a button is disabled due to a background process.\n\tOr it could be storing how many items are selected in order to render a tally.\n\n*/\nfunction Model(data){\n\n\tconst viewType = data.scoped(() => null)\n\tconst inverseProjectsList = data.scoped([])\n\tconst modules = m.prop([])\n\tconst users = data.scoped([])\n\tconst usersIndex = data.scoped({})\n\tconst userSelectionIndex = data.scoped({})\n\tconst schedule_id = data.schedule_id\n\tconst loading = m.prop(true)\n\tconst projects = data.scoped([])\n\tconst geographies = m.prop([])\n\tconst resources = data.scoped([])\n\tconst allocations = data.scoped([])\n\tconst suburbs = data.scoped([])\n\tconst rList = data.scoped([])\n\tconst deleteDisciplines = m.prop([])\n\tconst deleteDisciplinesContractors = m.prop([])\n\tconst deleteDisciplinesCrews = m.prop([])\n\tconst deleteProjectExtras = m.prop([])\n\tconst deleteStateProp = m.prop(false)\n\tconst projectOptions = m.prop(false)\n\tconst onProjectList = m.prop(true)\n\tconst checkMultipleProjects = m.prop([])\n\tconst errors = data.scoped({})\n\tconst projectPercentComplete = m.prop(0)\n\tconst projectDisciplines = data.scoped([])\n\tconst projectExtrasIndex = data.scoped({})\n\tconst contractPatchIndex = data.scoped({})\n\tconst completedProjects = data.scoped('inprogress')\n\tconst filteredTaskOptions = data.scoped([])\n\tconst filteredDisciplineOptions = data.scoped([])\n\tconst metaDataLoading = data.scoped(true)\n\tconst seperateTasks = data.scoped(false)\n\tconst deleteProjectContacts = data.scoped([])\n\tconst baseProjectDetailsHash = data.scoped({})\n\tconst reconArray = data.scoped([])\n\tconst showUpload = data.scoped(false)\n\tconst projectTemplates = data.scoped([])\n\tconst newUser = data.scoped(false)\n\tconst deleteInvoiceItemsHash = data.scoped({})\n\tconst deleteInvoiceHash = data.scoped({})\n\tconst newContracts = data.scoped([])\n\tconst newInvoices = data.scoped([])\n\tconst selectedInvoices = data.scoped([])\n\tconst notesexpanded = {}\n\n\tconst oauths = [{name: 'Xero'}]\n\n\tconst allResourceTypes =\n\t\tresources.map((resList) =>\n\t\t\t[].concat(\n\t\t\t\tresList\n\t\t\t\t,R.unnest(\n\t\t\t\t\tresList.map((c) => c.crews)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst projectSortRequired =\n\t\tprojects.map((projects) =>\n\t\t\tR.sortBy(\n\t\t\t\tbyProp(\"project_dead_date\")\n\t\t\t\t,projects\n\t\t\t)\n\t\t\t.some((p, pIndex) =>\n\t\t\t\tp.project_priority()\n\t\t\t\t!= pIndex + 1\n\t\t\t)\n\t\t)\n\n\tconst projectsSortedResult =\n\t\tprojectSortRequired\n\t\t.map((psr) =>\n\t\t\tR.sortBy(\n\t\t\t\tpsr\n\t\t\t\t\t? byProp(\"project_dead_date\")\n\t\t\t\t\t: byProp(\"project_priority\")\n\t\t\t\t,projects()\n\t\t\t)\n\t\t)\n\n\tconst resRatesAvailable =\n\t\tresources.map((res) =>\n\t\t\tR.indexBy(\n\t\t\t\tR.prop('contractor_id')\n\t\t\t\t,res.map((r) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontractor_id: r.contractor_id()\n\t\t\t\t\t\t,rates: R.unnest(\n\t\t\t\t\t\t\tr.crews.map((c) =>\n\t\t\t\t\t\t\t\tc.crews_discipline_rates\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,ratesIByOrgD:\n\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t(a) => a.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\tr.crews.map((c) =>\n\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Update'\n\t\t\t\t\t,'Resource'\n\t\t\t\t\t,'Contract'\n\t\t\t\t\t,'Invoice'\n\t\t\t\t\t,'Contract Obligation'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p.replace(' ', '')+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\n\tconst checkInvoiceDeletion =\n\t\t({o, v, e}) => {\n\t\t\treturn m(\n\t\t\t\t(\n\t\t\t\t\tdeleteInvoiceHash()[o.invoice_id]\n\t\t\t\t\t|| deleteInvoiceItemsHash()[o.invoice_items_id]\n\t\t\t\t\t|| deleteProjectExtras().find((t) =>\n\t\t\t\t\t\tt == o.project_extras_id\n\t\t\t\t\t)\n\t\t\t\t\t|| o.subitems.invoice_items\n\t\t\t\t\t&& o.subitems.invoice_items.length\n\t\t\t\t\t&& o.subitems.invoice_items.every((ii) =>\n\t\t\t\t\t\tdeleteProjectExtras().find((t) =>\n\t\t\t\t\t\t\tt == ii.project_extras_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t? `strike` + (e || '')\n\t\t\t\t\t: (e || '')\n\t\t\t\t)\n\t\t\t\t, v\n\t\t\t)\n\t\t}\n\n\tconst disciplineTabEditArray = ['Disciplines', 'Contract Obligations', 'Tasks', 'Reconciliation', 'Materials']\n\tconst disciplineTabReadArray = ['Disciplines', 'Contract Obligations', 'Tasks', 'Reconciliation', 'Materials']\n\tconst ActiveContractsFeature = function(){\n\t\t// (modules().find((module) => module.modules_name() == 'Contract Obligation Tools')).modules_active()\n\t\treturn true\n\t}\n\tconst ActiveDetailsFeature = function(){\n\t\t// (modules().find((module) => module.modules_name() == 'Project Tasks')).modules_active()\n\t\treturn true\n\t}\n\n\tconst projectSummary =\n\t\tallocations.map((listAllocations) =>\n\t\t\tR.pipe(\n\t\t\t\tR.pluck('allocations_completion_comments')\n\t\t\t\t,R.when(\n\t\t\t\t\t(a) => !R.isEmpty(a)\n\t\t\t\t\t,R.map(R.call)\n\t\t\t\t)\n\t\t\t\t,R.filter( R.identity )\n\t\t\t)(listAllocations)\n\t\t)\n\n\tconst removeContactForm =\n\t\t(pc) => {\n\t\t\tpc.project_contacts_id()\n\t\t\t? deleteProjectContacts().push(pc.project_contacts_id())\n\t\t\t: null\n\t\t\tform().project.project_contacts =\n\t\t\t\tR.differenceWith(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\ta.project_contacts_id() == b.project_contacts_id()\n\t\t\t\t\t\t&& a.key == b.key\n\t\t\t\t\t,form().project.project_contacts\n\t\t\t\t\t,[pc]\n\t\t\t\t)\n\t\t}\n\n\tconst lastProjectDate =\n\t\tallocations.map((alist) =>\n\t\t\talist.length > 0\n\t\t\t\t? moment(\n\t\t\t\t\talist.reverse()[0]\n\t\t\t\t\t.allocations_allocation_date()\n\t\t\t\t).format(\"ll\")\n\t\t\t\t: ''\n\t\t)\n\n\tconst disciplineLastDateIndex =\n\t\tallocations.map((alist) =>\n\t\t\tR.groupBy(\n\t\t\t\tbyProp('allocations_allocation_date')\n\t\t\t\t,alist.slice().reverse()\n\t\t\t)\n\t\t)\n\n\tconst allocationIndex =\n\t\tallocations.map((aList) =>\n\t\t\tR.indexBy(\n\t\t\t\t(a) => a.allocation_id()\n\t\t\t\t,aList\n\t\t\t)\n\t\t)\n\n\tconst vm = data.scoped({})\n\n\tfunction uploadmetadata({uploadbox}){\n\t\treturn R.pickBy(\n\t\t\t(a) => a\n\t\t\t,{\n\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t, project_id: uploadbox == 'taskfiles' ? null : form().project.project_id()\n\t\t\t\t, project_extras_id: uploadbox == 'taskfiles' ? checkMultipleProjectExtras().data.length && R.last(checkMultipleProjectExtras().data).project_extras_id() : null\n\t\t\t}\n\t\t)\n\t}\n\n\tconst timesheets = data.scoped([])\n\tvm.map((p) =>\n\t\tp.project_id && p.project_id()\n\t\t? data.fetchTimesheetsByProject({project_id: p.project_id()}).then(timesheets)\n\t\t: timesheets([])\n\t)\n\n\tconst contract = data.scoped({})\n\tconst contractItems = data.scoped([])\n\tvm.map((p) => {\n\n\t\tselectedInvoices([])\n\t\tnewInvoices([])\n\t\tnewContracts([])\n\n\t\treturn p.project_id\n\t\t&& p.project_id()\n\t\t&& exposer(p.contract_id)\n\t\t&& data.editInvoicePermissions()\n\t\t\t? data.api.contracts.fetch.all({contracts: [exposer(p.contract_id)], getorganizationoh: true})\n\t\t\t\t.then(R.pipe(R.filter((a) => a.contract_id == p.contract_id), R.last, R.tap(contract)))\n\t\t\t\t.then(R.pipe(R.prop('contract_items'), R.unnest))\n\t\t\t\t.then(contractItems)\n\t\t\t: contractItems([])\n\t})\n\n\tconst materialloading = data.scoped(true)\n\tconst materials = data.scoped({actual: [], suggested: []})\n\tconst forceMaterialFetch = data.scoped(false)\n\n\tprop.merge(\n\t\t[\n\t\t\tvm\n\t\t\t,forceMaterialFetch\n\t\t]\n\t)\n\t.map(([p, ]) => {\n\t\treturn Promise.all(\n\t\t\tmaterialloading(true)\n\t\t\t&& p.project_id && p.project_id()\n\t\t\t? [\n\t\t\t\tdata.fetchSuggestedMaterials({\n\t\t\t\t\tprojects: [p.project_id()]\n\t\t\t\t\t,warehouse_id: null\n\t\t\t\t\t,completedProjects: null\n\t\t\t\t})\n\t\t\t\t, data.fetchMaterials({\n\t\t\t\t\tprojects: [p.project_id()]\n\t\t\t\t\t,warehouse_id: null\n\t\t\t\t\t,completedProjects: null\n\t\t\t\t})\n\t\t\t]\n\t\t\t: [[], []]\n\t\t)\n\t\t.then(([suggested, actual]) => {\n\t\t\tmaterialloading(false)\n\n\t\t\tconst itemsindex =\n\t\t\t\tR.groupBy(\n\t\t\t\t\tR.pipe(R.prop('supplier_items_id'), R.call)\n\t\t\t\t\t,actual\n\t\t\t\t)\n\n\t\t\tconst ditemsindex =\n\t\t\t\tR.mapObjIndexed(\n\t\t\t\t\tR.groupBy((o) => R.prop('discipline_id', o) || o.project_id)\n\t\t\t\t\t,itemsindex\n\t\t\t\t)\n\n\t\t\tmaterials({\n\t\t\t\tactual:\n\t\t\t\t\tR.uniqBy(R.pipe(R.prop('supplier_items_id'), R.call), actual)\n\t\t\t\t\t.map((i) => {\n\t\t\t\t\t\tconst suggestedmaterial = suggested.find((s) => s.supplier_items_id == i.supplier_items_id()) || {requiredqty: 0, currentqty: 0}\n\t\t\t\t\t\tconst totalqty = suggestedmaterial['requiredqty'] - suggestedmaterial['currentqty']\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: i.distribution_material_name()\n\t\t\t\t\t\t\t,id: i.supplier_items_id()\n\t\t\t\t\t\t\t,dispersion: ditemsindex[i.supplier_items_id()]\n\t\t\t\t\t\t\t,received:\n\t\t\t\t\t\t\t\tR.sum(R.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['order_received']))))\n\t\t\t\t\t\t\t,allocated:\n\t\t\t\t\t\t\t\tR.sum(R.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['distribution_amount']()))))\n\t\t\t\t\t\t\t,orders:\n\t\t\t\t\t\t\t\tR.uniq(\n\t\t\t\t\t\t\t\t\tR.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['order_name'])))\n\t\t\t\t\t\t\t\t\t.filter(R.identity)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join()\n\t\t\t\t\t\t\t,required: suggestedmaterial['requiredqty'] - suggestedmaterial['currentqty']\n\t\t\t\t\t\t\t,supplier_items_id: i.supplier_items_id()\n\t\t\t\t\t\t\t,value: i.order_items_cost || i.supplier_items_cost * totalqty\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tsuggested.filter((s) => !itemsindex[s.supplier_items_id])\n\t\t\t\t\t\t.map((s) => ({\n\t\t\t\t\t\t\tname: R.last(s.fmgroupedbyitem)['distribution_material_name']\n\t\t\t\t\t\t\t,id: s.supplier_items_id\n\t\t\t\t\t\t\t,dispersion: {}\n\t\t\t\t\t\t\t,received: ''\n\t\t\t\t\t\t\t,allocated: ''\n\t\t\t\t\t\t\t,orders: ''\n\t\t\t\t\t\t\t,required: s.requiredqty\n\t\t\t\t\t\t\t,supplier_items_id: s.supplier_items_id\n\t\t\t\t\t\t\t,value: s.supplier_items_cost*s.requiredqty\n\t\t\t\t\t\t}))\n\t\t\t\t\t)\n\n\t\t\t\t,suggested:\n\t\t\t\t\tR.indexBy(\n\t\t\t\t\t\tR.prop('supplier_items_id')\n\t\t\t\t\t\t,suggested.map((s) => {\n\t\t\t\t\t\t\tconst dindex = R.indexBy(R.prop('discipline_id'), s.fmgroupedbyitem)\n\t\t\t\t\t\t\treturn R.merge(\n\t\t\t\t\t\t\t\t{ditemsindex: R.indexBy(R.prop('discipline_id'), s.fmgroupedbyitem)\n\t\t\t\t\t\t\t\t, editquantity: m.prop(Number(Number(s['requiredqty']-s['currentqty']).toFixed(3)))\n\t\t\t\t\t\t\t\t, editentity:\n\t\t\t\t\t\t\t\t\tObject.keys(dindex).length > 1\n\t\t\t\t\t\t\t\t\t? m.prop({id: vm().project_id(), name: vm().project_name()})\n\t\t\t\t\t\t\t\t\t: m.prop({id: s.fmgroupedbyitem[0].discipline_id, name: s.fmgroupedbyitem[0].discipline_name})}\n\t\t\t\t\t\t\t\t, s\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t})\n\n\t\t\treturn materials()\n\t\t})\n\t})\n\n\tmaterials\n\t.map((materialist) =>\n\t\tmaterialist.actual.map((item) => {\n\t\t\titem.itemdetailarray =\n\t\t\t\tdata.scoped(\n\t\t\t\t\t[vm()].concat(vm().disciplines)\n\t\t\t\t\t.map((pd) => ({\n\t\t\t\t\t\tid: pd.discipline_id ? pd.discipline_id() : pd.project_id()\n\t\t\t\t\t\t,name: pd.discipline_name ? pd.discipline_name() : pd.project_name()\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((pd) =>\n\t\t\t\t\t\titem.dispersion[pd.id]\n\t\t\t\t\t\t|| materials().suggested[item.supplier_items_id]\n\t\t\t\t\t\t&& materials().suggested[item.supplier_items_id]['ditemsindex'][pd.id]\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\titem.itemchoicearray =\n\t\t\t\tdata.scoped(\n\t\t\t\t\t(item.itemdetailarray().find((a) => a.id == vm().project_id())\n\t\t\t\t\t? [] : [{id: vm().project_id(), name: vm().project_name(), parentproject: true}])\n\t\t\t\t\t.concat(item.itemdetailarray())\n\t\t\t\t)\n\n\t\t\treturn item\n\t\t})\n\t)\n\n\tconst itemDetails =\n\t\t(item) =>\n\t\t\telements.splitPane(\n\t\t\t\tm('.mw12'\n\t\t\t\t\t,item.itemdetailarray()\n\t\t\t\t\t.map((pd) =>\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tpd.name\n\t\t\t\t\t\t\t\t,materials().suggested[item.id]\n\t\t\t\t\t\t\t\t&& Object.keys(materials().suggested[item.id]['ditemsindex']).length > 1\n\t\t\t\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\tm.withAttr(\n\t\t\t\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t\t\t\t,() => materials().suggested[item.id].editentity(pd)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,checked: materials().suggested[item.id].editentity().id == pd.id\n\t\t\t\t\t\t\t\t\t\t,title: 'Discipline nominated to absorp materials'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t,(\n\t\t\t\t\t\t\t\titem.dispersion[pd.id]\n\t\t\t\t\t\t\t\t? item.dispersion[pd.id]\n\t\t\t\t\t\t\t\t: materials().suggested[item.id]\n\t\t\t\t\t\t\t\t&& materials().suggested[item.id]['ditemsindex'][pd.id]\n\t\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\t\torder_name: 'requires'\n\t\t\t\t\t\t\t\t\t,distribution_amount: m.prop(0)\n\t\t\t\t\t\t\t\t\t,requiredqty:\n\t\t\t\t\t\t\t\t\t\tmaterials().suggested[item.id]\n\t\t\t\t\t\t\t\t\t\t['ditemsindex'][pd.id]['requiredqty']\n\t\t\t\t\t\t\t\t\t,order_received: 0\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t: [{\n\t\t\t\t\t\t\t\t\torder_name: ''\n\t\t\t\t\t\t\t\t\t,distribution_amount: m.prop(0)\n\t\t\t\t\t\t\t\t\t,required: 0\n\t\t\t\t\t\t\t\t\t,order_received: 0\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\t\t\tm('li.pa2.fw6' + (i.distribution_ordered && i.distribution_ordered() == \"Cancelled\" ? '.red.strike' : '.gold' )\n\t\t\t\t\t\t\t\t\t,[i.order_name == 'requires' ? i.requiredqty : i.order_received || 0\n\t\t\t\t\t\t\t\t\t, i.order_name == 'requires' ? 'required' : 'received on order'\n\t\t\t\t\t\t\t\t\t, i.order_name != 'requires' ? i.order_name : ''\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\ti.distribution_amount() - i.order_received > 0\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t'-'\n\t\t\t\t\t\t\t\t\t\t\t, i.distribution_amount() - i.order_received\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t,i.distribution_ordered && i.distribution_ordered() == \"Cancelled\"\n\t\t\t\t\t\t\t\t\t\t? 'Cancelled'\n\t\t\t\t\t\t\t\t\t\t: i.distribution_amount() - i.order_received > 0\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t 'due,'\n\t\t\t\t\t\t\t\t\t\t\t, 'ETA'\n\t\t\t\t\t\t\t\t\t\t\t, i.order_eta ? new Date(i.order_eta).toLocaleDateString() : 'not confirmed'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('.mw12'\n\t\t\t\t\t,(\n\t\t\t\t\t\tmaterials().suggested[item.id]\n\t\t\t\t\t\t&& materials().suggested[item.id]['mogroupedbyitem'] || []\n\t\t\t\t\t)\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tmaterials().suggested[item.id]\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\torder_name: ''\n\t\t\t\t\t\t\t,distribution_amount: ''\n\t\t\t\t\t\t\t,order_received: ''\n\t\t\t\t\t\t\t,newOrder: true\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: []\n\t\t\t\t\t)\n\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t'button.btn.btn-secondary'\n\t\t\t\t\t\t\t + css\n\t\t\t\t\t\t\t\t.$nest(':hover', `\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tconst idref = materials().suggested[item.id].editentity()\n\t\t\t\t\t\t\t\t\t\t\tconst objtref =\n\t\t\t\t\t\t\t\t\t\t\t\t!materials().suggested[item.id].editentity().parentproject\n\t\t\t\t\t\t\t\t\t\t\t\t? materials().suggested[item.id]['ditemsindex'][idref.id]\n\t\t\t\t\t\t\t\t\t\t\t\t: materials().suggested[item.id]['ditemsindex'][R.last(Object.keys(materials().suggested[item.id]['ditemsindex']))]\n\n\t\t\t\t\t\t\t\t\t\t\treturn data.api.materials.patch.many([\n\t\t\t\t\t\t\t\t\t\t\t\ti.newOrder\n\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\torganization_id: m.prop(objtref.organization_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_id: m.prop(uuid.v4())\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_entity_name: m.prop(idref.name)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_entity_id: m.prop(idref.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,supplier_id: m.prop(objtref.supplier_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,supplier_items_id: m.prop(objtref.supplier_items_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_material_name: m.prop(objtref.distribution_material_name)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_material_description: m.prop(objtref.distribution_material_description)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_amount: m.prop(materials().suggested[item.id].editquantity())\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_batch: m.prop(objtref.distribution_batch)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_container_name: m.prop(objtref.distribution_container_name)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_container_id: m.prop(objtref.distribution_container_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_silo: m.prop(objtref.distribution_silo)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_ordered: m.prop(objtref.distribution_ordered)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_float: m.prop(objtref.distribution_float)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,distribution_stocked: m.prop(vm().project_name() + \" - \" + vm().project_material_suburb())\n\t\t\t\t\t\t\t\t\t\t\t\t\t,supplier_name: m.prop(objtref.supplier_name)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,supplier_items_cost: m.prop(objtref.supplier_items_cost)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,supplier_items_batch_cost: m.prop(objtref.supplier_items_batch_cost)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,autoorder: i.newOrder\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t: R.merge(i, {distribution_entity_id: m.prop(idref.id), distribution_entity_name: m.prop(idref.name)})\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\t\t\t\t\tforceMaterialFetch(true)\n\t\t\t\t\t\t\t\t\t\t\t\tdata.routeids(data.routeids())\n\t\t\t\t\t\t\t\t\t\t\t\tmaterials().suggested[item.id].editentity({id: '', name: ''})\n\t\t\t\t\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t,disabled: !materials().suggested[item.id].editentity().id\n\t\t\t\t\t\t\t\t\t,title: ''\n\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t,width: '5.5em'\n\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t,padding: '0.3em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,i.newOrder ? `New Order` : `Transfer`\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,'x'\n\n\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Material Qty'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: materials().suggested[item.id]['editquantity']\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t,step: 0.001\n\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\t'max-width': '5em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,!i.newOrder\n\t\t\t\t\t\t\t? ['from'\n\t\t\t\t\t\t\t, i.distribution_entity_name + ','\n\t\t\t\t\t\t\t, i.order_received\n\t\t\t\t\t\t\t, 'stocked'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\ti.distribution_amount - i.order_received > 0\n\t\t\t\t\t\t\t\t? [i.distribution_amount - i.order_received, 'due,', 'ETA' , i.order_eta || 'not confirmed']\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\n\tconst timesheetsIndex =\n\t\ttimesheets.map((times) => R.indexBy((t) => t.allocation_id(), times) )\n\tconst totalRecon = data.scoped({materialvalue: 0, expenditurevalue:0, revenuevalue: 0})\n\tconst reconloading = data.scoped(true)\n\tconst reconRender = data.scoped({})\n\tconst invoiceRender = data.scoped([])\n\tconst baseInvoiceRender =\n\t\tinvoiceRender.map(data.cloneInvoice)\n\n\tconst baseInvoiceIndex =\n\t\tinvoiceRender\n\t\t.map((a) => ({\n\t\t\ti: R.indexBy(R.prop('invoice_id'), a)\n\t\t\t,ii: R.indexBy(\n\t\t\t\tR.prop('invoice_items_id')\n\t\t\t\t,R.unnest(a.map(R.prop('invoice_items')))\n\t\t\t)\n\t\t}))\n\n\tprop.merge(\n\t\t[\n\t\t\tdata.calculatedData\n\t\t\t,timesheetsIndex\n\t\t\t,vm\n\t\t\t,metaDataLoading\n\t\t]\n\t)\n\t.map(([cd, ts, p, mdl]) => {\n\t\tif (\n\t\t\tp.project_id && !mdl\n\t\t\t&& Object.keys(cd).length == 2\n\t\t\t&& cd['Overheads0Infinity']\n\t\t\t&& cd['Overheads0Infinity']['possibleContractEntities'].length == p.disciplines.length + 1\n\t\t ){\n\n\t\t\tdeleteInvoiceHash({})\n\t\t\tdeleteInvoiceItemsHash({})\n\n\t\t\tconst invoicelist =\n\t\t\t\tR.unnest(\n\t\t\t\t\tObject.keys(cd)\n\t\t\t\t\t.map((k) => data.calculatedData()[k].focussedInvoices)\n\t\t\t\t)\n\n\t\t\treconArray(\n\t\t\t\t[p]\n\t\t\t\t.concat(p.disciplines.length ? p.disciplines : [])\n\t\t\t\t.concat(\n\t\t\t\t\tinvoicelist.filter((i) =>\n\t\t\t\t\t\ti.organizations_disciplines_id\n\t\t\t\t\t\t&& !p.disciplines.find((d) =>\n\t\t\t\t\t\t\td.organizations_disciplines_id()\n\t\t\t\t\t\t\t== i.organizations_disciplines_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.map((id) => {\n\t\t\t\t\t\tconst ogd =\n\t\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t\t.find((od) =>\n\t\t\t\t\t\t\t\tod.organizations_disciplines_id\n\t\t\t\t\t\t\t\t== id.organizations_disciplines_id\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\torganizations_disciplines_id: m.prop(ogd.organizations_disciplines_id)\n\t\t\t\t\t\t\t,discipline_name: m.prop(ogd.organizations_disciplines_name)\n\t\t\t\t\t\t\t,discipline_description: m.prop(ogd.organizations_disciplines_description)\n\t\t\t\t\t\t\t,discplineNameDescription:\n\t\t\t\t\t\t\t\togd.organizations_disciplines_name + \" - \" + ogd.organizations_disciplines_description\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\n\t\t\treconArray().forEach((r) => {\n\t\t\t\tr.materialvalue = 0\n\t\t\t\tr.revenuevalue = 0\n\t\t\t\tr.expenditurevalue = 0\n\t\t\t})\n\n\n\t\t\tinvoiceRender(invoicelist)\n\n\t\t\tconst materiallist =\n\t\t\t\tR.unnest(\n\t\t\t\t\tObject.keys(cd)\n\t\t\t\t\t.map((k) => data.calculatedData()[k].totalmaterialData)\n\t\t\t\t)\n\n\t\t\tconst [ dconnection, pconnection ] =\n\t\t\t\t\tR.partition(\n\t\t\t\t\t\t(i) =>\n\t\t\t\t\t\t\ti.crew_id\n\t\t\t\t\t\t\t|| (i.contractuserid && i.invoice_items.length)\n\t\t\t\t\t\t\t|| i.organizations_disciplines_id\n\t\t\t\t\t\t\t|| i.crews_discipline_rates_id\n\t\t\t\t\t\t,invoicelist\n\t\t\t\t\t)\n\n\n\t\t\tconst timeInvoiceList =\n\t\t\t\tdconnection.filter((t) =>\n\t\t\t\t\tt.crew_id\n\t\t\t\t\t|| t.contractuserid\n\t\t\t\t)\n\n\t\t\tconst taskInvoiceList =\n\t\t\t\tdconnection.filter((t) =>\n\t\t\t\t\tt.organizations_disciplines_id\n\t\t\t\t\t|| t.crews_discipline_rates_id\n\t\t\t\t)\n\n\t\t\tconst materialitems = materiallist\n\n\t\t\tconst timeitems =\n\t\t\t\tR.unnest(\n\t\t\t\t\ttimeInvoiceList.map((i) =>\n\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t.map((ti) => R.mergeAll([i, ti, ts[ti['allocation_id']] ]))\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\tconst taskitems =\n\t\t\t\tR.unnest(\n\t\t\t\t\ttaskInvoiceList.map((i) =>\n\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t.map((ti) => R.mergeAll([i, ti]))\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\tconst disciplineitems =\n\t\t\t\tR.unnest(\n\t\t\t\t\ttaskInvoiceList.filter((i) =>\n\t\t\t\t\t\t!i.invoice_items.length\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\tconst ogditems =\n\t\t\t\tR.mapObjIndexed(\n\t\t\t\t\t(k, kkey) => {\n\t\t\t\t\t\tconst pitem =\n\t\t\t\t\t\t\tp.project_id() != kkey\n\t\t\t\t\t\t\t? p.disciplines.find((d) => d.organizations_disciplines_id() == kkey) || p\n\t\t\t\t\t\t\t: p\n\n\t\t\t\t\t\treturn R.mapObjIndexed(\n\t\t\t\t\t\t\t(ks) =>\n\t\t\t\t\t\t\t\tR.map(\n\t\t\t\t\t\t\t\t\t(i) => {\n\n\t\t\t\t\t\t\t\t\t\tconst iiamount =\n\t\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t|| i.invoice_items_received_amount\n\t\t\t\t\t\t\t\t\t\t\t|| i.invoice_items_amount\n\t\t\t\t\t\t\t\t\t\t\t|| R.sum(\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t.filter((ii) => ii.organizations_disciplines_id == kkey)\n\t\t\t\t\t\t\t\t\t\t\t\t.map((ii) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_received_amount\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| ii.invoice_items_amount\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t? i.mvalue\n\t\t\t\t\t\t\t\t\t\t\t: i.warehouse_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractor_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.modules_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.tools_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractprojectid\n\t\t\t\t\t\t\t\t\t\t\t|| !i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_rate * i.invoice_amount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_service_rate * i.invoice_service_amount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_depreciation_rate * i.invoice_depreciation_amount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_appreciation_rate * i.invoice_appreciation_amount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_damages_rate * i.invoice_damages_amount\n\n\t\t\t\t\t\t\t\t\t\t\t: ((i.crew_id || i.contractuserid) && i.invoice_items.length)\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_service_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_depreciation_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_appreciation_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_damages_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t// ORDER IS IMPORTANT HERE AS MANY ITEMS WILL HAVE organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t// ,so it can't be used as recog for how we treat each type of invoice\n\t\t\t\t\t\t\t\t\t\t\t: i.invoice_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_service_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_depreciation_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_appreciation_rate * iiamount\n\t\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_damages_rate * iiamount\n\n\n\t\t\t\t\t\t\t\t\t\ti.moneyvalue = value\n\t\t\t\t\t\t\t\t\t\ti.rate =\n\t\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t? i.mvalue/i.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t: i.invoice_rate\n\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_service_rate\n\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_depreciation_rate\n\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_appreciation_rate\n\t\t\t\t\t\t\t\t\t\t\t+ i.invoice_damages_rate\n\t\t\t\t\t\t\t\t\t\ti.qty =\n\t\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t? i.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t: i.warehouse_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractor_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.modules_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.tools_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractprojectid\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_amount\n\t\t\t\t\t\t\t\t\t\t\t: ((i.crew_id || i.contractuserid) && i.invoice_items.length)\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_amount/R.max(1, i.invoice_items.length)\n\t\t\t\t\t\t\t\t\t\t\t: i.crews_discipline_rates_id || i.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_amount\n\t\t\t\t\t\t\t\t\t\t\t: iiamount\n\n\t\t\t\t\t\t\t\t\t\t// WHY DON\"T WE USE invoice_items_amount for sors?\n\n\t\t\t\t\t\t\t\t\t\ti.recqty =\n\t\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t? i.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t: i.warehouse_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractor_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.modules_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.tools_id\n\t\t\t\t\t\t\t\t\t\t\t|| i.contractprojectid\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_received_date && i.invoice_amount || 0\n\t\t\t\t\t\t\t\t\t\t\t: ((i.crew_id || i.contractuserid) && i.invoice_items.length)\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_amount/R.max(1, i.invoice_items.length)\n\t\t\t\t\t\t\t\t\t\t\t: i.crews_discipline_rates_id || i.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t? i.invoice_received_date && i.invoice_amount || 0\n\t\t\t\t\t\t\t\t\t\t\t: i.invoice_items_received_amount\n\n\t\t\t\t\t\t\t\t\t\ti.distribution_amount\n\t\t\t\t\t\t\t\t\t\t? pitem.materialvalue = pitem.materialvalue + value\n\t\t\t\t\t\t\t\t\t\t: value > 0\n\t\t\t\t\t\t\t\t\t\t? pitem.revenuevalue = pitem.revenuevalue + value\n\t\t\t\t\t\t\t\t\t\t: pitem.expenditurevalue = pitem.expenditurevalue + value\n\n\n\t\t\t\t\t\t\t\t\t\ti.materialvalue = i.distribution_amount ? value : 0\n\t\t\t\t\t\t\t\t\t\ti.revenuevalue = value > 0 ? value : 0\n\t\t\t\t\t\t\t\t\t\ti.expenditurevalue = value < 0 ? value : 0\n\n\t\t\t\t\t\t\t\t\t\treturn i\n\t\t\t\t\t\t\t\t\t\t// return i.distribution_amount\n\t\t\t\t\t\t\t\t\t\t// \t? 'materialitems'\n\t\t\t\t\t\t\t\t\t\t// \t: value > 0\n\t\t\t\t\t\t\t\t\t\t// \t? 'revenueitems'\n\t\t\t\t\t\t\t\t\t\t// \t: 'expenditureitems'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,ks\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,R.groupBy(\n\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\ta.project_extras_id\n\t\t\t\t\t\t\t\t\t|| a.warehouse_id\n\t\t\t\t\t\t\t\t\t|| a.contractor_id\n\t\t\t\t\t\t\t\t\t|| a.modules_id\n\t\t\t\t\t\t\t\t\t|| a.tools_id\n\t\t\t\t\t\t\t\t\t|| a.project_id\n\t\t\t\t\t\t\t\t,k\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,R.groupBy(\n\t\t\t\t\t\t(a) => a.organizations_disciplines_id || a.project_id\n\t\t\t\t\t\t,[].concat(timeitems, taskitems, materialitems, pconnection, disciplineitems)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\ttotalRecon(\n\t\t\t\tR.reduce(\n\t\t\t\t\t(a, b) => R.mapObjIndexed((objVal, key) => objVal + b[key], a)\n\t\t\t\t\t, {\n\t\t\t\t\t\tmaterialvalue: 0\n\t\t\t\t\t\t,expenditurevalue: 0\n\t\t\t\t\t\t,revenuevalue: 0\n\t\t\t\t\t}\n\t\t\t\t\t, reconArray()\n\t\t\t\t)\n\t\t\t)\n\n\t\t\treconArray().forEach((pd) => {\n\t\t\t\tpd.subitems =\n\t\t\t\t\togditems[\n\t\t\t\t\t\tpd.organizations_disciplines_id\n\t\t\t\t\t\t? pd.organizations_disciplines_id()\n\t\t\t\t\t\t: pd.project_id()\n\t\t\t\t\t] || {}\n\n\t\t\t\tpd.paymentref =\n\t\t\t\t\tR.uniq(\n\t\t\t\t\t\tR.unnest(Object.keys(pd.subitems).map((si) => pd.subitems[si]))\n\t\t\t\t\t\t.filter(R.prop('invoice_client_reference'))\n\t\t\t\t\t\t.map(R.prop('invoice_client_reference'))\n\t\t\t\t\t)\n\t\t\t\t\t.join(', ')\n\n\t\t\t\tpd.receiveddate =\n\t\t\t\t\tR.last(\n\t\t\t\t\t\tR.unnest(Object.keys(pd.subitems).map((si) => pd.subitems[si]))\n\t\t\t\t\t\t.filter(R.prop('invoice_received_date'))\n\t\t\t\t\t\t.map(R.prop('invoice_received_date'))\n\t\t\t\t\t)\n\t\t\t})\n\n\t\t\treconRender(ogditems)\n\t\t\treconloading(false)\n\t\t}\n\t\telse { reconArray([p]) }\n\t\treturn true\n\t})\n\n\tconst clonedContracts = m.prop([])\n\tconst extraContractObligationData =\n\t\tallocations.map((tlist) =>\n\t\t\tR.tap(\n\t\t\t\t(cList) =>\n\t\t\t\t\tclonedContracts(\n\t\t\t\t\t\tcList.map((contract) => ({\n\t\t\t\t\t\t\t['allocations_' + contract.midfix + '_id']: contract['allocations_' + contract.midfix + '_id']()\n\t\t\t\t\t\t\t,project_extras_id: contract.project_extras_id()\n\t\t\t\t\t\t\t,allocation_id: contract.allocation_id()\n\t\t\t\t\t\t\t,['allocations_' + contract.midfix + '_description']: contract['allocations_' + contract.midfix + '_description']()\n\t\t\t\t\t\t\t,['allocations_' + contract.midfix + '_escalated']: contract['allocations_' + contract.midfix + '_escalated']()\n\t\t\t\t\t\t\t,['allocations_' + contract.midfix + '_clause']: contract['allocations_' + contract.midfix + '_clause']()\n\t\t\t\t\t\t\t,['allocations_' + contract.midfix + '_amount']: contract['allocations_' + contract.midfix + '_amount']\n\t\t\t\t\t\t\t\t? contract['allocations_' + contract.midfix + '_amount']()\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,midfix: contract.midfix\n\t\t\t\t\t\t\t,['allocations_' + contract.midfix + '_approved']: contract['allocations_' + contract.midfix + '_approved']()\n\t\t\t\t\t\t\t,user_id: contract.user_id()\n\t\t\t\t\t\t\t,contractDate: contract.contractDate\n\t\t\t\t\t\t}))\n\t\t\t\t\t)\n\t\t\t\t,R.unnest(\n\t\t\t\t\ttlist.map((a) =>\n\t\t\t\t\t\tR.unnest([\n\t\t\t\t\t\t\ta.allocations_eots.map(R.merge({midfix: 'eots', contractDate: a.allocations_allocation_date()}))\n\t\t\t\t\t\t\t,a.allocations_nods.map(R.merge({midfix: 'nods', contractDate: a.allocations_allocation_date()}))\n\t\t\t\t\t\t\t,a.allocations_vars.map(R.merge({midfix: 'vars', contractDate: a.allocations_allocation_date()}))\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\n\n\n\tconst placeLong = suburbs.map(R.map(s => s.placeLong ))\n\tconst suburbsInput = data.scoped()\n\n\tsuburbsInput.map(\n\t\ttext => data.api.suburbs.fetch.byTextInput(text)\n\t\t\t.then(suburbs)\n\t)\n\n\tconst CONSTANTdisciplines = data.scoped([])\n\tconst organizations_disciplines = data.scoped([])\n\tconst CONSTANTProjectExtras = data.scoped([])\n\n\tconst odinItems =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tusers\n\t\t\t\t,allResourceTypes\n\t\t\t\t,organizations_disciplines\n\t\t\t\t,contractItems\n\t\t\t]\n\t\t)\n\t\t.map(([u,a,o,ci]) => {\n\n\t\t\t return vm().contract_id\n\t\t\t ? R.pipe(R.unnest, R.filter(R.prop('contractrecognitionname')))([u,a,o])\n\t\t\t .map((option) => {\n\n\t\t\t\tconst existingoption =\n\t\t\t\t\tci.find((coption) => option.contractrecognitionid == coption.contractrecognitionid)\n\n\t\t\t\toption.name =\n\t\t\t\t\texistingoption\n\t\t\t\t\t? existingoption.contract_name + ' - ' + existingoption.contractrecognitionname\n\t\t\t\t\t:'New Contract - ' + option.contractrecognitionname\n\n\t\t\t\treturn option\n\t\t\t})\n\t\t\t: []\n\t\t})\n\n\tconst restrictedOrgDisc =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\torganizations_disciplines\n\t\t\t\t,CONSTANTdisciplines\n\t\t\t\t,vm\n\t\t\t]\n\t\t).map(([organizationDisciplines, CONSTANTdisciplines]) => {\n\t\t\treturn (\n\t\t\t\tprojectOptions()\n\t\t\t\t? organizationDisciplines\n\t\t\t\t: R.differenceWith(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t\t\t,organizationDisciplines\n\t\t\t\t\t,CONSTANTdisciplines\n\t\t\t\t)\n\t\t\t)\n\t\t\t.filter((a) =>\n\t\t\t\t!exposer(vm().contract_id)\n\t\t\t\t|| a.applicablecontracts.find((c) => c.contract_id == exposer(vm().contract_id))\n\t\t\t)\n\t\t})\n\n\tconst editContractPermissions = m.prop(false)\n\tconst editContractRecognitions = m.prop(false)\n\tconst editResourcePermissions = m.prop(false)\n\tconst editPermissions = m.prop(false)\n\tconst fetchedcontacts = data.scoped(false)\n\tconst form = m.prop({ project:{} })\n\tconst pe_vm = data.scoped({})\n\tconst cloning = data.scoped(false)\n\tconst activeTab = data.scoped('Disciplines')\n\tconst fetchedExtras = data.scoped(false)\n\tconst projectExtrasStat = vm.map(() => {\n\t\treturn {\n\t\t\tproject_extras_date_assigned: 0\n\t\t\t,project_extras_date_completed: 0\n\t\t\t,project_extras_date_verified: 0\n\t\t\t,project_extras_date_invalid: 0\n\t\t}\n\t})\n\n\tprop.merge(\n\t\t[\n\t\t\tvm\n\t\t\t,users\n\t\t\t,CONSTANTdisciplines\n\t\t]\n\t).map(([, users]) =>\n\t\tuserSelectionIndex(\n\t\t\tR.mapObjIndexed((i) =>\n\t\t\t\ti =\n\t\t\t\t\tdata.scoped(\n\t\t\t\t\t\tusers.filter((u) =>\n\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t&& !i.users().find((du) =>\n\t\t\t\t\t\t\t\tdu.user_id() == u.user_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)(\n\t\t\t\tR.indexBy(\n\t\t\t\t\tR.prop('key')\n\t\t\t\t\t,(form().project.disciplines || [])\n\t\t\t\t\t.map( R.pick(['users', 'key']) )\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t)\n\n\tvm.map((p) =>\n\t\tp.project_id\n\t\t\t? Promise.all([\n\t\t\t\tdata.fetchResource({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,teams: [\n\t\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t\t,'crew_name'\n\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,rates: [\n\t\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t\t,'crews_discipline_rates_id'\n\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\t,organizations_disciplines: p.disciplines.map((a) => a.organizations_disciplines_id()).filter((a) => a)\n\t\t\t\t})\n\t\t\t\t\t.then(resources)\n\t\t\t])\n\t\t: null\n\t)\n\n\tconst projectContactOptions = data.scoped([])\n\n\tfunction projectExtrasSum(pE, onlyprop){\n\t\t[\n\t\t\t'project_extras_date_assigned'\n\t\t\t,'project_extras_date_completed'\n\t\t\t,'project_extras_date_verified'\n\t\t\t,'project_extras_date_invalid'\n\t\t]\n\t\t.filter((theprops) => theprops == onlyprop || !onlyprop)\n\t\t.forEach((prop) => {\n\t\t\tpE[prop]()\n\t\t\t\t? projectExtrasStat()[prop] =\n\t\t\t\t\tprojectExtrasStat()[prop] + 1\n\t\t\t\t: onlyprop\n\t\t\t\t\t? projectExtrasStat()[prop] =\n\t\t\t\t\t\tprojectExtrasStat()[prop] - 1\n\t\t\t\t\t: null\n\t\t})\n\t}\n\n\tprop.merge(\n\t\t[\n\t\t\tvm\n\t\t\t,fetchedcontacts\n\t\t]\n\t)\n\t.map(([p, fc]) => {\n\t\tif(p.project_id && p.project_id() && fc && p.organization_id() == data.initiateContractFetch().organization_id ){\n\t\t\treturn Promise.all([\n\t\t\t\tdata.fetchProjectContacts({project_id: p.project_id()})\n\t\t\t\t,data.fetchProjectContacts({project_id: p.project_id(), getOptions:'getOptions'})\n\t\t\t])\n\t\t\t.then(([pclist, options]) => {\n\t\t\t\tp.project_contacts = pclist\n\t\t\t\tform().project.project_contacts =\n\t\t\t\t\tp.project_contacts.map((pc) => ({\n\t\t\t\t\t\tproject_contacts_id: m.prop(pc.project_contacts_id())\n\t\t\t\t\t\t,project_contacts_type: m.prop(pc.project_contacts_type())\n\t\t\t\t\t\t,project_contacts_name: m.prop(pc.project_contacts_name())\n\t\t\t\t\t\t,project_contacts_phone: m.prop(pc.project_contacts_phone())\n\t\t\t\t\t\t,project_contacts_email: m.prop(pc.project_contacts_email())\n\t\t\t\t\t\t,project_id: m.prop(pc.project_id())\n\t\t\t\t\t\t,user_id: m.prop(pc.user_id())\n\t\t\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t}))\n\n\t\t\t\tprojectContactOptions(\n\t\t\t\t\toptions.filter((x) =>\n\t\t\t\t\t\t!form().project.project_contacts.find((y) =>\n\t\t\t\t\t\t\tx.project_contacts_name() + x.project_contacts_type()\n\t\t\t\t\t\t\t== y.project_contacts_name() + y.project_contacts_type()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\tfetchedcontacts(false)\n\t\t\t\treturn true\n\t\t\t})\n\t\t}\n\t\treturn true\n\t})\n\n\tconst projectExtrasTypes =\n\t\tdata.scoped(\n\t\t\t{\n\t\t\t\tcompleted: ''\n\t\t\t\t, invalid: ''\n\t\t\t\t, verified: ''\n\t\t\t\t, assigned: ''\n\t\t\t}\n\t\t)\n\n\tfunction getTasks(prev, [p, activeTab, peT]){\n\t\treturn p.project_id\n\t\t&& p.project_id()\n\t\t&& !fetchedExtras()\n\t\t&& activeTab == 'Tasks'\n\t\t\t? Promise.all([\n\t\t\t\tdata.fetchProjectExtras({\n\t\t\t\t\tproject_id: p.project_id()\n\t\t\t\t\t,discipline_id: null\n\t\t\t\t\t,f:fetchedExtras\n\t\t\t\t\t,typesObj:peT\n\t\t\t\t\t,uniqBy: ''\n\t\t\t\t})\n\t\t\t])\n\t\t\t\t.then(function([result]){\n\t\t\t\t\tvm().project_extras = result\n\n\t\t\t\t\tbaseProjectDetailsHash(R.indexBy((t) => t.project_extras_id(), result))\n\n\t\t\t\t\tprojectExtrasStat({\n\t\t\t\t\t\tproject_extras_date_assigned: 0\n\t\t\t\t\t\t,project_extras_date_completed: 0\n\t\t\t\t\t\t,project_extras_date_verified: 0\n\t\t\t\t\t\t,project_extras_date_invalid: 0\n\t\t\t\t\t})\n\n\t\t\t\t\tform().project.project_extras =\n\t\t\t\t\t\tresult.map((pe) => {\n\t\t\t\t\t\t\tpe_vm(pe)\n\t\t\t\t\t\t\tprojectExtrasSum(pe, null)\n\t\t\t\t\t\t\treturn cloningProjectE(cloning(), true)\n\t\t\t\t\t\t})\n\n\t\t\t\t\tmasterPELIST(true)\n\t\t\t\t\tm.redraw()\n\t\t\t\t\treturn result\n\t\t\t\t})\n\t\t\t: prev\n\t}\n\n\tconst projectExtras =\n\t\tprop.scan(\n\t\t\tgetTasks\n\t\t\t,[]\n\t\t\t,prop.merge(\n\t\t\t\t[\n\t\t\t\t\tvm\n\t\t\t\t\t,activeTab\n\t\t\t\t\t,projectExtrasTypes\n\t\t\t\t\t,fetchedExtras\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\t// eslint-disable-next-line no-unused-vars\n\tconst forceRedraw = prop.merge(\n\t\t[\n\t\t\tdata.calculated\n\t\t\t,errors\n\t\t\t,projectExtras\n\t\t\t,metaDataLoading\n\t\t\t,projects\n\t\t\t,allResourceTypes\n\t\t\t,reconloading\n\t\t\t,materials\n\t\t]\n\t).map(function(){\n\t\treturn setTimeout(function(){\n\t\t\tm.redraw()\n\t\t}, 0)\n\t})\n\n\n\tconst resetLoaders =\n\t\t() =>\n\t\t\tdata.currentRoute('projects')\n\t\t\t&& metaDataLoading(false)\n\n\n\tconst discipline_vm = data.scoped({})\n\tconst savingProp = data.scoped(false)\n\tconst disciplineSpread = data.scoped([])\n\tconst spreading = data.scoped(false)\n\n\tsavingProp.map((s) => !s ? resetLoaders() : null)\n\n\tconst restrictedOrgTask =\n\tprop.merge(\n\t\t[\n\t\t\torganizations_disciplines\n\t\t\t,disciplineSpread\n\t\t\t,vm\n\t\t]\n\t).map(([organizationDisciplines, disciplineSpread]) =>\n\t\tR.differenceWith(\n\t\t\t(a, b) =>\n\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t,organizationDisciplines\n\t\t\t,disciplineSpread\n\t\t)\n\t\t.filter((a) =>\n\t\t\t!exposer(vm().contract_id)\n\t\t\t|| a.applicablecontracts.find((c) => c.contract_id == exposer(vm().contract_id) )\n\t\t)\n\t)\n\n\tconst checkMultiple =\n\t\tm.prop({ data: [] })\n\n\tconst checkMultipleProjectExtras =\n\t\tm.prop({ data: [] })\n\n\tconst processedTasksSelected =\n\t\t() => checkMultipleProjectExtras()\n\t\t.data.some((t) => t.allocation_id())\n\n\tconst process_geo = function(geo_name){\n\t\tvar index = R.findIndex( (g) => g.geography_depot == geo_name, geographies() )\n\t\tvar geo_item = R.find(R.propEq('placeLong', geo_name), suburbs())\n\t\tif (index == -1 && geo_item ){\n\t\t\tvar new_geography = {\n\t\t\t\torganization_id: m.prop(\"\")\n\t\t\t\t,geography_id: m.prop(\"\")\n\t\t\t\t,geography_depot: m.prop(geo_name)\n\t\t\t\t,geography_latitude: m.prop(Number(geo_item.latitude))\n\t\t\t\t,geography_longitude: m.prop(Number(geo_item.longitude)),\n\t\t\t}\n\t\t\tgeographies().push(new_geography)\n\t\t}\n\t\treturn new_geography\n\t}\n\n\n\tconst chartview =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tdata.coalatedSelectedVersion\n\t\t\t\t//,discipline_vm\n\t\t\t\t,data.calculated\n\t\t\t]\n\t\t)\n\t\t.map(([cv, c]) => {\n\n\t\t\tconst chartobject =\n\t\t\t\t{\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tpossibleContractEntities:\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t!cv || !Object.keys(cv).length\n\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t// : !checkMultiple().data.length\n\t\t\t\t\t\t\t\t// ?\n\t\t\t\t\t\t\t\t: [cv[form().project.contractrecognitionid]]\n\t\t\t\t\t\t\t\t// : checkMultiple().data.map((diascipline) =>\n\t\t\t\t\t\t\t\t// \tcv[diascipline.contractrecognitionid]\n\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(R.identity)\n\n\t\t\t\t\t}\n\t\t\t\t\t,id: uuid.v4()\n\t\t\t\t}\n\n\t\t\tif( c ){\n\t\t\t\tdata.sumSchedule({fe: chartobject, data: chartobject.data})\n\t\t\t}\n\n\t\t\treturn chartobject\n\t\t})\n\n\tconst debounceDrawChart = data.debounce(drawChart, 200)\n\n\tprop.merge(\n\t\t[\n\t\t\tchartview\n\t\t\t,data.calculated\n\t\t]\n\t)\n\t.map(([cv, c]) => {\n\t\treturn !cv || !c || !Object.keys(data.loadchart()).length\n\t\t? null\n\t\t: debounceDrawChart({\n\t\t\tfe: cv\n\t\t\t,data: {\n\t\t\t\tseries:\n\t\t\t\t\t!cv.data.possibleContractEntities.length\n\t\t\t\t\t? []\n\t\t\t\t\t: cv.data.possibleContractEntities\n\t\t\t\t,ftypeActual: ['currentProfits', 'outstandingProfits']\n\t\t\t\t,ftypeForecast: ['forecastedProfits']\n\t\t\t}\n\t\t\t,features: data.features\n\t\t})\n\t})\n\n\tconst ifCharts = (fe, f) => data.features().Charts && fe && fe.chart && f()\n\n\tvar cloningProjectE = function(clonemarker, pedit, peIndex){\n\t\tvar pe_clone = resetPEForm(peIndex)\n\t\tpe_clone.relatedDiscipline = pe_vm().relatedDiscipline\n\t\tpe_clone.organizations_disciplines_id = exposer(pe_vm().organizations_disciplines_id)\n\t\tpe_clone.project_id( pedit || clonemarker ? pe_vm().project_id() : null )\n\t\tpe_clone.discipline_id( pe_vm().discipline_id() )\n\t\tpe_clone.invite_id( pe_vm().invite_id() )\n\t\tpe_clone.project_extras_planned_amount( pe_vm().project_extras_planned_amount() )\n\t\tpe_clone.project_extras_actual_amount( pe_vm().project_extras_actual_amount() )\n\t\tpe_clone.user_id( pe_vm().user_id() )\n\t\tpe_clone.project_extras_custom( pe_vm().project_extras_custom() )\n\t\tpe_clone.parents(\n\t\t\tclonemarker || !pedit\n\t\t\t? []\n\t\t\t: pe_vm().parents()\n\t\t)\n\t\tpe_clone.project_extras_id(\n\t\t\tclonemarker || !pedit\n\t\t\t? pe_clone.project_extras_id()\n\t\t\t: pe_vm().project_extras_id()\n\t\t)\n\t\tpe_clone.allocation_id(\n\t\t\tclonemarker || !pedit\n\t\t\t? null\n\t\t\t: pe_vm().allocation_id()\n\t\t)\n\t\tpe_clone.costinvoices =\n\t\t\tclonemarker || !pedit\n\t\t\t? []\n\t\t\t: pe_vm().costinvoices\n\n\t\tpe_clone.revenueinvoices =\n\t\t\tclonemarker || !pedit\n\t\t\t? []\n\t\t\t: pe_vm().revenueinvoices\n\t\tpe_clone.newtask = clonemarker || !pedit ? 'New Task' : ''\n\t\tpe_clone.invite_email = pe_vm().invite_email\n\t\tpe_clone.contract_id = pe_vm().contract_id\n\t\tpe_clone.filecount = pe_vm().filecount\n\t\tpe_clone.username = pe_vm().username\n\t\tpe_clone.project_name = pe_vm().project_name\n\t\tpe_clone.organization_id = pe_vm().organization_id\n\t\tpe_clone.project_extras_type( pe_vm().project_extras_type() )\n\t\tpe_clone.project_extras_frequency( pe_vm().project_extras_frequency() )\n\t\tpe_clone.project_extras_description( pe_vm().project_extras_description() )\n\t\tpe_clone.project_extras_priority( pe_vm().project_extras_priority() )\n\t\tpe_clone.project_extras_date_assigned( pe_vm().project_extras_date_assigned() )\n\t\tpe_clone.project_extras_date_completed( pe_vm().project_extras_date_completed() )\n\t\tpe_clone.project_extras_date_verified( pedit ? pe_vm().project_extras_date_verified() : null )\n\t\tpe_clone.project_extras_date_invalid( pe_vm().project_extras_date_invalid() )\n\t\tpe_clone.project_extras_notes( pe_vm().project_extras_notes() )\n\t\tpe_clone.project_extras_address( pe_vm().project_extras_address() )\n\t\treturn pe_clone\n\t}\n\n\tvar cloningProject = function(clonemarker, pedit){\n\t\tvar clone = {}\n\t\tconst templateclone =\n\t\t\tvm().project_template_id()\n\t\t\t&& vm().organization_id() != data.initiateContractFetch().organization_id\n\n\n\t\tif( vm() ){\n\t\t\tclone = resetPForm()\n\t\t\tclone.organization_id( templateclone ? '' : vm().organization_id() )\n\t\t\tclone.contractrecognitionid = clonemarker == true ? null : vm().contractrecognitionid\n\t\t\tclone.eotSum = clonemarker == true ? null : vm().eotSum\n\t\t\tclone.nodSum = clonemarker == true ? null : vm().nodSum\n\t\t\tclone.varSum = clonemarker == true ? null : vm().varSum\n\t\t\tclone.incompletetaskcount = clonemarker == true ? null : vm().incompletetaskcount\n\t\t\tclone.lastAllocationDate = clonemarker == true ? null : vm().lastAllocationDate\n\t\t\tclone.project_id(clonemarker == true ? clone.project_id() : vm().project_id())\n\t\t\tclone.project_name( templateclone || vm().custom ? '' : clonemarker == true ? vm().project_name() + \" (Clone)\" : vm().project_name() )\n\t\t\tclone.project_parent( clonemarker == true && !templateclone ? vm().project_id() : vm().project_parent() )\n\t\t\tclone.project_template_id( vm().project_template_id() )\n\t\t\tclone.project_priority( vm().project_priority() )\n\t\t\tclone.contract_id( templateclone ? null : exposer(vm().contract_id) )\n\t\t\tclone.contract_name = vm().contract_name\n\t\t\tclone.project_site_type( vm().project_site_type() )\n\t\t\tclone.project_suburb( templateclone ? '' : vm().project_suburb() )\n\t\t\tclone.project_material_suburb( templateclone ? '' : vm().project_material_suburb() )\n\t\t\tclone.project_start_date( vm().project_start_date() )\n\t\t\tclone.project_dead_date( vm().project_dead_date() )\n\t\t\tclone.project_commissioning_date( vm().project_commissioning_date() )\n\t\t\tclone.project_final_acceptance( vm().project_final_acceptance() )\n\t\t\tclone.project_completion_marker( clonemarker == true ? null : vm().project_completion_marker() )\n\t\t\tclone.project_completion_comments( clonemarker == true ? '' : vm().project_completion_comments() )\n\t\t\tclone.project_draft_at( clonemarker == true ? new Date().setHours(24, 0, 0, 0) : vm().project_draft_at() )\n\t\t\tclone.project_tendered_at( clonemarker == true ? null : vm().project_tendered_at() )\n\t\t\tclone.project_rejected_at( clonemarker == true ? null : vm().project_rejected_at() )\n\t\t\tclone.project_accepted_at( clonemarker == true ? null : vm().project_accepted_at() )\n\t\t\tclone.workdays = vm().workdays\n\t\t\tclone.project_documents( clonemarker == true || templateclone ? [] : vm().project_documents() )\n\t\t\tclone.disciplines = []\n\t\t\tclone.project_extras = []\n\t\t\tclone.__requestedAt = vm().__requestedAt\n\t\t\tvm().disciplines.forEach((d) => {\n\t\t\t\tdiscipline_vm(d)\n\t\t\t\tclone.disciplines.push(cloningProjectD(false, pedit, clone, templateclone))\n\t\t\t})\n\n\t\t\tvm().project_extras.forEach((pe, peIndex) => {\n\t\t\t\tpe_vm(pe)\n\t\t\t\tclone.project_extras.push(cloningProjectE(false, pedit, peIndex))\n\t\t\t})\n\n\t\t\tclone.newproject = clonemarker == false ? false : true\n\t\t\tclone.project_completion = vm().project_completion\n\t\t\tclone.schedule_name = vm().schedule_name\n\t\t\tclone.schedule_version_id = vm().schedule_version_id\n\n\t\t\tform().project = clone\n\t\t\tdiscipline_vm({})\n\t\t\tprojectDisciplines(vm().disciplines)\n\t\t\tfetchedcontacts(true)\n\t\t}\n\n\t\treturn clone\n\t}\n\n\tvar cloningProjectD = function(clonemarker, pedit, project, templateclone){\n\t\tvar discipline_clone = resetDForm().discipline[0]\n\t\tdiscipline_clone.project_id( discipline_vm().project_id() )\n\n\t\tconst newodg =\n\t\t\torganizations_disciplines()\n\t\t\t.find((ogd) =>\n\t\t\t\togd.organizations_disciplines_name\n\t\t\t\t+ ogd.organizations_disciplines_description\n\t\t\t\t== discipline_vm().discipline_name()\n\t\t\t\t+ discipline_vm().discipline_description()\n\t\t\t)\n\n\t\tdiscipline_clone.organizations_disciplines_id(\n\t\t\tclonemarker == true || templateclone\n\t\t\t\t? newodg && templateclone\n\t\t\t\t\t? newodg.organizations_disciplines_id\n\t\t\t\t\t: null\n\t\t\t: discipline_vm().organizations_disciplines_id()\n\t\t)\n\n\t\tclonemarker || templateclone\n\t\t? discipline_clone.newdiscipline = true\n\t\t: null\n\n\t\tdiscipline_clone.contractrecognitionid = clonemarker == true || templateclone ? null : discipline_vm().contractrecognitionid\n\t\tdiscipline_clone.taskcount = discipline_vm().taskcount\n\t\tdiscipline_clone.eotSum = clonemarker == true || templateclone ? null : discipline_vm().eotSum\n\t\tdiscipline_clone.nodSum = clonemarker == true || templateclone ? null : discipline_vm().nodSum\n\t\tdiscipline_clone.varSum = clonemarker == true || templateclone ? null : discipline_vm().varSum\n\t\tdiscipline_clone.lastAllocationDate = clonemarker == true || templateclone ? null : discipline_vm().lastAllocationDate\n\t\tdiscipline_clone.discplineNameDescription = discipline_vm().discplineNameDescription\n\n\t\tdiscipline_clone.organizations_disciplines_nominal_expenditure_rate(discipline_vm().organizations_disciplines_nominal_expenditure_rate())\n\t\tdiscipline_clone.organizations_disciplines_nominal_revenue_rate(discipline_vm().organizations_disciplines_nominal_revenue_rate())\n\t\tdiscipline_clone.contract_items_client_reference(discipline_vm().contract_items_client_reference())\n\t\tdiscipline_clone.organizations_disciplines_nominal_rate(discipline_vm().organizations_disciplines_nominal_rate())\n\n\t\tdiscipline_clone.discipline_name( clonemarker == true ? discipline_vm().discipline_name() + \" (Clone)\" : discipline_vm().discipline_name() )\n\t\tdiscipline_clone.discipline_description( clonemarker == true ? discipline_vm().discipline_description() + \" (Clone)\" : discipline_vm().discipline_description() )\n\t\tdiscipline_clone.discipline_contract_multiplier( discipline_vm().discipline_contract_multiplier() )\n\t\tdiscipline_clone.discipline_order( discipline_vm().discipline_order() )\n\t\tdiscipline_clone.discipline_priority( discipline_vm().discipline_priority() )\n\t\tdiscipline_clone.discipline_work( discipline_vm().discipline_work() )\n\t\tdiscipline_clone.discipline_planned( discipline_vm().discipline_planned() )\n\t\tdiscipline_clone.discipline_combination_limit( discipline_vm().discipline_combination_limit() )\n\t\tdiscipline_clone.discipline_combine( discipline_vm().discipline_combine() )\n\t\tdiscipline_clone.discipline_custom( discipline_vm().discipline_custom() )\n\t\tdiscipline_clone.discipline_completed( clonemarker == false && pedit == true ? discipline_vm().discipline_completed() : 0 )\n\t\tdiscipline_clone.discipline_harshness( discipline_vm().discipline_harshness() )\n\t\tdiscipline_clone.discipline_percent( discipline_vm().discipline_percent() )\n\t\tdiscipline_clone.discipline_id( clonemarker == false && pedit == true ? discipline_vm().discipline_id() : \"\" )\n\t\tdiscipline_clone.discipline_flow( discipline_vm().discipline_flow() )\n\t\tdiscipline_clone.discipline_start_date(\n\t\t\tclonemarker == false && pedit == true || !project\n\t\t\t? discipline_vm().discipline_start_date()\n\t\t\t: project.project_start_date()\n\t\t)\n\t\tdiscipline_clone.discipline_end_date(\n\t\t\tclonemarker == false && pedit == true || !project\n\t\t\t? discipline_vm().discipline_end_date()\n\t\t\t: project.project_dead_date()\n\t\t)\n\t\tdiscipline_clone.discipline_recovery( discipline_vm().discipline_recovery() )\n\t\tdiscipline_clone.discipline_auto_assign_tasks( discipline_vm().discipline_auto_assign_tasks() )\n\t\tdiscipline_clone.discipline_strict_end( discipline_vm().discipline_strict_end() )\n\t\tdiscipline_clone.discipline_strict_start( discipline_vm().discipline_strict_start() )\n\t\tdiscipline_clone.discipline_uom( discipline_vm().discipline_uom() )\n\t\tdiscipline_clone.discipline_consistency( discipline_vm().discipline_consistency() )\n\t\tdiscipline_clone.discipline_consolidate_start( discipline_vm().discipline_consolidate_start() )\n\t\tdiscipline_clone.workdayeffort = discipline_vm().workdayeffort\n\t\tdiscipline_clone.badeffortteams = discipline_vm().badeffortteams\n\t\tdiscipline_clone.disciplines_contractors =\n\t\t\t!templateclone\n\t\t\t? discipline_vm().disciplines_contractors.map((dc) => {\n\t\t\t\treturn {\n\t\t\t\t\tdiscipline_id: m.prop( clonemarker == false && pedit == true ? dc.discipline_id() : null )\n\t\t\t\t\t,user_id: m.prop( dc.user_id() )\n\t\t\t\t\t,disciplines_contractors_id: m.prop( clonemarker == false && pedit == true ? dc.disciplines_contractors_id() : null )\n\t\t\t\t\t,disciplines_contractors_name: m.prop( dc.disciplines_contractors_name() )\n\t\t\t\t\t,contractor_id: m.prop( dc.contractor_id() )\n\t\t\t\t\t,disciplines_contractors_mixed_crews: m.prop( dc.disciplines_contractors_mixed_crews() )\n\t\t\t\t\t,disciplines_contractors_total_rating: m.prop( dc.disciplines_contractors_total_rating() )\n\t\t\t\t\t,disciplines_contractors_quality_rating: m.prop( dc.disciplines_contractors_quality_rating() )\n\t\t\t\t\t,disciplines_contractors_common: m.prop( dc.disciplines_contractors_common() )\n\t\t\t\t\t,disciplines_contractors_utilized: m.prop( dc.disciplines_contractors_utilized() )\n\t\t\t\t\t,disciplines_contractors_crews:\n\t\t\t\t\t\tdc.disciplines_contractors_crews.map((dcc) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tuser_id: m.prop( dcc.user_id() )\n\t\t\t\t\t\t\t\t,contractor_id: m.prop( dc.contractor_id() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_name: m.prop( dcc.disciplines_contractors_crews_name() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_contract_multiplier: m.prop( dcc.disciplines_contractors_crews_contract_multiplier() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_work_completed: m.prop( dcc.disciplines_contractors_crews_work_completed() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_id: m.prop( clonemarker == false && pedit == true ? dcc.disciplines_contractors_id() : null )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_invalid: m.prop( dcc.disciplines_contractors_crews_invalid() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_excess: m.prop( dcc.disciplines_contractors_crews_excess() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_utilized: m.prop( dcc.disciplines_contractors_crews_utilized() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_rating: m.prop( dcc.disciplines_contractors_crews_rating() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_common: m.prop( dcc.disciplines_contractors_crews_common() )\n\t\t\t\t\t\t\t\t,disciplines_contractors_crews_id: m.prop( clonemarker == false && pedit == true ? dcc.disciplines_contractors_crews_id() : null )\n\t\t\t\t\t\t\t\t,crew_id: m.prop( dcc.crew_id() )\n\t\t\t\t\t\t\t\t,crews_discipline_rates_id: m.prop( dcc.crews_discipline_rates_id )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t\t: []\n\n\t\treturn discipline_clone\n\t}\n\n\n\n\tvar DeleteProjectMode = m.prop(false)\n\tvar DeleteProjectExtrasMode = m.prop(false) //eslint-disable-line\n\tvar DeleteDisciplineMode = m.prop(false)\n\n\tvar resetPForm = function(){\n\t\treturn {\n\t\t\tschedule_id: m.prop(schedule_id())\n\t\t\t,project_id: m.prop(uuid.v4())\n\t\t\t,organization_id: m.prop(\"\")\n\t\t\t,project_name: m.prop(\"\")\n\t\t\t,project_parent: m.prop(null)\n\t\t\t,project_template_id: m.prop(null)\n\t\t\t,project_priority: m.prop( projects().length + 1 )\n\t\t\t,contract_id: m.prop(null)\n\t\t\t,contract_name: \"Disconnected Ledgers\"\n\t\t\t,project_site_type: m.prop(\"Suburban\")\n\t\t\t,project_suburb: m.prop(\"\")\n\t\t\t,project_material_suburb: m.prop(\"\")\n\t\t\t,project_start_date: m.prop(\n\t\t\t\tnew Date().setHours(24, 0, 0, 0)\n\t\t\t)\n\t\t\t,project_dead_date: m.prop(\n\t\t\t\tnew Date().getTime() + aMonth * 3\n\t\t\t)\n\t\t\t,project_commissioning_date: m.prop(\n\t\t\t\tnew Date().getTime() + aMonth * 4\n\t\t\t)\n\t\t\t,project_final_acceptance: m.prop(\n\t\t\t\tnew Date().getTime() + aMonth * 12\n\t\t\t)\n\t\t\t,project_draft_at: m.prop( new Date().setHours(24, 0, 0, 0) )\n\t\t\t,project_tendered_at: m.prop( null )\n\t\t\t,project_rejected_at: m.prop( null )\n\t\t\t,project_accepted_at: m.prop( null )\n\t\t\t,project_completion_marker: m.prop()\n\t\t\t,project_completion_comments: m.prop(\"\")\n\t\t\t,project_contacts: []\n\t\t\t,project_documents: m.prop([])\n\t\t\t,disciplines: []\n\t\t\t,project_extras: []\n\t\t\t,newproject: true\n\t\t}\n\t}\n\n\n\tvar resetDForm = function(){\n\t\tvar resetD = {\n\t\t\tdiscipline: [{\n\t\t\t\tproject_id: m.prop(\"\")\n\t\t\t\t,users: m.prop([])\n\t\t\t\t,organizations_disciplines_id: m.prop(\"\")\n\t\t\t\t,discipline_name: m.prop(\"\")\n\t\t\t\t,discipline_description: m.prop(' ')\n\t\t\t\t,discipline_order: m.prop(\n\t\t\t\t\tform().project.project_id\n\t\t\t\t\t\t? form().project.disciplines.length + 1\n\t\t\t\t\t\t: 0\n\t\t\t\t)\n\t\t\t\t,discipline_contract_multiplier: m.prop(1)\n\t\t\t\t,discipline_priority: m.prop(0)\n\t\t\t\t,discipline_work: m.prop(0)\n\t\t\t\t,discipline_planned: m.prop(1)\n\t\t\t\t,discipline_combination_limit: m.prop(1)\n\t\t\t\t,discipline_combine: m.prop(0)\n\t\t\t\t,discipline_custom: m.prop(0)\n\t\t\t\t,discipline_completed: m.prop(0)\n\t\t\t\t,discipline_harshness: m.prop(1)\n\t\t\t\t,discipline_percent: m.prop(0)\n\t\t\t\t,discipline_id: m.prop(\"\")\n\t\t\t\t,discipline_flow: m.prop(\"Consecutive Operation\")\n\t\t\t\t,discipline_start_date: m.prop(\n\t\t\t\t\tform().project.project_id\n\t\t\t\t\t\t? new Date(form().project.project_start_date()).getTime()\n\t\t\t\t\t\t: vm().project_start_date\n\t\t\t\t\t\t? new Date(vm().project_start_date()).getTime()\n\t\t\t\t\t\t: new Date().getTime() + milliperday\n\t\t\t\t\t)\n\t\t\t\t,discipline_end_date: m.prop(\n\t\t\t\t\tform().project.project_id\n\t\t\t\t\t\t? new Date(form().project.project_dead_date()).getTime()\n\t\t\t\t\t\t: vm().project_dead_date\n\t\t\t\t\t\t? new Date(vm().project_dead_date()).getTime()\n\t\t\t\t\t\t: new Date().getTime() + aMonth * 3\n\t\t\t\t\t)\n\t\t\t\t,discipline_recovery: m.prop(true)\n\t\t\t\t,discipline_auto_assign_tasks: m.prop(true)\n\t\t\t\t,discipline_strict_end: m.prop(false)\n\t\t\t\t,discipline_strict_start: m.prop(false)\n\t\t\t\t,discipline_uom: m.prop('')\n\t\t\t\t,discipline_consistency: m.prop(false)\n\t\t\t\t,discipline_consolidate_start: m.prop(true)\n\t\t\t\t,disciplines_contractors: []\n\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t,created: false\n\t\t\t\t,newdiscipline: true\n\t\t\t\t,organizations_disciplines_nominal_expenditure_rate: m.prop(0)\n\t\t\t\t,organizations_disciplines_nominal_revenue_rate: m.prop(0)\n\t\t\t\t,contract_items_client_reference: m.prop('')\n\t\t\t\t,organizations_disciplines_nominal_rate: m.prop(0)\n\t\t\t}]\n\t\t}\n\t\treturn resetD\n\t}\n\n\tvar resetPEForm = function(peIndex){\n\t\treturn {\n\t\t\tproject_id: m.prop(\n\t\t\t\tform().project.project_id\n\t\t\t\t\t? form().project.project_id()\n\t\t\t\t\t: vm().project_id()\n\t\t\t)\n\t\t\t,discipline_id: m.prop(null)\n\t\t\t,relatedDiscipline: ''\n\t\t\t,parents: m.prop([])\n\t\t\t,project_extras_id: m.prop( uuid.v4() )\n\t\t\t,project_extras_planned_amount: m.prop(0)\n\t\t\t,invite_id: m.prop(null)\n\t\t\t,invite_email: ''\n\t\t\t,project_extras_custom: m.prop(false)\n\t\t\t,project_extras_actual_amount: m.prop(0)\n\t\t\t,username: ''\n\t\t\t,costinvoices: []\n\t\t\t,revenueinvoices: []\n\t\t\t,user_id: m.prop(null)\n\t\t\t,allocation_id: m.prop(null)\n\t\t\t,project_extras_type: m.prop('')\n\t\t\t,project_extras_frequency: m.prop(0)\n\t\t\t,project_extras_description: m.prop('')\n\t\t\t,project_extras_date_assigned: m.prop(null)\n\t\t\t,project_extras_date_completed: m.prop(null)\n\t\t\t,project_extras_priority: m.prop(\n\t\t\t\tform().project.project_id\n\t\t\t\t\t? form().project.project_extras.length + 1\n\t\t\t\t\t: peIndex\n\t\t\t\t\t? peIndex\n\t\t\t\t\t: 0\n\t\t\t)\n\t\t\t,project_extras_date_verified: m.prop(null)\n\t\t\t,project_extras_date_invalid: m.prop(null)\n\t\t\t,project_extras_notes: m.prop(null)\n\t\t\t,project_extras_address: m.prop(null)\n\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t,created: cloning()\n\t\t\t,organizations_disciplines_id: m.prop(null)\n\t\t\t,newtask: 'New Task'\n\t\t}\n\t}\n\n\tvar check_dnames = function(returnBoolean, extraChecks){\n\t\tconst count = R.countBy( chr =>\n\t\t\tchr.discipline_name()\n\t\t\t,form().project.disciplines\n\t\t)\n\n\t\tconst errorArray = [\n\t\t\t(d, prop='discipline_description') => d['discipline_name']() && !d[prop]()\n\t\t\t\t? `Discipline Description must not be empty` : null\n\t\t\t,(d, prop='discipline_name') => count[d[prop]()] > 1\n\t\t\t\t? `Discipline Names must not be duplicated. Check ` + d[prop]()\n\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and '\n\t\t\t\t,''\n\t\t\t\t,form().project.disciplines\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t,null\n\t\t\t\t,(extraChecks || [])\n\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tconst checkInvoiceDates = function(returnBoolean){\n\n\t\tconst errorArray = [\n\t\t\t(d) => d && new Date(d.receiveddate).getTime() > new Date().getTime()\n\t\t\t\t? `Invoice received dates must be in the past`\n\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,', '\n\t\t\t,''\n\t\t\t,Object.keys(baseInvoiceIndex()['i']).map((k) => baseInvoiceIndex()['i'][k])\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t)\n\t}\n\n\n\tconst checkTaskDates = function(returnBoolean){\n\n\t\tconst errorArray = [\n\t\t\t(d) => d && !d.project_extras_type()\n\t\t\t\t? `Task Name must not be empty`\n\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,', '\n\t\t\t,''\n\t\t\t,checkMultipleProjectExtras().data\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t)\n\t}\n\n\tconst checkUserTaskMatch = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d, prop ='project_extras_description') => {\n\n\t\t\t\tconst suggested =\n\t\t\t\t\tallResourceTypes()\n\t\t\t\t\t.find((r) =>\n\t\t\t\t\t\tr.user_id()\n\t\t\t\t\t\t== checkMultipleProjectExtras().data[0].user_id()\n\t\t\t\t\t)\n\n\t\t\t\tconst totalRates =\n\t\t\t\t\t!suggested\n\t\t\t\t\t? null\n\t\t\t\t\t: suggested.crew_id\n\t\t\t\t\t? suggested.crews_discipline_rates\n\t\t\t\t\t: R.unnest(\n\t\t\t\t\t\tsuggested.crews.map((c) =>\n\t\t\t\t\t\t\tc.crews_discipline_rates\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\treturn d.organizations_disciplines_id\n\t\t\t\t&& suggested\n\t\t\t\t&& !totalRates.find((c) =>\n\t\t\t\t\td.organizations_disciplines_id\n\t\t\t\t\t== c.organizations_disciplines_id()\n\t\t\t\t)\n\t\t\t\t? d[prop]()\n\t\t\t\t\t? `, check ` + d[prop]()\n\t\t\t\t\t: ' '\n\t\t\t\t: ''\n\t\t\t}\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`This resource is not able to perform all tasks `\n\t\t\t,''\n\t\t\t,''\n\t\t\t,checkMultipleProjectExtras().data\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t)\n\t}\n\n\n\tvar check_pnames = function (){\n\t\tvar state = false\n\t\tprojects().every((project) => {\n\t\t\tif (project.project_name() == \"\" || project.project_name() == null){ state = true}\n\t\t\treturn project.project_name() != \"\" && project.project_name() != null\n\t\t})\n\t\treturn state\n\t}\n\n\n\tvar PercentComplete = function(project){\n\t\tvar complete = 0\n\t\tvar dperc = 0\n\t\tvar discipline_portions = project.disciplines.filter((d) => d.discipline_work() != 0)\n\t\tvar discipline_portion = discipline_portions.length\n\t\tif (discipline_portion != 0){\n\t\t\tdiscipline_portions.forEach((discipline) => {\n\t\t\t\tdperc = discipline.discipline_completed()/discipline.discipline_work() >= 1 ? 1\n\t\t\t\t\t: discipline.discipline_completed()/discipline.discipline_work()\n\t\t\t\tcomplete = complete + dperc/discipline_portion\n\t\t\t})\n\t\t}\n\t\tprojectPercentComplete(complete == 1 ? Number(100).toFixed(2) : Number(complete * 100).toFixed(2))\n\t\tproject.projectPercentComplete = Number(projectPercentComplete())\n\t\treturn projectPercentComplete()\n\t}\n\n\n\tvar edit = m.prop(false)\n\n\tvar SaveDisabled = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.project_name()\n\t\t\t,projects().filter((r) => r.project_id() != form().project.project_id())\n\t\t\t.concat(form().project)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.project_name() ? `Project Name must not be empty` : null\n\t\t\t// ,(d) => !d.project_suburb() ? `Location must not be empty` : null\n\t\t\t// ,(d) => !d.project_material_suburb() ? `Material Store must not be empty` : null\n\t\t\t,(d) =>\tcount[d.project_name()] > 1 ? `Project Names must not be duplicated` : null\n\t\t\t,() =>\n\t\t\t\tform().project.project_contacts.length\n\t\t\t\t> R.uniqBy(\n\t\t\t\t\t(a) => a.project_contacts_email() + a.project_contacts_type()\n\t\t\t\t\t, form().project.project_contacts\n\t\t\t\t).length\n\t\t\t\t? `Project Contacts are duplicated`\n\t\t\t\t: null\n\t\t\t,() =>\n\t\t\t\tnewInvoices().length\n\t\t\t\t&& newInvoices().some((ni) =>\n\t\t\t\t\t!ni.invoice_name\n\t\t\t\t\t|| ni.invoice_amount() * ni.invoice_rate() == 0\n\t\t\t\t)\n\t\t\t\t? `New invoices must be completed`\n\t\t\t\t: null\n\t\t]\n\n\t\tconst taskErrors = checkTaskDates(true)\n\t\tconst taskErrorMessage =\n\t\t\ttaskErrors\n\t\t\t? 'Task Name must not be empty, check ' + taskErrors\n\t\t\t: ''\n\n\t\tconst invoiceErrors = checkInvoiceDates(true)\n\t\tconst invoiceErrorMessage =\n\t\t\tinvoiceErrors\n\t\t\t? 'Invoice received dates must be in the past'\n\t\t\t: ''\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t,[form().project]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t, [\n\t\t\t\tdata.advancedView()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', 'Project Completion')\n\t\t\t\t\t,PercentComplete(form().project)\n\t\t\t\t\t,m('label.control-label',\n\t\t\t\t\t\tform().project.project_completion_marker()\n\t\t\t\t\t\t&& Number(projectPercentComplete()) != 100\n\t\t\t\t\t\t\t? 'Marked Complete, works until '\n\t\t\t\t\t\t\t: !form().project.project_completion_marker()\n\t\t\t\t\t\t\t&& Number(projectPercentComplete()) == 100\n\t\t\t\t\t\t\t\t? 'Not marked complete, but works completed on '\n\t\t\t\t\t\t\t\t: !form().project.project_completion_marker()\n\t\t\t\t\t\t\t\t&& Number(projectPercentComplete()) != 100\n\t\t\t\t\t\t\t\t\t? 'Expected completion'\n\t\t\t\t\t\t\t\t\t: 'Complete'\n\t\t\t\t\t)\n\t\t\t\t\t,lastProjectDate()\n\t\t\t\t])\n\t\t\t\t: null\n\t\t\t]\n\t\t\t,Object.keys(errors())\n\t\t\t.map((a) =>\n\t\t\t\terrors()[a]\n\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t: ''\n\t\t\t)\n\t\t\t.filter((a) => a)\n\t\t\t.concat(taskErrorMessage)\n\t\t\t.concat(invoiceErrorMessage)\n\t\t)\n\t}\n\n\tvar resources_available = function(){\n\n\t\tconst nResList = resources()\n\t\tconst nTeamList = []\n\n\t\tif (checkMultiple().data.length != 0){\n\n\t\t\tnResList.forEach((r) => {\n\n\t\t\t\tcheckMultiple().data.every((d) =>\n\t\t\t\t\tresRatesAvailable()\n\t\t\t\t\t[r.contractor_id()]\n\t\t\t\t\t['ratesIByOrgD']\n\t\t\t\t\t[d.organizations_disciplines_id()]\n\t\t\t\t)\n\t\t\t\t&& checkMultiple().data.some((d) =>\n\t\t\t\t\t!d.disciplines_contractors.find((nr) =>\n\t\t\t\t\t\tnr.contractor_id()\n\t\t\t\t\t\t== r.contractor_id()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\t? nTeamList.push(r)\n\t\t\t\t\t: null\n\n\t\t\t\tr.crews.forEach((t) => {\n\n\t\t\t\t\tcheckMultiple().data.every((d) => {\n\t\t\t\t\t\tconst ratesList =\n\t\t\t\t\t\t\tresRatesAvailable()\n\t\t\t\t\t\t\t[r.contractor_id()]\n\t\t\t\t\t\t\t['ratesIByOrgD']\n\t\t\t\t\t\t\t[d.organizations_disciplines_id()]\n\n\t\t\t\t\t\treturn ratesList\n\t\t\t\t\t\t&& ratesList.find((teamRate) =>\n\t\t\t\t\t\t\tteamRate.crew_id()\n\t\t\t\t\t\t\t== t.crew_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t\t&& checkMultiple().data.some((d) =>\n\t\t\t\t\t\t!R.unnest(\n\t\t\t\t\t\t\td.disciplines_contractors.map(\n\t\t\t\t\t\t\t\tR.prop('disciplines_contractors_crews')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.some((dcc) => dcc.crew_id() == t.crew_id())\n\t\t\t\t\t)\n\t\t\t\t\t\t? nTeamList.push(t)\n\t\t\t\t\t\t: null\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\treturn rList(nTeamList)\n\t}\n\n\tvar working_crews = function(d){\n\t\tvar crew_list = []\n\t\td.disciplines_contractors.forEach((c) => {\n\t\t\tcrew_list = crew_list.concat(c.disciplines_contractors_crews)\n\t\t})\n\t\treturn crew_list\n\t}\n\n\tvar getDisciplines = function(){\n\t\tvar disciplines = []\n\t\tdisciplines = form().project.disciplines.filter((d) => d.discipline_name != null )\n\t\treturn disciplines\n\t}\n\n\tconst firstproject =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tprojects\n\t\t\t\t,inverseProjectsList\n\t\t\t]\n\t\t)\n\t\t.map(([p, i]) => !p.length && !i.length)\n\n\tvar permissions = data.permissions\n\n\tpermissions.map(function(p){\n\t\teditResourcePermissions(Permissions.hasWrite(p, 'resource_management'))\n\t\teditPermissions(Permissions.hasWrite(p, 'project_management'))\n\t\teditContractRecognitions(Permissions.hasWrite(p, 'contract_recognition'))\n\t\teditContractPermissions(Permissions.hasWrite(p, 'contract_management'))\n\t\tm.redraw()\n\t\treturn null\n\t})\n\n\tvar dc_mapping = function(entity, focusArray){\n\t\tif(entity != null){\n\t\t\tif (entity.crew_name == null){\n\t\t\t\tvar dc = {\n\t\t\t\t\tuser_id: m.prop(entity.user_id())\n\t\t\t\t\t,discipline_id: m.prop(\"\")\n\t\t\t\t\t,disciplines_contractors_id: m.prop(\"\")\n\t\t\t\t\t,disciplines_contractors_name: m.prop( entity.contractor_name() )\n\t\t\t\t\t,contractor_id: m.prop( entity.contractor_id() )\n\t\t\t\t\t,disciplines_contractors_mixed_crews: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_total_rating: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_quality_rating: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_common: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_utilized: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_crews: []\n\t\t\t\t}\n\t\t\t\tfocusArray.forEach((selection) => {\n\t\t\t\t\tvar resourceMapped = R.find(function(chr) { return chr.contractor_id() == entity.contractor_id() }, selection.disciplines_contractors)\n\t\t\t\t\tif(resourceMapped == null){ selection.disciplines_contractors.push(dc) }\n\t\t\t\t\tselection.discipline_custom(1)\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tconst contractorEntity = resources().find((r) => r.contractor_id() == entity.contractor_id())\n\t\t\t\tvar dc = {\n\t\t\t\t\tuser_id: m.prop(contractorEntity.user_id())\n\t\t\t\t\t,discipline_id: m.prop(\"\")\n\t\t\t\t\t,disciplines_contractors_id: m.prop(\"\")\n\t\t\t\t\t,disciplines_contractors_name: m.prop(contractorEntity.contractor_name())\n\t\t\t\t\t,contractor_id: m.prop( contractorEntity.contractor_id() )\n\t\t\t\t\t,disciplines_contractors_mixed_crews: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_total_rating: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_quality_rating: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_common: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_utilized: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_crews: []\n\t\t\t\t}\n\t\t\t\tvar dcc = {\n\t\t\t\t\tuser_id: m.prop(entity.user_id())\n\t\t\t\t\t,contractor_id: m.prop( contractorEntity.contractor_id() )\n\t\t\t\t\t,disciplines_contractors_crews_name: m.prop(entity.crew_name())\n\t\t\t\t\t,disciplines_contractors_crews_contract_multiplier: m.prop(1)\n\t\t\t\t\t,disciplines_contractors_id: m.prop(\"\")\n\t\t\t\t\t,disciplines_contractors_crews_work_completed: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_crews_invalid: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_crews_excess: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_crews_utilized: m.prop( '' )\n\t\t\t\t\t,disciplines_contractors_crews_rating: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_crews_common: m.prop( 0 )\n\t\t\t\t\t,disciplines_contractors_crews_id: m.prop(\"\")\n\t\t\t\t\t,crew_id: m.prop(entity.crew_id())\n\t\t\t\t}\n\t\t\t\tdc.disciplines_contractors_crews.push(dcc)\n\t\t\t\tfocusArray.forEach((selection) => {\n\t\t\t\t\tvar resourceMapped = R.find(function(chr) {\n\t\t\t\t\t\treturn chr.contractor_id()\n\t\t\t\t\t\t\t== contractorEntity.contractor_id()\n\t\t\t\t\t}, selection.disciplines_contractors)\n\t\t\t\t\tif(resourceMapped == null){\n\t\t\t\t\t\tselection.disciplines_contractors.push(dc)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar crewMapped = R.find(function(chr) { return chr.crew_id() == entity.crew_id() }, resourceMapped.disciplines_contractors_crews)\n\t\t\t\t\t\tif(crewMapped == null){\n\t\t\t\t\t\t\tdcc.disciplines_contractors_id(resourceMapped.disciplines_contractors_id())\n\t\t\t\t\t\t\tresourceMapped.disciplines_contractors_crews.push(dcc)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tselection.discipline_custom(1)\n\t\t\t\t})\n\t\t\t}\n\t\t\tresources_available()\n\t\t}\n\t}\n\n\n\tfunction reConnectDisciplines(projectExtrasIndex){\n\t\tR.mapObjIndexed((arrayValues, key) =>\n\t\t\t[\n\t\t\t\t'discipline_planned'\n\t\t\t\t,'discipline_completed'\n\t\t\t].map((dprop) => {\n\n\t\t\t\tif ( key != 'null' && false ){\n\n\t\t\t\t\tvar disciplneObj =\n\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\td.discipline_id()\n\t\t\t\t\t\t\t== key\n\t\t\t\t\t\t)\n\t\t\t\t\t\t|| form().project.disciplines\n\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\td.discipline_name()\n\t\t\t\t\t\t\t+ \" - \"\n\t\t\t\t\t\t\t+ d.discipline_description()\n\t\t\t\t\t\t\t== key\n\t\t\t\t\t\t)\n\n\t\t\t\t\tvar sum =\n\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\tarrayValues\n\t\t\t\t\t\t\t.filter((v) =>\n\n\t\t\t\t\t\t\t\t\tdprop == 'discipline_completed'\n\t\t\t\t\t\t\t\t\t&& v['project_extras_date_completed']()\n\n\t\t\t\t\t\t\t\t|| dprop == 'discipline_planned'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((v) => v['project_extras_planned_amount']() )\n\t\t\t\t\t\t\t// this is not a bug.\n\t\t\t\t\t\t\t// Completed values are summed by the plannned values\n\t\t\t\t\t\t\t// Ee assume no variation to the amount. variaitons may apply but only if completed\n\t\t\t\t\t\t\t// via the updates route where you can change completed quantitties they then get added\n\t\t\t\t\t\t\t// to variations and go into the system as un-planned completions\n\t\t\t\t\t\t)\n\n\t\t\t\t\t// var currentPlannedWork = disciplneObj[dprop]()\n\t\t\t\t\tvar currentVariations =\n\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\textraContractObligationData()\n\t\t\t\t\t\t\t.filter((v) =>\n\t\t\t\t\t\t\t\tv.allocations_vars_amount\n\t\t\t\t\t\t\t\t&& v.allocations_vars_approved()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((v) => v.allocations_vars_amount())\n\t\t\t\t\t\t)\n\n\t\t\t\t\tdisciplneObj[dprop]( sum )\n\t\t\t\t\t// disciplneObj[dprop]( R.max( sum, currentPlannedWork ) )\n\t\t\t\t\tdprop == 'discipline_planned'\n\t\t\t\t\t\t? disciplneObj['discipline_work'](\n\t\t\t\t\t\t\tdisciplneObj[dprop]()\n\t\t\t\t\t\t\t+ currentVariations\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\n\t\t\t\treturn null\n\t\t\t})\n\t\t\t,projectExtrasIndex\n\t\t)\n\t}\n\n\tprojectExtrasIndex.map((newIndex) => reConnectDisciplines(newIndex) )\n\n\tvar filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'disciplines_'}\n\t\t\t,{ugly_name: 'disciplines_contractors_'}\n\t\t\t,{ugly_name: 'disciplines_contractors', better_name: \"Resources\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_name', better_name: \"Resource Name\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_quality_rating', better_name: \"Resource Quality Rating\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_crews', better_name: \"Teams\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_crews_name', better_name: \"Team Name\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_crews_contract_multiplier', better_name: \"Team Rate Multiplier\"}\n\t\t\t,{ugly_name: 'project_commissioning_date', better_name: \"Handover Date\"}\n\t\t\t,{ugly_name: 'project_final_acceptance', better_name: \"Liability End Date\"}\n\t\t\t,{ugly_name: 'project_completion_marker', better_name: \"Project Completion\"}\n\t\t\t,{ugly_name: 'disciplines_contractors_name', better_name: \"Resource Name\"}\n\t\t\t,{ugly_name: 'relatedDiscipline', better_name: \"Related Discipline\"}\n\t\t\t,{ugly_name: 'project_extras_type', better_name: \"Task Name\"}\n\t\t\t,{ugly_name: 'project_extras_frequency', better_name: \"Task Frequency in Days\"}\n\t\t\t,{ugly_name: 'project_extras_custom', better_name: \"Task Manually Allocated\"}\n\t\t\t,{ugly_name: 'project_extras_priority', better_name: \"Task Prioriy\"}\n\t\t\t,{ugly_name: 'project_extras_description', better_name: \"Task Description\"}\n\t\t\t,{ugly_name: 'project_extras_date_assigned', better_name: \"Task Date Assigned\"}\n\t\t\t,{ugly_name: 'project_extras_date_completed', better_name: \"Task Date Completed\"}\n\t\t\t,{ugly_name: 'project_extras_date_verified', better_name: \"Task Date Verified\"}\n\t\t\t,{ugly_name: 'project_extras_date_invalid', better_name: \"Task Date Invalid\"}\n\t\t\t,{ugly_name: 'project_extras_notes', better_name: \"Task Notes\"}\n\t\t\t,{ugly_name: 'project_extras_address', better_name: \"Task Address\"}\n\t\t\t,{ugly_name: 'project_extras_planned_amount', better_name: \"Task Amount\"}\n\t\t\t,{ugly_name: 'project_extras_actual_amount', better_name: \"Task Actual Amount\"}\n\t\t\t,{ugly_name: 'username', better_name: \"Task Assignee\"}\n\t\t\t,{ugly_name: 'filecount', better_name: 'File Count'}\n\t\t\t,{ugly_name: 'discipline_consolidate_start', better_name: 'Consolidate Schedule'}\n\t\t\t,{ugly_name: 'project_extras', better_name: 'Tasks'}\n\t\t\t,{ugly_name: 'discipline_contract_multiplier', better_name: 'Discipline Rate Multiplier'}\n\t\t\t,{ugly_name: 'projectPercentComplete', better_name: 'Percent Completed'}\n\t\t]\n\t\t,uniqueArrays: [\n\t\t\t{array_name: 'disciplines_contractors', unique: \"contractor_id\"}\n\t\t\t,{array_name: 'disciplines_contractors_crews', unique: \"crew_id\"}\n\t\t\t,{array_name: 'disciplines', unique: \"discipline_id\"}\n\t\t\t// ,{array_name: 'project_extras', unique: \"project_extras_id\"}\n\t\t\t// ,{array_name: 'project_contacts', unique: \"project_contacts_id\"}\n\t\t\t,{array_name: 'project_documents', unique: \"project_documents_id\"}\n\t\t]\n\t\t,template: {\n\t\t\tproject_name: \"\"\n\t\t\t,project_priority: 0\n\t\t\t,contract_name: \"\"\n\t\t\t,project_draft_at: \"date\"\n\t\t\t,project_tendered_at: \"date\"\n\t\t\t,project_rejected_at: \"date\"\n\t\t\t,project_accepted_at: \"date\"\n\t\t\t,project_site_type: \"\"\n\t\t\t,project_suburb: \"\"\n\t\t\t,project_material_suburb: \"\"\n\t\t\t,project_start_date: \"date\"\n\t\t\t,project_dead_date: \"date\"\n\t\t\t,project_commissioning_date: \"date\"\n\t\t\t,project_final_acceptance: \"date\"\n\t\t\t,project_completion_marker: \"date\"\n\t\t\t,project_completion_comments: \"\"\n\t\t\t,project_documents: []\n\t\t\t,status: \"\"\n\t\t\t,projectPercentComplete: 0\n\t\t\t// ,project_contacts: [{\n\t\t\t// \tproject_contacts_name: \"\"\n\t\t\t// \t,project_contacts_phone: \"\"\n\t\t\t// \t,project_contacts_email: \"\"\n\t\t\t// \t,project_contacts_type: \"\"\n\t\t\t// }]\n\t\t\t,disciplines: [{\n\t\t\t\tdiscipline_name: \"\"\n\t\t\t\t,discipline_description: \"\"\n\t\t\t\t,discipline_order: 0\n\t\t\t\t,discipline_contract_multiplier: 0\n\t\t\t\t,discipline_priority: 0\n\t\t\t\t,discipline_work: 0\n\t\t\t\t,discipline_planned: 0\n\t\t\t\t,discipline_combination_limit: 0\n\t\t\t\t,discipline_completed: 0\n\t\t\t\t,discipline_harshness: 0\n\t\t\t\t,discipline_percent: 0\n\t\t\t\t,discipline_flow: \"\"\n\t\t\t\t,discipline_start_date: \"date\"\n\t\t\t\t,discipline_end_date: \"date\"\n\t\t\t\t,discipline_recovery: true\n\t\t\t\t,discipline_auto_assign_tasks: true\n\t\t\t\t,discipline_consistency: true\n\t\t\t\t,discipline_strict_end: true\n\t\t\t\t,discipline_strict_start: true\n\t\t\t\t,discipline_uom: \"\"\n\t\t\t\t,discipline_consolidate_start: true\n\t\t\t\t,disciplines_contractors: [{\n\t\t\t\t\tdisciplines_contractors_name: \"\"\n\t\t\t\t\t,disciplines_contractors_quality_rating: 0\n\t\t\t\t\t,disciplines_contractors_crews: [{\n\t\t\t\t\t\tdisciplines_contractors_crews_name: \"\"\n\t\t\t\t\t\t,disciplines_contractors_crews_contract_multiplier: 0\n\t\t\t\t\t}]\n\t\t\t\t}]\n\t\t\t}]\n\t\t\t,project_extras:[{\n\t\t\t\trelatedDiscipline: \"\"\n\t\t\t\t,project_extras_planned_amount: 0\n\t\t\t\t,project_extras_actual_amount: 0\n\t\t\t\t,project_extras_type: \"\"\n\t\t\t\t,project_extras_frequency: 0\n\t\t\t\t,project_extras_custom: true\n\t\t\t\t,project_extras_priority: 0\n\t\t\t\t,project_extras_description: \"\"\n\t\t\t\t,project_extras_date_assigned: \"date\"\n\t\t\t\t,project_extras_date_completed: \"date\"\n\t\t\t\t,project_extras_date_verified: \"date\"\n\t\t\t\t,project_extras_date_invalid: \"date\"\n\t\t\t\t,project_extras_notes: \"\"\n\t\t\t\t,project_extras_address: \"\"\n\t\t\t\t,username: \"\"\n\t\t\t\t,invite_email: \"\"\n\t\t\t\t,filecount: 0\n\t\t\t}]\n\t\t},\n\t}\n\n\tvar getfilters = function(button, marker){\n\t\tvar datainput =\n\t\t\tmarker == \"Project\"\n\t\t\t\t? filterFunction.projectFilters\n\t\t\t\t: marker == 'Tasks'\n\t\t\t\t\t? filterFunction.projectExtrasFilters\n\t\t\t\t\t: filterFunction.disciplineFilters\n\n\t\tif (datainput == null){\n\t\t\tfilterFunction.projectFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: R.omit('project_extras', filterFunction.template)\n\t\t\t\t,disabled: () => projects().length == 0\n\t\t\t},\n\t\t\tfilterFunction.disciplineFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.disciplines[0]\n\t\t\t\t,disabled: () => form().project.disciplines.length == 0\n\t\t\t}\n\t\t\tfilterFunction.projectExtrasFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.project_extras[0]\n\t\t\t\t,disabled: () => !form().project.project_extras || !form().project.project_extras.length\n\t\t\t}\n\n\t\t\tdatainput =\n\t\t\t\tmarker == \"Project\"\n\t\t\t\t\t? filterFunction.projectFilters\n\t\t\t\t\t: marker == \"Tasks\"\n\t\t\t\t\t\t? filterFunction.projectExtrasFilters\n\t\t\t\t\t\t: filterFunction.disciplineFilters\n\t\t}\n\n\t\tvar gotfilters = datainput == null\n\t\t\t? null\n\t\t\t: datainput.operationalFilters(\n\t\t\t\tfilterView(\n\t\t\t\t\tdatainput.template\n\t\t\t\t\t, datainput.filters()\n\t\t\t\t\t, datainput.changeNames\n\t\t\t\t\t, datainput.uniqueArrays\n\t\t\t\t\t, datainput.disabled\n\t\t\t\t\t, marker\n\t\t\t\t\t, data.scoped\n\t\t\t\t)\n\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters.generatedElements\n\t}\n\n\tvar checkallocatedResources = function(entity, path){\n\t\tvar b = []\n\t\tcheckMultiple().data.forEach((d) => {\n\t\t\tb = b.concat( R.pluck('contractor_id')(d.disciplines_contractors) )\n\t\t\td.disciplines_contractors.forEach((dc) => {\n\t\t\t\tb = b.concat( R.pluck('crew_id')(dc.disciplines_contractors_crews) )\n\t\t\t})\n\t\t})\n\t\treturn R.findIndex(\n\t\t\tfunction(chr) { return chr() == R.path([path], entity)()}\n\t\t\t, b) >= 0\n\t}\n\n\tvar masterLIST = function(mcreate){\n\t\tif (mcreate){\n\t\t\tCONSTANTdisciplines(\n\t\t\t\tR.unnest(\n\t\t\t\t\tR.partition(\n\t\t\t\t\t\t(c) => c.created,\n\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tif( !filterFunction.disciplineFilters ){\n\t\t\tgetfilters(null, \"Discipline\")\n\t\t}\n\n\t\treturn ListProcessing(\n\t\t\tCONSTANTdisciplines()\n\t\t\t,filterFunction.disciplineFilters.filters()\n\t\t\t,CONSTANTdisciplines().filter((c) => c.created).length > 0\n\t\t\t\t? null\n\t\t\t\t: \"discipline_order\"\n\t\t\t,filteredDisciplineOptions\n\t\t)\n\t}\n\n\tvar masterPELIST = function(mcreate){\n\t\tif (mcreate){\n\t\t\tCONSTANTProjectExtras(form().project.project_extras)\n\t\t\t// CONSTANTProjectExtras(\n\t\t\t// \tR.unnest(\n\t\t\t// \t\tR.partition(\n\t\t\t// \t\t\t(c) => c.created,\n\t\t\t\t\t\t// form().project.project_extras\n\t\t\t// \t\t)\n\t\t\t// \t)\n\t\t\t// )\n\t\t}\n\n\t\tif( !filterFunction.projectExtrasFilters ){\n\t\t\tgetfilters(null, \"Tasks\")\n\t\t}\n\n\t\treturn ListProcessing(\n\t\t\tCONSTANTProjectExtras()\n\t\t\t,filterFunction.projectExtrasFilters.filters()\n\t\t\t,null\n\t\t\t,filteredTaskOptions\n\t\t)\n\t}\n\n\tconst updateMultipliers = function(v, t){\n\t\tif(v){\n\t\t\tR.unnest(\n\t\t\t\tcheckMultiple().data.map(\n\t\t\t\t\t(d) =>\n\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t\t\t.map( dc =>\n\t\t\t\t\t\t\t\t\tdc.disciplines_contractors_crews\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.filter((dcc) => dcc.crew_id() == t.crew_id())\n\t\t\t.forEach((dcc) => dcc.disciplines_contractors_crews_contract_multiplier(v))\n\t\t}\n\t\treturn t.disciplines_contractors_crews_contract_multiplier()\n\t}\n\n\tconst setOptions = function(value, prop, container){\n\n\t\tvar refContainter = container\n\t\t\t? container\n\t\t\t: activeTab() == 'Tasks'\n\t\t\t? checkMultipleProjectExtras().data\n\t\t\t: checkMultiple().data\n\n\n\t\tif(\n\t\t\trefContainter[0]\n\t\t){\n\t\t\tvar dateEdit =\n\t\t\t\t'project_extras_date_assigned' == prop\n\t\t\t\t|| 'project_extras_date_completed' == prop\n\t\t\t\t|| 'project_extras_date_verified' == prop\n\t\t\t\t|| 'project_extras_date_invalid' == prop\n\t\t\t\t|| 'project_completion_marker' == prop\n\n\t\t\tvar nullIdEdit =\n\t\t\t\t'user_id' == prop\n\t\t\t\t|| 'discipline_id' == prop\n\t\t\t\t|| 'invite_id' == prop\n\t\t\t\t|| 'invite_email' == prop\n\n\t\t\tvar dtype = typeof refContainter[0][prop] == 'function'\n\n\t\t\tvalue || value == false || value == '' || value == 0\n\t\t\t\t? refContainter.forEach((d) => {\n\n\t\t\t\t\tvalue = (dateEdit || nullIdEdit) && !value\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: value\n\n\t\t\t\t\tvar diffState =\n\t\t\t\t\t\tdateEdit\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t!value && d[prop]()\n\t\t\t\t\t\t\t|| value && !d[prop]()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t: false\n\n\t\t\t\t\tprop == 'discipline_planned'\n\t\t\t\t\t&& dtype\n\t\t\t\t\t\t? d['discipline_work']( d['discipline_work']() - d['discipline_planned']() + value)\n\t\t\t\t\t\t: prop == 'discipline_planned'\n\t\t\t\t\t\t\t? d['discipline_work'] = ['discipline_work'] - d['discipline_planned'] + value\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\tdtype\n\t\t\t\t\t\t? d[prop](value)\n\t\t\t\t\t\t: d[prop] = value\n\n\t\t\t\t\tactiveTab() == 'Tasks'\n\t\t\t\t\t&& dateEdit\n\t\t\t\t\t&& diffState\n\t\t\t\t\t\t? projectExtrasSum(d, prop)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\td.created = true\n\t\t\t\t})\n\t\t\t\t: null\n\t\t}\n\n\t\treturn !refContainter.length\n\t\t\t? null\n\t\t\t: dtype\n\t\t\t\t? refContainter[0][prop]()\n\t\t\t\t: refContainter[0][prop]\n\t}\n\n\tconst idealResourceName = m.prop('')\n\tconst underlinedHeader =\n\t\ta => m('h4.pt3.bw1.bb.pb2.b--black-20', a)\n\n\tconst availableUOMS =\n\t\torganizations_disciplines\n\t\t.map(R.uniqBy(R.prop('organizations_disciplines_uom')))\n\n\n\tconst disciplineSelectAutocomplete = (D, { attrs={}, options={} }={}) =>\n\t\tm(autocomplete.Main, Object.assign({\n\t\t\tlist: restrictedOrgDisc\n\t\t\t,key: D.key\n\t\t\t,initialValue: D.discipline_name()\n\t\t\t,oninput: (v) => {\n\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t.find( R.propEq('orgDisciplineNameDescription', v) )\n\t\t\t\t\t|| organizations_disciplines().find(\n\t\t\t\t\t\tR.propEq(\n\t\t\t\t\t\t\t'organizations_disciplines_id'\n\t\t\t\t\t\t\t, D.organizations_disciplines_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\tv || v == ''\n\t\t\t\t\t? D.discipline_name(\n\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t? ReturnedAutocompleteObj.organizations_disciplines_name\n\t\t\t\t\t\t\t: v\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\tif (\n\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t){\n\t\t\t\t\tconst appliedrate =\n\t\t\t\t\t\tReturnedAutocompleteObj.applicablecontracts\n\t\t\t\t\t\t.find((ac) => ac.contract_id == form().project.contract_id())\n\t\t\t\t\t\t|| { contract_items_rate: 0 }\n\n\t\t\t\t\tD.organizations_disciplines_id(\n\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_id\n\t\t\t\t\t)\n\t\t\t\t\tD.discipline_description(\n\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_description\n\t\t\t\t\t)\n\t\t\t\t\tD.organizations_disciplines_nominal_revenue_rate(\n\t\t\t\t\t\tappliedrate.contract_items_rate\n\t\t\t\t\t)\n\t\t\t\t\tD.discipline_uom(\n\t\t\t\t\t\tReturnedAutocompleteObj.organizations_disciplines_uom\n\t\t\t\t\t)\n\t\t\t\t} else if( !ReturnedAutocompleteObj ){\n\t\t\t\t\tD.organizations_disciplines_id(null)\n\t\t\t\t}\n\n\t\t\t\treturn ReturnedAutocompleteObj\n\t\t\t\t\t? ReturnedAutocompleteObj.orgDisciplineNameDescription\n\t\t\t\t\t: D.discipline_name()\n\t\t\t}\n\t\t\t,field: 'orgDisciplineNameDescription'\n\t\t\t,attrs: Object.assign({\n\t\t\t\ttitle: `Autoselect work that is similar to other projects`\n\t\t\t\t,style: {\n\t\t\t\t\theight: '3em'\n\t\t\t\t}\n\t\t\t\t,required: true\n\t\t\t\t,key: D.key\n\t\t\t}, attrs)\n\t\t\t,sort: R.prop('completedcount')\n\t\t}, options))\n\n\tconst disciplineSelect =\n\t\t(D, _) =>\n\t\t\tm.component(\n\t\t\t\tPencil\n\t\t\t\t,() => D.discipline_name()\n\t\t\t\t,() => disciplineSelectAutocomplete(D)\n\n\t\t\t)\n\n\tconst disciplineChargeRate =\n\t\t(value, d) => {\n\n\t\t\tconst ref = d[0]\n\n\t\t\tif( value || value == 0){\n\n\n\t\t\t\tconst [a, b]\n\t\t\t\t\t= R.partition((d) => !d.organizations_disciplines_id(), d)\n\n\t\t\t\tsetOptions(value, 'organizations_disciplines_nominal_revenue_rate', a)\n\n\t\t\t\tb.forEach((r) => {\n\t\t\t\t\tconst orgdref =\n\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t.find((od) => od.organizations_disciplines_id == ref.organizations_disciplines_id())\n\n\t\t\t\t\tsetOptions(\n\t\t\t\t\t\tNumber(Number( value/(r.organizations_disciplines_nominal_revenue_rate() || 1) ).toFixed(6))\n\t\t\t\t\t\t, !orgdref.organizations_disciplines_nominal_revenue_rate\n\t\t\t\t\t\t\t? 'organizations_disciplines_nominal_revenue_rate'\n\t\t\t\t\t\t\t: 'discipline_contract_multiplier'\n\t\t\t\t\t\t, [r]\n\t\t\t\t\t)\n\t\t\t\t\tr.nominalrate = value\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tref && ref.nominalrate\n\t\t\t\t|| ref && ref.organizations_disciplines_nominal_revenue_rate() * ref.discipline_contract_multiplier()\n\t\t\t)\n\t\t}\n\n\tconst switchProjectsButton =\n\t\t(ctrl) =>\n\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t{\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t// ,top: '-0.1em'\n\t\t\t\t\t\t// ,height: '2.9em'\n\t\t\t\t\t\t// ,width: '5em'\n\t\t\t\t\t\t// ,color: '#434aa3'\n\t\t\t\t\t\t// ,textDecoration: 'underline'\n\t\t\t\t\t}\n\t\t\t\t\t,disabled: !inverseProjectsList().length\n\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\tctrl.model.checkMultipleProjects([])\n\t\t\t\t\t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t\t\t\t\t? ctrl.model.completedProjects(\"inprogress\")\n\t\t\t\t\t\t\t: ctrl.model.completedProjects(\"completed\")\n\n\t\t\t\t\t\tctrl.model.projects([])\n\t\t\t\t\t\tctrl.model.inverseProjectsList([])\n\t\t\t\t\t\tctrl.model.loading(true)\n\t\t\t\t\t\tctrl.model.metaDataLoading(true)\n\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\t\tctrl.intent.fetchProjects({depth:1})\n\t\t\t\t\t\t\t\t,ctrl.model.data.fetchProjectsBySchedule({\n\t\t\t\t\t\t\t\t\tschedule_id: ctrl.model.schedule_id()\n\t\t\t\t\t\t\t\t\t,completedProjects: ctrl.model.completedProjects() == 'inprogress'\n\t\t\t\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t\t\t\t: 'inprogress'\n\t\t\t\t\t\t\t\t\t,depth: 1\n\t\t\t\t\t\t\t\t\t,props: {\n\t\t\t\t\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t\t\t\t\t'project_name'\n\t\t\t\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.then( ctrl.model.inverseProjectsList )\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.then(R.F)\n\t\t\t\t\t\t.then(ctrl.model.loading)\n\t\t\t\t\t\t.then(ctrl.intent.fetchProjects)\n\t\t\t\t\t\t.then(R.F)\n\t\t\t\t\t\t.then(ctrl.model.metaDataLoading)\n\t\t\t\t\t}\n\t\t\t\t\t, title: \"Switch between running and completed projects\"\n\t\t\t\t}\n\t\t\t\t,'Switch'\n\t\t\t)\n\n\n\tconst disciplineCloneButton =\n\t\t() =>\n\t\t\tm(\"button.btn.btn-secondary\", {\n\t\t\t\tdisabled:\n\t\t\t\t\t!!check_dnames(true)\n\t\t\t\t\t|| !discipline_vm().discipline_name\n\t\t\t\t\t|| checkMultiple().data.length > 1\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tconst newD = cloningProjectD(true, false)\n\t\t\t\t\tnewD.created = true\n\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\tdiscipline_vm(newD)\n\t\t\t\t\tform().project.disciplines.unshift(newD)\n\t\t\t\t\tmasterLIST(true)\n\t\t\t\t\tcheckMultiple().data.unshift(newD)\n\t\t\t\t\tactiveTab('Disciplines')\n\t\t\t\t}\n\t\t\t\t,style: {\n\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t,width: '5em'\n\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t}\n\t\t\t},\"Clone\")\n\n\tconst taskCloneButton =\n\t\t() =>\n\t\t\tonProjectList()\n\t\t\t? null\n\t\t\t: m(\"button.btn.\", {\n\t\t\t\tonclick: () => {\n\n\t\t\t\t\tcheckMultipleProjectExtras().data =\n\t\t\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t\t\t.map((t) => {\n\t\t\t\t\t\t\tpe_vm(t)\n\t\t\t\t\t\t\tconst newt = cloningProjectE(true, false)\n\t\t\t\t\t\t\tnewt.created = true\n\t\t\t\t\t\t\tprojectExtrasSum(t, null)\n\t\t\t\t\t\t\tform().project.project_extras.unshift(newt)\n\t\t\t\t\t\t\treturn newt\n\t\t\t\t\t\t})\n\n\t\t\t\t\tpe_vm(checkMultipleProjectExtras().data[0])\n\t\t\t\t\tmasterPELIST(true)\n\t\t\t\t}\n\t\t\t\t,style: {\n\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t,width: '5em'\n\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t}\n\t\t\t},\"Clone\")\n\n\tconst timepush = prop(7)\n\n\tconst incrimentTimeButton =\n\t\t(ctrl) =>\n\t\t\tcheckMultiple().data.every((d) => d.discipline_order() <= 1)\n\t\t\t&& !onProjectList()\n\t\t\t? null\n\t\t\t: m(\"button.btn.\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\n\n\t\t\t\t\tif( onProjectList() ){\n\n\t\t\t\t\t\tconst forwardtime = timepush() * milliperday\n\n\t\t\t\t\t\treturn ctrl.intent.sendProjects(\n\t\t\t\t\t\t\tcheckMultipleProjects().map((p) => {\n\n\t\t\t\t\t\t\t\tp.project_start_date(p.project_start_date() + forwardtime )\n\t\t\t\t\t\t\t\tp.project_dead_date(p.project_dead_date() + forwardtime)\n\t\t\t\t\t\t\t\tp.project_commissioning_date(p.project_commissioning_date() + forwardtime )\n\t\t\t\t\t\t\t\tp.project_final_acceptance(p.project_final_acceptance() + forwardtime)\n\n\t\t\t\t\t\t\t\tp.disciplines.forEach((d) => {\n\t\t\t\t\t\t\t\t\td.discipline_start_date( new Date(d.discipline_start_date()).getTime() + forwardtime )\n\t\t\t\t\t\t\t\t\td.discipline_end_date( new Date(d.discipline_end_date()).getTime() + forwardtime )\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\treturn p\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tcheckMultipleProjects([])\n\t\t\t\t\t\t\t\tvm({})\n\t\t\t\t\t\t\t\tprojectOptions(false)\n\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\n\t\t\t\t\t\treturn checkMultiple().data.filter((d) => d.discipline_order()).forEach((d) => {\n\t\t\t\t\t\t\tconst ref =\n\t\t\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t\t\t\t.find((fd) => fd.discipline_order() == d.discipline_order() - 1)\n\n\t\t\t\t\t\t\tif( ref ){\n\t\t\t\t\t\t\t\td.discipline_start_date( new Date(ref.discipline_end_date()).getTime() + milliperday )\n\t\t\t\t\t\t\t\td.discipline_end_date(\n\t\t\t\t\t\t\t\t\tnew Date(d.discipline_start_date()).getTime()\n\t\t\t\t\t\t\t\t\t+ ( new Date(ref.discipline_end_date()).getTime() - new Date(ref.discipline_start_date()).getTime() )\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t,title: \"Cascade the duration of the previous discipline\"\n\t\t\t\t,style: {\n\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t,width: '7.em'\n\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t}\n\t\t\t}, onProjectList() ? 'Push Dates' : 'Cascade Duration')\n\n\tconst detailPaneInputs = function(D, ctrl){\n\n\t\tconst detailsPaneSave = () =>\n\t\t\tprojectOptions()\n\t\t\t\t? projectOptionsView()\n\t\t\t\t: checkMultiple().data.length\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\n\t\t\t\t\t\telements.action(\n\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t, () => {\n\t\t\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\t\t\tresources_available()\n\t\t\t\t\t\t\t\treturn ctrl.intent.sendProjects()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t, () =>\n\t\t\t\t\t\t\t\t!!check_dnames(true)\n\t\t\t\t\t\t\t\t|| identical(form().project.disciplines, ctrl.model.vm().disciplines)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,elements.undoDiscard({\n\t\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tonclick: () => ctrl.intent.deleteDiscipline()\n\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.discipline_vm().discipline_name == null\n\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.checkMultiple().data.length == 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\tidentical(form().project.disciplines, ctrl.model.vm().disciplines)\n\t\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\t\t\t\t\terrors({})\n\n\t\t\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t\t\t!identical(\n\t\t\t\t\t\t\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t\t\t\t\t\t\t\t, ctrl.model.vm().disciplines\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\t\tdiscardAllDisciplineChanges()\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\t\t\t\t\t\tmasterLIST(true)\n\t\t\t\t\t\t\t\t\t\t\tresources_available()\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,disabled: ctrl.model.checkTaskDates(true)\n\t\t\t\t\t\t\t\t\t,title: `Discard all changes made to selected disciplines`\n\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\topacity: ctrl.model.editPermissions() ? 1 : 0\n\t\t\t\t\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t])\n\t\t\t\t\t,ctrl.model.check_dnames(false, Object.keys(errors()))\n\t\t\t\t]\n\t\t\t\t: checkMultipleProjectExtras().data.length\n\t\t\t\t? elements.list([\n\n\t\t\t\t\telements.action(\n\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t, () => {\n\t\t\t\t\t\t\tif( spreading() ){\n\t\t\t\t\t\t\t\tdisciplineSpread().splice(0, 1)\n\t\t\t\t\t\t\t\tform().project.project_extras =\n\t\t\t\t\t\t\t\t\tform().project.project_extras\n\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\tdisciplineSpread()\n\t\t\t\t\t\t\t\t\t\t\t.map((d) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst taskDiff =\n\t\t\t\t\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ta.project_extras_type()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== b.project_extras_type()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,checkMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,form().project.project_extras.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td.discipline_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& t.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== d.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn taskDiff.map((t) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpe_vm(t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst newt = cloningProjectE(true, false)\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.discipline_id(d.discipline_id ? d.discipline_id() : null)\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.project_extras_description(d.orgDisciplineNameDescription)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_actual_amount(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_assigned(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_completed(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_verified(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_invalid(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.relatedDiscipline = d.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.organizations_disciplines_id = exposer(d.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\tprojectExtrasSum(t, null)\n\t\t\t\t\t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data.unshift(newt)\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn newt\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tdisciplineSpread([])\n\t\t\t\t\t\t\t\tspreading(false)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmasterPELIST(true)\n\t\t\t\t\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\t\t\t\t\tpe_vm({})\n\t\t\t\t\t\t\tprojectExtrasIndex(\n\t\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\t\tcloning()\n\t\t\t\t\t\t\t\t\t\t? R.prop('relatedDiscipline', a)\n\t\t\t\t\t\t\t\t\t\t: R.pipe(R.prop('discipline_id'), R.call)(a)\n\t\t\t\t\t\t\t\t\t,form().project.project_extras\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn ctrl.intent.sendProjects()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t, () =>\n\t\t\t\t\t\t\tctrl.model.checkTaskDates(true)\n\t\t\t\t\t\t\t|| identical(form().project.project_extras, ctrl.model.vm().project_extras)\n\t\t\t\t\t\t\t&& !disciplineSpread().length\n\t\t\t\t\t\t\t&& !onProjectList()\n\t\t\t\t\t)\n\n\t\t\t\t\t,elements.undoDiscard({\n\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tonclick: () => ctrl.intent.deleteProjectExtra()\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t!ctrl.model.pe_vm().project_extras_type\n\t\t\t\t\t\t\t\t\t\t&& ctrl.model.checkMultipleProjectExtras().data.length == 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\tidentical(form().project.project_extras, ctrl.model.vm().project_extras)\n\t\t\t\t\t\t\t\t&& !disciplineSpread().length\n\t\t\t\t\t\t\t\t&& !onProjectList()\n\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\t\t\t\terrors({})\n\n\t\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t!identical(\n\t\t\t\t\t\t\t\t\t\t\t\tform().project.project_extras\n\t\t\t\t\t\t\t\t\t\t\t\t, ctrl.model.vm().project_extras\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t|| disciplineSpread().length\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t&& !onProjectList()\n\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\tdiscardAllTaskChanges()\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tdisciplineSpread([])\n\t\t\t\t\t\t\t\t\t\tspreading(false)\n\t\t\t\t\t\t\t\t\t\tmasterPELIST(true)\n\t\t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\t\t\t\t\t\t\t\tpe_vm({})\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,disabled: ctrl.model.checkTaskDates(true)\n\t\t\t\t\t\t\t\t,title: `Discard all changes made to selected Tasks`\n\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\topacity: ctrl.model.editPermissions() ? 1 : 0\n\t\t\t\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\tfunction universal(){\n\t\t\tfunction WorkDetail(){\n\t\t\t\treturn [\n\t\t\t\t\tcheckMultiple().data.length == 1\n\t\t\t\t\t&& !D().discipline_id()\n\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t\t, 'Discipline Name '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,disciplineSelect(D(), ctrl)\n\t\t\t\t\t\t])\n\t\t\t\t\t\t: m('div.pv2'\n\t\t\t\t\t\t\t,m('label.control-label.mb1', 'Discipline Name')\n\t\t\t\t\t\t\t,R.pluck(\n\t\t\t\t\t\t\t\t'discipline_name'\n\t\t\t\t\t\t\t)(ctrl.model.checkMultiple().data)\n\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0',s()))\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,checkMultiple().data.length == 1\n\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t\t, 'Description '\n\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t() => D().discipline_description()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\tD().discipline_description\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Description of the discipline\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t, 'Unit of Measure '\n\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t() => D().discipline_uom()\n\t\t\t\t\t\t\t\t,() =>\n\n\t\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\t\tavailableUOMS\n\t\t\t\t\t\t\t\t\t\t,(value) => {\n\t\t\t\t\t\t\t\t\t\t\tif(value){ setOptions(value, 'discipline_uom') }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,'organizations_disciplines_uom'\n\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttitle: \"Measuring units\"\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,ctrl.model.editContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Rate Multiplier')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_contract_multiplier()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Rate Multiplier '\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_contract_multiplier')\n\t\t\t\t\t\t\t\t\t\t\t: D().discipline_contract_multiplier\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t, step: 0.001\n\t\t\t\t\t\t\t\t\t\t\t, title: \"Percentage increase of current applied contract rates\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: !ctrl.model.data.readContractPermissions()\n\t\t\t\t\t|| ctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t&& checkMultiple().data.length > 1\n\n\t\t\t\t\t? null\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Rate Multiplier ')\n\t\t\t\t\t\t,checkMultiple().data[0].discipline_contract_multiplier()\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Proposed Amount ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_planned()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Proposed Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_planned')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_planned\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0.01\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, title: \"Amount of work there is to complete\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Actual Amount ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_completed()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Actual Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_completed')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_completed\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, title: \"Amount of work that is already completed\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Chronological Order ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_order()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Chronological Order'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_order')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_order\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, title: \"Chronological order of the \"\n\t\t\t\t\t\t\t\t\t\t\t+ \"discipline activity\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Strict')\n\t\t\t\t\t\t,m('label.control-label', ' | ')\n\t\t\t\t\t\t,m('label.control-label', 'Proposed Start')\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.checkbox(\n\t\t\t\t\t\t\t{ onchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_strict_start')\n\t\t\t\t\t\t\t\t\t: D().discipline_strict_start\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: checkMultiple().data[0].discipline_strict_start()\n\t\t\t\t\t\t\t,title: \"Recover disciplines if they strictly \"\n\t\t\t\t\t\t\t\t+ \"need to be completed by their end date. \"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => moment(checkMultiple().data[0].discipline_start_date()).format(\"ll\")\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\tcheckMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_start_date')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_start_date\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"The date work is allowed \"\n\t\t\t\t\t\t\t\t\t\t+ \"to commence, this defaults to \"\n\t\t\t\t\t\t\t\t\t\t+ \"the project's Feasible Start Date\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Strict')\n\t\t\t\t\t\t,m('label.control-label', ' | ')\n\t\t\t\t\t\t,m('label.control-label', 'Proposed End')\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.checkbox(\n\t\t\t\t\t\t\t{ onchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_strict_end')\n\t\t\t\t\t\t\t\t\t: D().discipline_strict_end\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: checkMultiple().data[0].discipline_strict_end()\n\t\t\t\t\t\t\t,title: \"Recover disciplines if they strictly \"\n\t\t\t\t\t\t\t\t+ \"need to be completed by their end date. \"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => moment(checkMultiple().data[0].discipline_end_date()).format(\"ll\")\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\tcheckMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_end_date')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_end_date\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"The date work should be complete by, \"\n\t\t\t\t\t\t\t\t\t\t+ \"this defaults to the project's \"\n\t\t\t\t\t\t\t\t\t\t+ \"Feasible End Date \"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t,elements.alert(\n\t\t\t\t\t\t`info`\n\t\t\t\t\t\t,`Use the Cascade button to match the previous disciplines duration and cascade the start and finish dates`\n\t\t\t\t\t)\n\t\t\t\t\t,incrimentTimeButton(ctrl)\n\t\t\t\t]\n\t\t\t}\n\n\t\t\tfunction FinanicalSummary(){\n\t\t\t\treturn !checkMultiple().data.every(R.prop('newdiscipline'))\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\tdata.editContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Nominal Charge Rate')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\t\tcheckMultiple().data[0].organizations_disciplines_nominal_revenue_rate()\n\t\t\t\t\t\t\t\t\t* checkMultiple().data[0].discipline_contract_multiplier()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Nominal Charge Rate'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: (value) => disciplineChargeRate(value, checkMultiple().data)\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,title: `Average amount to charge clients when this disciplines is used. May be altered for specific clients via financials and the contract selection`\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: data.readContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Nominal Charge Rate')\n\t\t\t\t\t\t,makeMoney(\n\t\t\t\t\t\t\tcheckMultiple().data[0].organizations_disciplines_nominal_revenue_rate()\n\t\t\t\t\t\t\t* checkMultiple().data[0].discipline_contract_multiplier()\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t\t,errors()['Nominal Charge Rate']\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t`warning`\n\t\t\t\t\t\t, `Charge Amounts must be positive as this is money that would be gained as revenue by the organization`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\n\n\t\t\t\t\t,data.editContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Nominal Pay Rate')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => makeMoney(checkMultiple().data[0].organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Nominal Pay Rate'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst abvalue = Math.abs(value)*-1\n\t\t\t\t\t\t\t\t\t\t\t\treturn setOptions(abvalue, 'organizations_disciplines_nominal_expenditure_rate')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmax: 0\n\t\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,title: `Average amount that would be paid when a team or resource conducts this discipline. May be altered for specific teams via financials and the contract selection`\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: data.readContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Nominal Pay Rate')\n\t\t\t\t\t\t,makeMoney(checkMultiple().data[0].organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t\t,errors()['Nominal Pay Rate']\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t`warning`\n\t\t\t\t\t\t, `Pay Amounts must be negative as this is money that would be expenditures of the organization`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\t\t,data.editContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Client Item Reference')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].contract_items_client_reference()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t(value) => setOptions(value, 'contract_items_client_reference')\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: `Reference number or name the client will refer to contractually`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: data.readContractPermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Client Item Reference')\n\t\t\t\t\t\t,checkMultiple().data[0].contract_items_client_reference()\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\t\t\t\t]\n\n\t\t\t}\n\n\t\t\tfunction OperationAndRecovery(){\n\t\t\t\treturn [\n\n\t\t\t\t\telements.list([\n\t\t\t\t\t\telements.checkbox(\n\t\t\t\t\t\t\t{ onchange:\n\t\t\t\t\t\t\t\tm.withAttr(\n\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t,checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_consolidate_start')\n\t\t\t\t\t\t\t\t\t\t: D().discipline_consolidate_start\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t, checked: checkMultiple().data[0].discipline_consolidate_start()\n\t\t\t\t\t\t\t, title: \"Ensure work dates are consolidated and \"\n\t\t\t\t\t\t\t\t+\"are not sporadic\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('label.control-label', 'Consolidate Schedule')\n\t\t\t\t\t\t,elements.alert('info', `Ensure project works are consolidated and not sporadically spread across the timeline`)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_consistency')\n\t\t\t\t\t\t\t\t\t: D().discipline_consistency\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, checked: checkMultiple().data[0].discipline_consistency()\n\t\t\t\t\t\t\t, title: \"Ensure resources that worked in \"\n\t\t\t\t\t\t\t\t+ \"previous disciplines also work on \"\n\t\t\t\t\t\t\t\t+ \"this discipline\"\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,m('label.control-label', 'Consistent Resources')\n\t\t\t\t\t\t,elements.alert('info', `Ensure resources that worked on previous disciplines also work on this discipline if they are capable`)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.checkbox(\n\t\t\t\t\t\t\t{ onchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_recovery')\n\t\t\t\t\t\t\t\t\t: D().discipline_recovery\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: checkMultiple().data[0].discipline_recovery()\n\t\t\t\t\t\t\t,title: \"Allow Odin to attempt to recover \"\n\t\t\t\t\t\t\t\t+ \"disciplines if the end dates slip \"\n\t\t\t\t\t\t\t\t+ \"out of control\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('label.control-label', 'Recovery Permission')\n\t\t\t\t\t\t,elements.alert('info', `\n\t\t\t\t\t\t\tAllow Odin to attempt to recover disciplines if the end dates look like they won't be met.\n\t\t\t\t\t\t\tOdin will attempt to recover the discipline by allocating more resources and/or subsituting faster resources suited to the work`\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Auto-Assign Tasks')\n\t\t\t\t\t\t,elements.checkbox(\n\t\t\t\t\t\t\t{ onchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_auto_assign_tasks')\n\t\t\t\t\t\t\t\t\t: D().discipline_auto_assign_tasks\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: checkMultiple().data[0].discipline_auto_assign_tasks()\n\t\t\t\t\t\t\t,title: \"Allow Odin to auto assign project tasks while allocating works\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Operational Regime')\n\t\t\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t\t\t['Consecutive', 'Workflows']\n\t\t\t\t\t\t\t, checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_flow')\n\t\t\t\t\t\t\t\t: D().discipline_flow\n\t\t\t\t\t\t\t,{ title: `Discipline relationships can be managed\n\t\t\t\t\t\t\t\twith our Workflow Relationships\n\t\t\t\t\t\t\t\tor the relationships can be\n\t\t\t\t\t\t\t\tstacked back to back.\n\t\t\t\t\t\t\t\t(as in a Consecutive Operation).\n\t\t\t\t\t\t\t\tIn a Consecutive\n\t\t\t\t\t\t\t\toperation the first\n\t\t\t\t\t\t\t\tdiscipline will have to finish\n\t\t\t\t\t\t\t\tbefore the second can start.\n\t\t\t\t\t\t\t\tIn the Workflow operation, the\n\t\t\t\t\t\t\t\trelationships altered in Workflows\n\t\t\t\t\t\t\t\twill dictate their forward and backward offsets\n\t\t\t\t\t\t\t\tthat will allow an efficient overlap of cascading activities`\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t, `Discipline relationships can be managed\n\t\t\t\t\t\t\twith our Workflow Relationships\n\t\t\t\t\t\t\tor the relationships can be\n\t\t\t\t\t\t\tstacked back to back.\n\t\t\t\t\t\t\t(as in a Consecutive Operation).\n\t\t\t\t\t\t\tIn a Consecutive\n\t\t\t\t\t\t\toperation the first\n\t\t\t\t\t\t\tdiscipline will have to finish\n\t\t\t\t\t\t\tbefore the second can start.\n\t\t\t\t\t\t\tIn the Workflow operation, the\n\t\t\t\t\t\t\trelationships altered in Workflows\n\t\t\t\t\t\t\twill dictate their forward and backward offsets\n\t\t\t\t\t\t\tthat will allow an efficient overlap of cascading activities`\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Environmental Rating')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_harshness()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Environmental Rating'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_harshness')\n\t\t\t\t\t\t\t\t\t\t\t: D().discipline_harshness\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmin: 1\n\t\t\t\t\t\t\t\t\t\t\t, step: 0.1\n\t\t\t\t\t\t\t\t\t\t\t, title: \"A ratio that represents environmental \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"conditions and the affect it will \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"have on working rates. If a workload is \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"expected to take twice as long because \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"of environmental conditions, this value \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"would be 2.\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t, \"A ratio that represents environmental \"\n\t\t\t\t\t\t\t+ \"conditions and the affect it will \"\n\t\t\t\t\t\t\t+ \"have on working rates. If a workload is \"\n\t\t\t\t\t\t\t+ \"expected to take twice as long because \"\n\t\t\t\t\t\t\t+ \"of environmental conditions, this value \"\n\t\t\t\t\t\t\t+ \"would be 2.\"\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Resource Combination Limit')\n\t\t\t\t\t\t,!checkMultiple().data[0].discipline_recovery()\n\t\t\t\t\t\t\t? 'Intiate Recovery Permission'\n\t\t\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t\t\t() => checkMultiple().data[0].discipline_combination_limit()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Resource Combination Limit'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: checkMultiple().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'discipline_combination_limit')\n\t\t\t\t\t\t\t\t\t\t\t: D().discipline_combination_limit\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tmin: 1\n\t\t\t\t\t\t\t\t\t\t\t, title: \"How many resources Odin is \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"allowed to propose during an \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"attempt to recover it from slipping \"\n\t\t\t\t\t\t\t\t\t\t\t\t+ \"past its end dates\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t, \"This limit is the maximum number of resources Odin is \"\n\t\t\t\t\t\t\t+ \"allowed to schedule to complete this discipline \"\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t]\n\t\t\t}\n\n\t\t\tfunction ResourceAllocation(){\n\t\t\t\treturn !ctrl.model.rList().length\n\t\t\t\t&& ctrl.model.checkMultiple().data.some((d) => !d.discipline_id() || !d.organizations_disciplines_id())\n\t\t\t\t? elements.alert(`warning`, `Save these disciplines before allocating resources`)\n\t\t\t\t: [\n\t\t\t\t\tctrl.model.rList().length\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tPencil(\n\t\t\t\t\t\t\t() => m(`label`, 'Available Resources')\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tctrl.model.rList\n\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\tctrl.model.dc_mapping(v, ctrl.model.checkMultiple().data)\n\t\t\t\t\t\t\t\t\t\treturn v.ParentRecognition\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t, 'ParentRecognition'\n\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\tdisabled: ctrl.model.rList().length == 0\n\t\t\t\t\t\t\t\t\t\t\t|| ctrl.model.checkMultiple().data.length == 0\n\t\t\t\t\t\t\t\t\t\t,title: \"Team or Resource nominated to work on this discipline\"\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t, (value, element) => {\n\t\t\t\t\t\t\t\t\t\telement.value = \"\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t\t,m('label.control-label', 'Resources ')\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tctrl.model.data.readResourcePermissions()\n\t\t\t\t\t\t\t? elements.strikeTable(\n\t\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t\t(a) => a.contractor_id\n\t\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\t\tcheckMultiple().data.map(\n\t\t\t\t\t\t\t\t\t\t\t(d) =>\n\t\t\t\t\t\t\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\t\tlabel: label.disciplines_contractors_name()\n\t\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteDisciplineC({ entity: label })\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t\t\t])\n\t\t\t\t\t,m('.teams'\n\t\t\t\t\t\t, m('label.control-label'\n\t\t\t\t\t\t\t, 'Teams ' + (\n\t\t\t\t\t\t\t\t(ctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t|| ctrl.model.editContractPermissions())\n\t\t\t\t\t\t\t\t&& ctrl.model.data.advancedView()\n\t\t\t\t\t\t\t\t? `× Rate Multiplier`\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,ctrl.model.data.readResourcePermissions()\n\t\t\t\t\t\t\t? elements.strikeTable(\n\t\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t\tbyProp('crew_id')\n\t\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\t\tcheckMultiple().data.map(\n\t\t\t\t\t\t\t\t\t\t\t(d) =>\n\t\t\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map( dc =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdc.disciplines_contractors_crews\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\t\tlabel: label.disciplines_contractors_crews_name()\n\t\t\t\t\t\t\t\t\t\t,action: () => { ctrl.model.deleteDisciplineC({ entity: label }) }\n\t\t\t\t\t\t\t\t\t\t,meta:\n\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.data.advancedView()\n\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\t\t` × `\n\t\t\t\t\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => label.disciplines_contractors_crews_contract_multiplier()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Team Multiplying Rate ' + label.disciplines_contractors_crews_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprop: (v) => updateMultipliers(v, label)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, step: 0.001\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, title: \"Percentage increase of current applied contract rates\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t\t\t)\n\n\t\t\t\t\t,m('br')\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('button.btn.btn-secondary'\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,onclick: () => ctrl.intent.createIdealResource()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, \"Create\"\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => idealResourceName() || `a New Ideal Resource`\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\tidealResourceName\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Name of the ideal resource\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tctrl.model.disciplineCloneButton()\n\t\t\t\t\t\t,ctrl.model.checkMultiple().data.length > 1\n\t\t\t\t\t\t\t? `these Disciplines`\n\t\t\t\t\t\t\t: `this Discipline`\n\t\t\t\t\t])\n\t\t\t\t]\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\tunderlinedHeader('Resourcing')\n\t\t\t\t, ResourceAllocation()\n\t\t\t\t, m('br')\n\t\t\t\t, underlinedHeader('Work Detail')\n\t\t\t\t, WorkDetail()\n\t\t\t\t, m('br')\n\t\t\t\t, underlinedHeader('Finanicals')\n\t\t\t\t, FinanicalSummary()\n\t\t\t\t, m('br')\n\t\t\t\t, underlinedHeader('Operation & Recovery')\n\t\t\t\t, OperationAndRecovery()\n\t\t\t\t, m('br')\n\t\t\t]\n\t\t}\n\n\n\t\tfunction linkCompeltion(v){\n\t\t\tif(v || v == 0){\n\n\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t.forEach((o) => {\n\n\t\t\t\t\tlet diffState =\n\t\t\t\t\t\t!o.project_extras_date_invalid()\n\t\t\t\t\t\t|| v == 0\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: true\n\n\n\t\t\t\t\tif (diffState){\n\t\t\t\t\t\to.project_extras_date_invalid(null)\n\t\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\t\to\n\t\t\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( v == 0 ){\n\t\t\t\t\t\to.project_extras_date_completed(null)\n\t\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\t\to\n\t\t\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\to.project_extras_actual_amount(v)\n\n\t\t\t\t\tif( !o.project_extras_date_completed() && v ){\n\t\t\t\t\t\to.project_extras_date_completed(Date.now())\n\t\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\t\to\n\t\t\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\to.created = true\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn checkMultipleProjectExtras().data[0].project_extras_actual_amount()\n\t\t}\n\n\t\tfunction taskDetails(t){\n\n\t\t\tfunction updateCompletedDate({ e, value, task}){\n\t\t\t\tif( e !== undefined ) {\n\t\t\t\t\tsetOptions(!e ? false : value, 'project_extras_date_completed')\n\t\t\t\t\tsetOptions(false, 'project_extras_date_invalid')\n\n\t\t\t\t\t!e ? setOptions(false, 'project_extras_date_verified') : null\n\n\t\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t\t.map((t) => t.project_extras_actual_amount(e ? t.project_extras_planned_amount() : 0))\n\t\t\t\t}\n\t\t\t\treturn task.project_extras_date_completed()\n\t\t\t}\n\n\t\t\tfunction updateInvalidDate({ e, value, task}){\n\t\t\t\tif( e !== undefined ) {\n\n\t\t\t\t\tsetOptions(!e ? false : value, 'project_extras_date_invalid')\n\t\t\t\t\tsetOptions(false, 'project_extras_date_completed')\n\n\t\t\t\t\t!e ? setOptions(false, 'project_extras_date_verified') : null\n\n\t\t\t\t}\n\t\t\t\treturn task.project_extras_date_invalid()\n\t\t\t}\n\n\t\treturn [\n\t\t\t\tunderlinedHeader('Task Details')\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tctrl.model.taskCloneButton()\n\t\t\t\t\t,ctrl.model.checkMultipleProjectExtras().data.length > 1\n\t\t\t\t\t\t? `these Tasks`\n\t\t\t\t\t\t: `this Task`\n\t\t\t\t])\n\n\t\t\t\t,!spreading()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tspreading(true)\n\n\t\t\t\t\t\t\t\tconst checkedorgds =\n\t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t\t.map((d) => exposer(d.organizations_disciplines_id))\n\n\t\t\t\t\t\t\t\tif( checkedorgds.length ){\n\t\t\t\t\t\t\t\t\tdisciplineSpread(\n\t\t\t\t\t\t\t\t\t\tctrl.model.restrictedOrgTask()\n\t\t\t\t\t\t\t\t\t\t.filter((od) => checkedorgds.find((sod) => od.organizations_disciplines_id == sod))\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Spread tasks to disciplines on this project\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Spread'\n\t\t\t\t\t)\n\t\t\t\t\t,ctrl.model.checkMultipleProjectExtras().data.length > 1 ? ` these Tasks` : ` this Task`\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\t\t\t,spreading()\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,disabled: ctrl.model.checkTaskDates(true)\n\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\t\t\tprojectExtrasTypes()['completed'] = 'any'\n\t\t\t\t\t\t\t\t\tprojectExtrasTypes()['invalid'] = 'any'\n\t\t\t\t\t\t\t\t\tprojectExtrasTypes()['verified'] = 'any'\n\t\t\t\t\t\t\t\t\tprojectExtrasTypes()['assigned'] = 'any'\n\n\t\t\t\t\t\t\t\t\treturn getTasks(\n\t\t\t\t\t\t\t\t\t\t[]\n\t\t\t\t\t\t\t\t\t\t,[vm()\n\t\t\t\t\t\t\t\t\t\t,activeTab()\n\t\t\t\t\t\t\t\t\t\t,projectExtrasTypes()\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.then(function(){\n\n\t\t\t\t\t\t\t\t\t\tform().project.project_extras =\n\t\t\t\t\t\t\t\t\t\t\tform().project.project_extras\n\t\t\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t\t\t\t\t\t\t\t\t.map((d) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst taskDiff =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ta.project_extras_type()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== b.project_extras_type()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,checkMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,form().project.project_extras.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tt.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== d.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn taskDiff.map((t) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpe_vm(t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst newt = cloningProjectE(true, false)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.discipline_id(d.discipline_id())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_actual_amount(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_assigned(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_completed(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_verified(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// newt.project_extras_date_invalid(null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.project_extras_description(d.discplineNameDescription)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.relatedDiscipline = d.discplineNameDescription\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewt.organizations_disciplines_id = exposer(d.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprojectExtrasSum(t, null)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data.unshift(newt)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn newt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tdisciplineSpread([])\n\t\t\t\t\t\t\t\t\t\tspreading(false)\n\n\t\t\t\t\t\t\t\t\t\treturn masterPELIST(true)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: \"Spread tasks to all disciplines on the project\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,'Save'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m(`label`, ` to All Disciplines`)\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm(`label`, ` Replicate selected tasks across all disciplines on this project with the Spread button or select a specific few disciplines and click Save`)\n\t\t\t\t\t])\n\t\t\t\t]\n\t\t\t\t: null\n\n\t\t\t\t,m('hr')\n\n\t\t\t\t// ,processedTasksSelected()\n\t\t\t\t// ? `Completed or Invalid tasks are not able to change relations`\n\t\t\t\t// : ''\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Discipline ')\n\t\t\t\t\t,processedTasksSelected() && !spreading()\n\t\t\t\t\t? checkMultipleProjectExtras().data[0].relatedDiscipline\n\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t() => checkMultipleProjectExtras().data[0].relatedDiscipline\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\t\tlist: ctrl.model.restrictedOrgTask\n\t\t\t\t\t\t\t\t,onselect(v, model){\n\n\t\t\t\t\t\t\t\t\tif( spreading() ){\n\n\t\t\t\t\t\t\t\t\t\tdisciplineSpread(disciplineSpread().concat(v))\n\t\t\t\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\t\t\t\tmodel.chosen(null)\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.orgDisciplineNameDescription, 'relatedDiscipline')\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.organizations_disciplines_id, 'organizations_disciplines_id')\n\n\t\t\t\t\t\t\t\t\t\tconst discipline =\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.projectDisciplines()\n\t\t\t\t\t\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\t\t\t\t\t\texposer(d.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t== exposer(v.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tdiscipline\n\t\t\t\t\t\t\t\t\t\t\t? setOptions(discipline.discipline_id(), 'discipline_id')\n\t\t\t\t\t\t\t\t\t\t\t: setOptions(false, 'discipline_id')\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.orgDisciplineNameDescription, 'project_extras_description')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,field: 'orgDisciplineNameDescription'\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.organizations_disciplines().length\n\t\t\t\t\t\t\t\t\t\t|| processedTasksSelected() && !spreading()\n\t\t\t\t\t\t\t\t\t,title: \"Related discipline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,sort: R.prop('completedcount')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,spreading()\n\t\t\t\t? elements.strikeList(\n\t\t\t\t\tdisciplineSpread()\n\t\t\t\t\t.map(\n\t\t\t\t\t\tod => ({\n\t\t\t\t\t\t\tlabel: od.orgDisciplineNameDescription\n\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\tdisciplineSpread()\n\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\tdisciplineSpread()\n\t\t\t\t\t\t\t\t\t.findIndex((ds) =>\n\t\t\t\t\t\t\t\t\t\tds.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t\t== od.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tdisciplineSpread(disciplineSpread())\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Task Name ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultipleProjectExtras().data[0].project_extras_type()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'project_extras_type')\n\t\t\t\t\t\t\t\t\t: t.project_extras_type\n\t\t\t\t\t\t\t\t,{}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,checkTaskDates()\n\n\t\t\t\t,m('label.control-label.mb1', 'Task Description')\n\t\t\t\t,checkMultipleProjectExtras().data.length > 1\n\t\t\t\t\t? [elements.list([\n\t\t\t\t\t\t[ R.countBy(\n\t\t\t\t\t\t\tR.identity\n\t\t\t\t\t\t\t,ctrl.model.checkMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t.map( s =>\n\t\t\t\t\t\t\t\t\ts['project_extras_description']()\n\t\t\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\t\t\ts['project_extras_description']()\n\t\t\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t\t\t+ s['project_extras_actual_amount']()\n\t\t\t\t\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t\t\t\t\t+ s['project_extras_planned_amount']()\n\n\t\t\t\t\t\t\t\t\t\t: s['project_extras_description']()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\tidx => Object.keys(idx).map(\n\t\t\t\t\t\t\t\tk => m(\n\t\t\t\t\t\t\t\t\t'p.pv1.ma0'\n\t\t\t\t\t\t\t\t\t, k\n\t\t\t\t\t\t\t\t\t, idx[k] > 1\n\t\t\t\t\t\t\t\t\t\t? m('span.b.pl2'\n\t\t\t\t\t\t\t\t\t\t\t, { title:\n\t\t\t\t\t\t\t\t\t\t\t\t'There are '+idx[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' total tasks'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' of the same type and'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' completion within this'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' project.'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,`(x${idx[k]})` )\n\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.pop()\n\t\t\t\t\t])]\n\t\t\t\t\t.map(\n\t\t\t\t\t\t// todo-james use hickery\n\t\t\t\t\t\tlist => {\n\t\t\t\t\t\t\tlist.attrs.style =\n\t\t\t\t\t\t\t\tObject.assign( list.attrs.style || {}, {\n\t\t\t\t\t\t\t\t\tmaxHeight: '15em'\n\t\t\t\t\t\t\t\t\t,overflowY: 'auto'\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\treturn list\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t.pop()\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tPencil(\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data[0].project_extras_description()\n\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data[0].project_extras_description()\n\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t+ checkMultipleProjectExtras().data[0].project_extras_actual_amount()\n\t\t\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t\t\t+ checkMultipleProjectExtras().data[0].project_extras_planned_amount()\n\n\t\t\t\t\t\t\t\t: checkMultipleProjectExtras().data[0].project_extras_description()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'project_extras_description')\n\t\t\t\t\t\t\t\t\t\t: t.project_extras_description\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tplaceholder: \"Description of the task\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t// Need to check why timetravel is evaded when proposed amount is changed with actual amount\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Proposed Amount ')\n\t\t\t\t\t, Pencil(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t.map((t) => t.project_extras_planned_amount())\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'project_extras_planned_amount')\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Amount\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', ' Actual Amount ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t.map((t) => t.project_extras_actual_amount())\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Actual Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => linkCompeltion(value)\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Actual Amount\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\n\t\t\t\t,metaDataLoading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: elements.list([\n\t\t\t\t\tm('label.control-label', newUser() ? 'Invite ' : 'Assigned ')\n\t\t\t\t\t,!newUser()\n\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tusers().flatMap((u) =>\n\t\t\t\t\t\t\t\t!checkMultipleProjectExtras().data[0].invite_email\n\t\t\t\t\t\t\t\t&& u.user_id()\n\t\t\t\t\t\t\t\t== checkMultipleProjectExtras()\n\t\t\t\t\t\t\t\t\t.data[0].user_id()\n\t\t\t\t\t\t\t\t? [u]\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map( u => u.usersFullName )\n\t\t\t\t\t\t\t.shift()\n\t\t\t\t\t\t\t|| checkMultipleProjectExtras().data[0].invite_email\n\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\tctrl.model.users\n\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\tif (v){\n\n\t\t\t\t\t\t\t\t\t\tconst editList =\n\t\t\t\t\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t\t\t\t\t(v) => exposer(v.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t,checkMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t\t\t\t\t.filter((v) => exposer(v.organizations_disciplines_id))\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tif( Object.keys(editList).length ){\n\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(editList).forEach((orgdisciplineId) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst newTeamResource =\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.allResourceTypes()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.find((r) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tr.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== v.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst theDiscipline =\n\t\t\t\t\t\t\t\t\t\t\t\t\tform().project.disciplines\n\t\t\t\t\t\t\t\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== orgdisciplineId\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tif( theDiscipline ){\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.pipe(R.prop('user_id'), R.call)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,checkMultipleProjectExtras().data\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((u) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& u.user_id() != v.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach((u) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst exisingTeamResource =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttheDiscipline.disciplines_contractors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttheDiscipline\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.disciplines_contractors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map((dc) => dc.disciplines_contractors_crews)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((dcc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdcc.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== u.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texisingTeamResource\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.form().project.project_extras\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tt.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== exisingTeamResource.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& exposer(t.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== orgdisciplineId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== editList[orgdisciplineId].length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.deleteDisciplineC({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tentity: exisingTeamResource\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disciplineSpecific: theDiscipline\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,newTeamResource\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif( newTeamResource && theDiscipline){\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst totalRates =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewTeamResource.crew_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? newTeamResource.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: R.unnest(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewTeamResource.crews.map((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttotalRates.find((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== theDiscipline.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.dc_mapping(newTeamResource, [theDiscipline])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(false, 'invite_id')\n\t\t\t\t\t\t\t\t\t\tsetOptions(false, 'invite_email')\n\n\t\t\t\t\t\t\t\t\t\tv.user_username() != 'Unassigned'\n\t\t\t\t\t\t\t\t\t\t\t? setOptions(v.user_id(), 'user_id')\n\t\t\t\t\t\t\t\t\t\t\t: setOptions(false, 'user_id')\n\n\t\t\t\t\t\t\t\t\t\tv.user_username() != 'Unassigned'\n\t\t\t\t\t\t\t\t\t\t\t? setOptions(true, 'project_extras_custom')\n\t\t\t\t\t\t\t\t\t\t\t: setOptions(false, 'project_extras_custom')\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.user_username() , 'username')\n\n\t\t\t\t\t\t\t\t\t\tv.user_username() != 'Unassigned'\n\t\t\t\t\t\t\t\t\t\t\t? null // ? setOptions(Date.now(), 'project_extras_date_assigned')\n\t\t\t\t\t\t\t\t\t\t\t: setOptions(false, 'project_extras_date_assigned')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t\t\t\t? v.usersFullName\n\t\t\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t\t\tusers().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== checkMultipleProjectExtras().data[0].user_id()\n\t\t\t\t\t\t\t\t\t\t\t) || nullUser\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.usersFullName\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'usersFullName'\n\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 1fr max-content;\n\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\tstroke-width: 2px;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,elements.textInput(\n\t\t\t\t\t\t\t(v) => setOptions(v, 'invite_email')\n\t\t\t\t\t\t\t,{placeholder: \"Email of invitee\"}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\twidth: 1.8em;\n\t\t\t\t\t\t\t\theight: 1.8em;\n\t\t\t\t\t\t\t\tgrid-template-columns: 0.8fr;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tnewUser(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, m(''+css`\n\t\t\t\t\t\t\t\tstroke-width: 1px;\n\t\t\t\t\t\t\t\tcolor: #777;\n\t\t\t\t\t\t\t`, elements.icon.x() )\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,editPermissions() && !newUser()\n\t\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled: newUser()\n\t\t\t\t\t\t\t,onclick: () => { newUser(true) }\n\t\t\t\t\t\t\t,title: \"Invite someone new to the organization to work on this task\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Invite'\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\telements.dateCheckboxLabel({\n\t\t\t\t\t\tlabel: 'Assignment Date'\n\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\ttitle: 'Record Assignment Date'\n\t\t\t\t\t\t\t, prop: checkMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t? (value) => setOptions(!value && value !== undefined ? false : value, 'project_extras_date_assigned')\n\t\t\t\t\t\t\t\t: t.project_extras_date_assigned\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,checkbox:{\n\t\t\t\t\t\t\ttitle: 'Mark Assignment Date'\n\t\t\t\t\t\t\t, prop: checkMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t? (value) => setOptions(!value && value !== undefined ? false : value, 'project_extras_date_assigned')\n\t\t\t\t\t\t\t\t: t.project_extras_date_assigned\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t\t\tsetOptions(value, 'project_extras_date_assigned')\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\telements.dateCheckboxLabel({\n\t\t\t\t\t\tlabel: 'Completed Date'\n\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\ttitle: 'Record Completed Date'\n\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t(v) => updateCompletedDate({e: v, value: v, task: checkMultipleProjectExtras().data[0]})\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,checkbox:{\n\t\t\t\t\t\t\ttitle: 'Mark Completed Date'\n\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t(v) => updateCompletedDate({e: v, value: v, task: checkMultipleProjectExtras().data[0]})\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\tconst value = e ? Date.now() : false\n\t\t\t\t\t\t\t\t\t\tupdateCompletedDate({ e, value, task: checkMultipleProjectExtras().data[0]})\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\telements.dateCheckboxLabel({\n\t\t\t\t\t\tlabel: 'Verified Date'\n\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\ttitle: 'Record Verified Date'\n\t\t\t\t\t\t\t, prop: checkMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t? (value) => setOptions(!value && value !== undefined ? false : value, 'project_extras_date_verified')\n\t\t\t\t\t\t\t\t: t.project_extras_date_verified\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t|| checkMultipleProjectExtras().data.some((t) =>\n\t\t\t\t\t\t\t\t\t\t!t.project_extras_date_completed() && !t.project_extras_date_invalid()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,checkbox:{\n\t\t\t\t\t\t\ttitle: 'Mark Verified Date'\n\t\t\t\t\t\t\t, prop: checkMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t? (value) => setOptions(!value && value !== undefined ? false : value, 'project_extras_date_verified')\n\t\t\t\t\t\t\t\t: t.project_extras_date_verified\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t\t\tsetOptions(value, 'project_extras_date_verified')\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t|| checkMultipleProjectExtras().data.some((t) =>\n\t\t\t\t\t\t\t\t\t\t\t!t.project_extras_date_completed() && !t.project_extras_date_invalid()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\telements.dateCheckboxLabel({\n\t\t\t\t\t\tlabel: 'Invalid Date'\n\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\ttitle: 'Record the date this task turned invalid'\n\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t(v) => updateInvalidDate({e: v, value: v, task: checkMultipleProjectExtras().data[0]})\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,checkbox:{\n\t\t\t\t\t\t\ttitle: 'Mark the date this task turned invalid '\n\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t(v) => updateInvalidDate({e: v, value: v, task: checkMultipleProjectExtras().data[0]})\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t\t\t\t\t\t: false\n\n\t\t\t\t\t\t\t\t\t\tupdateInvalidDate({ e, value, task: checkMultipleProjectExtras().data[0]})\n\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t])\n\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Priority ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultipleProjectExtras().data[0].project_extras_priority()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Priority'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'project_extras_priority')\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Priority\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Repeat Every ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultipleProjectExtras().data[0].project_extras_frequency()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Frequency'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'project_extras_frequency')\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Frequency\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,m('label.control-label', ' Days')\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Task Notes ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultipleProjectExtras().data[0].project_extras_notes()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\tcheckMultipleProjectExtras().data.length >= 1\n\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'project_extras_notes')\n\t\t\t\t\t\t\t\t\t: t.project_extras_notes\n\t\t\t\t\t\t\t\t,{placeholder: \"Task notes\"}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m('label.control-label', 'Address ')\n\t\t\t\t,Pencil(\n\t\t\t\t\t() => checkMultipleProjectExtras().data[0].project_extras_address()\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\tfield: 'title'\n\t\t\t\t\t\t\t,throttleSearch: 500\n\t\t\t\t\t\t\t,inputClassName: 'form-control'\n\t\t\t\t\t\t\t,initialValue: checkMultipleProjectExtras().data[0].project_extras_address()\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tplaceholder: '14 Lonsdale St, Melbourne, Victoria'\n\t\t\t\t\t\t\t\t,name: 'project_extras_address'\n\t\t\t\t\t\t\t\t,required: true\n\t\t\t\t\t\t\t\t,value: checkMultipleProjectExtras().data[0].project_extras_address()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,oninput: x => setOptions(x, 'project_extras_address')\n\t\t\t\t\t\t\t,manuelConfig: {\n\t\t\t\t\t\t\t\tfilter: () => true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,search(value){\n\t\t\t\t\t\t\t\tif(value){\n\t\t\t\t\t\t\t\t\treturn data.api.suburbs.search(value)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onselect(value){\n\t\t\t\t\t\t\t\tsetOptions(value.title, 'project_extras_address')\n\t\t\t\t\t\t\t\t// collect data as we use it for later features\n\t\t\t\t\t\t\t\tdata.api.suburbs.here.patch(value)\n\t\t\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\t\t\t.catch( e => console.error('Could not save here data ', e))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t)\n\n\t\t\t\t,m('br')\n\t\t\t\t,m('label.control-label', 'Expenditure Ledgers ')\n\t\t\t\t,elements.list([\n\t\t\t\t\tR.uniq(\n\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras()\n\t\t\t\t\t\t\t.data\n\t\t\t\t\t\t\t.map((i) => i.costinvoices)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.map(s => m('p.pv1.ma0',s))\n\t\t\t\t])\n\n\t\t\t\t,m('label.control-label', 'Revenue Ledgers ')\n\t\t\t\t,elements.list([\n\t\t\t\t\tR.uniq(\n\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras()\n\t\t\t\t\t\t\t.data\n\t\t\t\t\t\t\t.map((i) => i.revenueinvoices)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.map(s => m('p.pv1.ma0',s))\n\t\t\t\t])\n\t\t\t\t,m('br')\n\n\t\t\t\t,checkMultiple().length > 1\n\t\t\t\t? elements.alert(`warning`, `Files must be uploaded to one task at a time`)\n\t\t\t\t: m(HarthUppy, {\n\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({uploadbox:'taskfiles'})\n\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t})\n\n\t\t\t]\n\t\t}\n\n\t\tfunction projectOptionsView(){\n\t\t\treturn [\n\n\t\t\t\t!ctrl.model.discipline_vm().discipline_name\n\t\t\t\t? [\n\n\t\t\t\t\tm('br')\n\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\tgrid-template-columns: 0.3fr 0.3fr 0.4fr;\n\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\t\tmargin-bottom: 3em\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\telements.undoDiscard({\n\t\t\t\t\t\t\t\tdiscard: null\n\t\t\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\t\t\tlabel: 'Done'\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tprojectOptions(false)\n\t\t\t\t\t\t\t\t\t\t\tcheckMultipleProjects([])\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,title: `Done`\n\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\topacity: ctrl.model.editPermissions() ? 1 : 0\n\t\t\t\t\t\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t,elements.confirmDelete(\n\t\t\t\t\t\t\t\tctrl.intent.deleteProject\n\t\t\t\t\t\t\t\t,ctrl.model.savingProp\n\t\t\t\t\t\t\t\t,() => ctrl.model.checkMultipleProjects().length == 0\n\t\t\t\t\t\t\t\t,ctrl.model.deleteStateProp\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\n\n\t\t\t\t\t,m('hr')\n\n\t\t\t\t\t,inverseProjectsList().length\n\t\t\t\t\t? m(`label`,\n\t\t\t\t\t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t\t\t\t\t? 'Current Projects'\n\t\t\t\t\t\t\t: 'Completed Projects'\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t\t,inverseProjectsList()\n\t\t\t\t\t.map(R.pick(['project_name', 'project_id']))\n\t\t\t\t\t.map((s, sIndex) =>\n\t\t\t\t\t\tm('p.pv1.ma0',\n\t\t\t\t\t\t\tm('a'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: 'Move to current projects'\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\treturn ctrl.model.data.fetchProjectsBySchedule({\n\t\t\t\t\t\t\t\t\t\t\tschedule_id: ctrl.model.schedule_id()\n\t\t\t\t\t\t\t\t\t\t\t,project_id: s.project_id()\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst project = R.last(res)\n\t\t\t\t\t\t\t\t\t\t\t\tprojects().unshift(project)\n\t\t\t\t\t\t\t\t\t\t\t\tinverseProjectsList().splice(sIndex, 1)\n\t\t\t\t\t\t\t\t\t\t\t\tinverseProjectsList(inverseProjectsList())\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm(project)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.cloningProject(false, true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.projectOptions(false)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras().data = []\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.intent.fetchAllocations()\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.viewType(EditProject)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.activeTab('Tasks')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterPELIST(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.fetchedExtras(false)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.disciplineViewSet('Working Details')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\t\t\t\t\t\trouteids: [].concat(ctrl.model.vm().disciplines, ctrl.model.vm()).map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t\t\t\t\t\t\t,getledgers: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ledgerdetails: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,getmatdata: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,specificproject: [ctrl.model.vm()['contractrecognitionid']]\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\treturn res\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,sIndex + 1 + '. ' + s.project_name()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,m('hr')\n\t\t\t\t]\n\t\t\t\t: null\n\n\n\t\t\t\t,completedProjects()\n\t\t\t\t== 'inprogress'\n\t\t\t\t&& !ctrl.model.discipline_vm().discipline_name\n\t\t\t\t? [\n\t\t\t\t\tctrl.intent.reOrganizeProjects()\n\t\t\t\t\t,m('hr')\n\t\t\t\t]\n\t\t\t\t: null\n\n\t\t\t\t,completedProjects()\n\t\t\t\t== 'inprogress'\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('button.btn.btn-secondary', {\n\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t!ctrl.model.checkMultipleProjects().length\n\t\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t|| !!ctrl.model.discipline_vm().discipline_id\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t// set the default discipline here\n\t\t\t\t\t\t\t\t// and open pane when assigned\n\n\t\t\t\t\t\t\t\tvar newD = ctrl.model.resetDForm().discipline[0]\n\t\t\t\t\t\t\t\tctrl.model.discipline_vm(newD)\n\t\t\t\t\t\t\t\tctrl.model.checkMultiple().data.push(newD)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, \"Adjust\" )\n\t\t\t\t\t\t,m(`label`, ` Disciplines`)\n\t\t\t\t\t])\n\n\t\t\t\t\t,m(\n\t\t\t\t\t\t'label'\n\t\t\t\t\t\t,`Selected projects can be quickly adjusted to absorb, remove or modify common disciplines`\n\t\t\t\t\t)\n\n\t\t\t\t\t,ctrl.model.discipline_vm().discipline_name\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\telements.action(\n\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t, ctrl.intent.bulkDisciplineAddition\n\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t,() => !ctrl.model.discipline_vm().discipline_name()\n \t\t\t\t\t\t)\n\n\t\t\t\t\t\t,elements.action(\n\t\t\t\t\t\t\t'Discard'\n\t\t\t\t\t\t\t, ctrl.intent.bulkDisciplineDeletion\n\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t, 'warning'\n\t\t\t\t\t\t\t,() => !ctrl.model.discipline_vm().discipline_name()\n\t\t\t\t\t\t\t\t|| !ctrl.model.checkMultipleProjects()\n\t\t\t\t\t\t\t\t\t.some((p) =>\n\t\t\t\t\t\t\t\t\t\tp.disciplines.find((d) =>\n\t\t\t\t\t\t\t\t\t\t\td.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t== ctrl.model.discipline_vm().organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t// clear discipline container and remove pane\n\t\t\t\t\t\t\t\tcheckMultipleProjects()\n\t\t\t\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\t\t\t\tp.disciplines = p.disciplines.filter((d) => d.discipline_id())\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tdiscipline_vm({})\n\t\t\t\t\t\t\t\tcheckMultiple().data = []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, \"Discard\" )\n\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\t\t\t\t\t,m('hr')\n\t\t\t\t]\n\t\t\t\t: null\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tincrimentTimeButton(ctrl)\n\t\t\t\t\t,timepush() > 0 ? ' + ' : ' '\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => timepush()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Push Dates'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: timepush\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 1\n\t\t\t\t\t\t\t\t\t\t, title: \"Days this project should be moved backward or forward, negative amounts will pull the date forward and positive amounts will push it back\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, 'Days'\n\t\t\t\t])\n\t\t\t\t,m('label', `Use the Push Dates button to move the project start and end date, positive amounts will push the project back and negative amounts will pull the date forward`)\n\t\t\t\t,m('hr')\n\n\t\t\t\t,!ctrl.model.availableSchedules().length\n\t\t\t\t? null\n\t\t\t\t: ctrl.model.metaDataLoading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: elements.list([\n\t\t\t\t\tm('button.btn.btn-secondary', {\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t!ctrl.model.checkMultipleProjects().length\n\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t|| !ctrl.model.destinationSchedule().schedule_name\n\t\t\t\t\t\t\t|| !ctrl.model.availableSchedules().length\n\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.metaDataLoading(true)\n\t\t\t\t\t\t\treturn ctrl.model.data.transferProjects({\n\t\t\t\t\t\t\t\tprojects: ctrl.model.checkMultipleProjects().map((p) => p.project_id())\n\t\t\t\t\t\t\t\t,schedule_id: ctrl.model.destinationSchedule().schedule_id\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects()\n\t\t\t\t\t\t\t\t\t.map((p) => p.schedule_id(ctrl.model.destinationSchedule().schedule_id))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then(ctrl.intent.fetchProjects)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tprojectOptions(false)\n\t\t\t\t\t\t\t\tctrl.model.metaDataLoading(false)\n\t\t\t\t\t\t\t\treturn m.redraw()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}, \"Move\" )\n\t\t\t\t\t,m('label', `Project to`)\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => ctrl.model.destinationSchedule().schedule_name\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\tlist: ctrl.model.availableSchedules\n\t\t\t\t\t\t\t,onselect: ctrl.model.destinationSchedule\n\t\t\t\t\t\t\t,field: 'schedule_name'\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\ttitle: `Transfer selected projects to a different schedule`\n\t\t\t\t\t\t\t\t,style: { height: '3em' }\n\t\t\t\t\t\t\t\t,key: D().key\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,sort: R.prop('schedule_name')\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t]\n\t\t}\n\n\t\treturn [\n\n\t\t\tdetailsPaneSave()\n\t\t\t,checkMultipleProjectExtras().data.length\n\t\t\t&& ctrl.model.activeTab() == 'Tasks'\n\t\t\t\t? taskDetails(D)\n\t\t\t\t: D().discipline_id || checkMultiple().data.length\n\t\t\t\t\t? universal()\n\t\t\t\t\t: []\n\n\n\t\t\t,projectOptions() ? null : m(''+css`padding-top: 5em`, detailsPaneSave())\n\t\t]\n\t}\n\n\tvar detailsPaneOpen = () =>\n\n\t\tcheckMultiple().data.length >= 1\n\t\t&& viewType() != InitialProject\n\t\t&& activeTab() == 'Disciplines'\n\n\t\t|| checkMultipleProjectExtras().data.length >= 1\n\t\t\t&& activeTab() == 'Tasks'\n\n\t\t|| projectOptions()\n\n\tconst dtableControl =\n\t\t() => m(''\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-auto-flow: column;\n\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\tgap: 1em;\n\t\t\t\tpadding: 0.5em;\n\t\t\t\tmargin-bottom: 3em\n\t\t\t`\n\t\t\t,[\n\t\t\t\t'Financial Summary'\n\t\t\t\t,'Working Details'\n\t\t\t\t,'Resourcing'\n\t\t\t\t,'Operations and Recovery'\n\t\t\t]\n\t\t\t.map((h) =>\n\t\t\t\tm('a'+css(`opacity:` + (disciplineViewSet() != h ? 0.7 : 1))\n\t\t\t\t\t,{\n\t\t\t\t\t\ttitle: 'Show ' + h\n\t\t\t\t\t\t,onclick: () => { disciplineViewSet(h) }\n\t\t\t\t\t}\n\t\t\t\t\t,h\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n function editAllButton(){\n\n\t\tvar refContainter = activeTab() == 'Tasks'\n\t\t\t? checkMultipleProjectExtras\n\t\t\t: checkMultiple\n\n\t\tvar refVM = activeTab() == 'Tasks'\n\t\t\t? pe_vm\n\t\t\t: discipline_vm\n\n\t\tvar errorFunction = activeTab() == 'Tasks'\n\t\t\t? R.F\n\t\t\t: check_dnames\n\n\t\tvar originalArray = activeTab() == 'Tasks'\n\t\t\t? form().project.project_extras\n\t\t\t: form().project.disciplines\n\n\t\tvar filteredContainer =\n\t\t\tactiveTab() == 'Tasks'\n\t\t\t\t? filteredTaskOptions\n\t\t\t\t: filteredDisciplineOptions\n\n var activated =\n\t\t\toriginalArray.length == refContainter().data.length\n\t\t\t&& originalArray.length\n\t\t\t|| filteredContainer().length == refContainter().data.length\n\t\t\t&& filteredContainer().length\n\n\n\t\treturn elements.checkbox({\n\t\t\tonchange: () => {\n\t\t\t\tif( activated ){\n\t\t\t\t\trefContainter().data = []\n\t\t\t\t\trefVM({})\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trefContainter().data = []\n\t\t\t\t\trefVM({})\n\t\t\t\t\trefContainter().data =\n\t\t\t\t\t\tfilteredContainer().length\n\t\t\t\t\t\t\t? filteredContainer()\n\t\t\t\t\t\t\t: originalArray\n\t\t\t\t\trefVM(refContainter().data[0])\n\n\t\t\t\t\tactiveTab() == 'Tasks' ? null : resources_available()\n\t\t\t\t}\n\t\t\t}\n\t\t\t,title: \"Select or De-select viewed items\"\n\t\t\t,checked: activated\n\t\t\t,disabled: !!errorFunction(true) || !originalArray.length\n\t\t})\n }\n\n\tfunction getActivateContractDeleteButton(){\n\n\t}\n\n\tfunction getActivateDeleteButton(object, objectName){\n\n\t\tvar refContainter = activeTab() == 'Tasks'\n\t\t\t? checkMultipleProjectExtras\n\t\t\t: checkMultiple\n\n\t\tvar refVM = activeTab() == 'Tasks'\n\t\t\t? pe_vm\n\t\t\t: discipline_vm\n\n\t\tvar errorFunction = R.F\n\n\t\tvar activated =\n\t\t\trefContainter().data\n\t\t\t.findIndex( (chr) =>\n\t\t\t\t\tchr[ objectName + '_description']() == object[ objectName + '_description']()\n\t\t\t\t\t&& chr[ objectName + '_id']() == object[ objectName + '_id']()\n\t\t\t\t\t&& chr.key == object.key\n\t\t\t)\n\n\t\tvar vmDetail = object.key == refVM().key\n\n\t\treturn {\n\t\t\tdisabled: !!errorFunction(true) || !editPermissions() && objectName == 'project_extras'\n\t\t\t,type: 'checkbox'\n\t\t\t,onclick: (v) => {\n\t\t\t\tif(!v.currentTarget.checked){\n\t\t\t\t\trefContainter().data.splice(activated, 1)\n\t\t\t\t\tif (vmDetail && refContainter().data.length >= 1 ){\n\t\t\t\t\t\trefVM(refContainter().data[0])\n\t\t\t\t\t} else if (vmDetail && refContainter().data.length <= 0){\n\t\t\t\t\t\trefVM({})\n\t\t\t\t\t}\n\t\t\t\t\tactiveTab() == 'Tasks'\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: resources_available()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif ( refContainter().data.length > 0 ){\n\t\t\t\t\t\trefContainter().data.push(object)\n\t\t\t\t\t} else {\n\t\t\t\t\t\trefVM(object)\n\t\t\t\t\t\trefContainter().data.push(object)\n\t\t\t\t\t}\n\t\t\t\t\tactiveTab() == 'Tasks'\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: resources_available()\n\t\t\t\t}\n\t\t\t}\n\t\t\t,checked: activated >= 0 || vmDetail\n\t\t}\n\t}\n\n\tconst sameProperty = property => dc => chr =>\n\t\tchr[property]() == dc[property]()\n\tconst sameContractorId = sameProperty('contractor_id')\n\tconst sameCrewId = sameProperty('crew_id')\n\n function deleteDisciplineC({entity, disciplineSpecific, makeAPICalls, newTeamResource}){\n\t\tconst disciplineEdits =\tdisciplineSpecific\n\t\t\t? R.uniqBy(\n\t\t\t\tR.invoker(0, 'discipline_id')\n\t\t\t\t,[disciplineSpecific].concat(\n\t\t\t\t\tcheckMultiple().data\n\t\t\t\t)\n\t\t\t)\n\t\t\t: R.uniqBy(\n\t\t\t\tR.invoker(0, 'discipline_id')\n\t\t\t\t,checkMultiple().data\n\t\t\t)\n\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteDisciplinesCrews().map((t) =>\n\t\t\t\t\tdata.api.disciplines_contractors_crews.remove.one(\n\t\t\t\t\t\tt.disciplines_contractors_crews_id()\n\t\t\t\t\t\t,data.selectedVersion().schedule_version_id\n\t\t\t\t\t\t,t.crew_id()\n\t\t\t\t\t\t,t.discipline_id()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t\t.then(function(){\n\t\t\t\t\treturn Promise.all(\n\t\t\t\t\t\tdeleteDisciplinesContractors().map((t) =>\n\t\t\t\t\t\t\tdata.api.disciplines_contractors.remove.one(\n\t\t\t\t\t\t\t\tt.disciplines_contractors_id()\n\t\t\t\t\t\t\t\t,data.selectedVersion().schedule_version_id\n\t\t\t\t\t\t\t\t,t.contractor_id()\n\t\t\t\t\t\t\t\t,t.discipline_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t: entity.crew_id == null\n\t\t\t\t? disciplineEdits.map((d) => {\n\t\t\t\t\tconst contractorIndex =\n\t\t\t\t\t\tR.findIndex(\n\t\t\t\t\t\t\tsameContractorId(entity),\n\t\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t)\n\n\t\t\t\t\tif (contractorIndex > -1 ){\n\t\t\t\t\t\t!d.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t\t.disciplines_contractors_id()\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: deleteDisciplinesContractors().push(\n\t\t\t\t\t\t\t\td.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t\t\t.splice(contractorIndex, 1)\n\n\t\t\t\t\t\t\tif (d.disciplines_contractors.length == 0){\n\t\t\t\t\t\t\t\td.discipline_custom(0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn contractorIndex\n\t\t\t\t})\n\t\t\t\t: disciplineEdits.map((d) => {\n\n\t\t\t\t\tconst contractorIndex = R.findIndex(\n\t\t\t\t\t\tsameContractorId(entity),\n\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t)\n\n\t\t\t\t\tif ( contractorIndex > -1 ) {\n\n\t\t\t\t\t\tconst crewIndex = R.findIndex(\n\t\t\t\t\t\t\tsameCrewId(entity),\n\t\t\t\t\t\t\td.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t\t.disciplines_contractors_crews\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tif ( crewIndex > -1 ){\n\t\t\t\t\t\t\t!d.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t\t.disciplines_contractors_crews[crewIndex]\n\t\t\t\t\t\t\t\t\t.disciplines_contractors_crews_id()\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: deleteDisciplinesCrews().push(\n\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\td.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t\t\t\t\t.disciplines_contractors_crews[crewIndex]\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tdiscipline_id: d.disciplines_contractors[contractorIndex].discipline_id\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\td.disciplines_contractors[contractorIndex]\n\t\t\t\t\t\t\t\t.disciplines_contractors_crews\n\t\t\t\t\t\t\t\t\t.splice(crewIndex, 1)\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\td.disciplines_contractors[contractorIndex].disciplines_contractors_crews.length == 0\n\t\t\t\t\t\t\t\t&& (!newTeamResource || (newTeamResource && newTeamResource.contractor_id() != d.disciplines_contractors[contractorIndex].contractor_id()))\n\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\td.disciplines_contractors.splice(contractorIndex, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d.disciplines_contractors.length == 0){\n\t\t\t\t\t\t\t\td.discipline_custom(0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn contractorIndex\n\t\t\t\t}) && resources_available()\n }\n\n\tconst moneytype =\n\t\tdata.scoped({\n\t\t\tAccrued: 'Profits'\n\t\t\t,Received: 'Profits'\n\t\t\t,Forecasted: 'Profits'\n\t\t\t,Outstanding: 'Profits'\n\t\t})\n\n\tconst moneydtype =\n\t\tdata.scoped({\n\t\t\tAccrued: 'Profits'\n\t\t\t,Received: 'Profits'\n\t\t\t,Forecasted: 'Profits'\n\t\t\t,Outstanding: 'Profits'\n\t\t})\n\n\tconst moneycycle =\n\t\t(h, d) =>\n\t\t\tm(''\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tmargin-top: 0;\n\t\t\t\t`\n\t\t\t\t,m(`db.tl`, h + ' ' + (d ? moneydtype()[h] : moneytype()[h] ))\n\t\t\t\t,m('button'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\t\theight: 1.5em;\n\t\t\t\t\t`\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tif(d){\n\t\t\t\t\t\t\t\treturn moneydtype()[h] == 'Profits'\n\t\t\t\t\t\t\t\t? moneydtype()[h] = 'Revenue'\n\t\t\t\t\t\t\t\t: moneydtype()[h] == 'Revenue'\n\t\t\t\t\t\t\t\t? moneydtype()[h] = 'Expenditures'\n\t\t\t\t\t\t\t\t: moneydtype()[h] = 'Profits'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn moneytype()[h] == 'Profits'\n\t\t\t\t\t\t\t\t? moneytype()[h] = 'Revenue'\n\t\t\t\t\t\t\t\t: moneytype()[h] == 'Revenue'\n\t\t\t\t\t\t\t\t? moneytype()[h] = 'Expenditures'\n\t\t\t\t\t\t\t\t: moneytype()[h] = 'Profits'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, ''\n\t\t\t\t)\n\t\t\t)\n\n\tconst disciplinedata =\n\t\t(d) =>\n\t\t\tdisciplineViewSet() == 'Resourcing'\n\t\t\t? {\n\t\t\t\t'Name - Description': d.discipline_name() + ' ' + ( d.discipline_description() || '' )\n\t\t\t\t,'Proposed Start': moment(d.discipline_start_date()).format(\"ll\")\n\t\t\t\t,'Proposed End': moment(d.discipline_end_date()).format(\"ll\")\n\t\t\t\t,'Amount': d.discipline_work()\n\t\t\t\t,'Completed': d.discipline_completed()\n\t\t\t\t,'Unit of Measure': d.discipline_uom()\n\t\t\t\t,'Daily Forecast': Number(d.workdayeffort).toFixed(1)\n\t\t\t\t,'Negligible Teams': d.badeffortteams ? d.badeffortteams.length : 0\n\t\t\t\t,'Resources': data.readResourcePermissions()\n\t\t\t\t\t? elements.inlinestrikeList(\n\t\t\t\t\t\td.disciplines_contractors\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\tlabel: label.disciplines_contractors_name()\n\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\tdeleteDisciplineC({\n\t\t\t\t\t\t\t\t\t\t\tentity: label\n\t\t\t\t\t\t\t\t\t\t\t,disciplineSpecific: d\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,fstyle: R.intersection(d.badeffortteams, R.map(R.pipe(R.prop('crew_id'), R.call()), label.disciplines_contractors_crews)).length ? '.dark-red.fw6' : ''\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t\t,'Teams': data.readResourcePermissions()\n\t\t\t\t\t? elements.inlinestrikeList(\n\t\t\t\t\t\tworking_crews(d)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\tlabel: label.disciplines_contractors_crews_name()\n\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\tdeleteDisciplineC({\n\t\t\t\t\t\t\t\t\t\t\tentity: label\n\t\t\t\t\t\t\t\t\t\t\t,disciplineSpecific: d\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,fstyle: d.badeffortteams.find((a) => a == label.crew_id()) ? '.dark-red.fw6' : ''\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t}\n\t\t\t: disciplineViewSet() == 'Financial Summary'\n\t\t\t? {\n\t\t\t\t'Name - Description': d.discipline_name() + ' ' + ( d.discipline_description() || '' )\n\t\t\t\t,'Unit of Measure': d.discipline_uom()\n\t\t\t\t,'Variations - Delays - Extensions':\n\t\t\t\t\t(d.eotSum || '0')\n\t\t\t\t\t+ ` - `\n\t\t\t\t\t+ (d.nodSum || '0')\n\t\t\t\t\t+ ` - `\n\t\t\t\t\t+ (d.varSum || '0')\n\t\t\t\t,'Scheduled End Date': d.lastAllocationDate\n\t\t\t\t\t? moment(d.lastAllocationDate).format(\"ll\")\n\t\t\t\t\t: ``\n\t\t\t\t,'End Date': moment(d.discipline_end_date()).format(\"ll\")\n\t\t\t\t,'Build Complete (%)':\n\t\t\t\t\td.discipline_completed() == 0\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: d.discipline_completed() / d.discipline_work() >= 1\n\t\t\t\t\t\t\t? 100\n\t\t\t\t\t: (d.discipline_completed()/d.discipline_work() * 100)\n\t\t\t\t\t\t.toFixed(2)\n\t\t\t\t,'Rate Multiplier': d.discipline_contract_multiplier()\n\t\t\t\t,'Budget':\n\t\t\t\t\t!data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tdata.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t[d.contractrecognitionid]\n\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.budget\n\t\t\t\t\t\t)\n\t\t\t\t,'Accrued':\n\t\t\t\t\t!data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\tdata.readContractPermissions()\n\t\t\t\t\t\t\t&& data.coalatedSelectedVersion()[d.contractrecognitionid]\n\t\t\t\t\t\t\t? data.coalatedSelectedVersion()[d.contractrecognitionid]['accrued' + moneydtype()['Accrued']]\n\t\t\t\t\t\t\t\t+ data.coalatedSelectedVersion()[d.contractrecognitionid]['outstanding' + moneydtype()['Outstanding']]\n\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t)\n\t\t\t\t,'Received':\n\t\t\t\t\t!data.calculated()\n\t\t\t\t\t? ' ... '\n\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\tdata.readContractPermissions()\n\t\t\t\t\t\t&& data.coalatedSelectedVersion()[d.contractrecognitionid]\n\t\t\t\t\t\t? data.coalatedSelectedVersion()[d.contractrecognitionid]['current' + moneydtype()['Received']]\n\t\t\t\t\t\t: 0\n\t\t\t\t\t)\n\n\t\t\t\t,'Forecasted' :\n\t\t\t\t\t!data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tdata.readContractPermissions()\n\t\t\t\t\t\t\t\t&& data.coalatedSelectedVersion()[d.contractrecognitionid]\n\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t)['forecasted' + moneydtype()['Forecasted']]\n\t\t\t\t\t\t)\n\t\t\t\t,'Resources Allocated':\n\t\t\t\t\tdata.readResourcePermissions()\n\t\t\t\t\t\t? elements.list(\n\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\tR.map(\n\t\t\t\t\t\t\t\tR.invoker(0, 'disciplines_contractors_name')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(d.disciplines_contractors)\n\t\t\t\t\t)\n\t\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t}\n\t\t\t: disciplineViewSet() == 'Working Details'\n\t\t\t? {\n\t\t\t\t'Name - Description': d.discipline_name() + ' ' + ( d.discipline_description() || '' )\n\t\t\t\t,'Proposed Amount': d.discipline_planned()\n\t\t\t\t,'Total Amount': d.discipline_work()\n\t\t\t\t,'Completed Amount': d.discipline_completed()\n\t\t\t\t,'Unit of Measure': d.discipline_uom()\n\t\t\t\t,'Chronological Order': d.discipline_order()\n\t\t\t\t,'Proposed Start': moment(d.discipline_start_date()).format(\"ll\")\n\t\t\t\t,'Strict Start': d.discipline_strict_start()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t\t,'Proposed End': moment(d.discipline_end_date()).format(\"ll\")\n\t\t\t\t,'Strict End': d.discipline_strict_end()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t}\n\t\t\t: {\n\t\t\t\t'Name - Description': d.discipline_name() + ' ' + ( d.discipline_description() || '' )\n\t\t\t\t,'Amount': d.discipline_work()\n\t\t\t\t,'Unit of Measure': d.discipline_uom()\n\t\t\t\t,'Consolidate Schedule': d.discipline_consolidate_start()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t\t,'Consistent Resources': d.discipline_consistency()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t\t,'Recovery Permission': d.discipline_recovery()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t\t,'Auto Assign Tasks': d.discipline_auto_assign_tasks()\n\t\t\t\t\t? 'Yes'\n\t\t\t\t\t: 'No'\n\t\t\t\t,'Operational Regime': d.discipline_flow()\n\t\t\t\t,'Environmental Rating': d.discipline_harshness()\n\t\t\t\t,'Resource Combination Limit': d.discipline_recovery()\n\t\t\t\t\t? d.discipline_combination_limit()\n\t\t\t\t\t: ''\n\t\t\t}\n\n\n\tconst largeDisciplinesTable = () =>\n\t\t[\n\t\t\tdtableControl()\n\t\t\t,scrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tmasterLIST()\n\t\t\t\t\t.map((d, tindex) => ({\n\t\t\t\t\t\tkey: d.key\n\t\t\t\t\t\t,selection: getActivateDeleteButton(d, 'discipline')\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tonclick: addNewDiscipline\n\t\t\t\t\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t\t\t\t\t,title: \"Create a Discipline\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, 'Create a New Discipline'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1.25fr `\n\t\t\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisciplineViewSet() == 'Resourcing'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `0.375fr 0.375fr 0.375fr 0.375fr 0.375fr 0.375fr 0.375fr 1fr 2fr;`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: disciplineViewSet() == 'Financial Summary'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `0.5fr 1fr 1fr 0.75fr 0.75fr 0.85fr 0.55fr 1.2fr 1.2fr 1.2fr 1.5fr;`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: disciplineViewSet() == 'Working Details'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `1fr 0.75fr 0.75fr 0.75fr 0.75fr 1.25fr 0.75fr 1.25fr 0.75fr;`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `0.5fr 0.5fr 1fr 1fr 1fr 1fr 1fr 0.875fr 0.875fr;`\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t+ ` overflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, k == 'Accrued'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| k == 'Received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| k == 'Forecasted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? moneycycle(k, true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: k\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: disciplinedata(d)\n\t\t\t\t\t}))\n\t\t\t})\n\t\t]\n\n\tconst smallDisciplinesTable = () =>\n\t\t[\n\t\t\tdtableControl()\n\t\t\t,scrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tmasterLIST()\n\t\t\t\t\t.map((d) => ({\n\t\t\t\t\t\tkey: d.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,getActivateDeleteButton(d, 'discipline')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tonclick: addNewDiscipline\n\t\t\t\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t\t\t\t,title: \"Create a Discipline\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Create a New Discipline'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded:\n\t\t\t\t\t\t\t\tdisciplineViewSet() == 'Resourcing'\n\t\t\t\t\t\t\t\t? ({ x }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.125fr 0.125fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Name - Description', 'Unit of Measure', 'Amount', 'Completed']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Proposed Start', 'Proposed End', 'Daily Forecast', 'Negligible Teams']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Resources', 'Teams']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: disciplineViewSet() == 'Financial Summary'\n\t\t\t\t\t\t\t\t? ({ x }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Name - Description', 'Unit of Measure', 'Build Complete (%)']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Variations - Delays - Extensions', 'Rate Multiplier', 'End Date', 'Scheduled End Date']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Budget', 'Accrued', 'Received', 'Forecasted']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, k == 'Accrued'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| k == 'Received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| k == 'Forecasted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? moneycycle(k, true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: k\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Resources Allocated']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: disciplineViewSet() == 'Working Details'\n\t\t\t\t\t\t\t\t? ({ x }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Name - Description', 'Unit of Measure']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Proposed Amount', 'Total Work', 'Actual Amount', 'Chronological Order']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Proposed Start', 'Strict Start', 'Proposed End', 'Strict End']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: ({ x }) =>\n\t\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,['Name - Description', 'Unit of Measure', 'Amount']\n\t\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,['Amount', 'Consolidate Schedule', 'Consistent Resources', 'Recovery Permission']\n\t\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,['Auto Assign Tasks', 'Operational Regime', 'Environmental Rating', 'Resource Combination Limit']\n\t\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: disciplinedata(d)\n\t\t\t\t\t}))\n\t\t\t})\n\t\t]\n\n\n\tconst disciplinesTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeDisciplinesTable )\n\t\t\t\t,desktopOnly( largeDisciplinesTable )\n\t\t\t\t,mobileOnly( smallDisciplinesTable )\n\t\t\t\t,tabletOnly( smallDisciplinesTable )\n\t\t\t]\n\t\t)\n\n\n\tconst disciplineViewSet = data.scoped('Resourcing')\n\tfunction disciplineView(){\n\t\treturn [\n\t\t\tm('br')\n\t\t\t,!form().project.disciplines.length || !disciplineViewSet()\n\t\t\t\t? elements.alert('info',`Create some discipline that will contain work in this project`)\n\t\t\t\t: disciplinesTable()\n\t\t]\n\t}\n\n\tconst cloneLink =\n\t\t(ctrl, project) => {\n\n\t\t\tvm(project)\n\t\t\teditPermissions()\n\t\t\t\t? checkMultipleProjects().push(project)\n\t\t\t\t: checkMultipleProjects([project])\n\n\t\t\tcloning(true)\n\t\t\tcloningProject(true, false)\n\t\t\tprojectOptions(false)\n\t\t\tcheckMultiple().data = []\n\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\tctrl.intent.fetchAllocations()\n\t\t\tctrl.model.viewType(EditProject)\n\t\t\tprojectExtrasTypes()['completed'] = 'any'\n\t\t\tprojectExtrasTypes()['invalid'] = 'any'\n\t\t\tprojectExtrasTypes()['assigned'] = 'any'\n\t\t\tprojectExtrasTypes()['verified'] = 'any'\n\t\t\tactiveTab('Tasks')\n\t\t\tedit(false)\n\t\t\tmasterLIST(true)\n\t\t\tmasterPELIST(true)\n\t\t\tfetchedExtras(false)\n\t\t\tdisciplineViewSet('Working Details')\n\t\t\tonProjectList(false)\n\t\t}\n\n\tconst editLink =\n\t\t(ctrl, project, setactiveTab='Tasks') => {\n\n\t\t\tvm(project)\n\t\t\teditPermissions()\n\t\t\t\t? checkMultipleProjects().push(project)\n\t\t\t\t: checkMultipleProjects([project])\n\n\t\t\tcloningProject(false, true)\n\t\t\tprojectOptions(false)\n\t\t\tcheckMultiple().data = []\n\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\tshowUpload(false)\n\t\t\tctrl.intent.fetchAllocations()\n\t\t\tctrl.model.viewType(EditProject)\n\t\t\tactiveTab(setactiveTab)\n\t\t\tedit(true)\n\t\t\tmasterLIST(true)\n\t\t\tmasterPELIST(true)\n\t\t\tfetchedExtras(false)\n\t\t\tdisciplineViewSet('Resourcing')\n\t\t\treconloading(true)\n\t\t\tdata.routeids({\n\t\t\t\trouteids:\n\t\t\t\t\t[].concat(vm().disciplines, vm())\n\t\t\t\t\t.map(R.prop('contractrecognitionid'))\n\t\t\t\t,getledgers: true\n\t\t\t\t,ledgerdetails: true\n\t\t\t\t,getmatdata: true\n\t\t\t\t,specificproject: [vm()['contractrecognitionid']]\n\t\t\t})\n\t\t\tonProjectList(false)\n\n\t\t\tif( ['Tasks','Reconciliation'].includes(setactiveTab) ) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlet $\n\t\t\t\t\t$= document.querySelector('table,.scrollable-table-3')\n\n\t\t\t\t\t$= $ && $.scrollIntoView({\n\t\t\t\t\t\tbehavior: \"smooth\", block: \"start\", inline: \"nearest\"\n\t\t\t\t\t})\n\t\t\t\t\treturn $\n\t\t\t\t}, 500)\n\t\t\t}\n\t\t}\n\n\tconst addNewTaskLink =\n\t\t(ctrl, project, setactiveTab='Tasks') => {\n\n\t\t\tvm(project)\n\t\t\tcheckMultipleProjects([project])\n\n\t\t\tcloningProject(false, true)\n\t\t\tprojectOptions(false)\n\t\t\tactiveTab(setactiveTab)\n\n\t\t\taddNewTask()\n\t\t}\n\n\tconst addNewTask =\n\t\t() => {\n\t\t\tdisciplineSpread([])\n\t\t\tspreading(false)\n\t\t\tmasterLIST(true)\n\t\t\tconst newD = resetPEForm()\n\t\t\tnewD.created = true\n\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\tpe_vm(newD)\n\t\t\tform().project.project_extras.unshift(newD)\n\t\t\tmasterPELIST(true)\n\t\t\tcheckMultipleProjectExtras().data.unshift(newD)\n\t\t}\n\n\n\tconst addNewDiscipline =\n\t\t() => {\n\t\t\tconst newD = resetDForm().discipline[0]\n\t\t\tnewD.created = true\n\t\t\tcheckMultiple().data = []\n\t\t\tdiscipline_vm(newD)\n\t\t\tform().project.disciplines.unshift(newD)\n\t\t\tmasterLIST(true)\n\t\t\tcheckMultiple().data.unshift(newD)\n\t\t\tactiveTab('Disciplines')\n\t\t}\n\n\tconst discardAllTaskChanges =\n\t\t() => {\n\t\t\tform().project.project_extras = []\n\t\t\tif (edit() == true){\n\t\t\t\tvar nonEditedExtras =\n\t\t\t\t\tR.filter(\n\t\t\t\t\t\t(c) => !c.created\n\t\t\t\t\t\t,form().project.project_extras\n\t\t\t\t\t)\n\n\t\t\t\tprojectExtrasStat({\n\t\t\t\t\tproject_extras_date_assigned: 0\n\t\t\t\t\t,project_extras_date_completed: 0\n\t\t\t\t\t,project_extras_date_verified: 0\n\t\t\t\t\t,project_extras_date_invalid: 0\n\t\t\t\t})\n\n\t\t\t\tform().project.project_extras =\n\t\t\t\t\t[].concat(\n\t\t\t\t\t\tnonEditedExtras\n\t\t\t\t\t\t,R.differenceWith(\n\t\t\t\t\t\t\t(x, y) => x.project_extras_id() == y.project_extras_id()\n\t\t\t\t\t\t\t,vm().project_extras\n\t\t\t\t\t\t\t,nonEditedExtras\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((e) => {\n\t\t\t\t\t\t\tpe_vm(e)\n\t\t\t\t\t\t\treturn cloningProjectE(false, true)\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\n\t\t\t\tform().project.project_extras\n\t\t\t\t.forEach((t) =>\n\t\t\t\t\tprojectExtrasSum(t, null)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tcheckMultipleProjectExtras().data = []\n\t\t\tpe_vm({})\n\t\t\tdeleteProjectExtras([])\n\t\t\tmasterPELIST(true)\n\t\t\tdisciplineSpread([])\n\t\t\tspreading(false)\n\t\t}\n\n\tconst discardAllDisciplineChanges =\n\t\t() => {\n\t\t\terrors({})\n\t\t\tform().project.disciplines = []\n\t\t\tif (edit() == true){\n\t\t\t\tvm().disciplines\n\t\t\t\t\t.forEach((d) => {\n\t\t\t\t\t\tdiscipline_vm(d)\n\t\t\t\t\t\tform().project.disciplines.push(\n\t\t\t\t\t\t\tcloningProjectD(false, true)\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t}\n\t\t\tcheckMultiple().data = []\n\t\t\tdiscipline_vm({})\n\t\t\tdeleteDisciplines([])\n\t\t\tdeleteDisciplinesContractors([])\n\t\t\tdeleteDisciplinesCrews([])\n\t\t\tmasterLIST(true)\n\t\t}\n\n\tconst updateInvoiceItems =\n\t\t(oitems, states, parents) => {\n\n\t\t\toitems.forEach((o) => {\n\n\t\t\t\tconst tlist =\n\t\t\t\t\to.subitemk ? [o.subitems] : o.subitems\n\n\t\t\t\tif(states['approved'] != null && o.itemk){\n\n\t\t\t\t\ttlist.forEach((ti) => {\n\n\t\t\t\t\t\tconst invoice =\n\t\t\t\t\t\t\tbaseInvoiceRender().find((i) => i.invoice_id() == ti.invoice_id)\n\n\t\t\t\t\t\tif(!invoice.invoice_items.length){\n\t\t\t\t\t\t\tinvoice.approved = states['approved']\n\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].approved = states['approved']\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tinvoice.invoice_items\n\t\t\t\t\t\t\t.filter((ii) =>\n\t\t\t\t\t\t\t\tii.invoice_items_id\n\t\t\t\t\t\t\t\t== o.invoice_items_id\n\t\t\t\t\t\t\t\t|| !o.invoice_items_id\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.forEach((tii) => {\n\t\t\t\t\t\t\t\ttii.approved = states['approved']\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\to.approved = states['approved']\n\t\t\t\t\t\tinvoice.created = true\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tif(states['received'] != null && o.itemk){\n\n\t\t\t\t\to.recqty =\n\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\ttlist.map((ti) => {\n\n\t\t\t\t\t\t\t\tconst invoice =\n\t\t\t\t\t\t\t\t\tbaseInvoiceRender()\n\t\t\t\t\t\t\t\t\t.find((i) => i.invoice_id() == ti.invoice_id)\n\n\t\t\t\t\t\t\t\tlet itemsum = 0\n\n\t\t\t\t\t\t\t\tif( !invoice.invoice_items.length ){\n\n\t\t\t\t\t\t\t\t\tif( !states['received'] ){\n\t\t\t\t\t\t\t\t\t\tinvoice.received = states['received']\n\t\t\t\t\t\t\t\t\t\tinvoice.receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].received = states['received']\n\t\t\t\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\t\t\titemsum = [0]\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinvoice.received = states['received']\n\t\t\t\t\t\t\t\t\t\tinvoice.receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].received = states['received']\n\t\t\t\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\t\t\titemsum = [ti.invoice_amount]\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\titemsum =\n\t\t\t\t\t\t\t\t\t\tinvoice.invoice_items\n\t\t\t\t\t\t\t\t\t\t.filter((ii) =>\n\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t== o.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t|| !o.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map((tii) => {\n\t\t\t\t\t\t\t\t\t\t\ttii.received = states['received']\n\t\t\t\t\t\t\t\t\t\t\ttii.receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\t\t\t\tif(states['received']){\n\t\t\t\t\t\t\t\t\t\t\t\ttii.invoice_items_received_amount = tii.invoice_items_amount\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\ttii.invoice_items_received_amount = 0\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn tii.invoice_items_received_amount\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\to.received = states['received']\n\t\t\t\t\t\t\t\to.receiveddate = states['receiveddate']\n\t\t\t\t\t\t\t\tinvoice.created = true\n\n\t\t\t\t\t\t\t\treturn R.sum(itemsum)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tif(states['paymentref'] != null && o.itemk){\n\n\t\t\t\t\ttlist.forEach((ti) => {\n\t\t\t\t\t\tconst invoice =\n\t\t\t\t\t\t\tbaseInvoiceRender()\n\t\t\t\t\t\t\t.find((i) => i.invoice_id() == ti.invoice_id)\n\n\t\t\t\t\t\tconst invoiceitem =\n\t\t\t\t\t\t\tinvoice.invoice_items\n\t\t\t\t\t\t\t.find((ii) =>\n\t\t\t\t\t\t\t\tii.invoice_items_id\n\t\t\t\t\t\t\t\t== ti.invoice_items_id\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tif(invoiceitem){\n\t\t\t\t\t\t\tinvoiceitem.paymentref = states['paymentref']\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinvoice.paymentref = states['paymentref'] || ''\n\t\t\t\t\t\t\tinvoice.invoice_client_reference(states['paymentref'] || '')\n\t\t\t\t\t\t\tbaseInvoiceIndex()['i'][invoice.invoice_id()].paymentref = states['paymentref'] || ''\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinvoice.created = true\n\t\t\t\t\t\to.paymentref = states['paymentref']\n\t\t\t\t\t})\n\n\t\t\t\t\tparents.forEach((mp) => mp.paymentref = states['paymentref'])\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\tprop.merge(\n\t\t[\n\t\t\tdata.calculated\n\t\t\t,projects\n\t\t]\n\t)\n\t.map(([fd, p]) =>\n\t\t(fd && p ? p : []).forEach((p) =>\n\t\t\tp.status =\n\t\t\t\t!data.coalatedSelectedVersion()[p.contractrecognitionid]\n\t\t\t\t? '...'\n\t\t\t\t: data.coalatedSelectedVersion()[p.contractrecognitionid].currentProfits\n\t\t\t\t&& data.coalatedSelectedVersion()[p.contractrecognitionid].outstandingProfits == 0\n\t\t\t\t? 'Reconciled'\n\t\t\t\t: (data.coalatedSelectedVersion()[p.contractrecognitionid].currentProfits == 0\n\t\t\t\t|| data.coalatedSelectedVersion()[p.contractrecognitionid].currentProfits\n\t\t\t\t!= data.coalatedSelectedVersion()[p.contractrecognitionid].accruedProfits)\n\t\t\t\t&& data.coalatedSelectedVersion()[p.contractrecognitionid].outstandingProfits != 0\n\t\t\t\t? 'Outstanding Payments'\n\t\t\t\t: data.coalatedSelectedVersion()[p.contractrecognitionid].unapprovedinvoicecount > 0\n\t\t\t\t? 'Claims not finalised'\n\t\t\t\t: !p.project_tendered_at()\n\t\t\t\t? 'Draft'\n\t\t\t\t: !p.project_accepted_at()\n\t\t\t\t? 'Tendered'\n\t\t\t\t: 'Accepted'\n\t\t)\n\t)\n\n\tconst expandNotes =\n\t\t() =>\n\t\t\tm(''\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\twidth: 7em;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\talign-items: center;\n\t\t\t\t`\n\t\t\t\t,m('button'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\t\theight: 1.5em;\n\t\t\t\t\t`\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tif( !projects().some((p) => notesexpanded[p.project_id()]) ){\n\t\t\t\t\t\t\t\t\tprojects().forEach((p) => notesexpanded[p.project_id()] = true)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tprojects().forEach((p) => delete notesexpanded[p.project_id()])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled: !projects().some(s => s.project_completion_comments())\n\t\t\t\t\t}\n\t\t\t\t\t, ''\n\t\t\t\t)\n\t\t\t\t,m(`db.tl`, ' ' + 'Project Notes')\n\t\t\t)\n\n\n\tconst destinationSchedule = data.scoped({})\n\tconst availableSchedules =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tdata.schedules\n\t\t\t\t,data.selectedVersion\n\t\t\t]\n\t\t)\n\t\t.map(([list]) =>\n\t\t\tlist.filter((s) =>\n\t\t\t\ts.schedule_id\n\t\t\t\t!= data.selectedVersion().schedule_id\n\t\t\t)\n\t\t)\n\n\tconst projectCompleted =\n\t\t({p: project, sendp, ctrl}) => {\n\n\t\t\tconst autoSend =\n\t\t\t\t() => {\n\t\t\t\t\tif( sendp && project.created ){\n\t\t\t\t\t\treturn ctrl.intent.sendProjects([\n\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\tproject\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tdisciplines: []\n\t\t\t\t\t\t\t\t\t,project_extras: []\n\t\t\t\t\t\t\t\t\t,project_contacts: []\n\t\t\t\t\t\t\t\t\t,project_documents: m.prop([])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t}\n\t\t\t\t\telse { return R.F() }\n\t\t\t\t}\n\n\t\t\tconst viewprops =\n\t\t\t\t(p) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\ttitle: 'Record Completion Date'\n\t\t\t\t\t\t\t, prop: (v) => setOptions(v, 'project_completion_marker', [p])\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\tdisabled: metaDataLoading()\n\t\t\t\t\t\t\t\t\t, style: {padding: '2em'}\n\t\t\t\t\t\t\t\t\t, onblur: autoSend\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,[sendp ? 'attrs' : 'checkbox']:{\n\t\t\t\t\t\t\ttitle: \"Mark project Complete\"\n\t\t\t\t\t\t\t, prop: p.project_completion_marker\n\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\tp.created = true\n\n\t\t\t\t\t\t\t\t\t\treturn p.project_completion_marker(value)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t, disabled: !editPermissions() || metaDataLoading()\n\t\t\t\t\t\t\t\t, style: {\n\t\t\t\t\t\t\t\t\tpadding: '2em'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, onblur: autoSend\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\treturn sendp\n\t\t\t\t? Pencil(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tproject.project_completion_marker()\n\t\t\t\t\t\t? moment(project.project_completion_marker()).format(\"ll\")\n\t\t\t\t\t\t: ''\n\t\t\t\t\t,() => elements.dateCheckbox( viewprops(project) )\n\t\t\t\t)\n\t\t\t\t: elements.dateCheckboxLabel( R.merge(viewprops(project), {label: 'Completed Date'}) )\n\t\t}\n\n\tconst renderChart =\n\t\t({refresheronly, chartonly}) =>\n\t\t\t!chartview().chart && chartonly\n\t\t\t? null\n\t\t\t: !data.calculated()\n\t\t\t? refresheronly ? elements.spinner() : elements.centeredSpinner()\n\t\t\t: (!chartview().chart && !chartonly) || refresheronly\n\t\t\t? data.reChartButton({\n\t\t\t\tversions: {\n\t\t\t\t\t'Overheads': 'Overheads'\n\t\t\t\t\t,[data.currentVersion()]:\n\t\t\t\t\t\tdata.currentVersion()\n\t\t\t\t}\n\t\t\t})\n\t\t\t: ifCharts(\n\t\t\t\tchartview()\n\t\t\t\t, () => [\n\t\t\t\t\tm('label.control-label.pt4', 'Financial Chart ')\n\t\t\t\t\t,chartview().chart({width:''})\n\t\t\t\t\t|| data.reChartButton({\n\t\t\t\t\t\tversions: {\n\t\t\t\t\t\t\t'Overheads': 'Overheads'\n\t\t\t\t\t\t\t,[data.currentVersion()]:\n\t\t\t\t\t\t\t\tdata.currentVersion()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t)\n\n\tfunction zipRequest(){\n\t\tvm().is_zip_processing = true\n\t\tm.redraw()\n\t\treturn data.api.projects.fetch.zip({\n\t\t\tschedule_id: form().project.schedule_id()\n\t\t\t, project_id: form().project.project_id()\n\t\t})\n\t\t.then(([result]) => {\n\n\t\t\tif (result.watch ) {\n\t\t\t\tresult.watch.map( data => {\n\n\t\t\t\t\t\tvm().is_zip_processing = !data.zip_processed && !data.zip_error\n\t\t\t\t\t\tvm().latest_zip_url = data.zip_url\n\t\t\t\t\t\tvm().latest_zip_date = data.created_at\n\t\t\t\t\t\tvm().zip_error = data.zip_error\n\t\t\t\t\t\tm.redraw()\n\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\t.then( m.redraw )\n\t}\n\n\tconst qiSelection = data.scoped('Quote')\n\tconst qiContactList =\n\t\tvm.map((p) =>\n\t\t\t// [\n\t\t\t\t({\n\t\t\t\t\tmessage:\n\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t'Please see attached a ' + qiSelection().toLowerCase()\n\t\t\t\t\t\t\t+ ' for works on project ' + (p.project_name ? p.project_name() : '')\n\t\t\t\t\t\t)\n\t\t\t\t\t,phones: m.prop([])\n\t\t\t\t\t,emails: m.prop()\n\t\t\t\t\t,id: uuid.v4()\n\t\t\t\t})\n\t\t\t// ]\n\t\t)\n\tconst ieview = data.scoped(false)\n\tconst irview = data.scoped(true)\n\tconst requestedItems = data.scoped([])\n\tconst newqi =\n\t\tcontract.map((c) => {\n\n\t\t\tif( c && vm().project_name ){\n\t\t\t\tqiContactList({})\n\t\t\t\trequestedItems([])\n\n\t\t\t\tqiContactList({\n\t\t\t\t\tmessage:\n\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t'Hi '\n\t\t\t\t\t\t\t+ ( c.client_organization_name ? c.client_organization_name : '' )\n\t\t\t\t\t\t\t+ ' Attached is a ' + qiSelection().toLowerCase()\n\t\t\t\t\t\t\t+ ' for works on project ' + vm().project_name()\n\t\t\t\t\t\t)\n\t\t\t\t\t,phones: m.prop([])\n\t\t\t\t\t,emails: m.prop()\n\t\t\t\t\t,id: uuid.v4()\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontract_payment_term: m.prop(c.contract_payment_term || '')\n\t\t\t\t, contract_terms: m.prop(c.contract_terms || '')\n\t\t\t}\n\t\t})\n\n\tconst qieqProp =\n\t\tqiSelection.map((qis) =>\n\t\t\tqis == 'Quote'\n\t\t\t? 'project_extras_id'\n\t\t\t: 'invoice_id'\n\t\t)\n\n\tconst reflist =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tinvoiceRender\n\t\t\t\t,qiSelection\n\t\t\t]\n\t\t).map(([inv, qis]) =>\n\t\t\tqis == 'Quote'\n\t\t\t? masterPELIST()\n\t\t\t: inv\n\t\t)\n\n\tconst revoptions =\n\t\treflist.map((d) =>\n\t\t\td.filter((ri) =>\n\t\t\t\tqiSelection() != 'Quote'\n\t\t\t\t? (ri.contract_items_rate * ri.invoice_amount)\n\t\t\t\t+ (ri.contract_items_service * ri.invoice_service_amount)\n\t\t\t\t+ (ri.contract_items_depreciation * ri.invoice_depreciation_amount)\n\t\t\t\t+ (ri.contract_items_appreciation * ri.invoice_appreciation_amount)\n\t\t\t\t> 0\n\t\t\t\t: true\n\t\t\t)\n\t\t)\n\n\tconst expoptions =\n\t\treflist.map((d) =>\n\t\t\td.filter((ri) =>\n\t\t\t\tqiSelection() != 'Quote'\n\t\t\t\t? (ri.contract_items_rate * ri.invoice_amount)\n\t\t\t\t+ (ri.contract_items_service * ri.invoice_service_amount)\n\t\t\t\t+ (ri.contract_items_depreciation * ri.invoice_depreciation_amount)\n\t\t\t\t+ (ri.contract_items_appreciation * ri.invoice_appreciation_amount)\n\t\t\t\t< 0\n\t\t\t\t: true\n\t\t\t)\n\t\t)\n\n\n\tconst qicheck = (i) =>\n\t\tqiSelection() != 'Quote'\n\t\t? (i.invoice_rate * i.invoice_amount)\n\t\t+ (i.invoice_service_rate * i.invoice_service_amount)\n\t\t+ (i.invoice_depreciation_rate * i.invoice_depreciation_amount)\n\t\t+ (i.invoice_appreciation_rate * i.invoice_appreciation_amount)\n\t\t: 1\n\n\tconst invoiceSelections =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\treflist\n\t\t\t\t,ieview\n\t\t\t\t,irview\n\t\t\t\t,CONSTANTProjectExtras\n\t\t\t]\n\t\t)\n\t\t.map(([ ref, ie, ir ]) => {\n\n\t\t\t// const reflist =\n\t\t\t// \tqiSelection() == 'Quote'\n\t\t\t// \t? masterPELIST()\n\t\t\t// \t: inv\n\n\t\t\treturn ref.filter((i) => {\n\t\t\t\tconst iv = qicheck(i)\n\t\t\t\t// quotes should have selections of negative or positive too?\n\t\t\t\treturn (iv > 0 && ir) || (iv < 0 && ie) //|| true\n\t\t\t})\n\t\t})\n\n\treturn {\n\t\tprojects, form, data, vm, discipline_vm, cloningProject, cloningProjectD, edit\n\t\t,DeleteProjectMode, DeleteDisciplineMode, resetPForm, resetDForm, filterFunction\n\t\t,check_dnames, check_pnames, resources, dc_mapping, geographies, PercentComplete\n\t\t,SaveDisabled, process_geo, viewType, schedule_id, resources_available, allocations\n ,request: data.request, suburbs, editPermissions, permissions, getDisciplines, getfilters\n\t\t,working_crews, checkallocatedResources, rList\n\t\t, loading, masterLIST\n\t\t, updateInvoiceItems\n\t\t, placeLong\n\t\t, suburbsInput\n\t\t, organizations_disciplines\n\t\t, CONSTANTdisciplines\n\t\t, deleteDisciplines\n\t\t, deleteDisciplinesContractors\n\t\t, deleteDisciplinesCrews\n\t\t, detailsPaneOpen\n\t\t, checkMultiple\n\t\t, savingProp\n\t\t, detailPaneInputs\n\t\t, activeTab\n\t\t, deleteStateProp\n\t\t, disciplineView\n\t\t, disciplineViewSet\n\t\t, getActivateDeleteButton\n\t\t, editAllButton\n\t\t, extraContractObligationData\n\t\t, projectSummary\n\t\t, api: data.api\n\t\t, restrictedOrgDisc\n\t\t, checkMultipleProjects\n\t\t, missingPermissions\n\t\t, errors\n\t\t, projectPercentComplete\n\t\t, disciplineLastDateIndex\n\t\t, disciplineTabEditArray\n\t\t, disciplineTabReadArray\n\t\t, ActiveContractsFeature\n\t\t, ActiveDetailsFeature\n\t\t, editContractRecognitions\n\t\t, modules\n\t\t, cloningProjectE\n\t\t, pe_vm\n\t\t, deleteProjectExtras\n\t\t, checkMultipleProjectExtras\n\t\t, getActivateContractDeleteButton\n\t\t, masterPELIST\n\t\t, CONSTANTProjectExtras\n\t\t, projectDisciplines\n\t\t, projectExtras\n\t\t, fetchedExtras\n\t\t, projectExtrasStat\n\t\t, users\n\t\t, usersIndex\n\t\t, reConnectDisciplines\n\t\t, projectExtrasIndex\n\t\t, completedProjects\n\t\t, contractPatchIndex\n\t\t, clonedContracts\n\t\t, allocationIndex\n\t\t, resetPEForm\n\t\t, projectExtrasTypes\n\t\t, filteredTaskOptions\n\t\t, filteredDisciplineOptions\n\t\t, metaDataLoading\n\t\t, projectOptions\n\t\t, inverseProjectsList\n\t\t, projectsSortedResult\n\t\t, projectSortRequired\n\t\t, checkUserTaskMatch\n\t\t, allResourceTypes\n\t\t, cloning\n\t\t, projectExtrasSum\n\t\t, seperateTasks\n\t\t, editContractPermissions\n\t\t, checkTaskDates\n\t\t, disciplineSpread\n\t\t, spreading\n\t\t, restrictedOrgTask\n\t\t, deleteProjectContacts\n\t\t, removeContactForm\n\t\t, projectContactOptions\n\t\t, baseProjectDetailsHash\n\t\t, reconRender\n\t\t, reconloading\n\t\t, reconArray\n\t\t, totalRecon\n\t\t, showUpload\n\t\t, uploadmetadata\n\t\t, editLink\n\t\t, cloneLink\n\t\t, addNewTaskLink\n\t\t, onProjectList\n\t\t, projectTemplates\n\t\t, materials\n\t\t, materialloading\n\t\t, itemDetails\n\t\t, addNewTask\n\t\t, addNewDiscipline\n\t\t, discardAllDisciplineChanges\n\t\t, discardAllTaskChanges\n\t\t, invoiceRender\n\t\t, baseInvoiceRender\n\t\t, baseInvoiceIndex\n\t\t, disciplinesTable\n\t\t, resetLoaders\n\t\t, moneycycle\n\t\t, moneytype\n\t\t, moneydtype\n\t\t, destinationSchedule\n\t\t, availableSchedules\n\t\t, disciplineSelect\n\t\t, disciplineSelectAutocomplete\n\t\t, editResourcePermissions\n\t\t, firstproject\n\t\t, setOptions\n\t\t, idealResourceName\n\t\t, deleteDisciplineC\n\t\t, switchProjectsButton\n\t\t, taskCloneButton\n\t\t, disciplineCloneButton\n\t\t, newUser\n\t\t, expandNotes\n\t\t, projectCompleted\n\t\t, deleteInvoiceItemsHash\n\t\t, deleteInvoiceHash\n\t\t, checkInvoiceDeletion\n\t\t, contractItems\n\t\t, odinItems\n\t\t, newContracts\n\t\t, selectedInvoices\n\t\t, newInvoices\n\t\t, chartview\n\t\t, ifCharts\n\t\t, renderChart\n\t\t, notesexpanded\n\t\t, zipRequest\n\t\t, userSelectionIndex\n\t\t, disciplineChargeRate\n\t\t, oauths\n\t\t, qiSelection\n\t\t, qiContactList\n\t\t, newqi\n\t\t, invoiceSelections\n\t\t, ieview\n\t\t, irview\n\t\t, requestedItems\n\t\t, qieqProp\n\t\t, reflist\n\t\t, revoptions\n\t\t, expoptions\n\t\t, qicheck\n\t}\n}\n\n/*\n\tThe controller is the glue that sticks the model and intent together.\n\tIt exposes the model and intent to the view by returning them.\n\n\tThe controller \"controls\" how each layer interacts.\n*/\nfunction Main({ attrs: { data }}){\n\tconst model = Model(data)\n\tconst intent = Intent(model, model.activeTab)\n\tconst ctrl = { model, intent }\n\n\treturn {\n\t\tview(){\n\t\t\treturn view(ctrl)\n\t\t}\n\t}\n}\n\n/*\n\tThe view provides the user ways to transfer their intent into really action within the system.\n\tThe view accesses data from the model layer, and binds intent functions to user inputs.\n*/\n\nvar view = function(ctrl){\n\t// once\n\treturn m('div.grid-content-full-height' // enable with quick start\n\t\t// todo-james this should be closer to the scollable table\n\t\t// callsite, but I'll leave that to @eja as he knows\n\t\t// this route better than me\n\t\t+ H.css`\n\t\t\t& .scrollable-table-3 .highlight-ok {\n\t\t\t\t--border-color: #6b5b95;\n\t\t\t\t--shadow-color: hsl(257deg 24% 47% / 47%);\n\t\t\t\tbox-shadow: -1px 3px 5px 0px var(--shadow-color);\n\t\t\t\tborder-left-color: var(--border-color);\n\t\t\t}\n\n\t\t\t& .scrollable-table-3 .highlight-error {\n\t\t\t\t--border-color: #d64141;\n\t\t\t\t--shadow-color: hsl(0deg 100% 95%);\n\t\t\t\tbox-shadow: -1px 3px 5px 0px var(--shadow-color);\n\t\t\t\tborder-left-color: var(--border-color);\n\t\t\t}\n\t\t`\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t\talign-content: ${\n\t\t\t\t[EditProject, ListProject].includes(ctrl.model.viewType())\n\t\t\t\t? 'start'\n\t\t\t\t: 'center'\n\t\t\t};\n\t\t`\n\t\t,ctrl.model.viewType () (ctrl)\n\t\t,DetailsPane(\n\t\t\tctrl.model.detailsPaneOpen\n\t\t\t,ctrl.model.checkMultiple().data.length > 1\n\t\t\t&& ctrl.model.discipline_vm().discipline_name\n\t\t\t\t? 'Edit Multiple Disciplines'\n\t\t\t\t: ctrl.model.checkMultipleProjectExtras().data.length > 1\n\t\t\t\t? 'Edit Multiple Tasks'\n\t\t\t\t: ctrl.model.projectOptions()\n\t\t\t\t? 'Project Options'\n\t\t\t\t: ''\n\t\t\t, () => ctrl.model.detailPaneInputs(\n\t\t\t\tctrl.model.discipline_vm\n\t\t\t\t, ctrl\n\t\t\t)\n\t\t)\n\t)\n}\n\nvar InitialProject = function(ctrl){\n\treturn [\n\t\tctrl.model.loading()\n\t\t? elements.centeredSpinner()\n\t\t: ctrl.model.vm().project_id\n\t\t&& ctrl.model.form().project.project_name\n\t\t\t? m(InitialProjectView, { ctrl, saveProjectButton, discardProjectButton })\n\t\t\t: ctrl.model.editPermissions()\n\t\t\t? m('div'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tjustify-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\t/* max-width: 31em; */\n\t\t\t\t\tgrid-template-columns: minmax(0em, 31em);\n\t\t\t\t`\n\t\t\t\t,createProjectButton(ctrl)\n\n\t\t\t\t,m('p'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t`\n\t\t\t\t\t,`Create a fresh project for the business or choose from our custom made options to quickly setup the metadata relationships`\n\t\t\t\t)\n\t\t\t)\n\t\t\t: m('div'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tjustify-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\t/* max-width: 31em; */\n\t\t\t\t\tgrid-template-columns: minmax(0em, 31em);\n\t\t\t\t`\n\t\t\t\t,`Projects have not been created yet`\n\t\t\t)\n\t]\n}\nvar createProjectAction = ctrl => {\n\tctrl.model.projectOptions(false)\n\tctrl.model.checkMultiple().data = []\n\tctrl.model.checkMultipleProjectExtras().data = []\n\n\tconst viewType =\n\t\ttrue\n\t\t|| ctrl.model.firstproject()\n\t\t&& ctrl.model.data.features().quickStartProject\n\t\t? InitialProject\n\t\t: EditProject\n\n\tctrl.model.viewType(viewType)\n\n\tctrl.model.activeTab('Tasks')\n\tctrl.model.vm(ctrl.model.resetPForm())\n\tctrl.model.cloningProject(false, true)\n\tctrl.model.edit(false)\n\tctrl.model.masterLIST(true)\n\tctrl.model.masterPELIST(true)\n\tctrl.model.fetchedExtras(true)\n\tctrl.model.disciplineViewSet('Working Details')\n\tctrl.model.onProjectList(false)\n\tif( ctrl.model.firstproject() ){\n\t\tctrl.model.addNewDiscipline()\n\t}\n}\nvar createProjectButton = function(ctrl, attrs={}){\n\treturn m(DropdownButton, R.merge(\n\t\tattrs\n\t\t,{\n\t\t\toptions: ctrl.model.projectTemplates().map((p) => p.project_name())\n\t\t\t,text: 'Create a Project'\n\t\t\t,onclick(){\n\t\t\t\tcreateProjectAction(ctrl)\n\t\t\t}\n\t\t\t,onselect(tp){\n\t\t\t\tconst template = ctrl.model.projectTemplates().find((template) => template.project_name() == tp)\n\t\t\t\tif (tp){\n\t\t\t\t\tctrl.model.projectOptions(false)\n\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\tctrl.model.checkMultipleProjectExtras().data = []\n\t\t\t\t\tctrl.model.viewType(InitialProject)\n\t\t\t\t\tctrl.model.vm(template)\n\t\t\t\t\tctrl.model.cloningProject(true, false)\n\t\t\t\t\tctrl.model.activeTab('Tasks')\n\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\tctrl.model.masterPELIST(true)\n\t\t\t\t\tctrl.model.fetchedExtras(false)\n\t\t\t\t\tctrl.model.disciplineViewSet('Working Details')\n\t\t\t\t\tctrl.model.onProjectList(false)\n\t\t\t\t}\n\t\t\t}\n\t\t\t,disabled: ctrl.model.schedule_id() == null\n\t\t\t\t? true\n\t\t\t\t: !!ctrl.model.check_pnames()\n\t\t})\n\t)\n}\n\nvar editableEndDate = function({project, ctrl}){\n\n\tconst autoSend =\n\t\t() => {\n\t\t\tif( project.created ){\n\t\t\t\treturn ctrl.intent.sendProjects([\n\t\t\t\t\tR.merge(\n\t\t\t\t\t\tproject\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tdisciplines: []\n\t\t\t\t\t\t\t,project_extras: []\n\t\t\t\t\t\t\t,project_contacts: []\n\t\t\t\t\t\t\t,project_documents: m.prop([])\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t}\n\t\t\telse { return R.F() }\n\t\t}\n\n\treturn Pencil(\n\t\t() => moment(project.project_dead_date()).format(\"ll\")\n\t\t,() =>\n\t\t\telements.dateInput(\n\t\t\t\tproject.project_dead_date\n\t\t\t\t,{\n\t\t\t\t\tdisabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t,title: \"Cut off date for completing all disciplines\"\n\t\t\t\t\t,onblur: autoSend\n\t\t\t\t\t,onchange: () => project.created = true\n\t\t\t\t}\n\t\t\t)\n\t)\n\n}\n\nvar ListProject = function(ctrl){\n\n\treturn m('div.harth.mb6'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t`\n\t\t, [\n\n\t\tctrl.model.editPermissions()\n\t\t\t? elements.list([\n\t\t\t\tcreateProjectButton(ctrl)\n\t\t\t\t,ctrl.model.switchProjectsButton(ctrl)\n\t\t\t\t,m(`label`,\n\t\t\t\t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t\t\t\t? ' to Current Projects'\n\t\t\t\t\t\t: ' to Completed Projects'\n\t\t\t\t)\n\t\t\t])\n\t\t\t: elements.list([\n\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\tdisabled: ctrl.model.checkMultipleProjects().length != 1\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.projectOptions(false)\n\t\t\t\t\t\tctrl.model.cloningProject(false, true)\n\t\t\t\t\t\tctrl.intent.fetchAllocations()\n\t\t\t\t\t\tctrl.model.viewType(EditProject)\n\t\t\t\t\t\tctrl.model.activeTab('Disciplines')\n\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\tctrl.model.masterPELIST(true)\n\t\t\t\t\t\tctrl.model.fetchedExtras(false)\n\t\t\t\t\t\tctrl.model.disciplineViewSet('Working Details')\n\t\t\t\t\t}\n\t\t\t\t}, \"View\")\n\t\t\t])\n\n\n\t\t,ctrl.model.getfilters(null, \"Project\")\n\t\t,m('br')\n\t\t,elements.table(ctrl.model.data,\n\t\t\tctrl.model.data.advancedView()\n\t\t\t? [\n\t\t\t\t'Manage'\n\t\t\t\t, 'Project'\n\t\t\t\t, 'Contract'\n\t\t\t\t, 'Status'\n\t\t\t\t, 'Priority'\n\t\t\t\t, 'Assigned Work Days'\n\t\t\t\t, 'Incomplete Tasks'\n\t\t\t\t, 'End Date'\n\t\t\t\t, 'Complete (%)'\n\t\t\t\t, ctrl.model.moneycycle('Accrued')\n\t\t\t\t, ctrl.model.moneycycle('Received')\n\t\t\t\t, ctrl.model.moneycycle('Forecasted')\n\t\t\t\t, 'Contract Obligations'\n\t\t\t\t, ''\n\t\t\t\t, ctrl.model.expandNotes(ctrl)\n\t\t\t\t, 'Forecasted Completion'\n\t\t\t\t, 'Completed'\n\t\t\t]\n\t\t\t: [\n\t\t\t\t'Manage'\n\t\t\t\t, 'Project'\n\t\t\t\t, 'Contract'\n\t\t\t\t, 'Status'\n\t\t\t\t, 'Incomplete Tasks'\n\t\t\t\t, 'End Date'\n\t\t\t\t, 'Complete (%)'\n\t\t\t\t, ctrl.model.moneycycle('Accrued')\n\t\t\t\t, ctrl.model.moneycycle('Received')\n\t\t\t\t, ctrl.model.moneycycle('Forecasted')\n\t\t\t\t, ''\n\t\t\t\t, ctrl.model.expandNotes(ctrl)\n\t\t\t\t, 'Completed'\n\t\t\t]\n\t\t\t,ListProcessing(\n\t\t\t\tctrl.model.loading()\n\t\t\t\t\t? []\n\t\t\t\t\t: ctrl.model.projects()\n\t\t\t\t, ctrl.model.filterFunction.projectFilters.filters()\n\t\t\t\t, 'project_priority'\n\t\t\t).map(\n\t\t\t\tfunction(project) {\n\t\t\t\treturn elements.table.row({ key: exposer(project.project_id) }, [\n\n\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\tfunction(event){\n\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\n\t\t\t\t\t\t\t\t\tctrl.model.vm(project)\n\t\t\t\t\t\t\t\t\tctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t? ctrl.model.checkMultipleProjects().push(\n\t\t\t\t\t\t\t\t\t\tproject\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: ctrl.model.checkMultipleProjects([project])\n\n\t\t\t\t\t\t\t\t\tctrl.model.projectOptions(true)\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\n\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects().splice(\n\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects().findIndex((p) =>\n\t\t\t\t\t\t\t\t\t\t\tp.project_id() == project.project_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects().length == 0\n\t\t\t\t\t\t\t\t\t\t? ctrl.model.vm({}) && ctrl.model.projectOptions(false)\n\t\t\t\t\t\t\t\t\t\t: ctrl.model.vm(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects()[0]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,checked: ctrl.model.checkMultipleProjects().find((p) => p.project_id() == project.project_id())\n\t\t\t\t\t})\n\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['completed'] = 'any'\n\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['invalid'] = 'any'\n\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['assigned'] = 'any'\n\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['verified'] = 'any'\n\t\t\t\t\t\t\t\t\tctrl.model.editLink(ctrl, project)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,project.project_name()\n\t\t\t\t\t)\n\n\t\t\t\t\t,project.contract_name || ''\n\n\t\t\t\t\t,!ctrl.model.data.calculated() ? ' ... ' : project.status\n\n\t\t\t\t\t,ctrl.model.data.advancedView() ? project.project_priority() : null\n\n\t\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t\t? m(\n\t\t\t\t\t\tproject.disciplines.some((d) =>\n\t\t\t\t\t\t\tR.intersection(\n\t\t\t\t\t\t\t\td.badeffortteams\n\t\t\t\t\t\t\t\t,R.unnest(d.disciplines_contractors.map(R.prop('disciplines_contractors_crews')))\n\t\t\t\t\t\t\t\t.map(R.pipe(R.prop('crew_id'), R.call()))\n\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t)\n\t\t\t\t\t\t? '.dark-red.fw6'\n\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,Number(project.workdays).toFixed(2)\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\t\t,m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\twidth: max-content;\n\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\twidth: 1.8em;\n\t\t\t\t\t\t\t\theight: 1.8em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick: () => ctrl.model.addNewTaskLink(ctrl, project)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, '+'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, m(`a.db.tl`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['completed'] = ''\n\t\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['invalid'] = ''\n\t\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['assigned'] = 'any'\n\t\t\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['verified'] = ''\n\t\t\t\t\t\t\t\t\t\tctrl.model.editLink(ctrl, project)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,project.incompletetaskcount + ' tasks'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,editableEndDate({ project, ctrl })\n\n\t\t\t\t\t,ctrl.model.PercentComplete(project)\n\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick: () => ctrl.model.editLink(ctrl, project, 'Reconciliation')\n\t\t\t\t\t\t\t,disabled: ctrl.model.metaDataLoading() || !ctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]\n\t\t\t\t\t\t\t\t? ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]['current' + ctrl.model.moneytype()['Accrued']]\n\t\t\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]['outstanding' + ctrl.model.moneytype()['Accrued']]\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick: () => ctrl.model.editLink(ctrl, project, 'Reconciliation')\n\t\t\t\t\t\t\t,disabled: ctrl.model.metaDataLoading() || !ctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]\n\t\t\t\t\t\t\t\t? ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]['current' + ctrl.model.moneytype()['Received']]\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick: () => ctrl.model.editLink(ctrl, project, 'Reconciliation')\n\t\t\t\t\t\t\t,disabled: ctrl.model.metaDataLoading() || !ctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()[project.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t\t)['forecasted' + ctrl.model.moneytype()['Forecasted']]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t\t? Number(project.eotSum) + Number(project.nodSum) + Number(project.varSum)\n\t\t\t\t\t: null\n\n\t\t\t\t\t,m('button'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tborder-radius: 0.2em;\n\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.1);\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tonclick: () => ctrl.model.cloneLink(ctrl, project)\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\tctrl.model.check_pnames()\n\t\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t,title: \"Copy this project's details to form the base of a new project\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Clone'\n\t\t\t\t\t)\n\n\t\t\t\t\t,ctrl.intent.showComments(project)\n\n\t\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t\t\t? project.lastAllocationDate\n\t\t\t\t\t\t\t? moment(project.lastAllocationDate).format(\"ll\")\n\t\t\t\t\t\t\t: ``\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,ctrl.model.projectCompleted({p: project, sendp: true, ctrl})\n\n\t\t\t\t]\n\t\t\t\t.filter((a) => a != null ))\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\t\t,m('p')\n\t\t,m('br')\n\t\t,!ctrl.model.data.schedule_id()\n\t\t\t? elements.alert('info','Please select a schedule')\n\t\t\t: ctrl.model.projects().length\n\t\t \t\t? null\n\t\t\t\t: ctrl.model.loading()\n\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t: elements.alert('info',`I have no projects designated to this schedule`)\n\t])\n}\n\n\nvar ResourceTab = function(ctrl){\n\treturn [\n\t\tm('br')\n\t\t,ctrl.model.rList().length != 0\n\t\t\t? elements.alert('info','Work can be assigned to multiple disciplines at a time')\n\t\t\t: !ctrl.model.rList().length && ctrl.model.data.readResourcePermissions() && ctrl.model.checkMultiple().data.length\n\t\t\t? elements.alert(\n\t\t\t\t'warning'\n\t\t\t\t, ctrl.model.checkMultiple().data.every((d) => !d.disciplines_contractors.length)\n\t\t\t\t? `There aren't any Resources or Teams available who have the capability to do this combination of work`\n\t\t\t\t: `There aren't any other Resources or Teams available who have the capability to do this combination of work`\n\t\t\t)\n\t\t\t: !ctrl.model.editResourcePermissions()\n\t\t\t? elements.alert('info',`Resource permissions are required to alter project resources`)\n\t\t\t: null\n\n\t\t,ctrl.model.checkMultiple().data.length && ctrl.model.rList().length\n\t\t? elements.list([\n\t\t\tm('label.control-label', 'Available Resources ')\n\t\t\t,autocomplete.strict(\n\t\t\t\tctrl.model.rList\n\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\tctrl.model.dc_mapping(v, ctrl.model.checkMultiple().data)\n\t\t\t\t\treturn v.ParentRecognition\n\t\t\t\t})\n\t\t\t\t, 'ParentRecognition'\n\t\t\t\t, () => ({\n\t\t\t\t\tdisabled: ctrl.model.rList().length == 0\n\t\t\t\t\t\t|| ctrl.model.checkMultiple().data.length == 0\n\t\t\t\t\t,title: \"Team or Resource nominated to work on this discipline\"\n\t\t\t\t})\n\t\t\t\t, (value, element) => {\n\t\t\t\t\telement.value = \"\"\n\t\t\t\t}\n\t\t\t)\n\t\t])\n\t\t: elements.alert(\n\t\t\t'info'\n\t\t\t,[\n\t\t\t\t'Select some disciplines to modify work assignments. If resource selections are left blank, Odin will assign the best choices based on this schedule\\'s directives. '\n\t\t\t\t,'Otherwise, selected Resources chosen will be assigned to the activated disciplines. '\n\t\t\t\t,'Note: if resources aren\\'t in the list, they don\\'t have the capability to work on all activated disciplines'\n\t\t\t].join('\\n')\n\t\t)\n\n\t\t,m(\"br\")\n\n\t\t,ctrl.model.form().project.disciplines.length\n\t\t\t? ctrl.model.disciplinesTable()\n\t\t\t: null\n\t]\n}\n\nvar exposeSublist = function(ctrl, o){\n\n\tconst operator =\n\t\to.itemk\n\t\t? R.map\n\t\t: R.mapObjIndexed\n\n\tconst subitems =\n\t\t!o.itemk\n\t\t? ctrl.model.reconRender()[o.organizations_disciplines_id ? o.organizations_disciplines_id() : o.project_id()] || {}\n\t\t: o.subitems\n\n\treturn operator(\n\t\tsk => {\n\n\t\t\tconst refitem =\n\t\t\t\to.itemk\n\t\t\t\t? sk\n\t\t\t\t: R.last(sk)\n\n\t\t\tconst refname =\n\t\t\t\t(\n\t\t\t\t\trefitem.user_name\n\t\t\t\t \t? exposer(refitem.user_name) + ' - '\n\t\t\t\t\t: refitem.itemname && o.itemk\n\t\t\t\t\t? 'Order' + ' - '\n\t\t\t\t\t: refitem.itemname\n\t\t\t\t\t? 'Material' + ' - '\n\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t+ (\n\t\t\t\t\to.itemk && refitem.distribution_ordered\n\t\t\t\t\t? refitem.distribution_ordered\n\t\t\t\t\t: o.itemk\n\t\t\t\t\t? [refitem.itemname || '', refitem.invoice_no, refitem.invoice_items_client_reference].filter(R.identity).join(' - ')\n\t\t\t\t\t: refitem.project_extras_type || refitem.invoice_name || refitem.itemname\n\t\t\t\t)\n\n\t\t\treturn {\n\t\t\t\trendername: refname\n\t\t\t\t,rendernameapp:\n\t\t\t\t\t!o.itemk\n\t\t\t\t\t? ''\n\t\t\t\t\t: !(refitem.crew_id || refitem.contractuserid)\n\t\t\t\t\t? ' Units '\n\t\t\t\t\t: refitem.contract_items_recorded_reference == 'Timesheets'\n\t\t\t\t\t? ' Hours '\n\t\t\t\t\t: ' Days '\n\n\t\t\t\t,invoice_approval: refitem.invoice_approval\n\t\t\t\t,invoice_received: refitem.invoice_received\n\t\t\t\t,receiveddate: refitem.invoice_received_date\n\t\t\t\t,invoice_received_date: refitem.invoice_received_date\n\t\t\t\t,invoice_items_client_reference: refitem.invoice_items_client_reference\n\t\t\t\t,parent: o\n\t\t\t\t,paymentref:\n\t\t\t\t\t!o.itemk\n\t\t\t\t\t? sk\n\t\t\t\t\t&& R.uniq(\n\t\t\t\t\t\t(!o.itemk ? R.unnest(Object.keys(sk).map((si) => sk[si])) : sk)\n\t\t\t\t\t\t.map(R.prop('invoice_client_reference'))\n\t\t\t\t\t\t.filter(R.prop('invoice_client_reference'))\n\t\t\t\t\t).join(', ')\n\t\t\t\t\t: refitem.invoice_client_reference\n\t\t\t\t,invoice_inv_id: refitem.invoice_inv_id\n\t\t\t\t// ,paymentrefernces:\n\t\t\t\t,invoice_id: refitem.invoice_id\n\t\t\t\t,invoice_items_id: refitem.invoice_items_id\n\n\t\t\t\t,subitems: sk\n\t\t\t\t,recqty:\n\t\t\t\t\to.itemk && !o.subitemk && sk.invoice_items_amount\n\t\t\t\t\t? sk.invoice_items_received_amount\n\t\t\t\t\t: o.itemk\n\t\t\t\t\t? refitem.invoice_received_date && refitem.invoice_amount\n\t\t\t\t\t: 0\n\t\t\t\t,qty:\n\t\t\t\t\to.itemk && !o.subitemk && sk.invoice_items_amount\n\t\t\t\t\t? sk.invoice_items_received_amount || sk.invoice_items_amount\n\t\t\t\t\t: o.itemk\n\t\t\t\t\t? sk.qty\n\t\t\t\t\t: 0\n\t\t\t\t,qtymatch:\n\t\t\t\t\t(refitem.invoice_amount == refitem.invoice_service_amount\n\t\t\t\t\t|| !refitem.invoice_service_amount)\n\t\t\t\t\t&& (refitem.invoice_amount == refitem.invoice_depreciation_amount\n\t\t\t\t\t|| !refitem.invoice_depreciation_amount)\n\t\t\t\t\t&& (refitem.invoice_amount == refitem.invoice_appreciation_amount\n\t\t\t\t\t|| !refitem.invoice_appreciation_amount)\n\t\t\t\t,rate: o.itemk ? sk.rate : 0\n\t\t\t\t,itemk:\n\t\t\t\t\to.organizations_disciplines_id\n\t\t\t\t\t? o.organizations_disciplines_id()\n\t\t\t\t\t: o.project_id\n\t\t\t\t\t? o.project_id()\n\t\t\t\t\t: o.itemk\n\t\t\t\t,subitemk: o.itemk && !o.subitemk ? o.itemk : null\n\n\t\t\t\t,materialvalue:\n\t\t\t\t\to.itemk\n\t\t\t\t\t? sk.materialvalue\n\t\t\t\t\t: R.sum(R.unnest(sk.map(R.prop('materialvalue'))))\n\t\t\t\t,revenuevalue:\n\t\t\t\t\to.itemk\n\t\t\t\t\t? sk.revenuevalue\n\t\t\t\t\t: R.sum(R.unnest(sk.map(R.prop('revenuevalue'))))\n\t\t\t\t,expenditurevalue:\n\t\t\t\t\to.itemk\n\t\t\t\t\t? sk.expenditurevalue\n\t\t\t\t\t: R.sum(R.unnest(sk.map(R.prop('expenditurevalue'))))\n\t\t\t}\n\t\t}\n\t\t,subitems\n\t)\n}\n\nvar expansionRender = function(ctrl, o, oi, oArray, returnsubitems){\n\n\tconst formator =\n\t\to.itemk\n\t\t? (a) => a\n\t\t: R.pipe(R.toPairs, R.unnest, R.filter((a) => R.type(a) != 'String'))\n\n\tconst list = returnsubitems ? formator(exposeSublist(ctrl, o)) : null\n\n\tconst subcount =\n\t\toArray.findIndex((a, aii, aarray) =>\n\t\t\taii == aarray.length - 1\n\t\t\t|| aii > oi\n\t\t\t&& (\n\t\t\t\to.itemk\n\t\t\t\t? o.itemk && !a.subitemk\n\t\t\t\t: !o.itemk && !a.itemk\n\t\t\t)\n\t\t)\n\n\tconst removals =\n\t\tsubcount == oArray.length-1\n\t\t&& (R.last(oArray).itemk || oi == oArray.length-1)\n\t\t? subcount-oi\n\t\t: subcount-(oi+1)\n\n\n\treturn returnsubitems && o.expanded\n\t\t? ctrl.model.reconArray().filter((oik, oii) => oii >= oi + 1 && oii <= oi + removals)\n\t\t: returnsubitems && !o.expanded\n\t\t? o.expanded = true && ctrl.model.reconArray(R.insertAll(oi + 1, list, ctrl.model.reconArray())) && list\n\t\t: !o.itemk\n\t\t&& ctrl.model.reconRender()\n\t\t[o.organizations_disciplines_id ? o.organizations_disciplines_id() : o.project_id()]\n\t\t|| o.itemk && !o.subitemk\n\t\t? m('a'\n\t\t\t,{\n\t\t\t\ttitle: 'Expand to see details of financial coverage'\n\t\t\t\t,onclick: () => {\n\n\t\t\t\t\tif (!o.expanded){\n\n\t\t\t\t\t\to.expanded = true\n\n\t\t\t\t\t\tconst sublist =\n\t\t\t\t\t\t\tformator(exposeSublist(ctrl, o))\n\n\t\t\t\t\t\tctrl.model.reconArray(R.insertAll(oi + 1, sublist, ctrl.model.reconArray()))\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tctrl.model.reconArray(R.remove(oi + 1, removals, ctrl.model.reconArray()))\n\t\t\t\t\t\to.expanded = false\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t,'(' + (\n\t\t\t\t!o.itemk\n\t\t\t\t? Object.keys(\n\t\t\t\t\tctrl.model.reconRender()[\n\t\t\t\t\t\to.organizations_disciplines_id\n\t\t\t\t\t\t? o.organizations_disciplines_id()\n\t\t\t\t\t\t: o.project_id()\n\t\t\t\t\t] || {}\n\t\t\t\t).length\n\t\t\t\t: o.itemk && !o.subitemk\n\t\t\t\t? o.subitems.length\n\t\t\t\t: ''\n\t\t\t)\n\t\t\t+ ')'\n\t\t)\n\t\t: !o.itemk\n\t\t&& !ctrl.model.reconRender()\n\t\t[o.organizations_disciplines_id ? o.organizations_disciplines_id() : o.project_id()]\n\t\t? '(0)'\n\t\t: ''\n}\n\nvar MaterialsTab = function(ctrl){\n\treturn ctrl.model.materialloading()\n\t? elements.centeredSpinner()\n\t: [\n\n\t\tm('br')\n\n\t\t,ctrl.model.vm().newProject\n\t\t? elements.alert(`info`, `Save this project to start applying materials`)\n\t\t: !ctrl.model.materials().actual.length && !Object.keys(ctrl.model.materials().suggested).length\n\t\t? elements.alert(\n\t\t\t`info`\n\t\t\t, `Standard materials can be set against different types of work in the Materials section of Odin,\n\t\t\tOdin will then be able to summarize and prefill materials on all your projects`\n\t\t)\n\t\t: null\n\n\t\t,m('br')\n\n\t\t,ctrl.model.materials().actual.length\n\t\t|| Object.keys(ctrl.model.materials().suggested).length\n\t\t? elements.table(\n\t\t\tctrl.model.data\n\t\t\t,[\n\t\t\t\t'Item Name'\n\t\t\t\t, 'New Stock Required'\n\t\t\t\t, 'Allocated Qty'\n\t\t\t\t, 'Received Qty'\n\t\t\t\t, 'Orders'\n\t\t\t]\n\t\t\t,(ctrl.model.materials().actual\n\t\t\t|| ctrl.model.vm().disciplines.concat(ctrl.model.vm()))\n\t\t\t.map((item) => [\n\t\t\t\titem.name\n\t\t\t\t,item.required\n\t\t\t\t,item.allocated\n\t\t\t\t,item.received\n\t\t\t\t,ctrl.model.itemDetails(item)\n\t\t\t])\n\t\t)\n\t\t: ''\n\t]\n}\n\nvar addInvoice = function(ctrl){\n\n\tconst invoiceData =\n\t\t(ni) =>\n\t\t\t({\n\t\t\t\txremove:\n\t\t\t\t\tm(``\n\t\t\t\t\t\t+css`\n\t\t\t\t\t\t'display': 'flex'\n\t\t\t\t\t\t,'align-items': 'center'\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,elements.xRemoval({\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\n\t\t\t\t\t\t\t\t\tconst relatedContract =\n\t\t\t\t\t\t\t\t\t\tctrl.model.newContracts()\n\t\t\t\t\t\t\t\t\t\t.find((a) =>\n\t\t\t\t\t\t\t\t\t\t\ta.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t== exposer(ni.contract_items_id)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t\trelatedContract\n\t\t\t\t\t\t\t\t\t\t&& relatedContract.created\n\t\t\t\t\t\t\t\t\t\t&& ctrl.model.newInvoices()\n\t\t\t\t\t\t\t\t\t\t.filter((a) => a.contract_items_id() == ni.contract_items_id())\n\t\t\t\t\t\t\t\t\t\t.length == 1\n\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\tctrl.model.newContracts()\n\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.newContracts()\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\tt.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== relatedContract.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tctrl.model.contractItems()\n\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.contractItems()\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\tt.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== relatedContract.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tctrl.model.newInvoices()\n\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.newInvoices()\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\tt.key\n\t\t\t\t\t\t\t\t\t\t\t\t== ni.key\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tctrl.model.selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\tt.key\n\t\t\t\t\t\t\t\t\t\t\t\t== ni.key\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t,title: 'Delete this invoice'\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\n\t\t\t\t,itype:\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgrid-template-rows: 0.7fr 0.3fr;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\t\t\t\t\t\tm(``\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,!ni.invoice_name\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: ni.invoice_rate() * ni.invoice_amount() > 0\n\t\t\t\t\t\t\t\t? 'Revenue'\n\t\t\t\t\t\t\t\t: ni.invoice_rate() * ni.invoice_amount() < 0\n\t\t\t\t\t\t\t\t? 'Expenditure'\n\t\t\t\t\t\t\t\t: ni.invoice_rate() > 0\n\t\t\t\t\t\t\t\t? 'Revenue'\n\t\t\t\t\t\t\t\t: 'Expenditure'\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\theight: 2em;\n\t\t\t\t\t\t\t\tbackground-color: inherit;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick: () => ni.invoice_rate( (ni.invoice_rate() || 1) * -1 )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, !ni.invoice_name\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: ni.invoice_rate() * ni.invoice_amount() > 0\n\t\t\t\t\t\t\t\t? elements.switchiconNeuRight()\n\t\t\t\t\t\t\t\t: elements.switchiconNeuLeft()\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\t\t\t,name:\n\t\t\t\tm.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tni.invoice_name\n\t\t\t\t\t\t? ni.invoice_name()\n\t\t\t\t\t\t: ''\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\tctrl.model.odinItems\n\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\tif (v){\n\n\t\t\t\t\t\t\t\t\tconst existing =\n\t\t\t\t\t\t\t\t\t\tctrl.model.contractItems()\n\t\t\t\t\t\t\t\t\t\t.find((ci) =>\n\t\t\t\t\t\t\t\t\t\t\tci.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t\t== v.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tconst cobji =\n\t\t\t\t\t\t\t\t\t\texisting || ctrl.model.data.makeContractItem(v, [v])\n\n\t\t\t\t\t\t\t\t\tif( !existing ){\n\t\t\t\t\t\t\t\t\t\tctrl.model.newContracts().push(cobji)\n\t\t\t\t\t\t\t\t\t\tcobji.contract_id(ctrl.model.form().project.contract_id())\n\t\t\t\t\t\t\t\t\t\tcobji.contract_items_id(uuid.v4())\n\t\t\t\t\t\t\t\t\t\tctrl.model.contractItems().push(cobji)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst cobj =\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.contracts()\n\t\t\t\t\t\t\t\t\t\t.find((c) => c.contract_id == cobji.contract_id())\n\n\t\t\t\t\t\t\t\t\tconst projectPrefill =\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tproject_id: ctrl.model.vm().project_id\n\t\t\t\t\t\t\t\t\t\t\t,project_name: ctrl.model.vm().project_name()\n\t\t\t\t\t\t\t\t\t\t\t,allocation_id: m.prop(null)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst invmeta =\n\t\t\t\t\t\t\t\t\t\tcobji\n\t\t\t\t\t\t\t\t\t\t? ctrl.model.data.cloneInvoice(\n\t\t\t\t\t\t\t\t\t\t\t[cobji]\n\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t,cobj\n\t\t\t\t\t\t\t\t\t\t\t,projectPrefill\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: ctrl.model.data.cloneInvoice(\n\t\t\t\t\t\t\t\t\t\t\t[cobji]\n\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t,cobj\n\t\t\t\t\t\t\t\t\t\t\t,projectPrefill\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tObject.assign(ni, R.last(invmeta))\n\t\t\t\t\t\t\t\t\tni.invoice_rate(\n\t\t\t\t\t\t\t\t\t\tni.invoice_rate()\n\t\t\t\t\t\t\t\t\t\t|| (\n\t\t\t\t\t\t\t\t\t\t\tcobji.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t|| cobji.project_id\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: -1\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn ni.invoice_name()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t\t, () => ({})\n\t\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,rate:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() => makeMoney( ni.invoice_rate() )\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t,errorLabel: ni.invoice_no() + ' Invoice Rate'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\t\t\t\tif( v || v == 0 ){\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_rate'\n\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn ni.invoice_rate()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t,placeholder: 'Rate'\n\t\t\t\t\t\t\t\t\t,key: 'Rate' + ni.key\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,qty:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() => ni.invoice_amount() || m('', {style: {opacity: '0.6'}}, 'Quantity')\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t,errorLabel: ni.invoice_no() + ' Invoice Amount'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\t\t\t\tif( v || v == 0 ){\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_amount'\n\t\t\t\t\t\t\t\t\t\t\t\t,[ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn ni.invoice_amount()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t,placeholder: 'Quantity'\n\t\t\t\t\t\t\t\t\t,key: 'Quantity' + ni.key\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,total:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m('', makeMoney(ni.invoice_rate() * ni.invoice_amount()) )\n\t\t\t\t: ''\n\n\t\t\t\t,approval:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() =>\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t!ni.invoice_approval()\n\t\t\t\t\t\t\t? 'Requires Approval'\n\t\t\t\t\t\t\t: !ni.invoice_approver()\n\t\t\t\t\t\t\t? 'Approved by ' + ctrl.model.data.organization().organization_name()\n\t\t\t\t\t\t\t: 'Approved by ' + ctrl.model.users().find((u) => u.user_id() == ni.invoice_approver() ).usersFullName\n\t\t\t\t\t\t)\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t\t\t(checked) => {\n\n\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\tchecked\n\t\t\t\t\t\t\t\t\t\t\t, 'invoice_approval'\n\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tif ( checked ) {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tnew Date().getTime() + Number(ni.contract_payment_term)*milliperday\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_due_date'\n\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_approver'\n\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: ni.invoice_approval()\n\t\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,received:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() =>\n\t\t\t\t\t\t'Received ' + (\n\t\t\t\t\t\t\tni.invoice_received_date()\n\t\t\t\t\t\t\t? moment( ni.invoice_received_date() ).format(\"ll\")\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t)\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.dateCheckbox({\n\t\t\t\t\t\t\tlabel: ''\n\t\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\t\ttitle: 'Received payment date'\n\t\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t\t(a) => {\n\t\t\t\t\t\t\t\t\t\tif( a ){\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn ni.invoice_received_date()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\ttitle: \"Received payment date \"\n\t\t\t\t\t\t\t\t\t,maxdate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,attrs:{\n\t\t\t\t\t\t\t\ttitle: 'Set ledger to be receipted'\n\t\t\t\t\t\t\t\t, prop: ni.invoice_received\n\t\t\t\t\t\t\t\t, checked: ni.invoice_received_date()\n\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\t\tif( e ){\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'receipting'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'receipting'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t\t\t\t\t, true\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,ref:\n\t\t\t\tni.invoice_name\n\t\t\t\t? m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() => ni.invoice_client_reference() || m('', {style: {opacity: '0.6'}}, 'Payment Ref')\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\t\tif( v || v == '' ){\n\t\t\t\t\t\t\t\t\tctrl.model.setOptions(\n\t\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t\t\t, 'invoice_client_reference'\n\t\t\t\t\t\t\t\t\t\t, [ni]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn ni.invoice_client_reference()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: \"Payment reference from the client\"\n\t\t\t\t\t\t\t\t,placeholder: 'Payment Ref'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,key: ni.key || Math.random().toString(15).slice(2, 8)\n\t\t\t})\n\n\tconst largeInvoiceTable =\n\t\t() =>\n\t\t\tctrl.model.newInvoices()\n\t\t\t.map((ni) => {\n\t\t\t\treturn m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\tgrid-template-columns: 0.05fr 0.05fr 0.2fr 0.1fr 0.1fr 0.15fr 0.05fr 0.15fr 0.15fr;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t`\n\t\t\t\t\t,{key: ni.key}\n\t\t\t\t\t,R.pipe(\n\t\t\t\t\t\tR.toPairs\n\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t,R.filter((pa) => typeof pa != 'string')\n\t\t\t\t\t)( invoiceData(ni) )\n\t\t\t\t)\n\t\t\t})\n\n\tconst smallInvoiceTable =\n\t\t() =>\n\t\t\tctrl.model.newInvoices()\n\t\t\t.map((ni) => {\n\t\t\t\treturn m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\tgrid-template-columns: 0.05fr 0.05fr 0.35fr 0.15fr 0.15fr 0.25fr;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t`\n\t\t\t\t\t,{key: ni.key}\n\t\t\t\t\t,R.pipe(\n\t\t\t\t\t\tR.toPairs\n\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t,R.filter((pa) => typeof pa != 'string')\n\t\t\t\t\t)(\n\t\t\t\t\t\tR.pick(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'xremove'\n\t\t\t\t\t\t\t\t,'itype'\n\t\t\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t\t\t,'rate'\n\t\t\t\t\t\t\t\t,'qty'\n\t\t\t\t\t\t\t\t,'total'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t,invoiceData(ni)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t})\n\n\tconst invoiceInputs = () =>\n\t\t!ctrl.model.newInvoices().length\n\t\t? null\n\t\t: m(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeInvoiceTable )\n\t\t\t\t,desktopOnly( smallInvoiceTable )\n\t\t\t\t,mobileOnly( smallInvoiceTable )\n\t\t\t\t,tabletOnly( smallInvoiceTable )\n\t\t\t]\n\t\t)\n\n\treturn ctrl.model.data.editInvoicePermissions()\n\t? [\n\t\telements.list([\n\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t{\n\t\t\t\t\tstyle:\n\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t, height: '2.9em'\n\t\t\t\t\t\t, width: '5em'\n\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t, textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tconst ni = {newinvoice: true, key: uuid.v4()}\n\t\t\t\t\t\tctrl.model.newInvoices([ni].concat(ctrl.model.newInvoices()))\n\t\t\t\t\t\tctrl.model.selectedInvoices([ni])\n\t\t\t\t\t}\n\t\t\t\t\t,disabled:\n\t\t\t\t\t\tctrl.model.masterPELIST().some(R.prop('created'))\n\t\t\t\t\t\t|| ctrl.model.masterLIST().some(R.prop('created'))\n\t\t\t\t}\n\t\t\t\t, 'Add'\n\t\t\t)\n\t\t\t,m('label.dib.control-label', 'Ledgers')\n\t\t])\n\n\t\t,invoiceInputs()\n\t]\n\t: null\n}\n\nvar ReconTab = function(ctrl){\n\treturn !ctrl.model.data.editContractPermissions()\n\t&& !ctrl.model.data.readContractPermissions()\n\t? elements.alert(`info`, `Contract permissions are required for Reconciliation`)\n\t: ctrl.model.reconloading()\n\t? elements.centeredSpinner()\n\t: [\n\n\t\tm('br')\n\n\t\t,ctrl.model.reconArray().length == 1\n\t\t? elements.alert(`info`, `Save this project to start the reconciliation`)\n\t\t: null\n\n\t\t,m('div'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tjustify-items: end;\n\t\t\t\t\tjustify-content: end;\n\t\t\t\t\talign-items: end;\n\t\t\t\t\talign-content: end;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\t/* max-width: 31em; */\n\t\t\t\t\tgrid-template-columns: minmax(0em, 31em);\n\t\t\t\t`\n\t\t\t\t,m(DropdownButton, R.merge(\n\t\t\t\t\t{}\n\t\t\t\t\t,{\n\t\t\t\t\t\toptions:\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t'a'\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\ttitle: 'Download imports for Xero'\n\t\t\t\t\t\t\t\t\t,href:\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.fetchXeroExport({\n\t\t\t\t\t\t\t\t\t\t\tsales:true\n\t\t\t\t\t\t\t\t\t\t\t, contract_items: ctrl.model.invoiceRender().map(R.prop('contract_items_id')).filter(R.identity).join(',')\n\n\t\t\t\t\t\t\t\t\t\t\t, invoices: ctrl.model.invoiceRender().map(R.prop('invoice_id')).filter(R.identity).join(',')\n\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'XERO - Sales'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t'a'\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\ttitle: 'Download imports for Xero'\n\t\t\t\t\t\t\t\t\t,href:\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.fetchXeroExport({\n\t\t\t\t\t\t\t\t\t\t\tbills:true\n\t\t\t\t\t\t\t\t\t\t\t, contract_items: ctrl.model.invoiceRender().map(R.prop('contract_items_id')).filter(R.identity).join(',')\n\n\t\t\t\t\t\t\t\t\t\t\t, invoices: ctrl.model.invoiceRender().map(R.prop('invoice_id')).filter(R.identity).join(',')\n\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'XERO - Bills'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,text: 'Downloads'\n\t\t\t\t\t\t,onclick(){}\n\t\t\t\t\t\t,onselect(){}\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t)\n\t\t,m('br')\n\t\t,elements.table(\n\t\t\tctrl.model.data\n\t\t\t,[\n\t\t\t\t''\n\t\t\t\t, 'Category'\n\t\t\t\t, 'Item'\n\t\t\t\t, ''\n\t\t\t\t, 'Material ' + makeMoney(ctrl.model.totalRecon().materialvalue)\n\t\t\t\t, 'Expenditures ' + makeMoney(ctrl.model.totalRecon().expenditurevalue)\n\t\t\t\t, 'Revenue ' + makeMoney(ctrl.model.totalRecon().revenuevalue)\n\t\t\t\t, 'Profits '\n\t\t\t\t+ makeMoney(\n\t\t\t\t\tctrl.model.totalRecon().materialvalue\n\t\t\t\t\t+ ctrl.model.totalRecon().expenditurevalue\n\t\t\t\t\t+ ctrl.model.totalRecon().revenuevalue\n\t\t\t\t)\n\t\t\t\t, 'Forecasted Profits '\n\t\t\t\t+ makeMoney(\n\t\t\t\t\t(ctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t[ctrl.model.form().project.contractrecognitionid] || {})\n\t\t\t\t\t.forecastedProfits\n\t\t\t\t)\n\t\t\t\t,'Approve'\n\t\t\t\t,'Receive'\n\t\t\t\t,''\n\t\t\t\t,'Payment Ref'\n\t\t\t\t,''\n\t\t\t]\n\t\t\t,ctrl.model.reconArray()\n\t\t\t.map((o, oi, oArray) => [\n\n\t\t\t\t!o.itemk\n\t\t\t\t? expansionRender(ctrl, o, oi, oArray)\n\t\t\t\t: ''\n\n\t\t\t\t,!o.itemk\n\t\t\t\t? ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,v: o.discipline_name ? o.discplineNameDescription : o.project_name()\n\t\t\t\t})\n\t\t\t\t: !o.subitemk\n\t\t\t\t? expansionRender(ctrl, o, oi, oArray)\n\t\t\t\t: o.invoice_inv_id\n\n\t\t\t\t,ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,v: o.rendername ? o.rendername : ''\n\t\t\t\t})\n\n\t\t\t\t,o.subitemk\n\t\t\t\t? ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,v: [Number(o.qty).toFixed(3), o.rendernameapp, ' x ', makeMoney(o.rate)].join(' ')\n\t\t\t\t})\n\t\t\t\t: ''\n\n\t\t\t\t,o.materialvalue\n\t\t\t\t? ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,e: !o.itemk ? '.underline' : ''\n\t\t\t\t\t,v: makeMoney(o.materialvalue)\n\t\t\t\t})\n\t\t\t\t: ''\n\n\t\t\t\t,o.expenditurevalue\n\t\t\t\t? ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,e: !o.itemk ? '.underline' : ''\n\t\t\t\t\t,v: makeMoney(o.expenditurevalue)\n\t\t\t\t})\n\t\t\t\t: ''\n\n\t\t\t\t,o.revenuevalue\n\t\t\t\t? ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,e: !o.itemk ? '.underline' : ''\n\t\t\t\t\t,v: makeMoney(o.revenuevalue)\n\t\t\t\t})\n\t\t\t\t: ''\n\n\t\t\t\t,ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,v: makeMoney(o.expenditurevalue + o.revenuevalue + o.materialvalue)\n\t\t\t\t\t,e: o.expenditurevalue + o.revenuevalue + o.materialvalue < 0\n\t\t\t\t\t\t? '.dark-red.fw6'\n\t\t\t\t\t\t: !o.itemk\n\t\t\t\t\t\t? '.underline'\n\t\t\t\t\t\t: ''\n\t\t\t\t})\n\n\t\t\t\t,!o.discipline_name\n\t\t\t\t? ''\n\t\t\t\t: ctrl.model.checkInvoiceDeletion({\n\t\t\t\t\to\n\t\t\t\t\t,v: makeMoney(\n\t\t\t\t\t\t(ctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t[o.contractrecognitionid]|| {})\n\t\t\t\t\t\t.forecastedProfits\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t\t,elements.listNoPadding([\n\t\t\t\t\t!(!o.itemk && Object.keys(o.subitems).length || o.itemk && !o.subitemk || o.subitemk)\n\t\t\t\t\t? ''\n\t\t\t\t\t: elements.checkbox(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, (e) => {\n\n\t\t\t\t\t\t\t\t\tvar itemcounter = 0\n\t\t\t\t\t\t\t\t\tconst oitems =\n\t\t\t\t\t\t\t\t\t\t!o.itemk\n\t\t\t\t\t\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\t\t\t\t\t\texpansionRender(ctrl, o, oi, oArray, true)\n\t\t\t\t\t\t\t\t\t\t\t.map((osk, oski, oskarray) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst newpos = !oskarray[oski-1] || osk.expanded ? oi+oski+1 : oi+oski+itemcounter+1\n\t\t\t\t\t\t\t\t\t\t\t\titemcounter = itemcounter + osk.subitems.length\n\t\t\t\t\t\t\t\t\t\t\t\treturn !osk.subitemk\n\t\t\t\t\t\t\t\t\t\t\t\t? expansionRender(ctrl, osk, newpos, oArray, true)\n\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: !o.subitemk\n\t\t\t\t\t\t\t\t\t\t? expansionRender(\n\t\t\t\t\t\t\t\t\t\t\tctrl\n\t\t\t\t\t\t\t\t\t\t\t, o\n\t\t\t\t\t\t\t\t\t\t\t, oi\n\t\t\t\t\t\t\t\t\t\t\t, oArray\n\t\t\t\t\t\t\t\t\t\t\t, true\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: [o]\n\n\t\t\t\t\t\t\t\t\tctrl.model.updateInvoiceItems(oitems, {approved: e})\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\to.approved\n\t\t\t\t\t\t\t\t|| o.approved == null && o.subitemk && o.invoice_approval\n\t\t\t\t\t\t\t\t|| (\n\t\t\t\t\t\t\t\t\to.subitems && !o.subitemk\n\t\t\t\t\t\t\t\t\t? (!o.itemk ? R.unnest(Object.keys(o.subitems).map((si) => o.subitems[si])) : o.subitems)\n\t\t\t\t\t\t\t\t\t.every((so) => {\n\t\t\t\t\t\t\t\t\t\tconst theitem =\n\t\t\t\t\t\t\t\t\t\t\tso.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.baseInvoiceIndex()['ii'][so.invoice_items_id]\n\t\t\t\t\t\t\t\t\t\t\t: so.invoice_id\n\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.baseInvoiceIndex()['i'][so.invoice_id]\n\t\t\t\t\t\t\t\t\t\t\t: {approved: false}\n\t\t\t\t\t\t\t\t\t\treturn theitem['approved']\n\t\t\t\t\t\t\t\t\t\t|| theitem['approved'] == null\n\t\t\t\t\t\t\t\t\t\t&& ctrl.model.baseInvoiceIndex()['i'][so.invoice_id]['invoice_approval']\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t\t,o.subitemk && (o.approved || o.approved == null && o.invoice_approval || o.subitemk)\n\t\t\t\t\t? 'Approved'\n\t\t\t\t\t: o.subitemk && !o.approved\n\t\t\t\t\t? 'Not Approved'\n\t\t\t\t\t: ''\n\t\t\t\t])\n\n\t\t\t\t,elements.listNoPadding([\n\t\t\t\t\t!(!o.itemk && Object.keys(o.subitems).length || o.itemk && !o.subitemk || o.subitemk)\n\t\t\t\t\t|| !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t? ''\n\t\t\t\t\t: elements.dateInput(\n\t\t\t\t\t\t(e) => {\n\t\t\t\t\t\t\tvar itemcounter = 0\n\t\t\t\t\t\t\tlet oitems = []\n\t\t\t\t\t\t\tif( e !== undefined ){\n\n\t\t\t\t\t\t\t\toitems =\n\t\t\t\t\t\t\t\t!o.itemk\n\t\t\t\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\t\t\t\texpansionRender(ctrl, o, oi, oArray, true)\n\t\t\t\t\t\t\t\t\t.map((osk, oski, oskarray) => {\n\t\t\t\t\t\t\t\t\t\tconst newpos = !oskarray[oski-1] || osk.expanded ? oi+oski+1 : oi+oski+itemcounter+1\n\t\t\t\t\t\t\t\t\t\titemcounter = itemcounter + osk.subitems.length\n\t\t\t\t\t\t\t\t\t\treturn !osk.subitemk\n\t\t\t\t\t\t\t\t\t\t? expansionRender(ctrl, osk, newpos, oArray, true).concat(osk)\n\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: !o.subitemk\n\t\t\t\t\t\t\t\t? expansionRender(\n\t\t\t\t\t\t\t\t\tctrl\n\t\t\t\t\t\t\t\t\t, o\n\t\t\t\t\t\t\t\t\t, oi\n\t\t\t\t\t\t\t\t\t, oArray\n\t\t\t\t\t\t\t\t\t, true\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: [o]\n\n\t\t\t\t\t\t\t\tif (e){\n\t\t\t\t\t\t\t\t\tctrl.model.updateInvoiceItems(oitems, {received: true, receiveddate: e })\n\t\t\t\t\t\t\t\t\to.receiveddate = e\n\t\t\t\t\t\t\t\t\to.received = true\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tctrl.model.updateInvoiceItems(oitems, {received: false, receiveddate: null})\n\t\t\t\t\t\t\t\t\to.receiveddate = null\n\t\t\t\t\t\t\t\t\to.received = false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn o.receiveddate\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,{ disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading() }\n\t\t\t\t\t)\n\n\t\t\t\t\t,(o.subitemk && (o.received || o.invoice_received))\n\t\t\t\t\t|| o.subitems && Object.keys(o.subitems).length\n\t\t\t\t\t&& Object.keys(o.subitems).every((i) =>\n\t\t\t\t\t\t(o.subitems[i].invoice_received || o.subitems[i].receiveddate)\n\t\t\t\t\t\t|| Array.isArray(o.subitems[i]) && o.subitems[i].every((ii) => ii.invoice_received_date || ii.receiveddate)\n\t\t\t\t\t)\n\t\t\t\t\t? ( o.recqty || o.subitems ? 'Received' : '0 Received' )\n\t\t\t\t\t: (o.subitemk && !o.recqty && !o.received && !o.invoice_received)\n\t\t\t\t\t|| o.subitems && Object.keys(o.subitems).length\n\t\t\t\t\t&& !Object.keys(o.subitems).every((i) =>\n\t\t\t\t\t\t(o.subitems[i].invoice_received || o.subitems[i].receiveddate)\n\t\t\t\t\t\t|| Array.isArray(o.subitems[i]) && o.subitems[i].every((ii) => ii.invoice_received_date || ii.receiveddate)\n\t\t\t\t\t)\n\t\t\t\t\t? 'Outstanding'\n\t\t\t\t\t: ''\n\t\t\t\t])\n\n\t\t\t\t,\n\t\t\t\t(o.qtymatch && o.subitemk) || o.subitemk\n\t\t\t\t? Pencil(\n\t\t\t\t\t() =>\n\t\t\t\t\t\t[!o.rectotal ? o.recqty : o.savetotal ? o.savetotal*(o.rate < 0 ? -1 : 1) : null\n\t\t\t\t\t\t,o.recqty == o.qty && o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t? 'Fully Paid'\n\t\t\t\t\t\t: (o.recqty < o.qty && o.recqty > 0\n\t\t\t\t\t\t|| o.recqty > o.qty && o.recqty < 0)\n\t\t\t\t\t\t&& o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t? 'Under Paid - Track Remainder'\n\t\t\t\t\t\t: (o.recqty > o.qty && o.recqty > 0\n\t\t\t\t\t\t|| o.recqty < o.qty && o.recqty < 0)\n\t\t\t\t\t\t&& o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t? 'Over Paid - Track Remainder'\n\t\t\t\t\t\t: 'Paid'\n\t\t\t\t\t\t].join(\" \")\n\t\t\t\t\t,() =>\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgrid-template-rows: 0.6fr 0.4fr;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\t\t\t\t\t\to.qtymatch && o.subitemk\n\t\t\t\t\t\t?\n\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t\t\twidth: 14em;\n\t\t\t\t\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.3fr 0.7fr;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-top: 0.4em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t, o.rectotal ? 'Total' : ' Qty'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Receieved Qty'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(d) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif(d || d == 0){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst invoice =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.baseInvoiceRender()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((i) => i.invoice_id() == o.invoice_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst invoiceitem =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((ii) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== o.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.saveqty =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!o.rectotal\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? d\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: Math.abs(d/o.rate)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.savetotal =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!o.rectotal\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Math.abs(d*o.rate)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: Math.abs(d)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoiceitem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? invoiceitem.invoice_items_received_amount = o.saveqty\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: invoice.recqty = o.saveqty\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (o.saveqty && o.saveqty != o.qty){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.received = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t;(invoiceitem || invoice).received = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse if ( !o.saveqty ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.received = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t;(invoiceitem || invoice).received = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.recqty = o.saveqty\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn !o.rectotal ? o.recqty : o.savetotal ? o.savetotal*(o.rate < 0 ? -1 : 1) : null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,step: 'any'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,style: {'max-width': '5em'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-items: center;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: start;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t, o.rectotal ? \"Show Quantity\" : \"Show Dollars\"\n\t\t\t\t\t\t\t\t\t\t\t, m(`button`\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground-color: inherit;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tonclick: () => o.rectotal = !o.rectotal\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,o.rectotal ? elements.switchiconNeuRight() : elements.switchiconNeuLeft()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: o.subitemk\n\t\t\t\t\t\t? ' Must be changed via financials'\n\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\tgrid-template-columns: 0.7fr 0.3fr;\n\t\t\t\t\t\t\t\tgap: 0.2em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\tpadding-top: 0.4em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, o.recqty == o.qty && o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t\t\t\t? 'Fully Paid'\n\t\t\t\t\t\t\t\t\t: (o.recqty < o.qty && o.recqty > 0\n\t\t\t\t\t\t\t\t\t|| o.recqty > o.qty && o.recqty < 0)\n\t\t\t\t\t\t\t\t\t&& o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t\t\t\t? 'Under Paid - Track Remainder'\n\t\t\t\t\t\t\t\t\t: (o.recqty > o.qty && o.recqty > 0\n\t\t\t\t\t\t\t\t\t|| o.recqty < o.qty && o.recqty < 0)\n\t\t\t\t\t\t\t\t\t&& o.recqty && (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t\t\t\t? 'Over Paid - Track Remainder'\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,o.recqty != o.qty && o.recqty\n\t\t\t\t\t\t\t\t\t&& (o.subitemk || o.invoice_no)\n\t\t\t\t\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t\t\t\t, (e) => {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst invoice =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.baseInvoiceRender()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((i) => i.invoice_id() == o.invoice_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst invoiceitem =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((ii) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== o.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(e){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.forcesplit = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoiceitem ? invoiceitem.forcesplit = true : null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\to.forcesplit = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.created =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!o.paymentref\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !o.received\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !o.approved\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: invoice.created\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoice.forcesplit = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvoiceitem ? invoiceitem.forcesplit = false : null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\to.forcesplit = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,checked: o.forcesplit\n\t\t\t\t\t\t\t\t\t\t\t,title: 'Track Remaining quantity against summaries in Odin for future expectations of receipt'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,!o.itemk && Object.keys(o.subitems).length || o.itemk && !o.subitemk || o.subitemk\n\t\t\t\t? Pencil(\n\t\t\t\t\t() => o.paymentref\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t(d) => {\n\n\n\t\t\t\t\t\t\t\tif(d || d == ''){\n\n\t\t\t\t\t\t\t\t\tvar parents = []\n\n\t\t\t\t\t\t\t\t\tvar itemcounter = 0\n\t\t\t\t\t\t\t\t\tconst oitems =\n\t\t\t\t\t\t\t\t\t\t!o.itemk\n\t\t\t\t\t\t\t\t\t\t? R.unnest(\n\t\t\t\t\t\t\t\t\t\t\texpansionRender(ctrl, o, oi, oArray, true)\n\t\t\t\t\t\t\t\t\t\t\t.map((osk, oski, oskarray) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst newpos = !oskarray[oski-1] || osk.expanded ? oi+oski+1 : oi+oski+itemcounter+1\n\t\t\t\t\t\t\t\t\t\t\t\titemcounter = itemcounter + osk.subitems.length\n\t\t\t\t\t\t\t\t\t\t\t\treturn !osk.subitemk\n\t\t\t\t\t\t\t\t\t\t\t\t? expansionRender(ctrl, osk, newpos, oArray, true)\n\t\t\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: !o.subitemk\n\t\t\t\t\t\t\t\t\t\t? expansionRender(\n\t\t\t\t\t\t\t\t\t\t\tctrl\n\t\t\t\t\t\t\t\t\t\t\t, o\n\t\t\t\t\t\t\t\t\t\t\t, oi\n\t\t\t\t\t\t\t\t\t\t\t, oArray\n\t\t\t\t\t\t\t\t\t\t\t, true\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: [o]\n\n\t\t\t\t\t\t\t\t\to.paymentref = d\n\n\t\t\t\t\t\t\t\t\tctrl.model.updateInvoiceItems(oitems, {paymentref: d}, parents)\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn d || o.paymentref\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tplaceholder: \"Record the payment reference number\"\n\t\t\t\t\t\t\t\t,title: \"Reference number of payment\"\n\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: ''\n\n\t\t\t\t,(!o.invoice_items_id && !o.invoice_id)\n\t\t\t\t|| !ctrl.model.data.editInvoicePermissions()\n\t\t\t\t? ``\n\t\t\t\t: m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\tmargin-bottom: 3em\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\t\t\t\t\t\telements.xRemoval({\n\t\t\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\t\t\tconst ditems =\n\t\t\t\t\t\t\t\t\to.subitems.length\n\t\t\t\t\t\t\t\t\t? o.subitems\n\t\t\t\t\t\t\t\t\t: [o]\n\n\t\t\t\t\t\t\t\tconst remove =\n\t\t\t\t\t\t\t\t\tctrl.model.deleteInvoiceItemsHash()[o.invoice_items_id]\n\t\t\t\t\t\t\t\t\t|| ctrl.model.deleteInvoiceHash()[o.invoice_id]\n\n\t\t\t\t\t\t\t\tditems.forEach((di) => {\n\n\t\t\t\t\t\t\t\t\tif( remove ){\n\t\t\t\t\t\t\t\t\t\tif( di.invoice_items_id){\n\n\t\t\t\t\t\t\t\t\t\t\tconst peindex =\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tt == di.project_extras_id\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\tdelete ctrl.model.deleteInvoiceItemsHash()[di.invoice_items_id]\n\n\t\t\t\t\t\t\t\t\t\t\tpeindex > -1\n\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.deleteProjectExtras().splice(peindex, 1)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tdelete ctrl.model.deleteInvoiceHash()[di.invoice_id]\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdi.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.deleteInvoiceItemsHash()[di.invoice_items_id] = di.invoice_items_id\n\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.deleteInvoiceHash()[di.invoice_id] = o.invoice_id\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,undo: ctrl.model.deleteInvoiceItemsHash()[o.invoice_items_id]\n\t\t\t\t\t\t\t,title: ctrl.model.deleteInvoiceItemsHash()[o.invoice_items_id] ? 'Restore this invoice' : 'Delete this invoice'\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t(!o.invoice_items_id && !o.invoice_id)\n\t\t\t\t\t\t\t\t|| (o.invoice_items_id && ctrl.model.deleteInvoiceHash()[o.invoice_id])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\tgrid-template-rows: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,o.subitems.length\n\t\t\t\t\t\t\t&& ctrl.model.deleteInvoiceItemsHash()[o.invoice_items_id]\n\t\t\t\t\t\t\t&& !o.approved\n\t\t\t\t\t\t\t&& !o.received\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\tt == R.last(o.subitems).project_extras_id\n\t\t\t\t\t\t\t\t\t\t) == -1\n\t\t\t\t\t\t\t\t\t\t? 'Keep Task'\n\t\t\t\t\t\t\t\t\t\t: 'Delete Task'\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\tm(`button`\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground-color: inherit;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tt == R.last(o.subitems).project_extras_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) == -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.push(R.last(o.subitems).project_extras_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tt == R.last(o.subitems).project_extras_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.deleteProjectExtras()\n\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tt == R.last(o.subitems).project_extras_id\n\t\t\t\t\t\t\t\t\t\t\t\t) == -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t? elements.switchiconNeuLeft()\n\t\t\t\t\t\t\t\t\t\t\t\t\t: elements.switchiconNeuRight()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t])\n\t\t)\n\t]\n}\n\n\nvar ContractualTab = function(ctrl){\n\treturn ctrl.model.ActiveContractsFeature()\n\t\t? [\n\n\t\t\t// elements.list([\n\t\t\t// \tctrl.model.contractAddView(ctrl)\n\t\t\t// \t,ctrl.model.ContractDeleteButton()\n\t\t\t// ])\n\n\t\t\tm('br')\n\n\t\t\t,elements.alert(`info`,\n\t\t\t\t`A Notice of Delay is a potential delay to today's work that releases liability to the current time frames. This notice is applied to every\n\t\t\t\tfuture day of work until an Extension of Time is created to flag that the delay has ended and works can resume. An Extension of Time as mentioned,\n\t\t\t\tindicates a previous Notification of Delay has been resolved and works can continue from this date with contractual liability to time frames`\n\t\t\t)\n\n\t\t\t// ,ctrl.model.DisableEmptySave()\n\n\t\t\t,ctrl.model.extraContractObligationData().length > 0\n\t\t\t\t? [\n\t\t\t\t\telements.table(ctrl.model.data, ['', 'Date', 'Type', '+/- Work', 'Description', 'Contract Clause', 'Escalated', 'Approval', 'Created By'],\n\t\t\t\t\t\tctrl.model.extraContractObligationData().map((c) => [\n\t\t\t\t\t\t\tctrl.model.editContractRecognitions() ? ctrl.model.getActivateContractDeleteButton(c) : null\n\t\t\t\t\t\t\t,moment(c.contractDate).format(\"ll\")\n\t\t\t\t\t\t\t,c.midfix == 'vars'\n\t\t\t\t\t\t\t\t? 'Variation'\n\t\t\t\t\t\t\t\t: c.midfix == 'nods'\n\t\t\t\t\t\t\t\t\t? 'Notice of Delay'\n\t\t\t\t\t\t\t\t\t: 'Extension of Time'\n\t\t\t\t\t\t\t,!ctrl.model.editContractRecognitions() || !ctrl.model.getActivateContractDeleteButton(c, true)\n\t\t\t\t\t\t\t\t? c['allocations_' + c.midfix + '_amount'] ? c['allocations_' + c.midfix + '_amount']() : null\n\t\t\t\t\t\t\t\t: \t\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: c['allocations_' + c.midfix + '_description']() + ' +/- Work'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t\t\t,title: \"plus or minus required works\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: null\n\n\n\t\t\t\t\t\t\t,!ctrl.model.editContractRecognitions() || !ctrl.model.getActivateContractDeleteButton(c, true)\n\t\t\t\t\t\t\t\t? c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t\t\t\t: elements.textInput( c['allocations_' + c.midfix + '_description'], {title: \"A Description of why this contract occurred for formal documentation\"})\n\n\t\t\t\t\t\t\t,!ctrl.model.editContractRecognitions() || !ctrl.model.getActivateContractDeleteButton(c, true)\n\t\t\t\t\t\t\t\t? c['allocations_' + c.midfix + '_clause']()\n\t\t\t\t\t\t\t\t: elements.textInput( c['allocations_' + c.midfix + '_clause'], {title: \"The Formal contract clause that forces this to apply\"})\n\n\t\t\t\t\t\t\t,ctrl.model.editContractRecognitions()\n\t\t\t\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t\t\t, (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_escalated'](e)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.contractPatchIndex()[c.allocation_id()] = ctrl.model.allocationIndex()[c.allocation_id()]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,checked: c['allocations_' + c.midfix + '_escalated']()\n\t\t\t\t\t\t\t\t\t\t,title: `Set to be escalated`\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editContractRecognitions()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: c['allocations_' + c.midfix + '_escalated']()\n\t\t\t\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t\t\t\t: 'No'\n\n\n\t\t\t\t\t\t\t,ctrl.model.editContractRecognitions()\n\t\t\t\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t\t\t, (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_approved'](e)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.contractPatchIndex()[c.allocation_id()] = ctrl.model.allocationIndex()[c.allocation_id()]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,checked: c['allocations_' + c.midfix + '_approved']()\n\t\t\t\t\t\t\t\t\t\t,title: `Set to be approved`\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editContractRecognitions()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: c['allocations_' + c.midfix + '_approved']()\n\t\t\t\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t\t\t\t: 'No'\n\n\t\t\t\t\t\t\t,ctrl.model.usersIndex()[c.user_id()].usersFullName\n\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t\t: elements.alert('info',`I have no contract obligations recorded for reference, these must be added via Updates`)\n\t\t]\n\t\t: elements.alert('info',`Activate the module for Recording EOTs, Variations and Delays Tools to use this tracking`)\n}\n\n\nvar quoteModal =\n\t({ ctrl }) => {\n\n\t\tconst qiContactList = ctrl.model.qiContactList\n\t\tconst qiSelection = ctrl.model.qiSelection\n\t\tconst newqi = ctrl.model.newqi\n\n\t\tconst tasksAndInvoice =\n\t\t\t() =>\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\n\t\t\t\t\t\t// ,m(``\n\t\t\t\t\t\t// \t+ css`\n\t\t\t\t\t\t// \t\tdisplay: grid;\n\t\t\t\t\t\t// \t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t// \t\talign-items: center;\n\t\t\t\t\t\t// \t`\n\t\t\t\t\t\t// \t,elements.checkbox({\n\t\t\t\t\t\t// \t\tonchange:\n\t\t\t\t\t\t// \t\t\tfunction(event){\n\t\t\t\t\t\t// \t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.ieview(true)\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.expoptions().map((i) =>\n\t\t\t\t\t\t// \t\t\t\t\t\t!ctrl.model.requestedItems().find((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]))\n\t\t\t\t\t\t// \t\t\t\t\t\t&& ctrl.model.requestedItems().push(i)\n\t\t\t\t\t\t// \t\t\t\t\t)\n\t\t\t\t\t\t// \t\t\t\t}\n\t\t\t\t\t\t// \t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.ieview(false)\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.expoptions().map((i) => {\n\t\t\t\t\t\t// \t\t\t\t\t\tconst index =\n\t\t\t\t\t\t// \t\t\t\t\t\t\tctrl.model.requestedItems().findIndex((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]) )\n\n\t\t\t\t\t\t// \t\t\t\t\t\t\tindex > -1 && ctrl.model.requestedItems().splice(index, 1)\n\t\t\t\t\t\t// \t\t\t\t\t})\n\t\t\t\t\t\t// \t\t\t\t}\n\t\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t\t// \t\t,checked:\n\t\t\t\t\t\t// \t\t\tctrl.model.invoiceSelections().some((i) => ctrl.model.qicheck(i) < 0 )\n\t\t\t\t\t\t// \t})\n\t\t\t\t\t\t// \t,'Expenditures'\n\t\t\t\t\t\t// )\n\n\t\t\t\t\t\t// ,m(``\n\t\t\t\t\t\t// \t+ css`\n\t\t\t\t\t\t// \t\tdisplay: grid;\n\t\t\t\t\t\t// \t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t// \t\talign-items: center;\n\t\t\t\t\t\t// \t`\n\t\t\t\t\t\t// \t,elements.checkbox({\n\t\t\t\t\t\t// \t\tonchange:\n\t\t\t\t\t\t// \t\t\tfunction(event){\n\t\t\t\t\t\t// \t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.irview(true)\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.revoptions().map((i) =>\n\t\t\t\t\t\t// \t\t\t\t\t\t!ctrl.model.requestedItems().find((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]))\n\t\t\t\t\t\t// \t\t\t\t\t\t&& ctrl.model.requestedItems().push(i)\n\t\t\t\t\t\t// \t\t\t\t\t)\n\t\t\t\t\t\t// \t\t\t\t}\n\t\t\t\t\t\t// \t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.irview(false)\n\t\t\t\t\t\t// \t\t\t\t\tctrl.model.revoptions().map((i) => {\n\t\t\t\t\t\t// \t\t\t\t\t\tconst index =\n\t\t\t\t\t\t// \t\t\t\t\t\t\tctrl.model.requestedItems().findIndex((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]) )\n\n\t\t\t\t\t\t// \t\t\t\t\t\t\tindex > -1 && ctrl.model.requestedItems().splice(index, 1)\n\t\t\t\t\t\t// \t\t\t\t\t})\n\t\t\t\t\t\t// \t\t\t\t}\n\t\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t\t// \t\t,checked:\n\t\t\t\t\t\t// \t\t\tctrl.model.invoiceSelections().some((i) => ctrl.model.qicheck(i) > 0 )\n\t\t\t\t\t\t// \t})\n\t\t\t\t\t\t// \t, 'Revenues'\n\t\t\t\t\t\t// )\n\n\t\t\t\t\t\tm(``\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\tgrid-auto-flow: row;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\theader: [\n\t\t\t\t\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\tfunction(event){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.irview(true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.invoiceSelections().map((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.requestedItems().find((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.requestedItems().push(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.irview(false)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.invoiceSelections().forEach((i) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().findIndex((ri) => exposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()]) )\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindex > -1 && ctrl.model.requestedItems().splice(index, 1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.invoiceSelections().length\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.invoiceSelections().every((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().find((ri) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texposer(ri[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,m('h5', 'Items (' + ctrl.model.invoiceSelections().length + ')')\n\t\t\t\t\t\t\t\t\t\t,m('h5', 'Quantity')\n\t\t\t\t\t\t\t\t\t\t,qiSelection() != 'Quote' ? m('h5', 'Approved') : m('h5', 'Notes')\n\t\t\t\t\t\t\t\t\t\t,qiSelection() != 'Quote' ? m('h5', 'Received') : null\n\t\t\t\t\t\t\t\t\t\t,qiSelection() != 'Quote' ? m('h5', 'Invoice') : null\n\t\t\t\t\t\t\t\t\t].filter(Boolean)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t].concat(R.sortBy(\n\t\t\t\t\t\t\t\t(i) =>\n\t\t\t\t\t\t\t\t\t!i.invoice_name\n\t\t\t\t\t\t\t\t\t\t? new Date(i.project_extras_date_completed()).getTime()\n\t\t\t\t\t\t\t\t\t\t: new Date(i.invoice_date).getTime()\n\t\t\t\t\t\t\t\t,ctrl.model.invoiceSelections()\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\t\t\tqiSelection() != 'Quote'\n\t\t\t\t\t\t\t\t? m(``\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\tjustify-content: left;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.04fr 0.45fr 0.075fr 0.085fr 0.11fr 0.24fr;\n\t\t\t\t\t\t\t\t\t\talign-items: start\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, i.header || [\n\t\t\t\t\t\t\t\t\t\tctrl.model.reconloading()\n\t\t\t\t\t\t\t\t\t\t&& ctrl.model.requestedItems().find((is) =>\n\t\t\t\t\t\t\t\t\t\t\texposer(is[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t? elements.spinner()\n\t\t\t\t\t\t\t\t\t\t: elements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\tfunction(event){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().push(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().findIndex((p) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texposer(p[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().find((is) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\texposer(is[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,m('',\n\t\t\t\t\t\t\t\t\t\t\t[i.invoice_name, i.invoice_description].join( '. ')\n\t\t\t\t\t\t\t\t\t\t\t,elements.nonStrikeList(\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_items\n\t\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: label.project_extras_type\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,action: () => {}\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,m(``\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.05em;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: left;\n\t\t\t\t\t\t\t\t\t\t\t\talign-items: center\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,elements.icons.x(), R.max(i.invoice_amount, i.itemssum)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, m('', i.invoice_approval ? elements.icons.greenTick() : elements.icons.redCross() || '' )\n\t\t\t\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t\t\t\t,i.invoice_received_date\n\t\t\t\t\t\t\t\t\t\t\t? moment( i.invoice_received_date ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t: elements.icons.redCross()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, m('', i.invoice_inv_id)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: m(``\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\tjustify-content: left;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.04fr 0.475fr 0.1fr 0.385fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,i.header || [\n\t\t\t\t\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\tfunction(event){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().push(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().findIndex((p) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texposer(p[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems().find((is) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\texposer(is[ctrl.model.qieqProp()]) == exposer(i[ctrl.model.qieqProp()])\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,m('', [\n\t\t\t\t\t\t\t\t\t\t\t\ti.project_extras_date_completed()\n\t\t\t\t\t\t\t\t\t\t\t\t? moment(i.project_extras_date_completed()).format(\"Do MMM\")\n\t\t\t\t\t\t\t\t\t\t\t\t: 'Not Completed'\n\t\t\t\t\t\t\t\t\t\t\t\t, i.project_extras_type()\n\t\t\t\t\t\t\t\t\t\t\t].join( ' - ')\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t,m(``\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.05em;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: left;\n\t\t\t\t\t\t\t\t\t\t\t\talign-items: center\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,elements.icons.x()\n\t\t\t\t\t\t\t\t\t\t\t, i.project_extras_planned_amount()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, m('', i.project_extras_notes() )\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\n\n\t\tconst contactsList =\n\t\t\t() =>\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 1em\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\n\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tjustify-items: start;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\tm('h4.mb1', 'Send To')\n\n\t\t\t\t\t\t\t\t,ctrl.model.form().project.project_contacts.length\n\t\t\t\t\t\t\t\t&& !ctrl.model.form().project.project_contacts\n\t\t\t\t\t\t\t\t.every((c) => (qiContactList().emails() || '').indexOf(c.project_contacts_email()) > -1 )\n\t\t\t\t\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstyle:\n\t\t\t\t\t\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t\t\t\t\t// , top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t\t, height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t\t, width: '15em'\n\t\t\t\t\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t\t// , textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t\t// , fontSize: '0.9em'\n\t\t\t\t\t\t\t\t\t\t\t// , padding: '0.2em 0.5em'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tconst qsdetails = qiContactList()\n\t\t\t\t\t\t\t\t\t\t\t// qsdetails.phones(\n\t\t\t\t\t\t\t\t\t\t\t// \tctrl.model.form().project.project_contacts.map(R.pipe(R.prop('project_contacts_phone'), R.call)).join(';')\n\t\t\t\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t\t\t\t\tqsdetails.emails(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.form().project.project_contacts\n\t\t\t\t\t\t\t\t\t\t\t\t.map(R.pipe(R.prop('project_contacts_email'), R.call)).join(';')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Add Contacts from the Project'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\n\n\n\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t// m(`button`\n\t\t\t\t\t\t\t\t// \t+ css`\n\t\t\t\t\t\t\t\t// \t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t// \t\tbackground-color: white;\n\t\t\t\t\t\t\t\t// \t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\t// \t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\t// \t\twidth: 1.8em;\n\t\t\t\t\t\t\t\t// \t\theight: 1.8em;\n\t\t\t\t\t\t\t\t// \t`\n\t\t\t\t\t\t\t\t// \t,{\n\t\t\t\t\t\t\t\t// \t\tonclick: () => newcontact()\n\t\t\t\t\t\t\t\t// \t\t,disabled: false\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// \t, '+'\n\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t\t// ,\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\tqiContactList().emails\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t,placeholder: 'john@example.com'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t// ,elements.textInput(\n\t\t\t\t\t\t\t\t// \tc.phones\n\t\t\t\t\t\t\t\t// \t,{\n\t\t\t\t\t\t\t\t// \t\tdisabled:\n\t\t\t\t\t\t\t\t// \t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t// \t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t// \t\t,placeholder: 'Example 0404 XXX XXX; 0404 YYY YYY'\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t\t// ,elements.textArea(\n\t\t\t\t\t\t\t\t// \tc.message\n\t\t\t\t\t\t\t\t// \t,{\n\t\t\t\t\t\t\t\t// \t\tplaceholder: \"Message\"\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t\t// ,elements.xRemoval({\n\t\t\t\t\t\t\t\t// \tonclick:\n\t\t\t\t\t\t\t\t// \t\t() =>\n\t\t\t\t\t\t\t\t// \t\t\tqiContactList( qiContactList().filter((qic) => qic.id != c.id) )\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// ,!qiContactList().emails()\n\t\t\t\t\t\t// ? elements.alert(\n\t\t\t\t\t\t// \t'warning'\n\t\t\t\t\t\t// \t,'Enter some emails to send the ' + qiSelection()\n\t\t\t\t\t\t// )\n\t\t\t\t\t\t// : null\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tconst terms =\n\t\t\t() =>\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\tflex-direction: column;\n\t\t\t\t\t`\n\t\t\t\t\t,[\n\n\t\t\t\t\t\tm('h4.mb1', 'Payment Term ( Days )')\n\t\t\t\t\t\t,ctrl.model.editContractPermissions()\n\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t() => newqi().contract_payment_term()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Payment Term'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: newqi().contract_payment_term\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 1\n\t\t\t\t\t\t\t\t\t\t\t,min: 0\n\t\t\t\t\t\t\t\t\t\t\t,title: `Terms of payment measure in days from date of invoice`\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: newqi().contract_payment_term() || 0\n\n\n\n\t\t\t\t\t\t,m('h4.mb1', 'Conditions')\n\t\t\t\t\t\t,elements.textArea(\n\t\t\t\t\t\t\tnewqi().contract_terms\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tplaceholder: \"Description of the terms of agreement\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tfunction openQuoteModal(){\n\n\t\t\tmodalStack.add({\n\t\t\t\ttitle: 'Quote or Invoice'\n\t\t\t\t, view: () =>\n\n\t\t\t\t\tm('.idetails'\n\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\talign-item: center;\n\t\t\t\t\t\t\t\tgap: 3em;\n\t\t\t\t\t\t\t\tgrid-template-rows: max-content 1fr max-content;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t& h1,& h2,& h3,& h4,& h5,& h6 {\n\t\t\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t`\n\n\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, elements.selectbuttons(\n\t\t\t\t\t\t\t\t['Quote', 'Invoice']\n\t\t\t\t\t\t\t\t,(t) => {\n\t\t\t\t\t\t\t\t\tif(t){\n\t\t\t\t\t\t\t\t\t\tqiSelection(t)\n\t\t\t\t\t\t\t\t\t\tctrl.model.requestedItems([])\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn qiSelection()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t\t,title: `Quote or Invoice`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, m('.form-items'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,tasksAndInvoice()\n\n\t\t\t\t\t\t\t, !ctrl.model.ieview() && !ctrl.model.irview()\n\t\t\t\t\t\t\t\t? `Select revenues or expenditures to see available ` + qiSelection() + ` items`\n\t\t\t\t\t\t\t\t: !ctrl.model.invoiceSelections().length\n\t\t\t\t\t\t\t\t? `Create tasks or invoices to be generate or send quotes and invoices`\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t, (ctrl.model.invoiceSelections().length || '') && terms()\n\t\t\t\t\t\t\t, (ctrl.model.invoiceSelections().length || '') && contactsList()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, m('.actions'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t.tablet`\n\t\t\t\t\t\t\t\tgrid-template-columns: repeat(1, minmax(max-content, 20em));\n\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t// , elements.action(\n\t\t\t\t\t\t\t// \t'Generate'\n\t\t\t\t\t\t\t// \t, () => ctrl.intent.sendQI({generateOnly: true})\n\t\t\t\t\t\t\t// \t, ctrl.model.savingProp\n\t\t\t\t\t\t\t// \t, 'primary'\n\t\t\t\t\t\t\t// \t, () =>\n\t\t\t\t\t\t\t// \t\t!ctrl.model.qiSelection().length\n\t\t\t\t\t\t\t// \t\t|| !ctrl.model.requestedItems().length\n\t\t\t\t\t\t\t// \t\t|| !qiContactList().emails()\n\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t, elements.action(\n\t\t\t\t\t\t\t\t'Send'\n\t\t\t\t\t\t\t\t, () => ctrl.intent.sendQI({generateOnly: ''})\n\t\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t\t, () =>\n\t\t\t\t\t\t\t\t\t!ctrl.model.qiSelection().length\n\t\t\t\t\t\t\t\t\t|| !ctrl.model.requestedItems().length\n\t\t\t\t\t\t\t\t\t|| !qiContactList().emails()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t, type: 'example'\n\t\t\t\t, dismissable: true\n\t\t\t})\n\t\t}\n\n\t\tlet showModal = !ctrl.model.loading()\n\n\t\treturn showModal && m('.payment-read-only-summary'+css`padding: 2em;`\n\t\t\t,elements.mobileButtonStack(\n\t\t\t\t{\n\t\t\t\t\tcontainer: {\n\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\tonclick: () => openQuoteModal()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,[\n\t\t\t\t\telements.mobileButtonStack.item({\n\t\t\t\t\t\tlabel: [\n\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.tablet`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, 'Quote or Invoice' //elements.icons.invoice()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,onclick(){\n\t\t\t\t\t\t\topenQuoteModal()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\t}\n\n\nvar ExtraDetailTab = function(ctrl){\n\n\tconst taskTableHeader =\n\t\t(t, tindex) =>\n\t\t\tm('span'\n\t\t\t\t+ css`\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t`\n\t\t\t\t,tindex == 0\n\t\t\t\t? m('span'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t`\n\t\t\t\t\t,''\n\t\t\t\t)\n\t\t\t\t: m('input'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t`\n\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t`\n\t\t\t\t\t)\n\t\t\t\t\t,ctrl.model.getActivateDeleteButton(t, 'project_extras')\n\t\t\t\t)\n\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\tctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t\t? ctrl.model.addNewTask\n\t\t\t\t\t\t\t: ctrl.model.addNewDiscipline\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\tctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: !!ctrl.model.check_dnames(true)\n\t\t\t\t\t\t,title: 'Create a Task'\n\n\t\t\t\t\t}\n\t\t\t\t\t, 'Create a New Task '\n\t\t\t\t)\n\t\t\t\t,m('span'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t`\n\t\t\t\t\t,''\n\t\t\t\t)\n\t\t\t)\n\n\tconst largeProjectDetailsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tctrl.model.masterPELIST()\n\t\t\t\t.map((t, tindex) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header: tindex != 0 ? '' : taskTableHeader(t, tindex)\n\t\t\t\t\t,selection: ctrl.model.getActivateDeleteButton(t, 'project_extras')\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$media('(min-width: 1800px)', `\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 7.5fr 15fr 10fr repeat(3,minmax(6em,5fr)) 4em 4.5em 8fr 4fr 6fr 6fr 15fr;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: {\n\t\t\t\t\t\t'Name': t.project_extras_type()\n\t\t\t\t\t\t,'Description': t.project_extras_description()\n\t\t\t\t\t\t,'Address': t.project_extras_address()\n\n\t\t\t\t\t\t,'Completed': t.project_extras_date_completed()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_completed()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Invalid': t.project_extras_date_invalid()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_invalid()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Verified': t.project_extras_date_verified()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_verified()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,'Actual': t.project_extras_actual_amount()\n\t\t\t\t\t\t,'Planned': t.project_extras_planned_amount()\n\t\t\t\t\t\t,'Related Discipline': t.relatedDiscipline\n\t\t\t\t\t\t,'Files': t.filecount\n\t\t\t\t\t\t,'Ledgers':\n\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\tt.revenueinvoices\n\t\t\t\t\t\t\t\t,t.costinvoices\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(', ')\n\n\t\t\t\t\t\t,'Related User': t.username || t.invite_email\n\t\t\t\t\t\t,'Notes': t.project_extras_notes()\n\n\t\t\t\t\t}\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tclassName: t.project_extras_date_completed()\n\t\t\t\t\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t\t\t\t\t\t? 'highlight-ok'\n\t\t\t\t\t\t\t\t\t: 'highlight-error'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t}))\n\t\t})\n\n\tconst mediumProjectDetailsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tctrl.model.masterPELIST()\n\t\t\t\t.map((t, tindex) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header: tindex != 0 ? '' : taskTableHeader(t, tindex)\n\t\t\t\t\t,selection: ctrl.model.getActivateDeleteButton(t, 'project_extras')\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 7fr 10fr 9fr repeat(3,minmax(6em,5fr)) 5em 5fr 8fr 7fr 10fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: {\n\t\t\t\t\t\t'Name': t.project_extras_type()\n\t\t\t\t\t\t,'Description': t.project_extras_description()\n\t\t\t\t\t\t,'Address': t.project_extras_address()\n\n\t\t\t\t\t\t,'Completed': t.project_extras_date_completed()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_completed()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Invalid': t.project_extras_date_invalid()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_invalid()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Verified': t.project_extras_date_verified()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_verified()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,'A vs P':\n\t\t\t\t\t\t\tt.project_extras_actual_amount()\n\t\t\t\t\t\t\t+ ' / '\n\t\t\t\t\t\t\t+ t.project_extras_planned_amount()\n\t\t\t\t\t\t,'Files': t.filecount\n\t\t\t\t\t\t,'Ledgers':\n\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\tt.revenueinvoices\n\t\t\t\t\t\t\t\t,t.costinvoices\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(', ')\n\n\t\t\t\t\t\t,'Related User': t.username || t.invite_email\n\t\t\t\t\t\t,'Notes': t.project_extras_notes()\n\n\t\t\t\t\t}\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tclassName: t.project_extras_date_completed()\n\t\t\t\t\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t\t\t\t\t\t? 'highlight-ok'\n\t\t\t\t\t\t\t\t\t: 'highlight-error'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t}))\n\t\t})\n\n\tconst smallProjectDetailsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tctrl.model.masterPELIST()\n\t\t\t\t.map((t) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header: taskTableHeader(t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Name', 'Description']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == t.relatedDiscipline\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], t.relatedDiscipline].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Completed', 'Verified', 'Invalid', ' Assigned']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Planned', 'Actual']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 0.25em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Address', 'Tasked']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Invoice No', 'Files']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Notes']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t\t,data: {\n\t\t\t\t\t\t'Name': t.project_extras_type()\n\t\t\t\t\t\t,'Description': t.project_extras_description()\n\t\t\t\t\t\t,'Address': t.project_extras_address()\n\n\t\t\t\t\t\t,'Completed': t.project_extras_date_completed()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_completed()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Invalid': t.project_extras_date_invalid()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_invalid()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Verified': t.project_extras_date_verified()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_verified()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,'Assigned': t.project_extras_date_assigned()\n\t\t\t\t\t\t\t? moment(t.project_extras_date_assigned()).format(\"ddd Do MMM\")\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,'Actual': t.project_extras_actual_amount()\n\t\t\t\t\t\t,'Planned': t.project_extras_planned_amount()\n\t\t\t\t\t\t,'Files': t.filecount\n\t\t\t\t\t\t,'Ledgers':\n\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\tt.revenueinvoices\n\t\t\t\t\t\t\t\t,t.costinvoices\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(', ')\n\n\t\t\t\t\t\t,'Tasked': t.username || t.invite_email\n\t\t\t\t\t\t,'Notes': t.project_extras_notes()\n\t\t\t\t\t}\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tclassName: t.project_extras_date_completed()\n\t\t\t\t\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t\t\t\t\t\t? 'highlight-ok'\n\t\t\t\t\t\t\t\t\t: 'highlight-error'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t}))\n\t\t})\n\n\n\tconst projectDetailsTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeProjectDetailsTable )\n\t\t\t\t,desktopOnly( mediumProjectDetailsTable )\n\t\t\t\t,mobileOnly( smallProjectDetailsTable )\n\t\t\t\t,tabletOnly( smallProjectDetailsTable )\n\t\t\t]\n\t\t)\n\n\treturn ctrl.model.ActiveDetailsFeature()\n\t\t? [\n\n\t\t\tm('br')\n\t\t\t,([\n\t\t\t\telements.alert(\n\t\t\t\t\t'info'\n\t\t\t\t\t, `Tasks are small unscheduled activites that are useful for record keeping. Tasks can be related to disciplines and account for working quantities. `\n\t\t\t\t\t+ `The Search + Filter inputs can sort this data in many inclusion and exclusion search combinations, but to sort through the work promptly Odin also provides Quick Filters`\n\t\t\t\t)\n\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t['Assigned', 'Completed', 'Verified', 'Invalid', 'All Tasks']\n\t\t\t\t\t,(t) => {\n\t\t\t\t\t\tif(t){\n\t\t\t\t\t\t\t!ctrl.model.projectExtrasTypes()['completed']\n\t\t\t\t\t\t\t\t? ctrl.model.projectExtrasTypes()['completed'] = 'any'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t!ctrl.model.projectExtrasTypes()['invalid']\n\t\t\t\t\t\t\t\t? ctrl.model.projectExtrasTypes()['invalid'] = 'any'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t!ctrl.model.projectExtrasTypes()['verified']\n\t\t\t\t\t\t\t\t? ctrl.model.projectExtrasTypes()['verified'] = 'any'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t!ctrl.model.projectExtrasTypes()['assigned']\n\t\t\t\t\t\t\t\t? ctrl.model.projectExtrasTypes()['assigned'] = 'any'\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t\tconst type = t.toLowerCase()\n\n\t\t\t\t\t\t\tctrl.model.projectExtrasTypes(\n\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcompleted: 'any'\n\t\t\t\t\t\t\t\t\t\t, invalid: 'any'\n\t\t\t\t\t\t\t\t\t\t, verified: 'any'\n\t\t\t\t\t\t\t\t\t\t, assigned: 'any'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,t == 'All Tasks'\n\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t[type]: ctrl.model.projectExtrasTypes()[type] == 'all'\n\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.projectExtrasTypes()[type] = 'any'\n\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.projectExtrasTypes()[type] = 'all'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['completed'] == 'any'\n\t\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['invalid'] == 'any'\n\t\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['assigned'] == 'any'\n\t\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['verified'] == 'any'\n\t\t\t\t\t\t\t\t&& t != 'All Tasks'\n\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['completed'] = ''\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['invalid'] = ''\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['assigned'] = ''\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasTypes()['verified'] = ''\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctrl.model.fetchedExtras(false)\n\t\t\t\t\t\t\tctrl.model.projectExtrasTypes(ctrl.model.projectExtrasTypes())\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,{\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tctrl.model.form().project.project_extras\n\t\t\t\t\t\t\t.some((t) => !t.project_extras_id())\n\t\t\t\t\t\t,title: `Task selection`\n\t\t\t\t\t}\n\t\t\t\t\t,(notReq, t) =>\n\t\t\t\t\t\tctrl.model.projectExtrasTypes()[t.toLowerCase()] == 'all'\n\t\t\t\t\t\t|| \t\t\t\t\t\tt == 'All Tasks'\n\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['completed'] == 'any'\n\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['invalid'] == 'any'\n\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['assigned'] == 'any'\n\t\t\t\t\t\t\t&& ctrl.model.projectExtrasTypes()['verified'] == 'any'\n\t\t\t\t)\n\t\t\t])\n\n\t\t\t,ctrl.model.form().project.newproject\n\t\t\t&& !ctrl.model.cloning()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`warning`\n\t\t\t\t\t,`Save this project before creating tasks`\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\t,ctrl.model.fetchedExtras()\n\t\t\t\t? ctrl.model.form().project.project_extras.length\n\t\t\t\t\t? projectDetailsTable()\n\t\t\t\t\t// todo-james This message assumes 0 tasks = no tasks created\n\t\t\t\t\t// but they may have not selected a task filter yet.\n\t\t\t\t\t: elements.alert(\n\t\t\t\t\t\t'info'\n\t\t\t\t\t\t,`Create some tasks to be added to this project. Tasks can be related to disciplines and account for working quantities`\n\t\t\t\t\t)\n\t\t\t\t: elements.centeredSpinner()\n\t\t]\n\t\t: elements.alert('info',`Activate the project tasks module to use this tracking`)\n}\n\nconst discardProjectButton =\n\t(ctrl) =>\n\t\tm(\"button.btn.btn-warning\", {\n\t\t\tdisabled: false\n\t\t\t,onclick: () => {\n\t\t\t\tctrl.model.cloning(false)\n\t\t\t\tctrl.model.errors({})\n\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\tctrl.model.pe_vm({})\n\t\t\t\tctrl.model.form().project = {}\n\t\t\t\tctrl.model.viewType(\n\t\t\t\t\tctrl.model.firstproject()\n\t\t\t\t\t&& ctrl.model.data.features().quickStartProject\n\t\t\t\t\t? InitialProject\n\t\t\t\t\t: ListProject\n\t\t\t\t)\n\t\t\t\tctrl.model.deleteProjectExtras([])\n\t\t\t\tctrl.model.deleteDisciplines([])\n\t\t\t\tctrl.model.deleteDisciplinesContractors([])\n\t\t\t\tctrl.model.deleteDisciplinesCrews([])\n\t\t\t\tctrl.model.contractPatchIndex({})\n\t\t\t\tctrl.model.selectedInvoices([])\n\t\t\t\tctrl.model.newInvoices([])\n\t\t\t\tctrl.model.newContracts([])\n\t\t\t}\n\t\t},\"Discard\")\n\nconst saveProjectButton =\n\t(ctrl) =>\n\t\tctrl.model.SaveDisabled(true)\n\t\t|| ctrl.model.check_dnames(true)\n\t\t|| ctrl.model.checkTaskDates(true)\n\t\t|| identical(ctrl.model.form().project, ctrl.model.vm())\n\t\t&& identical(\n\t\t\tctrl.model.extraContractObligationData()\n\t\t\t,ctrl.model.clonedContracts()\n\t\t)\n\t\t&& !ctrl.model.disciplineSpread().length\n\t\t&& !ctrl.model.newInvoices().length\n\t\t&& !Object.keys(ctrl.model.deleteInvoiceItemsHash()).length\n\t\t&& !Object.keys(ctrl.model.deleteInvoiceHash()).length\n\t\t\t? m('button.btn', {\n\t\t\t\tdisabled: true\n\t\t\t\t,title: \"Project Name, Location and Material Store must be entered before saving\"\n\t\t\t}, 'Save')\n\t\t\t: elements.action(\n\t\t\t\t'Save'\n\t\t\t\t, ctrl.intent.sendProjects\n\t\t\t\t, ctrl.model.savingProp\n\t\t\t)\n\nvar EditProject = function(ctrl){\n\n\treturn m('div.harth.mb6'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t`\n\t\t, [\n\t\tctrl.model.editPermissions()\n\t\t\t? elements.list(\n\t\t\t\tctrl.model.edit() == true\n\t\t\t\t? [\n\t\t\t\t\telements.back(\n\t\t\t\t\t\t\"Return to the main list without saving\"\n\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.form().project = {}\n\t\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\t\tctrl.model.pe_vm({})\n\t\t\t\t\t\t\tctrl.model.deleteProjectExtras([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplines([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplinesContractors([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplinesCrews([])\n\t\t\t\t\t\t\tctrl.model.viewType(ListProject)\n\t\t\t\t\t\t\tctrl.model.projectExtras([])\n\t\t\t\t\t\t\tctrl.model.contractPatchIndex({})\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras().data = []\n\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjects([])\n\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\trouteids: ctrl.model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t\t,specificproject: ctrl.model.projects().map(R.prop('contractrecognitionid'))\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tctrl.model.onProjectList(true)\n\t\t\t\t\t\t\tctrl.model.selectedInvoices([])\n\t\t\t\t\t\t\tctrl.model.newInvoices([])\n\t\t\t\t\t\t\tctrl.model.newContracts([])\n\t\t\t\t\t\t\tctrl.model.data.loadchart({})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,{disabled: ctrl.model.savingProp()}\n\t\t\t\t\t)\n\t\t\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tctrl.model.savingProp()\n\t\t\t\t\t\t\t|| identical(ctrl.model.form().project, ctrl.model.vm())\n\t\t\t\t\t\t\t&& identical(\n\t\t\t\t\t\t\t\tctrl.model.extraContractObligationData()\n\t\t\t\t\t\t\t\t,ctrl.model.clonedContracts()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t// && identical(ctrl.model.baseInvoiceRender(), ctrl.model.invoiceRender())\n\t\t\t\t\t\t\t&& ctrl.model.baseInvoiceRender().every((i) => !i.created)\n\t\t\t\t\t\t\t&& !ctrl.model.newInvoices().length\n\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.cloningProject(false, true)\n\t\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\t\tctrl.model.pe_vm({})\n\t\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\t\tctrl.model.deleteProjectExtras([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplines([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplinesContractors([])\n\t\t\t\t\t\t\tctrl.model.deleteDisciplinesCrews([])\n\t\t\t\t\t\t\tctrl.model.contractPatchIndex({})\n\t\t\t\t\t\t\tctrl.intent.fetchAllocations()\n\t\t\t\t\t\t\tvar nonEditedExtras =\n\t\t\t\t\t\t\t\tR.filter(\n\t\t\t\t\t\t\t\t\t(c) => !c.created\n\t\t\t\t\t\t\t\t\t,ctrl.model.form().project.project_extras\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tctrl.model.projectExtrasStat({\n\t\t\t\t\t\t\t\tproject_extras_date_assigned: 0\n\t\t\t\t\t\t\t\t,project_extras_date_completed: 0\n\t\t\t\t\t\t\t\t,project_extras_date_verified: 0\n\t\t\t\t\t\t\t\t,project_extras_date_invalid: 0\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tctrl.model.form().project.project_extras =\n\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\tnonEditedExtras\n\t\t\t\t\t\t\t\t\t,R.differenceWith(\n\t\t\t\t\t\t\t\t\t\t(x, y) => x.project_extras_id() == y.project_extras_id()\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.vm().project_extras\n\t\t\t\t\t\t\t\t\t\t,nonEditedExtras\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map((e) => {\n\t\t\t\t\t\t\t\t\t\tctrl.model.pe_vm(e)\n\t\t\t\t\t\t\t\t\t\treturn ctrl.model.cloningProjectE(false, true)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tctrl.model.projectExtrasIndex(\n\t\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t\tR.pipe(R.prop('discipline_id'), R.call)\n\t\t\t\t\t\t\t\t\t,ctrl.model.form().project.project_extras\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras().data = []\n\t\t\t\t\t\t\tctrl.model.form().project.project_extras\n\t\t\t\t\t\t\t.forEach((t) =>\n\t\t\t\t\t\t\t\tctrl.model.projectExtrasSum(t, null)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tctrl.model.deleteInvoiceItemsHash()\n\t\t\t\t\t\t\tctrl.model.deleteInvoiceHash()\n\t\t\t\t\t\t\tctrl.model.selectedInvoices([])\n\t\t\t\t\t\t\tctrl.model.newInvoices([])\n\t\t\t\t\t\t\tctrl.model.newContracts([])\n\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\tctrl.model.masterPELIST(true)\n\t\t\t\t\t\t\tctrl.model.disciplineSpread([])\n\t\t\t\t\t\t\tctrl.model.spreading(false)\n\n\t\t\t\t\t\t\tconst nowids = ctrl.model.data.routeids()\n\t\t\t\t\t\t\tctrl.model.data.routeids({\n\t\t\t\t\t\t\t\trouteids: []\n\t\t\t\t\t\t\t\t,getledgers: false\n\t\t\t\t\t\t\t\t,ledgerdetails: false\n\t\t\t\t\t\t\t\t,getmatdata: false\n\t\t\t\t\t\t\t\t,specificproject: []\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tctrl.model.data.routeids(nowids)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t\t\t},\"Discard Changes\")\n\t\t\t\t\t,ctrl.model.SaveDisabled(true)\n\t\t\t\t\t|| ctrl.model.check_dnames(true)\n\t\t\t\t\t|| ctrl.model.checkTaskDates(true)\n\t\t\t\t\t|| identical(ctrl.model.form().project, ctrl.model.vm())\n\t\t\t\t\t&& identical(\n\t\t\t\t\t\tctrl.model.extraContractObligationData()\n\t\t\t\t\t\t,ctrl.model.clonedContracts()\n\t\t\t\t\t)\n\t\t\t\t\t&& ctrl.model.baseInvoiceRender().every((i) => !i.created)\n\t\t\t\t\t&& !ctrl.model.disciplineSpread().length\n\t\t\t\t\t&& !ctrl.model.newInvoices().length\n\t\t\t\t\t&& !Object.keys(ctrl.model.deleteInvoiceItemsHash()).length\n\t\t\t\t\t&& !Object.keys(ctrl.model.deleteInvoiceHash()).length\n\t\t\t\t\t// && ctrl.model.baseInvoiceRender().every(R.prop('created'))\n\t\t\t\t\t// && identical(ctrl.model.baseInvoiceRender(), ctrl.model.invoiceRender())\n\t\t\t\t\t\t? m('button.btn', {\n\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t\t,title: \"Project Name, Location and Material Store must be entered before saving\"\n\t\t\t\t\t\t}, 'Save')\n\t\t\t\t\t\t: elements.action(\n\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t, ctrl.intent.sendProjects\n\t\t\t\t\t\t\t, ctrl.model.savingProp\n\t\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\tdiscardProjectButton(ctrl)\n\t\t\t\t\t,saveProjectButton(ctrl)\n\t\t\t\t]\n\t\t\t)\n\t\t\t: elements.list([\n\t\t\t\telements.back(\n\t\t\t\t\t\"Return to the main list without saving\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.form().project = {}\n\t\t\t\t\t\tctrl.model.pe_vm({})\n\t\t\t\t\t\tctrl.model.checkMultiple().data = []\n\t\t\t\t\t\tctrl.model.discipline_vm({})\n\t\t\t\t\t\tctrl.model.viewType(ListProject)\n\t\t\t\t\t\tctrl.model.projectExtras([])\n\t\t\t\t\t\tctrl.model.contractPatchIndex({})\n\t\t\t\t\t\tctrl.model.checkMultipleProjectExtras().data = []\n\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\tctrl.model.checkMultipleProjects([])\n\t\t\t\t\t\tctrl.model.onProjectList(true)\n\t\t\t\t\t\tctrl.model.deleteInvoiceItemsHash({})\n\t\t\t\t\t\tctrl.model.deleteInvoiceHash({})\n\t\t\t\t\t\tctrl.model.data.loadchart({})\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t])\n\n\t\t,m('hr')\n\n\t\t,elements.splitPane(\n\t\t\t[\n\n\n\t\t\t\tctrl.model.data.advancedView()\n\t\t\t\t? null\n\t\t\t\t: ctrl.model.renderChart({chartonly: true})\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.span', 'Project Name '\n\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t+css`\n\t\t\t\t\t\t\t\twidth: 21em\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,elements.textInput(\n\t\t\t\t\t\t\t\tctrl.model.form().project.project_name\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm(''\n\t\t\t\t\t\t,m('label.control-label', 'Project Notes ')\n\t\t\t\t\t\t,m('',\n\t\t\t\t\t\t\tctrl.model.metaDataLoading() || ctrl.model.loading()\n\t\t\t\t\t\t\t? ctrl.model.form().project.project_completion_comments()\n\t\t\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t\t\t() => ' ' + ( ctrl.model.form().project.project_completion_comments() || '' )\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\t\t\tctrl.model.form().project.project_completion_comments\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tplaceholder: \"Any types of communications or status\"\n\t\t\t\t\t\t\t\t\t\t\t, disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t, style: {\n\t\t\t\t\t\t\t\t\t\t\t\t\"padding-block-start\": \"0.5em\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname:'Feasible Start'\n\t\t\t\t\t\t\t,title: \"First date work is able to commence\"\n\t\t\t\t\t\t\t,prop: ctrl.model.form().project.project_start_date\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tname:'Feasible End'\n\t\t\t\t\t\t\t,title: \"Cut off date for completing all disciplines\"\n\t\t\t\t\t\t\t,prop: ctrl.model.form().project.project_dead_date\n\t\t\t\t\t\t}\n\t\t\t\t\t].map(\n\t\t\t\t\t\tt =>\n\t\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t\t,t.name\n\t\t\t\t\t\t\t,elements.dateInput(\n\t\t\t\t\t\t\t\t\tt.prop\n\t\t\t\t\t\t\t\t\t,{ disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t\t, title: t.title\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t? elements.list(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname:'Handover'\n\t\t\t\t\t\t\t,title: \"Date this project is to be released to the client\"\n\t\t\t\t\t\t\t,prop: ctrl.model.form().project.project_commissioning_date\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tname:'Liability Release'\n\t\t\t\t\t\t\t,title: \"Date the client owns build liability\"\n\t\t\t\t\t\t\t,prop: ctrl.model.form().project.project_final_acceptance\n\t\t\t\t\t\t}\n\t\t\t\t\t].map(\n\t\t\t\t\t\tt =>\n\t\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t\t,t.name\n\t\t\t\t\t\t,elements.dateInput(\n\t\t\t\t\t\t\t\tt.prop\n\t\t\t\t\t\t\t\t,{ disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t, title: t.title\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm('label.control-label', 'Contract - '\n\t\t\t\t\t\t\t\t,m('a', {\n\t\t\t\t\t\t\t\t\t\thref:\n\t\t\t\t\t\t\t\t\t\t\t'/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t\t\t+ ctrl.model.form().project.contract_id()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t+ ctrl.model.data.forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t+ ctrl.model.data.forecastdateB()\n\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t, title: \"Go to linked contract\"\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\t!exposer(ctrl.model.form().project.contract_id)\n\t\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.editContractPermissions()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, ctrl.model.form().project.contract_name || 'Disconnected Ledgers'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm('label.control-label', 'Contract - '\n\t\t\t\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\t\t\t\tctrl.model.data.contracts\n\t\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\t\t\t\t\tconst cobj =\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.contracts()\n\t\t\t\t\t\t\t\t\t\t\t\t.find((u) => u.contract_id == v.contract_id )\n\t\t\t\t\t\t\t\t\t\t\t\t|| { contract_id: m.prop( uuid.v4() ), contract_name: v}\n\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.form().project.contract_id( cobj.contract_id )\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.form().project.contract_name = cobj.contract_name\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t\t\t\t\t? v.contract_name\n\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.form().project.contract_name\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,'contract_name'\n\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t\t|| ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t|| ctrl.model.loading()\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t? elements.list([\n\t\t\t\t\tctrl.model.metaDataLoading() || ctrl.model.loading()\n\t\t\t\t\t? m(\n\t\t\t\t\t\t'label.control-label'\n\t\t\t\t\t\t,'Location - '\n\t\t\t\t\t\t, ctrl.model.form().project.project_suburb()\n\t\t\t\t\t)\n\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t() => m(\n\t\t\t\t\t\t\t'label.control-label'\n\t\t\t\t\t\t\t,'Location - '\n\t\t\t\t\t\t\t, ctrl.model.form().project.project_suburb()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm('label.control-label', 'Location'\n\t\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t\tautocomplete.Main\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tlist: ctrl.model.placeLong\n\t\t\t\t\t\t\t\t\t\t,field: null\n\t\t\t\t\t\t\t\t\t\t,onselect: ctrl.model.form().project.project_suburb\n\t\t\t\t\t\t\t\t\t\t,oninput: ctrl.model.suburbsInput\n\t\t\t\t\t\t\t\t\t\t,placeholder: \"Suburb of choice\"\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t,title: \"The location that will be used to determine most efficient resource ratings during schedule procedures\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: ''\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t? elements.list([\n\t\t\t\t\tctrl.model.metaDataLoading() || ctrl.model.loading()\n\t\t\t\t\t? m(\n\t\t\t\t\t\t'label.control-label'\n\t\t\t\t\t\t,'Material Store - '\n\t\t\t\t\t\t,ctrl.model.form().project.project_material_suburb()\n\t\t\t\t\t)\n\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t() => m(\n\t\t\t\t\t\t\t'label.control-label'\n\t\t\t\t\t\t\t,'Material Store - '\n\t\t\t\t\t\t\t,ctrl.model.form().project.project_material_suburb()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm('label.control-label', 'Material Store '\n\t\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t\tautocomplete.Main\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tlist: ctrl.model.placeLong\n\t\t\t\t\t\t\t\t\t\t,field: null\n\t\t\t\t\t\t\t\t\t\t,onselect: ctrl.model.form().project.project_material_suburb\n\t\t\t\t\t\t\t\t\t\t,oninput: ctrl.model.suburbsInput\n\t\t\t\t\t\t\t\t\t\t,placeholder: \"Suburb of choice\"\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t,title: \"The location that will accept material deliveries\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t// ea to finalise upgrade later, requires new interfacing with schema saves and scheduler pull\n\t\t\t\t\t\t\t\t// ,m(autocomplete.Main, {\n\t\t\t\t\t\t\t\t// \tfield: 'title'\n\t\t\t\t\t\t\t\t// \t,throttleSearch: 500\n\t\t\t\t\t\t\t\t// \t,inputClassName: 'form-control'\n\t\t\t\t\t\t\t\t// \t,initialValue: ctrl.model.form().project.project_material_suburb()\n\t\t\t\t\t\t\t\t// \t,attrs: {\n\t\t\t\t\t\t\t\t// \t\tname: 'project_material_suburb'\n\t\t\t\t\t\t\t\t// \t\t,value: ctrl.model.form().project.project_material_suburb()\n\t\t\t\t\t\t\t\t// \t\t,required: true\n\t\t\t\t\t\t\t\t// \t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t// \t\t,title: \"The location that will accept material deliveries\"\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// \t,oninput: x => ctrl.model.form().project.project_material_suburb(x)\n\t\t\t\t\t\t\t\t// \t,loading: ctrl.model.addressSearchLoading\n\t\t\t\t\t\t\t\t// \t,manuelConfig: {\n\t\t\t\t\t\t\t\t// \t\tfilter: () => true\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// \t,search(value){\n\t\t\t\t\t\t\t\t// \t\tif(value){\n\t\t\t\t\t\t\t\t// \t\t\treturn ctrl.model.data.api.suburbs.search(value)\n\t\t\t\t\t\t\t\t// \t\t} else {\n\t\t\t\t\t\t\t\t// \t\t\treturn []\n\t\t\t\t\t\t\t\t// \t\t}\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// \t,onselect(value){\n\t\t\t\t\t\t\t\t// \t\tctrl.model.form().project.project_material_suburb(value.title)\n\t\t\t\t\t\t\t\t\t\t// // collect data as we use it for later features\n\t\t\t\t\t\t\t\t\t\t// data.api.suburbs.here.patch(value)\n\t\t\t\t\t\t\t\t\t\t// // eslint-disable-next-line no-undef\n\t\t\t\t\t\t\t\t\t\t// .catch( e => console.error('Could not save here data ', e))\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: ''\n\n\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', 'Work Zone'\n\t\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t\t['Rural', 'Suburban', 'CBD']\n\t\t\t\t\t\t, ctrl.model.form().project.project_site_type\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t, title: \"Area designation for resource comparisons\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', 'Priority '\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Project Priority'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: ctrl.model.form().project.project_priority\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 1\n\t\t\t\t\t\t\t\t\t, disabled: !ctrl.model.editPermissions() || ctrl.model.metaDataLoading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\t\t\t,ctrl.model.projectCompleted({p: ctrl.model.form().project, sendp: false, ctrl})\n\n\t\t\t\t,m(''+css`\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t`\n\t\t\t\t\t,quoteModal({type: 'gen', ctrl})\n\t\t\t\t)\n\t\t\t]\n\t\t\t,[\n\n\t\t\t\tctrl.model.data.auth_permissions().auth_permissions_write\n\t\t\t\t== Math.pow(2, 31) -1 || process.env.DEV\n\t\t\t\t? m(OAuthConnector, {\n\t\t\t\t\tdata: ctrl.model.data\n\t\t\t\t\t, attrs: { key: ctrl.model.data.initiateContractFetch().organization_id }\n\t\t\t\t\t, oauths: ctrl.model.oauths\n\t\t\t\t\t, saving: ctrl.model.savingProp\n\t\t\t\t})\n\t\t\t\t: null\n\n\t\t\t\t,elements.list(\n\t\t\t\t\tR.intersperse(\n\t\t\t\t\t\t' | '\n\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t{s:'Budget'\n\t\t\t\t\t\t\t, v:\n\t\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t\t\t[ctrl.model.form().project.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.budget\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{s:'Accrued Profits'\n\t\t\t\t\t\t\t, v:\n\t\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()[ctrl.model.form().project.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t? ctrl.model.data.coalatedSelectedVersion()[ctrl.model.form().project.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[ctrl.model.form().project.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{s:'Received Profits'\n\t\t\t\t\t\t\t, v:\n\t\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()[ctrl.model.form().project.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t? ctrl.model.data.coalatedSelectedVersion()[ctrl.model.form().project.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{s:'Forecasted Profits'\n\t\t\t\t\t\t\t, v:\n\t\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.readContractPermissions()\n\t\t\t\t\t\t\t\t\t\t&& ctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t\t\t[ctrl.model.form().project.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t|| {}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.forecastedProfits\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{s:'Chart'\n\t\t\t\t\t\t\t, v: ctrl.model.renderChart({refresheronly: true})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t].map((i) =>\n\t\t\t\t\t\t\tm('p.tc.w4'\n\t\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t\ti.s\n\t\t\t\t\t\t\t\t\t, m('hr')\n\t\t\t\t\t\t\t\t\t, i.v\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,ctrl.model.data.advancedView()\n\t\t\t\t\t? ctrl.model.renderChart({chartonly: true})\n\t\t\t\t\t: null\n\n\t\t\t\t,ctrl.model.SaveDisabled()\n\n\t\t\t\t,m('br')\n\t\t\t\t,elements.list([\n\t\t\t\t\tctrl.model.editPermissions()\n\t\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle:\n\t\t\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t\t\t, height: '2.9em'\n\t\t\t\t\t\t\t\t, width: '5em'\n\t\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t\t, textDecoration: 'underline'\n\t\t\t\t\t\t\t\t// , fontSize: '0.9em'\n\t\t\t\t\t\t\t\t// , padding: '0.2em 0.5em'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onclick: () =>\n\t\t\t\t\t\t\t\tctrl.model.form().project.project_contacts =\n\t\t\t\t\t\t\t\t\tctrl.model.form().project.project_contacts\n\t\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t{project_contacts_id: m.prop('')\n\t\t\t\t\t\t\t\t\t\t\t,project_contacts_type: m.prop('')\n\t\t\t\t\t\t\t\t\t\t\t,project_contacts_name: m.prop('')\n\t\t\t\t\t\t\t\t\t\t\t,project_contacts_phone: m.prop('')\n\t\t\t\t\t\t\t\t\t\t\t,project_contacts_email: m.prop('')\n\t\t\t\t\t\t\t\t\t\t\t,project_id: m.prop(ctrl.model.form().project.project_id())\n\t\t\t\t\t\t\t\t\t\t\t,user_id: m.prop(null)\n\t\t\t\t\t\t\t\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Add'\n\t\t\t\t\t)\n\t\t\t\t\t: ''\n\t\t\t\t\t,m('label.dib.control-label', 'Contacts')\n\t\t\t\t])\n\t\t\t\t,[\n\t\t\t\t\tctrl.model.form().project.project_contacts\n\t\t\t\t\t.map((pd) =>\n\t\t\t\t\t\telements.list(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t\t,'type'\n\t\t\t\t\t\t\t,'phone'\n\t\t\t\t\t\t\t,'email'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.map((ex) =>\n\t\t\t\t\t\t\t\t!ex && !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: !ex\n\t\t\t\t\t\t\t\t? elements.xRemoval({onclick: () => ctrl.model.removeContactForm(pd) })\n\t\t\t\t\t\t\t\t: ex != 'user_id'\n\t\t\t\t\t\t\t\t? m(ex == 'type' ? 'label.control-label.p.tc.w5' : 'p.tc.w5',\n\t\t\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t? pd['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t: ex == 'name'\n\t\t\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t\t\t() => pd['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.projectContactOptions\n\t\t\t\t\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t// const pd = pd\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.projectContactOptions()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((pc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpc['project_contacts_name']() + ' - ' + pc['project_contacts_type']()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== v\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tv || v == ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? pd['project_contacts_' +ex](\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: v\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ( ReturnedAutocompleteObj ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpd['project_contacts_name'](ReturnedAutocompleteObj.project_contacts_name())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpd['project_contacts_type'](ReturnedAutocompleteObj.project_contacts_type())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpd['project_contacts_phone'](ReturnedAutocompleteObj.project_contacts_phone())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpd['project_contacts_email'](ReturnedAutocompleteObj.project_contacts_email())\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn ReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: pd['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,'nameRole'\n\t\t\t\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: `Select the contact name`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,placeholder: ex[0].toUpperCase() + ex.slice(1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t// ,style: { height: '3em'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,key: pd.key\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\t\t\t\t\t\tpd['project_contacts_' +ex]\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder: ex[0].toUpperCase() + ex.slice(1)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: m('p.tc.w4',\n\t\t\t\t\t\t\t\t\t!ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t? (ctrl.model.users().find((u) =>\n\t\t\t\t\t\t\t\t\t\tu.user_id() == pd[ex]())\n\t\t\t\t\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t\t\t\t\t.usersFullName\n\t\t\t\t\t\t\t\t\t: autocomplete.strict(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.users\n\t\t\t\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst userObj =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tu.user_id() == v.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tpd[ex]( userObj.user_id() )\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t\t\t\t\t\t\t? v.usersFullName\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== pd[ex]()\n\t\t\t\t\t\t\t\t\t\t\t\t\t).usersFullName\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,'usersFullName'\n\t\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t]\n\n\t\t\t\t,addInvoice(ctrl)\n\n\t\t\t\t,elements.list([\n\t\t\t\t\teditProjectDocuments(\n\t\t\t\t\t\tctrl.model.form().project.project_documents,\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tctrl.model.editPermissions()\n\t\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t\t{ style:\n\t\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t\t, height: '2.9em'\n\t\t\t\t\t\t\t, width: '5em'\n\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t, textDecoration: 'underline'\n\t\t\t\t\t\t\t// , fontSize: '0.9em'\n\t\t\t\t\t\t\t// , padding: '0.2em 0.5em'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\treturn !ctrl.model.showUpload() ? ctrl.model.showUpload(true) : null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled: ctrl.model.showUpload()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Add'\n\t\t\t\t\t)\n\t\t\t\t\t: ''\n\t\t\t\t\t,m('label.dib.control-label', 'Project Files')\n\t\t\t\t\t,ctrl.model.showUpload()\n\t\t\t\t\t\t? m('a'\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: `Hide file uploads`\n\t\t\t\t\t\t\t\t,onclick: () => ctrl.model.showUpload(false)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, ' Hide'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t])\n\n\t\t\t\t,ctrl.model.showUpload()\n\t\t\t\t\t? m(HarthUppy, {\n\t\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({uploadbox: 'projectfiles'})\n\t\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t\t\t, download: {\n\t\t\t\t\t\t\treference: ctrl.model.vm()\n\t\t\t\t\t\t\t,request: ctrl.model.zipRequest\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t: m(HarthUppy, {\n\t\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({uploadbox: 'projectfiles'})\n\t\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t\t\t, listOnly: true\n\t\t\t\t\t\t, download: {\n\t\t\t\t\t\t\treference: ctrl.model.vm()\n\t\t\t\t\t\t\t,request: ctrl.model.zipRequest\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t,m('br')\n\t\t\t\t,m('br')\n\t\t\t\t,ctrl.model.projectSummary().length > 0\n\t\t\t\t\t? elements.details(\n\t\t\t\t\t\t'Work Notes '\n\t\t\t\t\t\t, elements.nonStrikeList(\n\t\t\t\t\t\t\tctrl.model.projectSummary()\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\tlabel: label\n\t\t\t\t\t\t\t\t\t,action: () => {}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, ctrl.model.projectSummary().length\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { disabled: true }\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t,ctrl.model.check_dnames(false, Object.keys(ctrl.model.errors()))\n\t\t\t]\n\t\t\t,{css:\n\t\t\t\t`display: grid;\n\t\t\t\tgap: 1em;`\n\t\t\t}\n\t\t)\n\t\t,m('br')\n\t\t,m('hr')\n\t\t,m('br')\n\n\t\t,ctrl.model.activeTab() != 'Reconciliation'\n\t\t&& ctrl.model.activeTab() != 'Materials'\n\t\t? m('h4'\n\t\t\t,elements.list([\n\t\t\t\tctrl.model.activeTab() == 'Tasks'\n\t\t\t\t? 'Project Tasks'\n\t\t\t\t: 'Project Disciplines'\n\t\t\t\t,m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\tpadding: 0.7em 1em;\n\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\tctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t\t? ctrl.model.addNewTask\n\t\t\t\t\t\t\t: ctrl.model.addNewDiscipline\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\tctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: !!ctrl.model.check_dnames(true)\n\t\t\t\t\t}\n\t\t\t\t\t, ctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t? '+ Task '\n\t\t\t\t\t: '+ Discipline'\n\t\t\t\t)\n\t\t\t])\n\t\t)\n\t\t: m('h4')\n\n\t\t,ctrl.model.metaDataLoading()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: [\n\t\t\t\tm('br')\n\t\t\t\t, ctrl.model.activeTab() == 'Reconciliation'\n\t\t\t\t|| ctrl.model.activeTab() == 'Materials'\n\t\t\t\t|| !ctrl.model.data.advancedView()\n\t\t\t\t? null\n\t\t\t\t: ctrl.model.activeTab() != 'Tasks'\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Milestones At Risk')\n\t\t\t\t\t\t,ctrl.model.form().project.disciplines.filter((d) =>\n\t\t\t\t\t\t\td.discipline_end_date()\n\t\t\t\t\t\t\t>= ( ctrl.model.disciplineLastDateIndex()[d.discipline_id()] || Infinity )\n\t\t\t\t\t\t).length + ' of ' + ctrl.model.form().project.disciplines.length\n\t\t\t\t\t])\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Task Reports')\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t'assigned'\n\t\t\t\t\t\t\t,'completed'\n\t\t\t\t\t\t\t,'verified'\n\t\t\t\t\t\t\t,'invalid'\n\t\t\t\t\t\t].map((prop) =>\n\t\t\t\t\t\t\tprop.charAt(0).toUpperCase() + prop.slice(1)\n\t\t\t\t\t\t\t+ ': '\n\t\t\t\t\t\t\t+ ctrl.model.projectExtrasStat()['project_extras_date_' + prop]\n\t\t\t\t\t\t\t+ ' '\n\t\t\t\t\t\t).concat('Total: ' + ctrl.model.masterPELIST().length)\n\t\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tctrl.model.activeTab() == 'Reconciliation'\n\t\t\t\t\t|| ctrl.model.activeTab() == 'Materials'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: ctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t? ctrl.model.getfilters(null, \"Tasks\")\n\t\t\t\t\t\t: ctrl.model.getfilters(null, \"Discipline\")\n\t\t\t\t\t,ctrl.model.activeTab() == 'Reconciliation'\n\t\t\t\t\t|| ctrl.model.activeTab() == 'Materials'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: ctrl.model.editAllButton()\n\t\t\t\t])\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,ctrl.model.editPermissions()\n\t\t\t\t\t? elements.tabset(\n\t\t\t\t\t\tctrl.model.disciplineTabEditArray.filter((dt) =>\n\t\t\t\t\t\t\tctrl.model.data.advancedView()\n\t\t\t\t\t\t\t|| dt == 'Disciplines' || dt == 'Tasks' || dt == 'Materials'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, ctrl.model.activeTab\n\t\t\t\t\t)\n\t\t\t\t\t: elements.tabset(\n\t\t\t\t\t\tctrl.model.disciplineTabReadArray.filter((dt) =>\n\t\t\t\t\t\t\tctrl.model.data.advancedView()\n\t\t\t\t\t\t\t|| dt == 'Disciplines' || dt == 'Tasks' || dt == 'Materials'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, ctrl.model.activeTab\n\t\t\t\t\t)\n\n\t\t\t\t,ctrl.model.activeTab() == 'Disciplines'\n\t\t\t\t\t? ResourceTab(ctrl)\n\t\t\t\t\t: ctrl.model.activeTab() == 'Tasks'\n\t\t\t\t\t\t? ExtraDetailTab(ctrl)\n\t\t\t\t\t\t: ctrl.model.activeTab() == 'Reconciliation'\n\t\t\t\t\t\t? ReconTab(ctrl)\n\t\t\t\t\t\t: ctrl.model.activeTab() == 'Materials'\n\t\t\t\t\t\t? MaterialsTab(ctrl)\n\t\t\t\t\t\t: ContractualTab(ctrl)\n\t\t\t]\n\t])\n}\n\nexport default Main","/* globals setTimeout */\n\n\nimport m from 'bacta'\nimport css from 'bss'\nimport autocomplete from './autocomplete'\nimport scrollableTable from '../components/scrollableTable'\nimport * as elements from '../components/elements'\nimport NumberInput from '../components/number'\nimport Permissions from '../models/permissions'\nimport * as uuid from 'uuid'\nimport moment from 'moment'\nimport Pencil from '../components/pencil'\nimport HarthUppy from '../components/harth-uppy'\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport { money as makeMoney } from '../utils/regExes'\nimport Responsive from '../components/responsive'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\n\nconst checkprop = (a, b, o) =>\n\to[a] && b && o[a][b]\n\t\t? typeof o[a][b] == 'function'\n\t\t\t? o[a][b]()\n\t\t\t: o[a][b]\n\t\t: typeof o[a] == 'function'\n\t\t\t? o[a]()\n\t\t\t: o[a]\n\nimport {identical} from '../utils/harth-identical'\nimport * as R from 'ramda'\nimport { prop } from '../../../stream'\n\nimport Promise from 'bluebird'\n\nconst truncate =\n css`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `\n\nconst hideScrollbars =\n css`\n -ms-overflow-style: none;\n scrollbar-width: none;\n `\n .$nest('::-webkit-scrollbar', `\n display: none;\n `)\n\nfunction MiniTable(){\n\n\tfunction view({ attrs: { rows, format=x=>x }}){\n\n\t\tconst headers = rows.slice(-1).flatMap( x => Object.keys(x.fields) )\n\n\t\tconst values = rows.map(\n\t\t\tx => {\n\t\t\t\tconst fields = Object.fromEntries(\n\t\t\t\t\tObject.entries(x.fields).map(\n\t\t\t\t\t\t([key, value]) =>\n\t\t\t\t\t\t\t[key, format(value, key)]\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\treturn { key: x.key, fields }\n\t\t\t}\n\t\t)\n\n\t\tif(headers.length == 0) {return null}\n\n\t\treturn m('.overview'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\t--col: 3em;\n\t\t\t`\n\t\t\t, m('.headers'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: repeat(4, var(--col));\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\ttext-align: left;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t`\n\t\t\t\t,headers.map(\n\t\t\t\t\tx => m('.header'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, x\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t, m('.values'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\tmax-height: 20em;\n\t\t\t\t\tgap: 0.5em;\n\t\t\t\t`\n\t\t\t\t+ hideScrollbars\n\t\t\t\t, values.map(\n\t\t\t\t\tx =>\n\t\t\t\t\t\tm('.hth-row'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-columns: repeat(4, var(--col));\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\ttext-align: left;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t{ key: x.key }\n\t\t\t\t\t\t\t, headers.map(\n\t\t\t\t\t\t\t\tkey =>\n\t\t\t\t\t\t\t\t\tm('.cell'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tmax-width: calc( var(--col) * 1.8*1);\n\t\t\t\t\t\t\t\t\t\t\twidth: calc( var(--col) * 1.8*1);\n\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t+ truncate\n\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\t{ title: x.fields[key]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, x.fields[key]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t}\n\n\treturn { view }\n}\n\nfunction Main({ attrs: {data} }){\n\n\tconst errors = data.scoped({})\n\tconst deleteFlowStateProp = m.prop(false)\n\tconst deleteOrganizationDisciplineStateProp = m.prop(false)\n\tlet deleteObjective = []\n\tlet deleteDependent = []\n\tconst loading = m.prop(true)\n\n\tfunction getflow_dependent_activity (flow){\n\t\tlet name = vm().selected.flow && vm().selected.flow.flow_id\n\t\tlet activated = name && name() == flow.flow_id()\n\t\tlet showing = vm().dependant()\n\t\treturn activated && showing\n\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tvm().dependant(false)\n\t\t\t\t}\n\t\t\t},\"Hide Dependant Activities\")\n\t\t\t: m(\"button.btn.\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\tvm().dependant(true)\n\t\t\t\t}\n\t\t\t},\"Show Dependant Activities\")\n\n\t}\n\n\tfunction getflow_projects(flow){\n\t\tconst name = vm().selected.flow && vm().selected.flow.flow_id\n\t\tconst activated = name && name() == flow.flow_id()\n\t\tconst showing = vm().project()\n\t\treturn activated && showing\n\t\t\t? elements.list([\n\t\t\t\tappliedProjects()[flow.flow_id()]['projectString']\n\t\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled: false\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tvm().project(false)\n\t\t\t\t\t}\n\t\t\t\t},\"Hide Relevant Projects\")\n\t\t\t])\n\t\t\t: m(\"button.btn.\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\tvm().project(true)\n\t\t\t\t}\n\t\t\t},\"Show Relevant Projects\")\n\t}\n\n\tfunction getflow_primary_activity(flow){\n\t\tlet name = vm().selected.flow && vm().selected.flow.flow_id\n\t\tlet activated = name && name() == flow.flow_id()\n\t\tlet showing = vm().primary()\n\t\treturn activated && showing\n\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tvm().primary(false)\n\t\t\t\t}\n\t\t\t},\"Hide Objective Activities\")\n\t\t\t: m(\"button.btn.\", {\n\t\t\t\tdisabled: false\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\tvm().primary(true)\n\t\t\t\t}\n\t\t\t},\"Show Objective Activities\")\n\t}\n\n\tfunction deleteFlow(){\n\t\tlet flow_id = vm().selected.flow.flow_id()\n\t\treturn Promise.resolve(\n\t\t\tflow_id && data.api.flows.remove.one(flow_id)\n\t\t)\n\t\t.then(function(){\n\t\t\tlet index = R.findIndex(function(chr) { return chr.flow_id() == vm().selected.flow.flow_id()}, flows())\n\t\t\tflows().splice(index, 1)\n\t\t\tvm().selected.flow = null\n\t\t})\n\t\t.then(m.redraw)\n\t}\n\n\tfunction deleteOrganizationDisciplines(){\n\t\tconst ldlist = R.pipe(R.map(R.prop('key')))(checkMultiple())\n\t\tconst dlist =\n\t\t\tR.pipe(R.map(R.pipe(R.prop('organizations_disciplines_id'), R.call)),R.filter(R.identity))\n\t\t\t(checkMultiple())\n\t\treturn Promise.resolve(\n\t\t\tdlist.length\n\t\t\t? data.api.organizations_disciplines.remove.many(dlist)\n\t\t\t: []\n\t\t)\n\t\t.then(function(){\n\n\t\t\tcheckMultiple([])\n\n\t\t\tldlist.map((d) =>\n\t\t\t\torganizations_disciplines()\n\t\t\t\t.splice(\n\t\t\t\t\tR.findIndex(R.propEq('key', d), organizations_disciplines())\n\t\t\t\t\t,1\n\t\t\t\t)\n\t\t\t)\n\n\t\t\tdlist.map((d) =>\n\t\t\t\tbaseOrganizationsDisciplines()\n\t\t\t\t.splice(\n\t\t\t\t\tR.findIndex(R.propEq('organizations_disciplines_id', d), baseOrganizationsDisciplines())\n\t\t\t\t\t,1\n\t\t\t\t)\n\t\t\t)\n\n\t\t\treturn loading()\n\t\t})\n\t\t.then(m.redraw)\n\t}\n\n\tfunction deleteFlowPriDep(FlowRelation, makeAPICalls){\n\n\t\tif (FlowRelation){\n\t\t\tFlowRelation.flows_dependent_activity_id\n\t\t\t\t? deleteDependent.push(FlowRelation.flows_dependent_activity_id)\n\t\t\t\t: deleteObjective.push(FlowRelation.flows_primary_activity_id)\n\t\t}\n\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteObjective.map((t) => data.api.flows_primary_activities.remove.one(t))\n\t\t\t\t,deleteDependent.map((t) => data.api.flows_dependent_activities.remove.one(t))\n\t\t\t)\n\t\t\t: null\n\t}\n\n\n\tfunction fetchFlows(){\n\t\tif(schedule_id() != null){\n\t\t\treturn data.fetchFlowsByScheduleId(schedule_id())\n\t\t\t\t.then(flows)\n\t\t\t\t.then(m.redraw)\n\t\t} else {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew Error('A schedule_id is required to fetch flows')\n\t\t\t)\n\t\t}\n\t}\n\n\tfunction fetchOrganizationsDisciplines(){\n\t\treturn data.fetchOrganizationsDisciplines({})\n\t\t\t.then(baseOrganizationsDisciplines)\n\t\t\t.then(function(){\n\t\t\t\tcheckMultiple([])\n\t\t\t\tdeleteOrganizationDisciplineStateProp(false)\n\t\t\t\treturn deleteOrganizationDisciplineStateProp()\n\t\t\t})\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction sendOrganizationsDisciplines(){\n\n\t\tconst updatedogds = organizations_disciplines().filter(R.prop('created'))\n\t\tconst newcdrs =\n\t\t\tR.unnest(\n\t\t\t\tupdatedogds.map((d) =>\n\t\t\t\t\td.applytoteams.filter((t) =>\n\t\t\t\t\t\t!t.crews_discipline_rates.find((cdr) =>\n\t\t\t\t\t\t\tcdr.organizations_disciplines_id()\n\t\t\t\t\t\t\t== d.organizations_disciplines_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.map((t) => ({\n\t\t\t\t\t\tcrew_id: t.crew_id()\n\t\t\t\t\t\t,contractor_id: t.contractor_id()\n\t\t\t\t\t\t,crew_name: t.crew_name()\n\t\t\t\t\t\t,crews_discipline_rates_feedback_rate: 0\n\t\t\t\t\t\t,organizations_disciplines_id: d.organizations_disciplines_id()\n\t\t\t\t\t\t,crews_discipline_rates_uom: d.organizations_disciplines_uom()\n\t\t\t\t\t\t,crews_discipline_rates_rate: d.organizations_disciplines_nominal_rate()\n\t\t\t\t\t\t,crews_discipline_rates_name: d.organizations_disciplines_name()\n\t\t\t\t\t\t,crews_discipline_rates_description: d.organizations_disciplines_description()\n\t\t\t\t\t\t,createcontracts: true\n\t\t\t\t\t}))\n\t\t\t\t)\n\t\t\t)\n\n\n\t\t// const newcontractors =\n\t\t// \tR.uniqBy(R.prop('contractor_id'), newcdrs)\n\t\t// \t.map((c) => ({\n\t\t// \t\tcontractor_id: c.contractor_id\n\t\t// \t\t,crews:\n\t\t// \t\t\tR.uniqBy(R.prop('crew_id'), newcdrs)\n\t\t// \t\t\t.map((t) => ({\n\t\t// \t\t\t\tcrew_id: t.crew_id\n\t\t// \t\t\t\t,crews_discipline_rates: newcdrs.filter((cdr) => cdr.crew_id == t.crew_id)\n\t\t// \t\t\t}))\n\t\t// \t}))\n\n\t\treturn data.api.organizations_disciplines.patch(updatedogds)\n\t\t\t.then(data.api.crews_discipline_rates.patch.many(newcdrs))\n\t\t\t// .then(data.api.contractors.patch.many(newcontractors))\n\t\t\t.then(fetchOrganizationsDisciplines)\n\t\t\t.then(deleteToolPresets)\n\t\t\t.then(sendToolPresets)\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction sendToolPresets(){\n\t\treturn data.api.tools.presets.patch( newtoolPresets() )\n\t\t.then(() => {\n\t\t\tnewtoolPresets([])\n\t\t\ttoolPresetDeletions([])\n\t\t})\n\t}\n\n\tfunction deleteToolPresets(){\n\t\treturn Promise.all(\n\t\t\ttoolPresetDeletions().map((tp) =>\n\t\t\t\tdata.api.tools.presets.remove(tp.tools_presets_id)\n\t\t\t)\n\t\t)\n\t}\n\n\tfunction sendFlows(){\n\t\tform().flow.flow_delay_type(\n\t\t\tform().flow.flow_dependency_relationship()\n\t\t\t\t== \"Risk Ratio\"\n\t\t\t\t\t? \"Safety\"\n\t\t\t\t\t: \"Delay\"\n\t\t)\n\n\t\tconst flow = form().flow\n\n\t\tif( flow != null && !identical(vm().selected.flow, form().flow) ){\n\t\t\treturn Promise.all([\n\t\t\t\tdeleteFlowPriDep(null, true)\n\t\t\t])\n\t\t\t.then(function(){\n\t\t\t\tdeleteObjective = []\n\t\t\t\tdeleteDependent = []\n\t\t\t\treturn data.api.flows.patch([flow])\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\treturn fetchFlows()\n\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\tlet updated_res = R.find(\n\t\t\t\t\t\t\t\t(f) => f.flow_name() == form().flow.flow_name()\n\t\t\t\t\t\t\t\t, flows()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tvm().selected.flow = updated_res\n\t\t\t\t\t\t\tcloningFlow(false)\n\t\t\t\t\t\t\tedit(true)\n\t\t\t\t\t\t\treturn getAvailableOptions()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.then(m.redraw)\n\t\t\t})\n\t\t} else {\n\t\t\treturn Promise.resolve([])\n\t\t\t\t.then(m.redraw)\n\t\t}\n\t}\n\n\tfunction fetchProjects(){\n\t\treturn !schedule_id()\n\t\t\t? Promise.reject(\n\t\t\t\tnew Error('A schedule_id is required to fetchProjects')\n\t\t\t)\n\t\t\t: data.fetchProjectsBySchedule({\n\t\t\t\tschedule_id: schedule_id()\n\t\t\t\t, completedProjects: completedProjects()\n\t\t\t\t, depth: 2\n\t\t\t\t, props: {\n\t\t\t\t\tprojects:[\n\t\t\t\t\t\t'project_id'\n\t\t\t\t\t\t,'project_name'\n\t\t\t\t\t\t,'project_start_date'\n\t\t\t\t\t\t,'project_dead_date'\n\t\t\t\t\t\t,'project_commissioning_date'\n\t\t\t\t\t]\n\t\t\t\t\t,disciplines:[\n\t\t\t\t\t\t'organizations_disciplines_id'\n\t\t\t\t\t\t,'discipline_name'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t})\n\t\t\t\t.then( projects )\n\t\t\t\t.then( m.redraw )\n\t}\n\n\tfunction getfilters(button, marker){\n\t\tlet datainput = marker == \"Flows\"\n\t\t ? filterFunction.FlowsFilters\n\t\t : filterFunction.OrganizationDisciplineFilters\n\n\t\tif (datainput == null){\n\t\t\tfilterFunction.FlowsFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.flows\n\t\t\t\t,disabled: () => flows().length == 0\n\t\t\t}\n\n\t\t\tfilterFunction.OrganizationDisciplineFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.organizations_disciplines\n\t\t\t\t,disabled: () => organizations_disciplines().length == 0\n\t\t\t}\n\n\t\t\tdatainput = marker == \"Flow\"\n\t\t\t\t? filterFunction.FlowsFilters\n\t\t\t\t: filterFunction.OrganizationDisciplineFilters\n\t\t}\n\n\t\tlet gotfilters =\n\t\t\tdatainput == null\n\t\t\t? null\n\t\t\t: datainput.operationalFilters(\n\t\t\t\tfilterView(\n\t\t\t\t\tdatainput.template\n\t\t\t\t\t, datainput.filters()\n\t\t\t\t\t, datainput.changeNames\n\t\t\t\t\t, datainput.uniqueArrays\n\t\t\t\t\t, datainput.disabled\n\t\t\t\t\t, marker\n\t\t\t\t\t, data.scoped\n\t\t\t\t)\n\t\t\t)\n\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters.generatedElements\n\t}\n\n\tfunction SaveDisabled(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.flow_name()\n\n\t\t\t,flows().filter((r) =>\n\t\t\t\tr.flow_id() != form().flow.flow_id()\n\t\t\t).concat(form().flow)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.flow_name() ? `Workflow Designation must not be empty ` : null\n\t\t\t,(d) =>\tcount[d.flow_name()] > 1 ? `Workflow Designations must not be duplicated` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t,[form().flow]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,Object.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tfunction DeleteDisabled(){\n\t\treturn flows().length == 0 || vm().selected.flow == null\n\t}\n\n\tfunction DeleteOrganizationDisciplineDisabled(){\n\t\treturn organizations_disciplines().length == 0 || !checkMultiple().length\n\t}\n\n\tfunction cloningFlowPri(cloneItem, clonemarker){\n\t\tlet clone = {\n\t\t\tflow_id: !clonemarker ? cloneItem.flow_id : null\n\t\t\t,organization_id: cloneItem.organization_id\n\t\t\t,flows_primary_activity_id: !clonemarker ? cloneItem.flows_primary_activity_id : null\n\t\t\t,organizations_disciplines_id: cloneItem.organizations_disciplines_id\n\t\t\t,discipline_name: cloneItem.discipline_name\n\t\t\t,flow_primary_activity_name: cloneItem.flow_primary_activity_name\n\t\t}\n\t\treturn clone\n\t}\n\n\tfunction cloningFlowDep(cloneItem, clonemarker){\n\t\tlet clone = {\n\t\t\tflow_id: !clonemarker ? cloneItem.flow_id : null\n\t\t\t,organization_id: cloneItem.organization_id\n\t\t\t,flows_dependent_activity_id: !clonemarker ? cloneItem.flows_dependent_activity_id : null\n\t\t\t,organizations_disciplines_id: cloneItem.organizations_disciplines_id\n\t\t\t,discipline_name: cloneItem.discipline_name\n\t\t\t,flow_dependent_activity_name: cloneItem.flow_dependent_activity_name\n\t\t}\n\t\treturn clone\n\t}\n\n\tfunction cloningOrganizationDisciplines(clonemarker, cloneItem){\n\t\tlet clone = resetOrganizationDisciplinesForm()\n\n\t\tclone.organization_id(\n\t\t\tclonemarker ? cloneItem.organization_id() : cloneItem.organization_id\n\t\t)\n\n\t\tclone.organizations_disciplines_description(\n\t\t\tclonemarker ? cloneItem.organizations_disciplines_description() : cloneItem.organizations_disciplines_description\n\t\t)\n\n\t\tclone.organizations_disciplines_nominal_rate(\n\t\t\tclonemarker ? cloneItem.organizations_disciplines_nominal_rate() : cloneItem.organizations_disciplines_nominal_rate\n\t\t)\n\n\t\tclone.organizations_disciplines_uom(\n\t\t\tclonemarker ? cloneItem.organizations_disciplines_uom() : cloneItem.organizations_disciplines_uom\n\t\t)\n\t\tclone.organizations_disciplines_nominal_expenditure_rate(cloneItem.organizations_disciplines_nominal_expenditure_rate)\n\t\tclone.organizations_disciplines_nominal_revenue_rate(cloneItem.organizations_disciplines_nominal_revenue_rate)\n\t\tclone.listindex = cloneItem.listindex\n\t\tclone.completedsum = cloneItem.completedsum\n\t\tclone.scheduledsum = cloneItem.scheduledsum\n\t\tclone.completedcount = cloneItem.completedcount\n\t\tclone.contractrecognitiondescription = cloneItem.contractrecognitiondescription\n\t\tclone.contractrecognitionid = cloneItem.contractrecognitionid\n\t\tclone.contractrecognitionname = cloneItem.contractrecognitionname\n\t\tclone.orgDisciplineNameDescription = cloneItem.orgDisciplineNameDescription\n\n\t\tclone.organizations_disciplines_name(\n\t\t\tclonemarker ? cloneItem.organizations_disciplines_name() + \" (Clone \" : cloneItem.organizations_disciplines_name\n\t\t)\n\t\tclone.organizations_disciplines_id(clonemarker ? clone.organizations_disciplines_id() : cloneItem.organizations_disciplines_id)\n\t\tclone.created = clonemarker\n\t\tclone.neworgd = clonemarker\n\t\tclone.applytoteams = cloneItem.applytoteams\n\t\treturn clone\n\t}\n\n\tfunction cloningFlow(clonemarker){\n\t\tlet clone = resetForm().flow\n\t\tclone.schedule_id( vm().selected.flow.schedule_id() )\n\t\tclone.organization_id( vm().selected.flow.organization_id() )\n\t\tclone.flow_delay_in_days( vm().selected.flow.flow_delay_in_days() )\n\t\tclone.flow_delay_type( vm().selected.flow.flow_delay_type() )\n\t\tclone.flow_dependency_relationship( vm().selected.flow.flow_dependency_relationship() )\n\t\tclone.flow_dependent_activity =\n\t\t\tvm().selected.flow.flow_dependent_activity\n\t\t\t.map((f) => cloningFlowDep(f, clonemarker) )\n\t\tclone.flow_primary_activity =\n\t\t\tvm().selected.flow.flow_primary_activity\n\t\t\t.map((f) => cloningFlowPri(f, clonemarker) )\n\t\tclone.flow_safety_ratio( vm().selected.flow.flow_safety_ratio() )\n\t\tclone.flow_name( clonemarker == false ? vm().selected.flow.flow_name() : vm().selected.flow.flow_name() + \" (Clone)\" )\n\t\tclone.flow_id(clonemarker == false ? vm().selected.flow.flow_id() : null)\n\t\tform().flow = clone\n\t\treturn clone\n\t}\n\n\tfunction resetOrganizationDisciplinesForm(){\n\t\treturn {\n\t\t\torganization_id: m.prop(null)\n\t\t\t,organizations_disciplines_id: m.prop(uuid.v4())\n\t\t\t,organizations_disciplines_name: m.prop(null)\n\t\t\t,organizations_disciplines_description: m.prop(null)\n\t\t\t,organizations_disciplines_nominal_rate: m.prop(0)\n\t\t\t,organizations_disciplines_uom: m.prop('')\n\t\t\t,neworgd: true\n\t\t\t,organizations_disciplines_nominal_expenditure_rate: m.prop(0)\n\t\t\t,organizations_disciplines_nominal_revenue_rate: m.prop(0)\n\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t,created: true\n\t\t\t,applytoteams: []\n\t\t}\n\t}\n\n\tfunction getActivateDeleteButton(object){\n\t\tconst activated =\n\t\t\tcheckMultiple()\n\t\t\t.findIndex((chr) => chr.key == object.key)\n\n\t\tconst listindex =\n\t\t\torganizations_disciplines()\n\t\t\t.findIndex((chr) => chr.key == object.key)\n\n\t\tobject.listindex = listindex\n\n\t\treturn {\n\t\t\tdisabled: !(editProjectPermissions() || editOrganizationPermissions())\n\t\t\t,type: 'checkbox'\n\t\t\t,onclick: (v) => {\n\t\t\t\tif(!v.currentTarget.checked){\n\t\t\t\t\tcheckMultiple().splice(activated, 1)\n\t\t\t\t\tcheckMultiple(checkMultiple())\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcheckMultiple().push(object)\n\t\t\t\t\tcheckMultiple(checkMultiple())\n\t\t\t\t}\n\t\t\t}\n\t\t\t,checked: activated >= 0\n\t\t}\n\t}\n\n\tfunction resetForm(){\n\t\treturn {\n\t\t\tflow:{\n\t\t\t\tflow_id: m.prop(null)\n\t\t\t\t,flow_name: m.prop(\"\")\n\t\t\t\t,organization_id: m.prop(null)\n\t\t\t\t,flow_delay_in_days: m.prop(0)\n\t\t\t\t,flow_delay_type: m.prop(\"Safety\")\n\t\t\t\t,flow_dependency_relationship: m.prop(\"Risk Ratio\")\n\t\t\t\t,flow_dependent_activity: []\n\t\t\t\t,flow_primary_activity: []\n\t\t\t\t,flow_safety_ratio: m.prop(40)\n\t\t\t\t,schedule_id: m.prop(schedule_id())\n\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction matchingID(x, y){\n\t\treturn x.organizations_disciplines_id == y.organizations_disciplines_id\n\t}\n\n\tfunction getAvailableOptions(){\n\n\t\tconst discipline_selection_list = baseOrganizationsDisciplines()\n\t\tconst restrictedDisciplines = available_disciplines()\n\n\t\tconst dependants = form().flow.flow_dependent_activity || []\n\t\tconst primaries = form().flow.flow_primary_activity || []\n\n\t\tprimaryOptions(\n\t\t\tR.differenceWith(\n\t\t\t\tmatchingID\n\t\t\t\t,R.differenceWith(\n\t\t\t\t\tmatchingID\n\t\t\t\t\t,discipline_selection_list\n\t\t\t\t\t,restrictedDisciplines.restrictedPri\n\t\t\t\t)\n\t\t\t\t,dependants.concat(primaries)\n\t\t\t)\n\t\t)\n\t\tdependentOptions(\n\t\t\tR.differenceWith(\n\t\t\t\tmatchingID\n\t\t\t\t,R.differenceWith(\n\t\t\t\t\tmatchingID\n\t\t\t\t\t,discipline_selection_list\n\t\t\t\t\t,restrictedDisciplines.restrictedDep\n\t\t\t\t)\n\t\t\t\t,dependants.concat(primaries)\n\t\t\t)\n\t\t)\n\t}\n\n\n\tfunction editOption(addORsub, property, d){\n\t\tif ( addORsub ){\n\t\t\tlet flowRelation = {\n\t\t\t\tdiscipline_name:\n\t\t\t\t\td.organizations_disciplines_name\n\t\t\t\t\t+ ' - '\n\t\t\t\t\t+ d.organizations_disciplines_description\n\t\t\t\t,flow_id: form().flow.flow_id()\n\t\t\t\t,organizations_disciplines_id: d.organizations_disciplines_id\n\t\t\t}\n\t\t\tproperty.push(flowRelation)\n\t\t} else if ( !addORsub && d ){\n\t\t\tlet index = property.findIndex((flowRelation) =>\n\t\t\t\tflowRelation.organizations_disciplines_id\n\t\t\t\t== d.organizations_disciplines_id\n\t\t\t)\n\t\t\tindex > -1 ? property.splice(index, 1) : null\n\t\t\tindex > -1 && (d.flows_dependent_activity_id || d.flows_primary_activity_id)\n\t\t\t ? deleteFlowPriDep(d, null)\n\t\t\t : null\n\t\t}\n\t}\n\n\n\tfunction available_disciplines(){\n\t\tlet restrictedDep = []\n\t\tlet restrictedPri = []\n\t\tlet foundnewLinks = []\n\t\tlet flowArrays = []\n\t\tlet newLinkcount = 0\n\n\t\tfunction AddHiddenLinks(FlowsObjCantBeDep, FlowsDepCantBeObj){\n\t\t\tlet reverseHidden = []\n\t\t\tlet forwardHidden = []\n\t\t\tif (FlowsObjCantBeDep){\n\t\t\t\tFlowsObjCantBeDep.forEach((f) => {\n\t\t\t\t\treverseHidden = reverseHidden.concat(\n\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\tmatchingID\n\t\t\t\t\t\t\t,f.flow_primary_activity\n\t\t\t\t\t\t\t,reverseHidden.concat(restrictedDep)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tFlowsDepCantBeObj.forEach((f) => {\n\t\t\t\t\tforwardHidden = forwardHidden.concat(\n\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\tmatchingID\n\t\t\t\t\t\t\t,f.flow_dependent_activity\n\t\t\t\t\t\t\t,forwardHidden.concat(restrictedPri)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn FlowsObjCantBeDep ? reverseHidden : forwardHidden\n\t\t}\n\n\t\t// A dependency in other flows cannot appear in this flows objectives if the otherhas an objective equal to this dependency\n\t\t\t// this then applies to all those dependecnies we just found! so we loop back up the links to find the start points and all hiddent dependencies\n\t\t// An objective in other flows cannot appear in this flows dependents if the other flow has a dependent equal to this objective\n\t\t\t// this then applies to all those objectives we just found! so we loop back up the links to find the start points and all hiddent dependencies\n\t\tif ( form().flow.flow_primary_activity ){\n\t\t\tfoundnewLinks = form().flow.flow_primary_activity\n\t\t\tnewLinkcount = 0\n\t\t\twhile (newLinkcount <= foundnewLinks.length - 1){\n\t\t\t\tflowArrays = flows().filter((f) =>\n\t\t\t\t\tf.flow_dependent_activity.find((fd) =>\n\t\t\t\t\t\tfd.organizations_disciplines_id\n\t\t\t\t\t\t== foundnewLinks[newLinkcount].organizations_disciplines_id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tfoundnewLinks = foundnewLinks.concat(AddHiddenLinks( flowArrays, null ))\n\t\t\t\trestrictedDep = restrictedDep.concat(foundnewLinks)\n\t\t\t\tnewLinkcount = newLinkcount + 1\n\t\t\t}\n\n\t\t\tfoundnewLinks = form().flow.flow_dependent_activity\n\t\t\tnewLinkcount = 0\n\t\t\twhile (newLinkcount <= foundnewLinks.length - 1){\n\t\t\t\tflowArrays = flows().filter((f) =>\n\t\t\t\t\tf.flow_primary_activity.find((fd) =>\n\t\t\t\t\t\tfd.organizations_disciplines_id\n\t\t\t\t\t\t== foundnewLinks[newLinkcount].organizations_disciplines_id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tfoundnewLinks = foundnewLinks.concat(AddHiddenLinks( null, flowArrays ))\n\t\t\t\trestrictedPri = restrictedPri.concat(foundnewLinks)\n\t\t\t\tnewLinkcount = newLinkcount + 1\n\t\t\t}\n\t\t}\n\n\t\treturn {restrictedDep: restrictedDep\n\t\t\t\t,restrictedPri: restrictedPri}\n\t}\n\n\tfunction check_fnames(){\n\t\tlet state = false\n\t\tflows().every((flow) => {\n\t\t\tif (flow.flow_name() == null\n\t\t\t\t|| flow.flow_name() == \"\"\n\t\t\t\t|| R.countBy(function(chr) { return chr.flow_name() == flow.flow_name() }, flows() ).true > 1\n\t\t\t\t){ state = true}\n\t\t\treturn state == false\n\t\t})\n\t\treturn state\n\t}\n\n\tconst setOptions = function(value, prop, container){\n\n\t\tlet refContainter = container || checkMultiple()\n\n\t\tif( refContainter[0] ){\n\n\t\t\tvar dtype = typeof refContainter[0][prop] == 'function'\n\n\t\t\tvalue || value === false || value === 0 || value === \"\"\n\t\t\t\t? refContainter.forEach((d) => {\n\n\t\t\t\t\t// const ov\n\t\t\t\t\tdtype\n\t\t\t\t\t\t? d[prop]()\n\t\t\t\t\t\t: d[prop]\n\n\t\t\t\t\tdtype\n\t\t\t\t\t\t? d[prop](value)\n\t\t\t\t\t\t: d[prop] = value\n\n\t\t\t\t\td.created = true\n\t\t\t\t\t\t// value != ov\n\t\t\t\t\t\t// ? true\n\t\t\t\t\t\t// : false\n\n\t\t\t\t})\n\t\t\t\t: null\n\t\t}\n\n\t\treturn !refContainter.length\n\t\t\t? null\n\t\t\t: dtype\n\t\t\t\t? refContainter[0][prop]()\n\t\t\t\t: refContainter[0][prop]\n\t}\n\n\tconst check_onames = function(returnBoolean){\n\n\t\tconst count =\n\t\t\tR.countBy((chr) =>\n\t\t\t\tchr.organizations_disciplines_name()\n\t\t\t\t,organizations_disciplines()\n\t\t\t)\n\n\t\tconst errorArray = [\n\t\t\t(d, prop='organizations_disciplines_name') => !d[prop]()\n\t\t\t\t? `Discipline Name must not be empty` : null\n\t\t\t,(d, prop='organizations_disciplines_description') => !d[prop]()\n\t\t\t\t? `Discipline Description must not be empty` : null\n\t\t\t,(d, prop='organizations_disciplines_name') => count[d[prop]()] > 1\n\t\t\t\t? `Discipline Names must not be duplicated. Check ` + d[prop]()\n\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and '\n\t\t\t\t,''\n\t\t\t\t,organizations_disciplines()\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t,null\n\t\t\t\t,Object.keys(errors())\n\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tconst metaDataLoading = data.scoped(true)\n\tconst form = m.prop({ flow: {} })\n\tconst organizations_disciplines = data.scoped([])\n\tconst baseOrganizationsDisciplines = data.scoped([])\n\tconst flows = data.scoped([])\n\tconst schedule_id = data.schedule_id\n\tconst projects = data.scoped([])\n\tconst editPermissions = m.prop(false)\n\tconst editProjectPermissions = data.scoped(false)\n\tconst editResourcePermissions = data.scoped(false)\n\tconst editOrganizationPermissions = data.scoped(false)\n\tconst dependentOptions = data.scoped([])\n\tconst primaryOptions = data.scoped([])\n\tconst completedProjects = data.scoped(\"inprogress\")\n\tconst checkMultiple = data.scoped([])\n\tconst resources = data.scoped([])\n\tconst teams =\n\t\tresources\n\t\t.map((resList) =>\n\t\t\tR.unnest(resList.map((c) => c.crews))\n\t\t\t.filter((t) =>\n\t\t\t\tcheckMultiple().some((d) => !d.applytoteams.find((apt) => apt.crew_id() == t.crew_id()))\n\t\t\t\t&& (\n\t\t\t\t\t!t.crews_discipline_rates.length\n\t\t\t\t\t|| t.crews_discipline_rates.some((cdr) =>\n\t\t\t\t\t\t!checkMultiple().find((ogd) =>\n\t\t\t\t\t\t\togd.organizations_disciplines_id() == cdr.organizations_disciplines_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tfunction uploadmetadata(){\n\n\t\tconst od =\n\t\t\tcheckMultiple()[0]\n\n\t\treturn R.pickBy(\n\t\t\t(a) => a\n\t\t\t,{\n\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t, organizations_disciplines_id:\n\t\t\t\t\tod.organizations_disciplines_id()\n\t\t\t}\n\t\t)\n\t}\n\n\tcheckMultiple.map((c) =>\n\t\t(\n\t\t\tc.length\n\t\t\t? data.fetchResource({\n\t\t\t\tprops: {\n\t\t\t\t\tresources: [\n\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t]\n\t\t\t\t\t,teams: [\n\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t,'crew_name'\n\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t]\n\t\t\t\t\t,rates: [\n\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t,'crews_discipline_rates_id'\n\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\t,exclusive: true\n\t\t\t\t,organizations_disciplines:\n\t\t\t\t\tc.map(R.pipe(R.prop('organizations_disciplines_id'), R.call))\n\t\t\t})\n\t\t\t: Promise.resolve([])\n\t\t)\n\t\t\t.then(resources)\n\t)\n\n\tbaseOrganizationsDisciplines\n\t.map(R.pipe(R.map((i) => cloningOrganizationDisciplines(false, i)), organizations_disciplines))\n\n\tconst availableUOMS =\n\tbaseOrganizationsDisciplines\n\t.map(R.uniqBy(R.prop('organizations_disciplines_uom')))\n\n\tconst projectDisciplines =\n\t\tprojects.map((projectList) =>\n\t\t\tR.unnest(\n\t\t\t\tprojectList.map((p) =>\n\t\t\t\t\tp.disciplines\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst linkedFlowDisciplines =\n\t\tflows.map((flowList) =>\n\t\t\t[].concat(\n\t\t\t\tR.unnest(\n\t\t\t\t\tflowList.map((f) => f.flow_dependent_activity)\n\t\t\t\t)\n\t\t\t\t,R.unnest(\n\t\t\t\t\tflowList.map((f) => f.flow_primary_activity)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst linkedDisciplines =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tlinkedFlowDisciplines\n\t\t\t\t,primaryOptions\n\t\t\t]\n\t\t).map((streams) =>\n\t\t\tR.uniqBy(\n\t\t\t\t(a) => checkprop('organizations_disciplines_id', null, a)\n\t\t\t\t,[].concat(\n\t\t\t\t\tstreams[0]\n\t\t\t\t\t,form().flow.flow_dependent_activity || []\n\t\t\t\t\t,form().flow.flow_primary_activity || []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst disconnectedDisciplines = prop.merge(\n\t\t[\n\t\t\tprojectDisciplines\n\t\t\t,linkedDisciplines\n\t\t]\n\t).map(([projectDisciplines, linkedDisciplines]) =>\n\t\tR.differenceWith(\n\t\t\t(a,b) =>\n\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t,projectDisciplines\n\t\t\t,linkedDisciplines\n\t\t)\n\t)\n\n\tconst appliedProjects =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tprojects\n\t\t\t\t,flows\n\t\t\t]\n\t\t)\n\t\t.map(([projects, flows]) => {\n\n\t\t\tconst pIndex =\n\t\t\t\tR.indexBy(\n\t\t\t\t\tR.pipe(R.prop('flow_id'), R.call)\n\t\t\t\t\t,flows.map((f) => {\n\t\t\t\t\t\tconst flowPrimaries = R.pluck('organizations_disciplines_id', f.flow_primary_activity)\n\t\t\t\t\t\tconst flowDependants = R.pluck('organizations_disciplines_id', f.flow_dependent_activity)\n\t\t\t\t\t\tconst valueList = []\n\t\t\t\t\t\tprojects.forEach((project) => {\n\t\t\t\t\t\t\tconst projectDisciplines = R.pluck('organizations_disciplines_id', project.disciplines).map(s => s())\n\t\t\t\t\t\t\tconst discplineflowPri =\n\t\t\t\t\t\t\t\tR.intersection(\n\t\t\t\t\t\t\t\t\tprojectDisciplines\n\t\t\t\t\t\t\t\t\t,flowPrimaries\n\t\t\t\t\t\t\t\t).length\n\n\t\t\t\t\t\t\tconst discplineflowDep =\n\t\t\t\t\t\t\t\tR.intersection(\n\t\t\t\t\t\t\t\t\tprojectDisciplines\n\t\t\t\t\t\t\t\t\t,flowDependants\n\t\t\t\t\t\t\t\t).length\n\n\t\t\t\t\t\t\tif ( discplineflowPri > 0 && discplineflowDep > 0){\n\t\t\t\t\t\t\t\tconst entry = project.project_name()\n\t\t\t\t\t\t\t\tvalueList.push(entry)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn R.merge(\n\t\t\t\t\t\t\tf\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprojectString: valueList.length != 0\n\t\t\t\t\t\t\t\t? valueList.join(', ')\n\t\t\t\t\t\t\t\t: data.readProjectPermissions()\n\t\t\t\t\t\t\t\t\t? `There are no Projects with relations to this Flow`\n\t\t\t\t\t\t\t\t\t: `Project permissions are required to view relevant Projects`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t)\n\n\t\t\tmetaDataLoading(false)\n\n\t\t\treturn pIndex\n\t\t})\n\n\tbaseOrganizationsDisciplines\n\t.map((bo) =>\n\t\tbo.length\n\t\t? data.fetchTools({}).then( tools )\n\t\t: []\n\t)\n\n\tconst tools = data.scoped([])\n\tconst toolsets = data.scoped([])\n\tconst toolPresetDeletions = data.scoped([])\n\tconst newtoolPresets = data.scoped([])\n\n\tconst toolPresetOptions =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\ttools\n\t\t\t\t,checkMultiple\n\t\t\t\t,toolsets\n\t\t\t]\n\t\t)\n\t\t.map(([t, orgds, ts]) =>\n\t\t\tt.filter((t) =>\n\t\t\t\torgds.some((d) =>\n\t\t\t\t\t!ts.find((tp) =>\n\t\t\t\t\t\ttp.tools_id == t.tools_id()\n\t\t\t\t\t\t&& d.organizations_disciplines_id()\n\t\t\t\t\t\t== tp.organizations_disciplines_id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tcheckMultiple\n\t.map((ogd) => {\n\t\treturn ogd.length\n\t\t\t? data.api.tools.presets.fetch({\n\t\t\t\tperorganizatond:\n\t\t\t\t\togd.map((d) => d.organizations_disciplines_id())\n\t\t\t})\n\t\t\t.then((ts) => {\n\n\t\t\t\tconst cp =\n\t\t\t\t\tts.filter((o) =>\n\t\t\t\t\t\t!newtoolPresets()\n\t\t\t\t\t\t.find((nt) =>\n\t\t\t\t\t\t\tnt.tools_presets_id\n\t\t\t\t\t\t\t== o.tools_presets_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\togd.map((d) =>\n\t\t\t\t\td.presets =\n\t\t\t\t\t\tnewtoolPresets()\n\t\t\t\t\t\t.concat(cp)\n\t\t\t\t\t\t.filter((ts) =>\n\t\t\t\t\t\t\tts.organizations_disciplines_id\n\t\t\t\t\t\t\t== d.organizations_disciplines_id()\n\t\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\ttoolsets(newtoolPresets().concat(cp))\n\t\t\t\tm.redraw()\n\t\t\t})\n\t\t\t: Promise.resolve([])\n\t})\n\n\tconst requiredTools =\n\t\t() =>\n\t\t\telements.list([\n\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t,'Set tools required for this Work'\n\t\t\t\t)\n\t\t\t\t,Pencil(\n\t\t\t\t\t() => ''\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\tlist: toolPresetOptions\n\t\t\t\t\t\t\t,onselect(v, model){\n\n\t\t\t\t\t\t\t\tcheckMultiple()\n\t\t\t\t\t\t\t\t.forEach((d) => {\n\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t!toolsets().find((p) =>\n\t\t\t\t\t\t\t\t\t\t\tp.tools_id == v.tools_id()\n\t\t\t\t\t\t\t\t\t\t\t&& p.organizations_disciplines_id == d.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\tconst newpreset = {\n\t\t\t\t\t\t\t\t\t\t\ttools_presets_id: uuid.v4()\n\t\t\t\t\t\t\t\t\t\t\t,organizations_disciplines_id: d.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t\t,tools_id: v.tools_id()\n\t\t\t\t\t\t\t\t\t\t\t,organization_id: data.initiateContractFetch().organization_id\n\t\t\t\t\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t\t\t\t\t,contractrecognitionname: v.contractrecognitionname\n\t\t\t\t\t\t\t\t\t\t\t,tools_name: v.tools_name()\n\t\t\t\t\t\t\t\t\t\t\t,tools_description: v.tools_description()\n\t\t\t\t\t\t\t\t\t\t\t,tools_presets_quantity: 1\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tnewtoolPresets().push( newpreset )\n\t\t\t\t\t\t\t\t\t\ttoolsets().push(newpreset)\n\t\t\t\t\t\t\t\t\t\ttoolsets( toolsets() )\n\n\t\t\t\t\t\t\t\t\t\td.presets\n\t\t\t\t\t\t\t\t\t\t\t? d.presets.push(newpreset)\n\t\t\t\t\t\t\t\t\t\t\t: d.presets = [newpreset]\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\t\tmodel.chosen(null)\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,field: 'contractrecognitionnametype'\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\ttitle: \"Select the type of tools required to conduct this discipline\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,sort: R.prop('tools_name')\n\t\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t,checkMultiple().map((d) => [\n\t\t\t\t\tm('hr', d.organizations_disciplines_name() )\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,elements.strikeTable(\n\t\t\t\t\t\t(d.presets || []).map(\n\t\t\t\t\t\t\tt => ({\n\t\t\t\t\t\t\t\tlabel: t.tools_name + ' - ' + t.tools_description + ' x '\n\t\t\t\t\t\t\t\t,action: () => {\n\n\n\t\t\t\t\t\t\t\t\tnewtoolPresets(\n\t\t\t\t\t\t\t\t\t\tnewtoolPresets()\n\t\t\t\t\t\t\t\t\t\t.filter((tp) =>\n\t\t\t\t\t\t\t\t\t\t\ttp.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t\t!= t.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\ttoolsets(\n\t\t\t\t\t\t\t\t\t\ttoolsets()\n\t\t\t\t\t\t\t\t\t\t.filter((tp) =>\n\t\t\t\t\t\t\t\t\t\t\ttp.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t\t!= t.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\td.presets =\n\t\t\t\t\t\t\t\t\t\td.presets\n\t\t\t\t\t\t\t\t\t\t.filter((tp) =>\n\t\t\t\t\t\t\t\t\t\t\ttp.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t\t!= t.tools_presets_id\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t!t.created\n\t\t\t\t\t\t\t\t\t? toolPresetDeletions().push(t)\n\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,meta:\n\t\t\t\t\t\t\t\t\tPencil(\n\t\t\t\t\t\t\t\t\t\t() => t.tools_presets_quantity\n\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: d.tools_name + ' Quantity'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tprop: (value) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( value && !t.created){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnewtoolPresets().push(t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn setOptions(value, 'tools_presets_quantity', [t])\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,step: 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,width: '2em'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t])\n\n\tconst underlinedHeader =\n\t\ta => m('h4.pt3.bw1.bb.pb2.b--black-20', a)\n\n\tconst detailsPaneOpen =\n\t\t() => checkMultiple().length >= 1 && indexby() == 'Organization Disciplines'\n\n\n\tconst saveDiscardButtons =\n\t\t() =>\n\t\t\telements.list(\n\t\t\t\t[\n\t\t\t\t\teditOrganizationPermissions()\n\t\t\t\t\t|| editProjectPermissions()\n\t\t\t\t\t? check_onames(true)\n\t\t\t\t\t|| identical(baseOrganizationsDisciplines(), organizations_disciplines())\n\t\t\t\t\t&& !newtoolPresets().length\n\t\t\t\t\t&& !toolPresetDeletions().length\n\t\t\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t\t\t: elements.action('Save', sendOrganizationsDisciplines, loading)\n\t\t\t\t\t: null\n\t\t\t\t]\n\t\t\t\t.concat(\n\t\t\t\t\telements.undoDiscard({\n\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tonclick: deleteOrganizationDisciplines\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\t\t\tDeleteOrganizationDisciplineDisabled()\n\t\t\t\t\t\t\t\t\t\t\t|| (!editProjectPermissions() && !editOrganizationPermissions())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,loading: loading\n\t\t\t\t\t\t\t\t,state: deleteOrganizationDisciplineStateProp\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\tidentical(\n\t\t\t\t\t\t\t\t\tbaseOrganizationsDisciplines()\n\t\t\t\t\t\t\t\t\t, organizations_disciplines()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t&& !newtoolPresets().length\n\t\t\t\t\t\t\t\t&& !toolPresetDeletions().length\n\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tcheckMultiple([])\n\t\t\t\t\t\t\t\t\tbaseOrganizationsDisciplines(baseOrganizationsDisciplines())\n\t\t\t\t\t\t\t\t\tdeleteOrganizationDisciplineStateProp(false)\n\n\t\t\t\t\t\t\t\t\tnewtoolPresets([])\n\t\t\t\t\t\t\t\t\ttoolPresetDeletions([])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: `Discard all changes since last saving Disciplines`\n\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t!organizations_disciplines()\n\t\t\t\t\t\t\t\t\t|| (\n\t\t\t\t\t\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t\t\t\t\t\t&& !newtoolPresets().length\n\t\t\t\t\t\t\t\t\t\t&& !toolPresetDeletions().length\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\n\tconst detailPaneInputs =\n\t\tfunction(){\n\t\t\tconst D = checkMultiple()[0]\n\n\t\t\treturn [\n\n\t\t\t\tsaveDiscardButtons()\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tunderlinedHeader('Discipline Details - ')\n\t\t\t\t\t,m(\"button.btn.btn-secondary.\"\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tdisabled: !!check_onames(true)\n\t\t\t\t\t\t\t,onclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tconst insindex = checkMultiple()[checkMultiple().length-1]['listindex']\n\t\t\t\t\t\t\t\t\tconst newitems =\n\t\t\t\t\t\t\t\t\t\tcheckMultiple()\n\t\t\t\t\t\t\t\t\t\t.map((d) => cloningOrganizationDisciplines(true, d))\n\t\t\t\t\t\t\t\t\tnewitems.map((d) =>\n\t\t\t\t\t\t\t\t\t\torganizations_disciplines(\n\t\t\t\t\t\t\t\t\t\t\tR.insert(\n\t\t\t\t\t\t\t\t\t\t\t\tinsindex\n\t\t\t\t\t\t\t\t\t\t\t\t, d\n\t\t\t\t\t\t\t\t\t\t\t\t, organizations_disciplines()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tcheckMultiple(newitems)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t\t\t, height: '2.5em'\n\t\t\t\t\t\t\t\t, width: '5em'\n\t\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Create a new type of Discipline from the copy of another, for the organization to use to register works\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,\"Clone\"\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m(MiniTable, {\n\t\t\t\t\trows: checkMultiple().map(\n\t\t\t\t\t\td => ({\n\t\t\t\t\t\t\tkey: d.organizations_disciplines_id()\n\t\t\t\t\t\t\t,fields : {\n\t\t\t\t\t\t\t\tName: d.organizations_disciplines_name()\n\t\t\t\t\t\t\t\t,Desc: d.organizations_disciplines_description()\n\t\t\t\t\t\t\t\t,NWR: d.organizations_disciplines_nominal_rate()\n\t\t\t\t\t\t\t\t,UoM: d.organizations_disciplines_uom()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t,format: (x, key) =>\n\t\t\t\t\t\tkey == 'Name'\n\t\t\t\t\t\t\t? x\n\t\t\t\t\t\t: x == null\n\t\t\t\t\t\t\t? 'N/A'\n\t\t\t\t\t\t: Number.isNaN(x)\n\t\t\t\t\t\t\t? 'N/A'\n\t\t\t\t\t\t\t: x\n\t\t\t\t})\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,checkMultiple().length < 2\n\t\t\t\t&& elements.list([\n\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t,'Discipline Name'\n\t\t\t\t\t)\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => D.organizations_disciplines_name()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) =>\n\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\tvalue, 'organizations_disciplines_name'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Name of the discipline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Discipline Description ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tcheckMultiple().length == 1\n\t\t\t\t\t\t\t? D.organizations_disciplines_description()\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'organizations_disciplines_description')\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Description of the discipline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Unit of Measure ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tcheckMultiple().length == 1\n\t\t\t\t\t\t\t? D.organizations_disciplines_uom()\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\tavailableUOMS\n\t\t\t\t\t\t\t\t,(value) => {\n\t\t\t\t\t\t\t\t\tif(value){ setOptions(value, 'organizations_disciplines_uom') }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'organizations_disciplines_uom'\n\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Average Unit of Measure / Day ')\n\t\t\t\t\t,m(\n\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t,errorLabel: 'Work Rate Per Day'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'organizations_disciplines_nominal_rate')\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,data.editContractPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Nominal Charge Amount Per UOM')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => makeMoney(checkMultiple()[0].organizations_disciplines_nominal_revenue_rate())\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Nominal Charge Amount Per UOM'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(Math.abs(value), 'organizations_disciplines_nominal_revenue_rate')\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t,title: `Average amount to charge clients when this disciplines is used. May be altered for specific clients via financials and the contract selection`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: data.readContractPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Nominal Charge Amount Per UOM')\n\t\t\t\t\t,makeMoney(checkMultiple()[0].organizations_disciplines_nominal_revenue_rate())\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\t\t\t,errors()['Nominal Charge Amount Per UOM']\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`warning`\n\t\t\t\t\t, `Charge Amounts must be positive as this is money that would be gained as revenue by the organization`\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\t\t,data.editContractPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Nominal Pay Amount Per UOM')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => makeMoney(checkMultiple()[0].organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Nominal Pay Amount Per UOM'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (value) => setOptions(Math.abs(value)*-1, 'organizations_disciplines_nominal_expenditure_rate')\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmax: 0\n\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t\t,title: `Average amount that would be paid when a team or resource conducts this discipline. May be altered for specific teams via financials and the contract selection`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: data.readContractPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Nominal Pay Amount Per UOM')\n\t\t\t\t\t,makeMoney(checkMultiple()[0].organizations_disciplines_nominal_expenditure_rate())\n\t\t\t\t])\n\t\t\t\t: null\n\n\t\t\t\t,errors()['Nominal Pay Amount Per UOM']\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`warning`\n\t\t\t\t\t, `Pay Amounts must be negative as this is money that would be expenditures of the organization`\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\t\t,editResourcePermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t,'Make a team capable of this Work'\n\t\t\t\t\t)\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => ''\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\t\tlist: teams\n\t\t\t\t\t\t\t\t,onselect(v, model){\n\n\t\t\t\t\t\t\t\t\tcheckMultiple()\n\t\t\t\t\t\t\t\t\t.forEach((d) => {\n\t\t\t\t\t\t\t\t\t\tconst alreadyadded =\n\t\t\t\t\t\t\t\t\t\t\td.applytoteams.find((t) => t.crew_id() == v.crew_id())\n\n\t\t\t\t\t\t\t\t\t\tif(!alreadyadded){\n\t\t\t\t\t\t\t\t\t\t\td.created = true\n\t\t\t\t\t\t\t\t\t\t\td.applytoteams = (d.applytoteams || []).concat(v)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\tresources(resources())\n\t\t\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\t\t\tmodel.chosen(null)\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,field: 'teamresourcename'\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\ttitle: \"Select teams that are able to conduct this discipline and it will become part of their capabilities\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,sort: R.prop('teamresourcename')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t,elements.alert('info', `Giving a team the capability to do this work will allow Odin to automatically schedule them for this type of work on any project`)\n\t\t\t\t])\n\t\t\t\t: null\n\n\n\t\t\t\t,checkMultiple().map((d) =>\n\t\t\t\t\t!d.applytoteams.length\n\t\t\t\t\t? []\n\t\t\t\t\t: [\n\t\t\t\t\t\tm('hr', d.organizations_disciplines_name())\n\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t,elements.strikeList(\n\t\t\t\t\t\t\td.applytoteams\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tt => ({\n\t\t\t\t\t\t\t\t\tlabel: t.teamresourcename\n\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\tcheckMultiple().forEach((d) =>\n\t\t\t\t\t\t\t\t\t\t\td.applytoteams\n\t\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\t\td.applytoteams\n\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((dt) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tdt.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t== t.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\t\t\t,requiredTools()\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Task Count ')\n\t\t\t\t\t,[R.sum(R.map(R.prop('completedcount'), checkMultiple()))]\n\t\t\t\t\t\t.filter( x => !Number.isNaN(x)).concat('N/A').shift()\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Task Completed Sum ')\n\t\t\t\t\t,[R.sum(R.map(R.prop('completedsum'), checkMultiple()))]\n\t\t\t\t\t\t.filter( x => !Number.isNaN(x)).concat('N/A').shift()\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', ' Task Scheduled Sum ')\n\t\t\t\t\t,[R.sum(R.map(R.prop('scheduledsum'), checkMultiple()))]\n\t\t\t\t\t\t.filter( x => !Number.isNaN(x)).concat('N/A').shift()\n\t\t\t\t])\n\n\t\t\t\t,checkMultiple().length > 1\n\t\t\t\t? elements.alert(`warning`, `Files must be uploaded to one discipline at a time`)\n\t\t\t\t: m(HarthUppy, {\n\t\t\t\t\tgetFields: uploadmetadata\n\t\t\t\t\t, data\n\t\t\t\t})\n\t\t\t]\n\n\n\t\t}\n\n\tconst appliedFlows =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tprojects\n\t\t\t\t,flows\n\t\t\t]\n\t\t)\n\t\t.map(([projects, flows]) => {\n\n\t\t\treturn R.indexBy(\n\t\t\t\tR.pipe(R.prop('project_id'), R.call)\n\t\t\t\t,projects.map((p) => {\n\t\t\t\t\tlet flow_list = []\n\t\t\t\t\t// var dList = []\n\t\t\t\t\tflows.forEach((flow) => {\n\t\t\t\t\t\tconst flowPrimaries = flow.flow_primary_activity\n\t\t\t\t\t\tconst flowDependants = flow.flow_dependent_activity\n\n\t\t\t\t\t\tconst priInter =\n\t\t\t\t\t\t\tR.innerJoin(\n\t\t\t\t\t\t\t\t(a,b) =>\n\t\t\t\t\t\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t\t\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t\t\t\t\t\t,p.disciplines\n\t\t\t\t\t\t\t\t,flowPrimaries\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst secInter =\n\t\t\t\t\t\t\tR.innerJoin(\n\t\t\t\t\t\t\t\t(a,b) =>\n\t\t\t\t\t\t\t\t\tcheckprop('organizations_disciplines_id', null, a)\n\t\t\t\t\t\t\t\t\t== checkprop('organizations_disciplines_id', null, b)\n\t\t\t\t\t\t\t\t,p.disciplines\n\t\t\t\t\t\t\t\t,flowDependants\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tif ( priInter.length && secInter.length ) {\n\n\t\t\t\t\t\t\tflow_list.push({\n\t\t\t\t\t\t\t\tfname: flow.flow_name()\n\t\t\t\t\t\t\t\t,priInter: elements.nonStrikeList(\n\t\t\t\t\t\t\t\t\tpriInter\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\ta => ({\n\t\t\t\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\t\t\ta.discipline_description\n\t\t\t\t\t\t\t\t\t\t\t? a.discipline_name() + ' - ' + a.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t: a.discipline_name\n\t\t\t\t\t\t\t\t\t\t\t,action: () => {}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,secInter: elements.nonStrikeList(\n\t\t\t\t\t\t\t\t\tsecInter\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\ta => ({\n\t\t\t\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\t\t\ta.discipline_description\n\t\t\t\t\t\t\t\t\t\t\t? a.discipline_name() + ' - ' + a.discipline_description()\n\t\t\t\t\t\t\t\t\t\t\t: a.discipline_name\n\t\t\t\t\t\t\t\t\t\t\t,action: () => {}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn R.merge(\n\t\t\t\t\t\tp\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tflow_list:\n\t\t\t\t\t\t\t\telements.table(data,\n\t\t\t\t\t\t\t\t\t['', 'Objectives', 'Dependants', ]\n\t\t\t\t\t\t\t\t\t,flow_list.map(\n\t\t\t\t\t\t\t\t\t\t(f) => [\n\t\t\t\t\t\t\t\t\t\t\tf.fname\n\t\t\t\t\t\t\t\t\t\t\t,f.priInter\n\t\t\t\t\t\t\t\t\t\t\t,f.secInter\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,activeRelation: flow_list.length\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t)\n\t\t})\n\n\n\tconst vm = m.prop({\n\t\tproject: m.prop(false)\n\t\t,dependant: m.prop(false)\n\t\t,primary: m.prop(false)\n\t\t,pending: m.prop(false)\n\t\t,selected: {\n\t\t\tflow: null\n\t\t}\n\t})\n\n\tconst edit = m.prop(false)\n\n\tlet viewtype = ListFlow\n\n\tconst filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'flow_'}\n\t\t\t,{ugly_name: 'flow_dependent_activity', better_name: \"Number of Dependents\"}\n\t\t\t,{ugly_name: 'flow_primary_activity', better_name: \"Number of Objectives\"}\n\t\t\t,{ugly_name: 'flow_primary_activity_name', better_name: \"Objective Names\"}\n\t\t\t,{ugly_name: 'flow_dependent_activity_name', better_name: \"Dependent Names\"}\n\t\t\t,{ugly_name: 'scheduledsum', better_name: 'Sum of Tasks Scheduled'}\n\t\t\t,{ugly_name: 'completedsum', better_name: 'Sum of Tasks Completed'}\n\t\t\t,{ugly_name: 'completedcount', better_name: 'Count of Tasks Completed'}\n\t\t]\n\t\t,uniqueArrays: [\n\t\t\t{array_name: 'flow_dependent_activity', unique: \"flows_dependent_activity_id\"}\n\t\t\t,{array_name: 'flow_primary_activity', unique: \"flows_primary_activity_id\"}\n\t\t]\n\t\t,template: {\n\t\t\tflows: {\n\t\t\t\tflow_name: \"\"\n\t\t\t\t,flow_safety_ratio: 0\n\t\t\t\t,flow_delay_in_days: 0\n\t\t\t\t,flow_delay_type: \"\"\n\t\t\t\t,flow_dependency_relationship: \"\"\n\t\t\t\t,flow_dependent_activity: [{\n\t\t\t\t\tflow_dependent_activity_name: \"\"\n\t\t\t\t}]\n\t\t\t\t,flow_primary_activity: [{\n\t\t\t\t\tflow_primary_activity_name: \"\"\n\t\t\t\t}]\n\t\t\t}\n\t\t\t,organizations_disciplines: {\n\t\t\t\torganizations_disciplines_description: \"\"\n\t\t\t\t,organizations_disciplines_nominal_rate: 0\n\t\t\t\t,organizations_disciplines_uom: \"\"\n\t\t\t\t,completedsum: 0\n\t\t\t\t,scheduledsum: 0\n\t\t\t\t,completedcount: 0\n\t\t\t\t,organizations_disciplines_name: \"\"\n\t\t\t}\n\t\t}\n\t\t,FlowsFilters: null\n\t}\n\n\tdata.currentRoute('Nothing')\n\tdata.initiateContractFetch\n\t.map(function(i){\n\t\tloading(true)\n\t\tmetaDataLoading(true)\n\n\t\tconst schange = i.schange || !data.routeInitialized()['flows']\n\n\t\tif ( schange ){\n\t\t\tvm().selected.flow = null\n\t\t\tviewtype = ListFlow\n\t\t\tdeleteFlowStateProp(false)\n\t\t\tdeleteObjective = []\n\t\t\tdeleteDependent = []\n\t\t}\n\n\t\treturn (\n\t\t\t!schange\n\t\t\t? Promise.resolve([])\n\t\t\t: Promise.all([\n\t\t\t\tfetchFlows()\n\t\t\t\t,fetchOrganizationsDisciplines()\n\t\t\t])\n\t\t\t.then(function(){\n\t\t\t\tmetaDataLoading(true)\n\t\t\t\tfetchProjects()\n\t\t\t\teditPermissions(\n\t\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\t\tdata.permissions()\n\t\t\t\t\t\t, 'flow_management'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\teditResourcePermissions(\n\t\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\t\tdata.permissions()\n\t\t\t\t\t\t, 'resource_management'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\teditProjectPermissions(\n\t\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\t\tdata.permissions()\n\t\t\t\t\t\t, 'project_management'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\teditOrganizationPermissions(\n\t\t\t\t\tPermissions.hasWrite(\n\t\t\t\t\t\tdata.permissions()\n\t\t\t\t\t\t, 'organization_management'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\treturn true\n\t\t\t})\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\ti.schange = false\n\t\t\t\ti.ochange = false\n\t\t\t\treturn loading(false)\n\t\t\t})\n\t})\n\n\tlet delaytypemessageblock;\n\tlet indexby = m.prop('Organization Disciplines')\n\n\tlet delaytypemessage = function(delaytypeti){\n\t\tif (delaytypeti == \"End to Start\"){\n\t\t\tdelaytypemessageblock = elements.alert(\n\t\t\t\t'info'\n\t\t\t\t, `An End to Start delay will take a reference at the conclusion of the dependant discipline to govern the commencement of the objective discipline.\n\t\t\t\tThe delay can be negative or positive in time. As an example, setting the duration to -2 will set the objective discipline to start 2 days BEFORE the dependant discipline is finished.\n\t\t\t\tSimilarly setting the duration to 2 will set the objective discipline to start 2 days after the dependant discipline finishes`\n\t\t\t)\n\t\t}\n\t\telse {delaytypemessageblock =\n\t\t\telements.alert(\n\t\t\t\t'info'\n\t\t\t\t, `A Start to Start delay will take a reference at the commencement of the dependant discipline to govern the commencement of the objective discipline.\n\t\t\t\tThe delay can be negative or positive in time. As an example, setting the duration to -3 will set the objective discipline to start 3 days BEFORE the dependant discipline start time.\n\t\t\t\tSimilarly setting the duration to 3 will set the objective discipline to start 3 days after the dependant discipline start time`\n\t\t\t)\n\t\t}\n\n\n\t\treturn delaytypemessageblock\n\t}\n\n\n\tlet delaymessage = function(safety){\n\t\treturn\tsafety == \"Risk Ratio\"\n\t\t\t? `This setting lets the objective discipline run in parallel with the dependant discipline to save project time whilst ensuring the dependant discipline\n\t\t\talways finishes first but with a minimum buffer relative to the value of the Risk Ratio, increasing the ratio will close the buffer and save more time.\n\t\t\tLowering the ratio will be safer and give more time to dependant disciplines before commencing objective disciplines.\n\t\t\t`\n\t\t\t: null\n\t}\n\n\t//todo-james hack to make the screen update when the schedule id changes\n\n\t/* eslint-disable array-callback-return, no-unused-vars */\n\tconst forceRedraw = prop.merge(\n\t\t[\n\t\t\tdata.calculated\n\t\t\t,errors\n\t\t\t,appliedProjects\n\t\t\t,appliedFlows\n\t\t]\n\t).map(function(){\n\t\tsetTimeout(function(){\n\t\t\tm.redraw()\n\t\t}, 0)\n\t})\n\t/* eslint-enable array-callback-return, no-unused-vars */\n\n\tconst discardChangesButton =\n\t\t() =>\n\t\t\tidentical(baseOrganizationsDisciplines(), organizations_disciplines())\n\t\t\t? m('span'\n\t\t\t\t+ css`\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t`\n\t\t\t\t,''\n\t\t\t)\n\t\t\t: m(\"button.btn.btn-warning\"\n\t\t\t\t, {\n\t\t\t\t\tdisabled: false\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tbaseOrganizationsDisciplines(baseOrganizationsDisciplines())\n\t\t\t\t\t\tdeleteOrganizationDisciplineStateProp(false)\n\t\t\t\t\t\tnewtoolPresets([])\n\t\t\t\t\t\ttoolPresetDeletions([])\n\t\t\t\t\t\tcheckMultiple([])\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard all changes since last saving Disciplines\"\n\t\t\t\t}\n\t\t\t\t,\"Discard Changes\"\n\t\t\t)\n\n\tconst orgddata =\n\t\t(d) =>\n\t\t\teditOrganizationPermissions() || editProjectPermissions()\n\t\t\t? {\n\t\t\t\t'Discipline Name':\n\t\t\t\t\tPencil(\n\t\t\t\t\t\t() => d.organizations_disciplines_name()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'organizations_disciplines_name', [d])\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Name of the discipline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t,'Discipline Description':\n\t\t\t\t\tPencil(\n\t\t\t\t\t\t() => d.organizations_disciplines_description()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'organizations_disciplines_description', [d])\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Description of the discipline\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t,'Unit of Measure': d.organizations_disciplines_uom()\n\t\t\t\t,'Average Unit of Measure / Day':\n\t\t\t\t\tm(\n\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t,errorLabel: 'Work Rate Per Day'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tprop: (value) => setOptions(value, 'organizations_disciplines_nominal_rate', [d])\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t,'Task Count': d.completedcount\n\t\t\t\t,'Task Completed Sum': d.completedsum\n\t\t\t\t,'Task Scheduled Sum': d.scheduledsum\n\t\t\t}\n\t\t\t: {\n\t\t\t\t'Discipline Name': d.organizations_disciplines_name()\n\t\t\t\t,'Discipline Description': d.organizations_disciplines_description()\n\t\t\t\t,'Unit of Measure': d.organizations_disciplines_uom()\n\t\t\t\t,'Average Unit of Measure / Day': d.organizations_disciplines_nominal_rate()\n\t\t\t\t,'Task Count': d.completedcount\n\t\t\t\t,'Task Completed Sum': d.completedsum\n\t\t\t\t,'Task Scheduled Sum': d.scheduledsum\n\t\t\t}\n\n\n\tconst largeOrgdTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t, filterFunction.OrganizationDisciplineFilters.filters()\n\t\t\t\t\t, 'organizations_disciplines_name'\n\t\t\t\t)\n\t\t\t\t.map((o, oindex) => ({\n\t\t\t\t\tkey: o.key\n\t\t\t\t\t,selection: getActivateDeleteButton(o)\n\t\t\t\t\t,header:\n\t\t\t\t\t\toindex != 0\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tdisabled: !!check_onames(true)\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tconst neworgd = resetOrganizationDisciplinesForm()\n\t\t\t\t\t\t\t\t\t\t\torganizations_disciplines().unshift(neworgd)\n\t\t\t\t\t\t\t\t\t\t\tcheckMultiple([neworgd])\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,title: \"Create a new type of Discipline for the organization to use to register works\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Create a New Discipline '\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,oindex == 0 && false\n\t\t\t\t\t\t\t? discardChangesButton()\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1.5fr 0.75fr 0.75fr 0.5fr 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: orgddata(o)\n\t\t\t\t}))\n\t\t})\n\n\tconst smallOrgdTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\torganizations_disciplines()\n\t\t\t\t\t, filterFunction.OrganizationDisciplineFilters.filters()\n\t\t\t\t\t, 'organizations_disciplines_name'\n\t\t\t\t)\n\t\t\t\t.map((o, oindex) => ({\n\t\t\t\t\tkey: o.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,getActivateDeleteButton(o)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: !!check_onames(true)\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\tconst neworgd = resetOrganizationDisciplinesForm()\n\t\t\t\t\t\t\t\t\t\torganizations_disciplines().unshift(neworgd)\n\t\t\t\t\t\t\t\t\t\tcheckMultiple([neworgd])\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Create a new type of Discipline for the organization to use to register works\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Create a New Discipline '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,oindex == 0 && false\n\t\t\t\t\t\t\t? discardChangesButton()\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Discipline Name', 'Discipline Description']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == o.organizations_disciplines_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], o.organizations_disciplines_name()].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Unit of Measure', 'Average Unit of Measure / Day']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Task Count', 'Task Completed Sum', 'Task Scheduled Sum', '']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: orgddata(o)\n\t\t\t\t}))\n\t\t})\n\n\n\tconst OrgdTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeOrgdTable )\n\t\t\t\t,desktopOnly( largeOrgdTable )\n\t\t\t\t,mobileOnly( smallOrgdTable )\n\t\t\t\t,tabletOnly( smallOrgdTable )\n\t\t\t]\n\t\t)\n\n\n\tfunction ListFlow(){\n\t\treturn m('div.harth', [\n\t\t\telements.tabset(['Organization Disciplines', 'Workflow Relationships', 'Affected Projects'], indexby)\n\t\t\t,m('br')\n\t\t\t,indexby() == 'Organization Disciplines'\n\t\t\t? [\n\n\t\t\t\tgetfilters(null, \"Discipline\")\n\n\t\t\t\t,check_onames(false)\n\t\t\t\t,saveDiscardButtons()\n\n\t\t\t\t,loading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: organizations_disciplines().length == 0\n\t\t\t\t? elements.alert('info',`Organization Disciplines haven't been created yet`)\n\t\t\t\t: OrgdTable()\n\t\t\t]\n\t\t\t: indexby() == 'Workflow Relationships'\n\t\t\t? [\n\t\t\t\telements.list([\n\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\tdisabled: schedule_id() == \"\" || schedule_id() == null ? true : !!check_fnames()\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tviewtype = EditFlow\n\t\t\t\t\t\t\tform(resetForm())\n\t\t\t\t\t\t\tedit(false)\n\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Create a relationship between existing types of work to automate schedules\"\n\t\t\t\t\t},\"Create\")\n\t\t\t\t\t// elements.action(\n\t\t\t\t\t// \tcompletedProjects() == \"completed\"\n\t\t\t\t\t// \t\t? 'Current Projects'\n\t\t\t\t\t// \t\t: 'Completed Projects'\n\t\t\t\t\t// \t,() => {\n\t\t\t\t\t// \t\tcompletedProjects() == \"completed\"\n\t\t\t\t\t// \t\t\t? completedProjects(\"inprogress\")\n\t\t\t\t\t// \t\t\t: completedProjects(\"completed\")\n\t\t\t\t\t// \t\treturn fetchProjects()\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \t, vm().pending\n\t\t\t\t\t// \t// , ' '\n\t\t\t\t\t// ),\n\t\t\t\t\t,elements.confirmDelete(deleteFlow, vm().pending, DeleteDisabled, deleteFlowStateProp )\n\t\t\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\tdisabled: !vm().selected.flow\n\t\t\t\t\t\t\t|| !vm().primary() && !vm().dependant()\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tvm().selected.flow = null\n\t\t\t\t\t\t\tvm().primary(false)\n\t\t\t\t\t\t\tvm().dependant(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Hide intricate details\"\n\t\t\t\t\t},\"Hide Workflow Data\")\n\t\t\t\t])\n\t\t\t\t,getfilters(null, \"Flow\")\n\n\t\t\t\t,elements.table(data, ['Manage', 'Flow Name', 'Objective', 'Dependency', 'Relationship', '', 'Applies to Projects'],\n\t\t\t\t\tListProcessing(flows(), filterFunction.FlowsFilters.filters(), 'flow_name' ).map(\n\t\t\t\t\t\t(flow) => [\n\t\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tfunction(event){\n\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\tvm().selected.flow = null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,checked: vm().selected.flow == null ? false : vm().selected.flow.flow_id() == flow.flow_id() ? true : false\n\t\t\t\t\t\t\t\t,disabled: vm().selected.flow == null ? false : vm().selected.flow.flow_id() == flow.flow_id() ? false : true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\t\t\t\t\t\t\tcloningFlow(false)\n\t\t\t\t\t\t\t\t\t\t\tviewtype = EditFlow\n\t\t\t\t\t\t\t\t\t\t\tedit(true)\n\t\t\t\t\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Edit a relationship to create a new relationship with identical details\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,flow.flow_name()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,flow.flow_primary_activity.length < 10\n\t\t\t\t\t\t\t\t? R.pluck('discipline_name', flow.flow_primary_activity).join(', ')\n\t\t\t\t\t\t\t\t: getflow_primary_activity(flow)\n\t\t\t\t\t\t\t,flow.flow_dependent_activity.length < 10\n\t\t\t\t\t\t\t\t? R.pluck('discipline_name', flow.flow_dependent_activity).join(', ')\n\t\t\t\t\t\t\t\t: getflow_dependent_activity(flow)\n\t\t\t\t\t\t\t,flow.flow_dependency_relationship()\n\t\t\t\t\t\t\t+ ' '\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\tflow.flow_delay_type() == \"Safety\"\n\t\t\t\t\t\t\t\t\t? flow.flow_safety_ratio() + ' %'\n\t\t\t\t\t\t\t\t\t: flow.flow_delay_in_days()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tvm().selected.flow = flow\n\t\t\t\t\t\t\t\t\t\t\tcloningFlow(true)\n\t\t\t\t\t\t\t\t\t\t\tviewtype = EditFlow\n\t\t\t\t\t\t\t\t\t\t\tedit(false)\n\t\t\t\t\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Copy a relationship to create a new relationship with identical details\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Clone'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,metaDataLoading()\n\t\t\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t\t\t: appliedProjects()[flow.flow_id()]['projectString'].length > 100\n\t\t\t\t\t\t\t\t? getflow_projects(flow)\n\t\t\t\t\t\t\t\t: appliedProjects()[flow.flow_id()]['projectString']\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,schedule_id() == null\n\t\t\t\t\t? elements.alert('info',`Please select a schedule.`)\n\t\t\t\t\t: flows().length\n\t\t\t\t\t\t? null\n\t\t\t\t\t: loading()\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: elements.alert('info',`Workflow Relationships can be used to govern work priorities in this schedule`)\n\n\t\t\t\t,m('br')\n\t\t\t\t,vm().primary() == true && vm().selected.flow\n\t\t\t\t\t?\t\t\t\t\tscrollableTable.legacy(\n\t\t\t\t\t\tdata\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t['Objective Disciplines', 1]\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t([text,width]) => ({ text, width })\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,() => vm().selected.flow.flow_primary_activity.map( r => [r.discipline_name]).map(\n\t\t\t\t\t\t\tr => ({ children: r , height: 55 })\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{ height: 300, headerHeight: 25, minWidth: 700 }\n\t\t\t\t\t) : null\n\n\t\t\t\t,m('br')\n\t\t\t\t,vm().dependant() == true && vm().selected.flow\n\t\t\t\t\t? scrollableTable.legacy(\n\t\t\t\t\t\tdata\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t['Dependant Disciplines', 1]\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t([text,width]) => ({ text, width })\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,() => vm().selected.flow.flow_dependent_activity.map( r => [r.discipline_name]).map(\n\t\t\t\t\t\t\tr => ({ children: r , height: 40 })\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{ height: 300, headerHeight: 25, minWidth: 600 }\n\t\t\t\t\t) : null\n\n\t\t\t]\n\t\t\t: [\n\t\t\t\tmetaDataLoading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: projects().length != 0\n\t\t\t\t? elements.table(data, ['Project', 'Start Date', 'Construction End', 'Handover Date', ''],\n\t\t\t\t\tprojects().map(\n\t\t\t\t\t\t(p) => [\n\t\t\t\t\t\t\tp.project_name()\n\t\t\t\t\t\t\t,moment(p.project_start_date()).format(\"ll\")\n\t\t\t\t\t\t\t,moment(p.project_dead_date()).format(\"ll\")\n\t\t\t\t\t\t\t,moment(p.project_commissioning_date()).format(\"ll\")\n\t\t\t\t\t\t\t,elements.details(\n\t\t\t\t\t\t\t\t'Flows'\n\t\t\t\t\t\t\t\t, appliedFlows()[p.project_id()]['flow_list']\n\t\t\t\t\t\t\t\t, appliedFlows()[p.project_id()]['activeRelation']\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: { disabled: true }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: elements.alert('info',`There aren't any projects in this schedule`)\n\t\t\t]\n\t\t])\n\t}\n\n\n\tfunction EditFlow(){\n\n\t\treturn m('div.harth',[\n\t\t\tm('h4','Specify dependency relationships')\n\t\t\t,m('br')\n\t\t\t,editPermissions() ? elements.list([\n\t\t\t\tedit() == true\n\t\t\t\t\t? elements.back(\n\t\t\t\t\t\t\"Go Back to the Workflow list without saving\"\n\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\tcloningFlow(false)\n\t\t\t\t\t\t\tdeleteObjective = []\n\t\t\t\t\t\t\tdeleteDependent = []\n\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\tviewtype = ListFlow\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t : \t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\tform(resetForm())\n\t\t\t\t\t\t\tvm().selected.flow = null\n\t\t\t\t\t\t\tdeleteObjective = []\n\t\t\t\t\t\t\tdeleteDependent = []\n\t\t\t\t\t\t\tviewtype = ListFlow\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Discard this Workflow without saving\"\n\t\t\t\t\t},\"Discard\")\n\n\n\t\t\t\t,SaveDisabled(true) || identical(vm().selected.flow, form().flow)\n\t\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t\t: elements.action('Save', sendFlows, vm().pending)\n\t\t\t\t,edit() == true\n\t\t\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\tdisabled: identical(vm().selected.flow, form().flow)\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\tcloningFlow(false)\n\t\t\t\t\t\t\tdeleteObjective = []\n\t\t\t\t\t\t\tdeleteDependent = []\n\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Discard all changes since last saving this flow\"\n\t\t\t\t\t},\"Discard Changes\")\n\t\t\t\t : null\n\t\t\t]) : elements.list([\n\t\t\t\telements.back(\n\t\t\t\t\t\"Go Back to the Workflows list without saving\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\tcloningFlow(false)\n\t\t\t\t\t\terrors({})\n\t\t\t\t\t\tviewtype = ListFlow\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t])\n\n\t\t\t,SaveDisabled(false)\n\n\t\t\t,elements.list([\n\t\t\t\tm('label.control-label', 'Designation '\n\t\t\t\t\t,elements.textInput(\n\t\t\t\t\t\tform().flow.flow_name, {\n\t\t\t\t\t\t\tdisabled: editPermissions() == false\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t])\n\n\t\t\t,elements.alert('info',\n\t\t\t\t\"All objectives have this equivalent relationship \"\n\t\t\t\t+ \"to each dependent workflow. Options will get restricted when items are added \"\n\t\t\t\t+ \"to prevent the creation of circular references \"\n\t\t\t)\n\n\t\t\t,organizations_disciplines().length == 0\n\t\t\t\t? elements.alert('warning', `To help you build relationships `\n\t\t\t\t\t+ `disciplines must be created on projects or resources`\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\t,elements.errorAlert(\n\t\t\t\t`I've restricted `\n\t\t\t\t,' and '\n\t\t\t\t,' to prevent detrimental relationships'\n\t\t\t\t,[primaryOptions(), dependentOptions()]\n\t\t\t\t,[\n\t\t\t\t\t(d) => d.length == 0 ? `Objective Options` : null\n\t\t\t\t\t,(d) => d.length == 0 ? `Dependent Options` : null\n\t\t\t\t]\n\t\t\t\t,false\n\t\t\t\t,true\n\t\t\t\t,'warning'\n\t\t\t\t,disconnectedDisciplines().length > 0\n\t\t\t\t\t? [\n\t\t\t\t\t\tm('label.control-label', 'Disconnected Disciplines')\n\t\t\t\t\t\t,disconnectedDisciplines().map((d, dindex) =>\n\t\t\t\t\t\t\tdindex + 1\n\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t+ d.discipline_name()\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\td.discipline_description()\n\t\t\t\t\t\t\t\t\t? ' - ' + d.discipline_description()\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\t\t\t\t\t\t,m('hr')\n\t\t\t\t\t]\n\t\t\t\t\t: null\n\t\t\t)\n\n\t\t\t,elements.splitPane(\n\t\t\t\t[ m('h4','Objectives')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Add objectives ')\n\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\tprimaryOptions\n\t\t\t\t\t\t,(v, model) => {\n\t\t\t\t\t\t\teditOption(true, form().flow.flow_primary_activity , v)\n\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\tmodel.chosen(null)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'orgDisciplineNameDescription'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: editPermissions() == false || primaryOptions().length == 0\n\t\t\t\t\t\t\t,title: \"Select a discipline to add to the objectives\"\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,(value, element) => {\n\t\t\t\t\t\t\telement.value = \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,!form().flow.flow_primary_activity.length\n\t\t\t\t\t? null\n\t\t\t\t\t:( editPermissions()\n\t\t\t\t\t\t? elements.strikeList\n\t\t\t\t\t\t: elements.nonStrikeList\n\t\t\t\t\t)(\n\t\t\t\t\t\t\tform().flow.flow_primary_activity\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\t\tlabel: label.discipline_name\n\t\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\t\teditOption(false, form().flow.flow_primary_activity , label )\n\t\t\t\t\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t\t,[m('h4','Dependents')\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Add dependents ')\n\t\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\t\tdependentOptions\n\t\t\t\t\t\t\t,(v, model) => {\n\t\t\t\t\t\t\t\teditOption(true, form().flow.flow_dependent_activity , v)\n\t\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\t\tmodel.chosen(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,'orgDisciplineNameDescription'\n\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\tdisabled: editPermissions() == false || dependentOptions().length == 0\n\t\t\t\t\t\t\t\t,title: \"Select a discipline that will affect objectives\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,(value, element) => {\n\t\t\t\t\t\t\t\telement.value = \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t,!form().flow.flow_dependent_activity.length\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t:( editPermissions()\n\t\t\t\t\t\t\t? elements.strikeList\n\t\t\t\t\t\t\t: elements.nonStrikeList\n\t\t\t\t\t\t)(\n\t\t\t\t\t\t\tform().flow.flow_dependent_activity\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\t\t\t\tlabel: label.discipline_name\n\t\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\t\teditOption(false, form().flow.flow_dependent_activity , label )\n\t\t\t\t\t\t\t\t\t\t\tgetAvailableOptions()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t)\n\n\t\t\t,m('br')\n\n\t\t\t,elements.list([\n\t\t\t\tm('label.control-label', 'Dependency Relationship '\n\t\t\t\t\t,elements.select(\n\t\t\t\t\t\t[\"Start to Start\", \"End to Start\", \"Risk Ratio\"]\n\t\t\t\t\t\t, form().flow.flow_dependency_relationship\n\t\t\t\t\t\t, {disabled: editPermissions() == false }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\n\t\t\t,delaymessage(form().flow.flow_dependency_relationship())\n\n\t\t\t,m('hr')\n\n\t\t\t,form().flow.flow_dependency_relationship() == \"Start to Start\"\n\t\t\t|| form().flow.flow_dependency_relationship() == \"End to Start\"\n\n\t\t\t? [\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label', 'Offset Duration '\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Offset Duration'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: form().flow.flow_delay_in_days\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tdisabled: editPermissions() == false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,delaytypemessage(form().flow.flow_dependency_relationship())\n\t\t\t]\n\t\t\t: [\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label', 'Risk Ratio % '\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Risk Ratio'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: form().flow.flow_safety_ratio\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0.01\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t, max: 100\n\t\t\t\t\t\t\t\t\t, disabled: editPermissions() == false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,`The value of the ratio is used to make predictions\n\t\t\t\tof exceeding limits that would prove detrimental to the flow of work.\n\t\t\t\tA larger Risk Ratio saves more time but will be very dependant on\n\t\t\t\treliable progressive work flow, (higher ratio, higher risk) 40 is a safe medium`\n\t\t\t]\n\n\t\t])\n\t}\n\n\n\tfunction view(){\n\t\treturn m('div'\n\t\t\t, viewtype()\n\t\t\t, DetailsPane(\n\t\t\t\tdetailsPaneOpen\n\t\t\t\t,checkMultiple().length > 1\n\t\t\t\t\t? 'Edit Multiple Disciplines'\n\t\t\t\t\t: ''\n\t\t\t\t,() => detailPaneInputs()\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nexport default Main","/* global setTimeout */\n\nimport m from 'bacta'\nimport * as elements from '../components/elements'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\n\nimport moment from 'moment'\nimport humanList from '../utils/human_list'\nimport * as R from 'ramda'\nimport {identical} from '../utils/harth-identical'\nimport NumberInput from '../components/number'\n\nimport scrollableTable from '../components/scrollableTable'\nimport autocomplete from './autocomplete'\nimport Permissions from '../models/permissions'\nimport Promise from 'bluebird'\nimport { prop } from '../../../stream'\n/*\n\tModel, View, Intent\n\n\tModel: Any data storage. Both the current state of the user interface, and\n\t\tdata that will be persisted to a database layer.\n\t\tIt also includes any functions for selecting or manipulating that data.\n\n\tIntent: Any functions that represent the user performing an action. These functions represent\n\t\twhat the user wants to do. Whether it be creating a new invite, logging in.\n\t\tThat's all representing the users intent.\n\n\tView: The view is a representation of the Model and provides affordances for the user\n\t\tto express their intent. These affordances are input elements such as\n\t\tdropdowns, text inputs, checkboxes etc...\n\n\tController: The Controller binds the Model, View and Intent together. It do some\n\t\tsetup code and faciliate communication between the three other layers.\n*/\n\nfunction InterruptionAffected({\n\tinterruptions_affected_entity_name\n\t,interruptions_affected_entity_id\n\t,interruptions_id\n\t,interruptions_affected_id\n\t,ParentRecognitionID\n\t,ParentRecognition\n\t,created\n}){\n\treturn {\n\t\tinterruptions_affected_entity_name:\n\t\t\tm.prop(interruptions_affected_entity_name)\n\t\t,interruptions_affected_entity_id:\n\t\t\tm.prop(interruptions_affected_entity_id)\n\t\t,interruptions_affected_id:\n\t\t\tm.prop(interruptions_affected_id)\n\t\t,interruptions_id:\n\t\t\tm.prop(interruptions_id)\n\t\t,ParentRecognitionID: ParentRecognitionID\n\t\t,ParentRecognition: ParentRecognition\n\t\t,created\n\t}\n}\n\n/*\n\tIntent: Functions that help the user do what they want to do...\n*/\nfunction Intent(model){\n\n\tfunction removeModelAffected(entity_id){\n\t\tconst index =\n\t\t\tR.findIndex(function(chr) {\n\t\t\t\treturn chr.interruptions_affected_entity_id() == entity_id\n\t\t\t}, model.form().interruption.interruptions_affected)\n\n\t\tif(index > -1){\n\t\t!model.form().interruption.interruptions_affected[index]\n\t\t\t.interruptions_affected_id()\n\t\t\t\t? null\n\t\t\t\t: model.deleteAffected.push(\n\t\t\t\t\tmodel.form().interruption.interruptions_affected[index]\n\t\t\t\t\t\t.interruptions_affected_id()\n\t\t\t\t)\n\t\t}\n\n\t\tindex > -1\n\t\t\t? model.form().interruption.interruptions_affected\n\t\t\t\t.splice(index, 1)\n\t\t\t: null\n\t}\n\n\tfunction deleteInterruptionsAffected(entity_id, makeAPICalls){\n\t\tlet requests = []\n\n\t\tmakeAPICalls\n\t\t\t? requests = model.deleteAffected.map((t) => model.api.interruptionsAffected.remove.one(t))\n\t\t\t: removeModelAffected(entity_id)\n\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(requests)\n\t\t\t: true\n\t}\n\n\tlet sendInterruptions = function(){\n\t\tif (identical(model.vm().selected.interruption, model.form().interruption)){\n\t\t\treturn Promise.resolve([])\n\t\t\t\t.then(m.redraw)\n\t\t} else {\n\t\t\treturn deleteInterruptionsAffected(null, true)\n\t\t\t.then(function(){\n\t\t\t\tmodel.deleteAffected = []\n\t\t\t\treturn model.api.interruptions.patch.many(\n\t\t\t\t\t[model.form().interruption]\n\t\t\t\t\t,model.data.schedule_id()\n\t\t\t\t)\n\t\t\t\t\t.then( model.interruptions )\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\tlet updated_res = model.interruptions().find((i) => i.interruptions_name() == model.form().interruption.interruptions_name() )\n\t\t\t\t\t\tmodel.vm().selected.interruption = updated_res\n\t\t\t\t\t\tmodel.cloningInterruptions(false)\n\t\t\t\t\t\tmodel.viewtype = EditInterruption\n\t\t\t\t\t\treturn model.edit(true)\n\t\t\t\t\t})\n\t\t\t\t\t.then(updateInterruptionsList)\n\t\t\t\t\t.then(m.redraw)\n\t\t\t})\n\t\t}\n\n\t}\n\n let deleteInterruptions = function(){\n let interruptions_id = model.vm().selected.interruption.interruptions_id()\n return Promise.resolve(\n interruptions_id && model.api.interruptions.remove.one(interruptions_id)\n )\n .then(model.deleteInterruptions)\n\t\t.then(m.redraw)\n }\n\n\n\tfunction updateInterruptionsList(){\n\t\tconst partitionedList =\n\t\t\tR.partition(\n\t\t\t\t(a) =>\n\t\t\t\t\t!model.form().interruption.interruptions_affected\n\t\t\t\t\t.find((b) =>\n\t\t\t\t\t\tb.interruptions_affected_entity_id()\n\t\t\t\t\t\t== a.CommonRecognition\n\t\t\t\t\t)\n\t\t\t\t, model.resourceProjectTotal()\n\t\t\t)\n\n\t\tmodel.resourceProjectList(\n\t\t\tR.flatten(partitionedList[0])\n\t\t)\n\n\t\tmodel.resourceProjectInterrupted(\n\t\t\tR.flatten(partitionedList[1])\n\t\t)\n\n\t\treturn true\n\t}\n\n\n\tfunction fetchProjects(){\n\t\tmodel.loading(true)\n\t\treturn model.data.fetchProjectsBySchedule({\n\t\t\tschedule_id: model.data.schedule_id()\n\t\t\t,completedProjects:model.completedProjects()\n\t\t\t,depth: 2\n\t\t\t, props: {\n\t\t\t\tprojects: [\n\t\t\t\t\t'project_id'\n\t\t\t\t\t,'project_name'\n\t\t\t\t]\n\t\t\t\t,disciplines: [\n\t\t\t\t\t'discipline_id'\n\t\t\t\t\t,'project_id'\n\t\t\t\t\t,'discipline_name'\n\t\t\t\t]\n\t\t\t}\n\t\t})\n\t\t\t.then((res) => {\n\t\t\t\tmodel.projects(res)\n\t\t\t\tmodel.loading(false)\n\t\t\t})\n\t\t\t.then( m.redraw )\n\n\t}\n\n\tmodel.data.currentRoute('Nothing')\n\tprop.merge(\n\t\t[\n\t\t\tmodel.data.initiateContractFetch\n\t\t]\n\t).map(function([i]){\n\t\tmodel.loading(true)\n\t\tconst s = i.schedule_id\n\t\tconst schange = i.schange || !model.data.routeInitialized()['interruptions']\n\t\tconst ochange = i.ochange || !model.data.routeInitialized()['interruptions']\n\n\t\tif ( ochange || schange){\n\t\t\tmodel.vm().selected.interruption = {}\n\t\t\tmodel.viewtype = ListInterruption\n\t\t\tmodel.deleteAffected = []\n\t\t\tmodel.deleteStateProp(false)\n\t\t}\n\n\t\treturn Promise.all([\n\t\t\tmodel.data.fetchInterruptions({schedule_id: s})\n\t\t\t\t.then(model.interruptions)\n\t\t])\n\t\t\t.then(function(){\n\t\t\t\tmodel.metaDataLoading(true)\n\n\t\t\t\t!schange\n\t\t\t\t? null\n\t\t\t\t: model.data.fetchProjectsBySchedule({\n\t\t\t\t\tschedule_id: model.data.schedule_id()\n\t\t\t\t\t,completedProjects:model.completedProjects()\n\t\t\t\t\t,depth: 2\n\t\t\t\t\t, props: {\n\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t'project_id'\n\t\t\t\t\t\t\t,'project_name'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,disciplines: [\n\t\t\t\t\t\t\t'discipline_id'\n\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t,'discipline_name'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\t.then(model.projects)\n\n\t\t\t\t!ochange\n\t\t\t\t? null\n\t\t\t\t: model.data.fetchResource({\n\t\t\t\t\tdepth: 2\n\t\t\t\t\t, props: {\n\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,teams: [\n\t\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t\t,'crew_name'\n\t\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\t.then(model.resources)\n\n\t\t\t\ti.schange = false\n\t\t\t\ti.ochange = false\n\n\t\t\t\treturn model.loading(false)\n\t\t\t})\n\t\t\t.then( m.redraw )\n\t})\n\n\treturn {\n\t\tsendInterruptions\n\t\t, deleteInterruptions\n\t\t, updateInterruptionsList\n\t\t, deleteInterruptionsAffected\n\t\t, fetchProjects\n\t}\n}\n\n\n\n/*\n\tModel: Data storage and functions that interact with that data.\n\n\tThe vm represents the view model, any thing to do with the state of the UI\n\tthat doesn't map to a database record is stored on the view model.\n\n\tIt could be whether or not a button is disabled due to a background process.\n\tOr it could be storing how many items are selected in order to render a tally.\n\n*/\nfunction Model(data){\n\n\tconst loading = m.prop(false)\n\tconst interruptions = prop([])\n\tconst projects = prop([])\n\tconst resources = prop([])\n\tconst form = m.prop({\n\t\t\tinterruption: {}\n\t\t}\n\t)\n\tconst currentSchedule = data.scoped(null)\n\tconst resourceProjectList = prop([])\n\tconst resourceProject =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tprojects\n\t\t\t\t,resources\n\t\t\t]\n\t\t).map(([p,r]) => [].concat(p,r) )\n\n\tconst metaDataLoading = prop(false)\n\tconst resourceProjectTotal =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tprojects\n\t\t\t\t,resources\n\t\t\t]\n\t\t).map(([p,r]) => {\n\n\t\t\tconst oList =\n\t\t\t\tR.flatten(\n\t\t\t\t\tp.map(\n\t\t\t\t\t\t(p) => R.flatten(p.disciplines)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.concat(\n\t\t\t\t\tR.flatten(\n\t\t\t\t\t\tr.map(\n\t\t\t\t\t\t\t(r) => R.flatten(r.crews)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\tmetaDataLoading(false)\n\n\t\t\treturn oList\n\t\t})\n\n\n\n\tconst resourceProjectInterrupted = prop([])\n\tconst editPermissions = m.prop(false)\n\tconst deleteAffected = []\n\tconst completedProjects = m.prop('inprogress')\n\n\tconst vm = m.prop({\n\t\tpending: m.prop(false)\n\t\t,selected: {\n\t\t\tinterruption: {}\n\t\t}\n\t})\n\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Resource'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\tconst errors = data.scoped({})\n\tconst permissions = data.permissions\n\n\t// eslint-disable-next-line no-unused-vars\n\tconst forceRedraw =\n\t\terrors\n\t\t.map(function(){\n\t\t\treturn setTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t})\n\n\tconst deleteStateProp = m.prop(false)\n\n\tlet cloningInterruptions = function(clonemarker){\n\t\tlet clone = resetForm().interruption\n\t\tclone.interruptions_name(\n\t\t\tclonemarker == false\n\t\t\t? vm().selected.interruption.interruptions_name()\n\t\t\t: vm().selected.interruption.interruptions_name() + \" (Clone)\"\n\t\t)\n\t\tclone.interruptions_weather( vm().selected.interruption.interruptions_weather() )\n\t\tclone.interruptions_start_date( vm().selected.interruption.interruptions_start_date() )\n\t\tclone.interruptions_duration( vm().selected.interruption.interruptions_duration() )\n\t\tclone.interruptions_end_date( vm().selected.interruption.interruptions_end_date() )\n\t\tclone.interruptions_repetition_mode( vm().selected.interruption.interruptions_repetition_mode() )\n\t\tclone.interruptions_id( clonemarker == false ? vm().selected.interruption.interruptions_id() : \"\" )\n\t\tclone.interruptions_affected =\n\t\t\tvm().selected.interruption.interruptions_affected\n\t\t\t.map((iaffected) => {\n\t\t\t\treturn Object.assign(\n\t\t\t\t\t{}\n\t\t\t\t\t, iaffected\n\t\t\t\t\t,{\n\t\t\t\t\t\tinterruptions_affected_id:\n\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\tclonemarker == false\n\t\t\t\t\t\t\t\t? iaffected.interruptions_affected_id()\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,interruptions_id: m.prop(\n\t\t\t\t\t\t\tclonemarker == false ? iaffected.interruptions_id() : \"\")\n\t\t\t\t\t\t,interruptions_affected_entity_name:\n\t\t\t\t\t\t\tm.prop(iaffected.interruptions_affected_entity_name())\n\t\t\t\t\t\t,interruptions_affected_entity_id:\n\t\t\t\t\t\t\tm.prop(iaffected.interruptions_affected_entity_id())\n\t\t\t\t\t\t,created: clonemarker\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t})\n\t\tform().interruption = clone\n\t\treturn clone\n\t}\n\n\n\tlet deleteInterruptions = function(){\n\t\tlet index = R.findIndex(\n function(chr) { return chr.interruptions_id() == vm().selected.interruption.interruptions_id()},\n interruptions()\n )\n\t\tinterruptions().splice(index, 1)\n\t\tvm().selected.interruption = {}\n\t}\n\n\n\tfunction resetForm(){\n\t\tlet form = {\n\t\t\tinterruption : {\n\t\t\t\tinterruptions_id: m.prop()\n\t\t\t\t,interruptions_weather: m.prop(false)\n\t\t\t\t,interruptions_name: m.prop(null)\n\t\t\t\t,interruptions_start_date: m.prop(new Date().setHours(0,0,0,0))\n\t\t\t\t,interruptions_duration: m.prop(null)\n\t\t\t\t,interruptions_end_date: m.prop(new Date().setHours(0,0,0,0))\n\t\t\t\t,interruptions_repetition_mode: m.prop('Once')\n\t\t\t\t,interruptions_affected: []\n\t\t\t}\n\t\t}\n\t\treturn form\n\t}\n\n\n\n\tlet check_Inames = function(){\n\t\tlet state = false\n\t\tinterruptions().every((interruption) => {\n\t\t\tif (interruption.interruptions_name() == null\n\t\t\t\t|| interruption.interruptions_name() == \"\"\n\t\t\t\t|| R.countBy(function(chr) { return chr.interruptions_name() == interruption.interruptions_name() }, interruptions() ).true > 1\n\t\t\t\t ){ state = true}\n\t\t\treturn state == false\n\t\t})\n\t\treturn state\n\t}\n\n\tlet checked_crews = function(resource){\n\t\tlet state = false\n\t\tresource.crews.every((crew) => {\n\t\t\tstate = R.findIndex(\n function(chr) { return chr.interruptions_affected_entity_id() == crew.crew_id() },\n form().interruption.interruptions_affected\n ) >= 0 ? true : false\n\t\t\treturn state == false\n\t\t})\n\t\treturn state\n\t}\n\n\n\tlet DeleteDisabled = function(){\n\t\treturn\tinterruptions().length > 0\n\t\t\t? \t\t\t\t!vm().selected.interruption.interruptions_name ? true : false\n\t\t\t : true\n\t}\n\n\tfunction SaveDisabled(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.interruptions_name()\n\t\t\t,interruptions().filter((r) =>\n\t\t\t\tr.interruptions_id() != form().interruption.interruptions_id()\n\t\t\t).concat(form().interruption)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.interruptions_name() ? `Interruption Name must not be empty ` : null\n\t\t\t,(d) => !d.interruptions_duration() ? `Duration must not be empty ` : null\n\t\t\t,(d) => !d.interruptions_start_date() ? `Start Date must not be empty ` : null\n\t\t\t,(d) =>\tcount[d.interruptions_name()] > 1 ? `Interruption Names must not be duplicated` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t,[form().interruption]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,Object.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tlet WholePeriod = function(){\n\t\tlet count = 1\n\t\tlet nextdate = new Date(form().interruption.interruptions_start_date()).setHours(0,0,0,0)\n\t\tlet lastdate = new Date(form().interruption.interruptions_end_date()).setHours(0,0,0,0)\n\t\twhile ( nextdate <= lastdate && nextdate != lastdate){\n\t\t\tcount = count + 1\n\t\t\tnextdate = nextdate + 24 * 60 * 60 * 1000\n\t\t}\n\t\tform().interruption.interruptions_duration(count)\n\t\treturn form().interruption.interruptions_duration()\n\t}\n\n\tlet edit = m.prop(false)\n\n\tlet viewtype = ListInterruption\n\n\tpermissions.map(function(p){\n\n\t\teditPermissions(\n\t\t\tPermissions.hasWrite(p, 'interruption_management')\n\t\t)\n\t\tm.redraw()\n\t\treturn null\n\t})\n\n\tlet filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'interruptions_weather', better_name: \"Weather Interruption\" }\n\t\t\t,{ugly_name: 'interruptions_name', better_name: \"Interruption Name\" }\n\t\t\t,{ugly_name: 'interruptions_affected', better_name: \"Amount of Affected Projects/Resources/Teams\" }\n\t\t\t,{ugly_name: 'interruptions_affected_entity_name', better_name: \"Affected Projects/Resources/Teams\" }\n\t\t]\n\t\t,uniqueArrays: []\n\t\t,template: {\n\t\t\tinterruptions_name: \"\"\n\t\t\t,interruptions_weather: true\n\t\t\t,interruptions_start_date: \"date\"\n\t\t\t,interruptions_duration: 0\n\t\t\t,interruptions_end_date: \"date\"\n\t\t\t,interruptions_repetition_mode: \"\"\n\t\t\t,interruptions_affected: [{\n\t\t\t\tinterruptions_affected_entity_name: \"\"\n\t\t\t}]\n\t\t},\n\t}\n\n\tlet getfilters = function(button, marker){\n\t\tlet datainput = marker == \"Interruption\"\n\t\t\t? filterFunction.interruptionFilters\n\t\t\t: filterFunction.affectedFilters\n\t\tif (datainput == null){\n\t\t\tfilterFunction.interruptionFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template\n\t\t\t\t,disabled: () => interruptions().length == 0\n\t\t\t}\n\t\t\tfilterFunction.affectedFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.interruptions_affected[0]\n\t\t\t\t,disabled: () => form().interruption.interruptions_affected.length == 0\n\t\t\t}\n\t\t\tdatainput = marker == \"Interruption\" ? filterFunction.interruptionFilters : filterFunction.affectedFilters\n\t\t}\n\t\tlet gotfilters = datainput == null ? null : datainput.operationalFilters(\n\t\t\tfilterView( datainput.template, datainput.filters(), datainput.changeNames, datainput.uniqueArrays, datainput.disabled, marker, data.scoped )\n\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters.generatedElements\n\t}\n\n\treturn {\n\t\tdata\n\t\t,interruptions\n\t\t,projects\n\t\t,resources\n\t\t,vm\n\t\t,cloningInterruptions\n\t\t,DeleteDisabled\n\t\t,edit\n\t\t,WholePeriod\n\t\t,form\n\t\t,deleteInterruptions\n\t\t,resetForm\n\t\t,check_Inames\n\t\t,checked_crews\n\t\t,SaveDisabled\n\t\t,viewtype\n\t\t,request: data.request\n\t\t,editPermissions\n\t\t,permissions\n\t\t,getfilters\n\t\t,filterFunction\n ,loading\n\t\t,resourceProject\n\t\t,resourceProjectList\n\t\t,resourceProjectTotal\n\t\t,resourceProjectInterrupted\n\t\t,deleteAffected\n\t\t,deleteStateProp\n\t\t,api: data.api\n\t\t,errors\n\t\t,missingPermissions\n\t\t,completedProjects\n\t\t,metaDataLoading\n\t\t,currentSchedule\n\t}\n}\n\n/*\n\tThe controller is the glue that sticks the model and intent together.\n\tIt exposes the model and intent to the view by returning them.\n\n\tThe controller \"controls\" how each layer interacts.\n*/\n\nfunction Main({ attrs: { data } }){\n\n\tlet model = Model(data)\n\tlet intent = Intent(model)\n\n\tconst ctrl = { model, intent }\n\tfunction view(){\n\t\treturn m('div', ctrl.model.viewtype(ctrl))\n\t}\n\n\treturn { view }\n}\n\n\n\nfunction ListInterruption(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('h4','Create, edit or delete an interrupt that will affect the schedule')\n\t\t,m('hr')\n\t\t,elements.list([\n\t\t\tm(\"button.btn.\", {\n\t\t\t\tdisabled: !!ctrl.model.check_Inames()\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tctrl.model.viewtype = EditInterruption\n\t\t\t\t\tctrl.model.form().interruption = ctrl.model.resetForm().interruption\n\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t}\n\t\t\t\t,title: \"Create an event or some recurring conditions that interrupts progress\"\n\t\t\t},\"Create\")\n\t\t\t,elements.confirmDelete(ctrl.intent.deleteInterruptions, ctrl.model.vm().pending, ctrl.model.DeleteDisabled, ctrl.model.deleteStateProp )\n\t\t\t// ,elements.action(\n\t\t\t// \tctrl.model.completedProjects() == \"completed\"\n\t\t\t// \t\t? 'Current Projects'\n\t\t\t// \t\t: 'Completed Projects'\n\t\t\t// \t,() => {\n\t\t\t// \t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t// \t\t\t? ctrl.model.completedProjects(\"inprogress\")\n\t\t\t// \t\t\t: ctrl.model.completedProjects(\"completed\")\n\t\t\t// \t\treturn ctrl.intent.fetchProjects()\n\t\t\t// \t}\n\t\t\t// \t, ctrl.model.vm().pending\n\t\t\t// )\n\t\t])\n\t\t,ctrl.model.getfilters(null, \"Interruption\")\n\t\t,elements.table(ctrl.model.data, ['Manage', 'Interruption Name', 'Start Date', 'End Date', 'Repetition Mode', '', 'Applies to'],\n\t\t\tListProcessing(ctrl.model.interruptions(), ctrl.model.filterFunction.interruptionFilters.filters(), 'interruptions_name' ).map(\n\t\t\t\t(interruption) => [\n\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\tonchange: \tfunction(event){\n\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm().selected.interruption = interruption\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm().selected.interruption = {}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,checked: !ctrl.model.vm().selected.interruption.interruptions_id\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: ctrl.model.vm().selected.interruption.interruptions_id()\n\t\t\t\t\t\t\t== interruption.interruptions_id()\n\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t,disabled: !ctrl.model.vm().selected.interruption.interruptions_id\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: ctrl.model.vm().selected.interruption.interruptions_id()\n\t\t\t\t\t\t\t== interruption.interruptions_id()\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: true\n\t\t\t\t\t})\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tctrl.model.vm().selected.interruption = interruption\n\t\t\t\t\t\t\t\t\tctrl.model.cloningInterruptions(false)\n\t\t\t\t\t\t\t\t\tctrl.model.viewtype = EditInterruption\n\t\t\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Edit an existing interruption and all of its details\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,interruption.interruptions_name()\n\t\t\t\t\t)\n\t\t\t\t\t,moment( interruption.interruptions_start_date() ).format(\"ll\")\n\t\t\t\t\t,moment( interruption.interruptions_end_date() ).format(\"ll\")\n\t\t\t\t\t,interruption.interruptions_repetition_mode()\n\t\t\t\t\t,m(`a`\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tctrl.model.vm().selected.interruption = interruption\n\t\t\t\t\t\t\t\t\tctrl.model.cloningInterruptions(true)\n\t\t\t\t\t\t\t\t\tctrl.model.viewtype = EditInterruption\n\t\t\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Copy an existing interruption and all of its details\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Clone'\n\t\t\t\t\t)\n\t\t\t\t\t,elements.list( R.pipe(R.map( R.invoker(0, 'interruptions_affected_entity_name')),R.uniq)(interruption.interruptions_affected))\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\t\t,m('br')\n\t\t,ctrl.model.interruptions().length == 0\n\t\t\t? ctrl.model.loading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: elements.alert('info',`No Interruptions have been created`)\n\t\t\t: null\n\t])\n}\n\n\n\n\nfunction EditInterruption(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('h4','Specify interruptions')\n\t\t,m('hr')\n\t\t,ctrl.model.editPermissions()\n\t\t\t? elements.list([\n\t\t\t\tctrl.model.edit()\n\t\t\t\t\t? elements.back(\n\t\t\t\t\t\t\"Go back to the main list without saving\"\n\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.cloningInterruptions(false)\n\t\t\t\t\t\t\tctrl.model.deleteAffected = []\n\t\t\t\t\t\t\tctrl.model.viewtype = ListInterruption\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: m(\"button.btn.\", {\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.form(ctrl.model.resetForm())\n\t\t\t\t\t\t\tctrl.model.vm().selected.interruption = {}\n\t\t\t\t\t\t\tctrl.model.deleteAffected = []\n\t\t\t\t\t\t\tctrl.model.viewtype = ListInterruption\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"Discard\")\n\t\t\t\t,ctrl.model.edit()\n\t\t\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\tdisabled: identical(ctrl.model.vm().selected.interruption, ctrl.model.form().interruption)\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\tctrl.model.cloningInterruptions(false)\n\t\t\t\t\t\t\tctrl.model.deleteAffected = []\n\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: \"Discard all changes made since last saving this interruption\"\n\t\t\t\t\t},\"Discard Changes\")\n\t\t\t\t\t: null\n\t\t\t\t,ctrl.model.SaveDisabled(true) || identical(ctrl.model.vm().selected.interruption, ctrl.model.form().interruption)\n\t\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t\t: elements.action('Save', ctrl.intent.sendInterruptions, ctrl.model.vm().pending)\n\t\t\t])\n\t\t\t: elements.list([\n\t\t\t\telements.back(\n\t\t\t\t\t\"Go back to the main list without saving\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.form(ctrl.model.resetForm())\n\t\t\t\t\t\tctrl.model.vm().selected.interruption = {}\n\t\t\t\t\t\tctrl.model.viewtype = ListInterruption\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t])\n\n\t\t,m(\"br\")\n\n\t\t,elements.splitPane([\n\t\t\telements.formInput([\n\t\t\t\t\"Interruption Name\"\n\t\t\t\t, ctrl.model.form().interruption.interruptions_name\n\t\t\t\t, {disabled: !ctrl.model.editPermissions()}\n\t\t\t])\n\t\t\t,ctrl.model.SaveDisabled()\n\t\t\t,elements.list([\n\t\t\t\tm('label.control-label', 'Start Date'\n\t\t\t\t\t,elements.dateInput(\n\t\t\t\t\t\tctrl.model.form().interruption.interruptions_start_date\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tdisabled: ctrl.model.editPermissions() == false\n\t\t\t\t\t\t\t,title: \"Date the interruption will start\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'End Date'\n\t\t\t\t\t,elements.dateInput(\n\t\t\t\t\t\tctrl.model.form().interruption.interruptions_end_date\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tdisabled: \tctrl.model.editPermissions() == false\n\t\t\t\t\t\t\t,title: \"Date the interruption will end\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Duration'\n\t\t\t\t\t,ctrl.model.form().interruption.interruptions_repetition_mode() == 'Once'\n\t\t\t\t\t\t? \": \" + ctrl.model.WholePeriod()\n\t\t\t\t\t\t: m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Duration'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: ctrl.model.form().interruption.interruptions_duration\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t, disabled: ctrl.model.editPermissions() == false\n\t\t\t\t\t\t\t\t\t, title: \"The length of the delay as a number of consecutive days including the start date\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\t\t\t,m('label.control-label', 'Repetition'\n\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t['Once', 'Weekly', 'Monthly', 'Yearly']\n\t\t\t\t\t, ctrl.model.form().interruption.interruptions_repetition_mode\n\t\t\t\t\t,{ disabled: ctrl.model.editPermissions() == false\n\t\t\t\t\t, title: \"The repetitive cycle of this interruption\"\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t]\n\t\t,[\n\t\t\tm(`p`, `If this interruption is repeated, the days considered unworkable are the start day plus each consecutive day counting up the duration period.\n\t\t\t\tThe start of each period is the start date entered plus the repeating pattern until the end date is reached.`\n\t\t\t)\n\n\t\t\t,m(`p`, `As an example, the weekend can be an interruption, it starts on Saturday and ends 2 days later (which is the duration) on Sunday. if we consider Saturday the 1st of September\n\t\t\t\tthe start date and it will be an interruption for the next 3 months, then the End Date of this interruption is the 1st of September + 3 months, the 1st of December.\n\t\t\t\tThe duration will be 2 consecutive days (every Saturday and Sunday).`\n\t\t\t)\n\n\t\t])\n\n\t\t,ctrl.model.editPermissions()\n\t\t? [\n\n\t\t\tctrl.model.resourceProject().filter((parent) =>\n\t\t\t\tctrl.model.resourceProjectInterrupted().filter((child) =>\n\t\t\t\t\tchild.ParentRecognitionID == parent.CommonRecognition\n\t\t\t\t).length > 0\n\t\t\t)\n\t\t\t.map(parent =>\n\t\t\t\telements.list([\n\t\t\t\t\tparent.contractor_name\n\t\t\t\t\t\t? parent.contractor_name()\n\t\t\t\t\t\t: parent.project_name()\n\n\t\t\t\t\t, ctrl.model.resourceProjectInterrupted().filter((child) =>\n\t\t\t\t\t\t\tchild.ParentRecognitionID == parent.CommonRecognition\n\t\t\t\t\t\t).length\n\t\t\t\t\t\t+ \" out of \"\n\t\t\t\t\t\t+ (parent.contractor_name\n\t\t\t\t\t\t\t? parent.crews.length\n\t\t\t\t\t\t\t: parent.disciplines.length)\n\t\t\t\t\t\t+ \" Interrupted\"\n\n\t\t\t\t\t\t, ctrl.model.resourceProjectInterrupted()\n\t\t\t\t\t\t.filter((child) =>\n\t\t\t\t\t\t\tchild.ParentRecognitionID == parent.CommonRecognition\n\t\t\t\t\t\t).length\n\t\t\t\t\t\t== ( parent.contractor_name\n\t\t\t\t\t\t\t\t? parent.crews.length\n\t\t\t\t\t\t\t\t: parent.disciplines.length\n\t\t\t\t\t\t)\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: m('button.btn.btn-primary', {\n\t\t\t\t\t\t\tdisabled: ctrl.model.resourceProjectInterrupted().filter((child) =>\n\t\t\t\t\t\t\t\t\t\t\tchild.ParentRecognitionID == parent.CommonRecognition\n\t\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t\t\t== ( parent.contractor_name\n\t\t\t\t\t\t\t\t\t\t? parent.crews.length\n\t\t\t\t\t\t\t\t\t\t: parent.disciplines.length )\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.form().interruption.interruptions_affected = R.uniqBy(\n\t\t\t\t\t\t\t\t\tR.invoker(0, 'interruptions_affected_entity_id')\n\t\t\t\t\t\t\t\t\t,ctrl.model.form().interruption.interruptions_affected.concat(\n\t\t\t\t\t\t\t\t\t\tparent.disciplines\n\t\t\t\t\t\t\t\t\t\t\t? parent.disciplines.map( d =>\n\t\t\t\t\t\t\t\t\t\t\t\tInterruptionAffected({\n\t\t\t\t\t\t\t\t\t\t\t\t\tinterruptions_affected_entity_id: d.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,interruptions_affected_entity_name: d.ParentRecognition\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ParentRecognitionID: d.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ParentRecognition: d.ParentRecognition\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: parent.crews.map( c =>\n\t\t\t\t\t\t\t\t\t\t\t\tInterruptionAffected({\n\t\t\t\t\t\t\t\t\t\t\t\t\tinterruptions_affected_entity_id: c.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,interruptions_affected_entity_name: c.teamresourcename\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ParentRecognitionID: c.contractor_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ParentRecognition: c.ParentRecognition\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 'Add All Colleagues')\n\t\t\t\t])\n\t\t\t)\n\n\t\t\t,elements.errorAlert(\n\t\t\t\t`All `\n\t\t\t\t,' and '\n\t\t\t\t,' have been interrupted'\n\t\t\t\t,[\n\t\t\t\t\tctrl.model.resourceProjectList().length == 0 && ctrl.model.resources().some((r) => r.crews.length > 0)\n\t\t\t\t\t,ctrl.model.resourceProjectList().length == 0 && ctrl.model.projects().some((r) => r.disciplines.length > 0)\n\t\t\t\t]\n\t\t\t\t,[\n\t\t\t\t\t(d) => d ? `Teams` : null\n\t\t\t\t\t,(d) => d ? `all Disciplines in this schedule` : null\n\t\t\t\t]\n\t\t\t\t,false\n\t\t\t\t,true\n\t\t\t\t,'info'\n\t\t\t)\n\n\t\t\t,m('hr')\n\n\t\t\t,m('label.control-label.w-100', 'Select Interruptable Entities'\n\t\t\t\t,autocomplete.strict(\n\t\t\t\t\tctrl.model.resourceProjectList\n\t\t\t\t\t,(v, model) => {\n\t\t\t\t\t\tctrl.model.form().interruption.interruptions_affected\n\t\t\t\t\t\t\t.push(\n\t\t\t\t\t\t\t\tInterruptionAffected({\n\t\t\t\t\t\t\t\t\tinterruptions_affected_entity_id:\n\t\t\t\t\t\t\t\t\t\tv.discipline_id\n\t\t\t\t\t\t\t\t\t\t\t? v.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t: v.crew_id()\n\t\t\t\t\t\t\t\t\t, interruptions_affected_entity_name:\n\t\t\t\t\t\t\t\t\t\tv.discipline_name\n\t\t\t\t\t\t\t\t\t\t\t? v.ParentRecognition\n\t\t\t\t\t\t\t\t\t\t\t: v.teamresourcename\n\t\t\t\t\t\t\t\t\t,ParentRecognitionID:\n\t\t\t\t\t\t\t\t\t\tv.discipline_name\n\t\t\t\t\t\t\t\t\t\t\t? v.project_id()\n\t\t\t\t\t\t\t\t\t\t\t: v.contractor_id()\n\t\t\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t\t\t,ParentRecognition: v.ParentRecognition\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\tmodel.chosen(null)\n\t\t\t\t\t}\n\t\t\t\t\t,'ParentRecognition'\n\t\t\t\t\t,() => ({\n\t\t\t\t\t\tdisabled: ctrl.model.resourceProjectList().length == 0 || !ctrl.model.editPermissions()\n\t\t\t\t\t})\n\t\t\t\t\t,(value, element) => {\n\t\t\t\t\t\telement.value = \"\"\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t]\n\t\t: null\n\n\t\t,m('p')\n\n\t\t,ctrl.model.missingPermissions() == 'Project and Resource'\n\t\t\t? elements.alert(`info`, `This selection list is empty because permissions have not been granted for Resources or Projects`)\n\t\t\t: !ctrl.model.resourceProject().length\n\t\t\t? elements.errorAlert(\n\t\t\t\t\t'This selection list is empty because '\n\t\t\t\t\t,' or '\n\t\t\t\t\t, ` may not been created. Or all viewable options are chosen`\n\t\t\t\t,[\n\t\t\t\t\tfalse\n\t\t\t\t\t,ctrl.model.resources()\n\t\t\t\t\t,false\n\t\t\t\t\t,ctrl.model.projects()\n\t\t\t\t]\n\t\t\t\t,[\n\t\t\t\t\t() => !ctrl.model.metaDataLoading() && ctrl.model.resources().length == 0 ? ` Resources` : null\n\t\t\t\t\t,(d) => !ctrl.model.metaDataLoading() && d.crews.length == 0 ? `Teams` : null\n\t\t\t\t\t,() => !ctrl.model.metaDataLoading() && ctrl.model.projects().length == 0 && ctrl.model.data.schedule_id() ? `Projects` : null\n\t\t\t\t\t,(d) => !ctrl.model.metaDataLoading() && d.disciplines.length == 0 && ctrl.model.data.schedule_id() ? `Disciplines` : null\n\t\t\t\t]\n\t\t\t\t,false\n\t\t\t\t,true\n\t\t\t)\n\t\t\t: null\n\n\t\t,ctrl.model.getfilters(null, \"Affected\")\n\n\t\t,m(\"hr\")\n\t\t,scrollableTable.scrollableTable(\n\t\t\tctrl.model.data\n\t\t\t,[\n\t\t\t\t['Interrupted Entities', 0.60]\n\t\t\t\t,[' ', 0.20]\n\t\t\t\t,['', 0.20]\n\t\t\t]\n\t\t\t.map(\n\t\t\t\t([text,width]) => ({ text, width })\n\t\t\t)\n\t\t\t,() =>\n\t\t\t\tListProcessing(\n\t\t\t\t\t[].concat(R.unnest(R.partition(\n\t\t\t\t\t\t(i) => i.created,\n\t\t\t\t\t\tR.sortBy(\n\t\t\t\t\t\t\t(a) => a.interruptions_affected_entity_name()\n\t\t\t\t\t\t\t,ctrl.model.form().interruption.interruptions_affected\n\t\t\t\t\t\t)\n\t\t\t\t\t)))\n\t\t\t\t\t, ctrl.model.filterFunction.affectedFilters.filters()\n\t\t\t\t\t, 'interruptions_affected_entity_name'\n\t\t\t\t)\n\t\t\t\t.map(\n\t\t\t\t\t(i) => [\n\t\t\t\t\t\ti.interruptions_affected_entity_name()\n\n\t\t\t\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.intent.deleteInterruptionsAffected(\n\t\t\t\t\t\t\t\t\ti.interruptions_affected_entity_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 'Discard')\n\n\t\t\t\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\t\t\t\tdisabled: !ctrl.model.editPermissions()\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tconst parent = ctrl.model.resourceProject().find(\n\t\t\t\t\t\t\t\t\t(parent) =>\n\t\t\t\t\t\t\t\t\t\tparent.CommonRecognition\n\t\t\t\t\t\t\t\t\t\t== ctrl.model.resourceProjectTotal().find((child) =>\n\t\t\t\t\t\t\t\t\t\t\t\tchild.CommonRecognition\n\t\t\t\t\t\t\t\t\t\t\t\t== i.interruptions_affected_entity_id()\n\t\t\t\t\t\t\t\t\t\t).ParentRecognitionID\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tparent.disciplines\n\t\t\t\t\t\t\t\t\t? parent.disciplines.forEach((d) =>\n\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteInterruptionsAffected( d.CommonRecognition ))\n\t\t\t\t\t\t\t\t\t: parent.crews.forEach((d) =>\n\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteInterruptionsAffected( d.CommonRecognition ))\n\t\t\t\t\t\t\t\tctrl.intent.updateInterruptionsList()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 'Discard All Relations')\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t.map(\n\t\t\t\t\tr => ({ children: r , height: 55 })\n\t\t\t\t)\n\t\t\t\t,{ height: 400, headerHeight: 45, minWidth: 600, multilineHeader: false }\n\t\t)\n\t])\n}\n\n/*\n\tIn order for mithril to mount this component. We have to expose these two properties.\n*/\nexport default Main","import m from 'bacta'\nimport css from 'bss'\nimport * as elements from '../components/elements'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\nimport NumberInput from '../components/number'\nimport humanList from '../utils/human_list'\nimport * as regExes from '../utils/regExes'\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport Pencil from '../components/pencil'\nimport {identical} from '../utils/harth-identical'\nimport * as R from 'ramda'\nimport Promise from 'bluebird'\nimport { prop } from '../../../stream'\nimport Permissions from '../models/permissions'\nimport scrollableTable from '../components/scrollableTable'\nimport moment from 'moment'\nimport HarthUppy from '../components/harth-uppy'\nimport * as uuid from 'uuid'\nconst exposeObject =\n\tR.pipe(\n\t\tR.toPairs\n\t\t,R.unnest\n\t\t,R.filter(\n\t\t\t(a) => typeof a != 'string'\n\t\t)\n\t)\n\ncss.setDebug(true)\n\nimport autocomplete from './autocomplete'\n\nconst uniqItem = (a, b) => b.map((prop) => a[prop]()).join()\n\nconst uniqPItem =[\n\t'presets_id'\n\t,'presets_name'\n\t,'supplier_items_id'\n\t,'distribution_amount'\n\t,'distribution_stocked'\n]\n\nconst uniqTItem =[\n\t'distribution_id'\n]\n\nconst uniqDItem =[\n\t'distribution_id'\n\t,'distribution_entity_id'\n\t,'supplier_items_id'\n\t,'distribution_container_name'\n\t,'distribution_amount'\n\t,'distribution_stocked'\n\t,'distribution_ordered'\n]\n\n/*\n\tModel, View, Intent\n\n\tModel: Any data storage. Both the current state of the user interface, and\n\t\tdata that will be persisted to a database layer.\n\t\tIt also includes any functions for selecting or manipulating that data.\n\n\tIntent: Any functions that represent the user performing an action. These functions represent\n\t\twhat the user wants to do. Whether it be creating a new invite, logging in.\n\t\tThat's all representing the users intent.\n\n\tView: The view is a representation of the Model and provides affordances for the user\n\t\tto express their intent. These affordances are input elements such as\n\t\tdropdowns, text inputs, checkboxes etc...\n\n\tController: The Controller binds the Model, View and Intent together. It do some\n\t\tsetup code and faciliate communication between the three other layers.\n\n\n\n/*\n\tIntent: Functions that help the user do what they want to do...\n*/\nfunction Intent(model){\n\n\n\tconst checkprop = (a, b, c) =>\n\t\tc[a] && c[a][b]\n\t\t\t? typeof c[a][b] == 'function'\n\t\t\t\t? c[a][b]()\n\t\t\t\t: c[a][b]\n\t\t\t: null\n\n\tconst fetchResource = function(){\n\t\treturn model.data.fetchResource({\n\t\t\t\tdepth: 1\n\t\t\t\t,props: {\n\t\t\t\t\tresources: [\n\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t,'contractor_yard'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t})\n\t\t\t.then(model.resources)\n\t}\n\n\tfunction fetchOrganizationsDisciplines(){\n\t\treturn model.data.fetchOrganizationsDisciplines({\n\t\t\tprops: {\n\t\t\t\torganizations_disciplines: [\n\t\t\t\t\t'organizations_disciplines_name'\n\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t,'organizations_disciplines_description'\n\t\t\t\t]\n\t\t\t}\n\t\t})\n\t\t.then(model.organizations_disciplines)\n\t}\n\n\tconst fetchProjects = function(){\n\t\tif( model.data.schedule_id() ){\n\t\t\treturn model.data.fetchProjectsBySchedule({\n\t\t\t\tschedule_id: model.data.schedule_id()\n\t\t\t\t,completedProjects: model.completedProjects()\n\t\t\t\t,depth: 2\n\t\t\t\t, props: {\n\t\t\t\t\tprojects: [\n\t\t\t\t\t\t'project_id'\n\t\t\t\t\t\t,'project_name'\n\t\t\t\t\t\t,'project_material_suburb'\n\t\t\t\t\t\t,'project_commissioning_date'\n\t\t\t\t\t\t,'project_final_acceptance'\n\t\t\t\t\t\t,'project_completion_marker'\n\t\t\t\t\t]\n\t\t\t\t\t,disciplines: [\n\t\t\t\t\t\t'discipline_id'\n\t\t\t\t\t\t,'discipline_name'\n\t\t\t\t\t\t,'discipline_work'\n\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t})\n\t\t\t\t.then(model.projects)\n\t\t\t\t.then(model.statProjectMaterials)\n\t\t\t\t.then(function(){\n\t\t\t\t\treturn model.data.fetchProjectsBySchedule({\n\t\t\t\t\t\tschedule_id: model.data.schedule_id()\n\t\t\t\t\t\t,completedProjects:\n\t\t\t\t\t\t\tmodel.completedProjects() == 'inprogress'\n\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t: 'inprogress'\n\t\t\t\t\t\t,depth: 1\n\t\t\t\t\t\t,props: {\n\t\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t\t'project_name'\n\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.then( \tmodel.inverseProjectsList )\n\t\t\t\t})\n\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n\n\tfunction fetchWarehouses(params){\n\t\treturn model.data.fetchWarehouses(params)\n\t\t\t.then(function(res){\n\t\t\t\treturn prepWarehouse(res)\n\t\t\t})\n\t}\n\n\tconst fetchContainers = function(){\n\t\treturn model.data.fetchContainers()\n\t\t\t.then(model.containers)\n\t\t\t.then(function(){\n\t\t\t\tmodel.containerIndex(\n\t\t\t\t\tR.indexBy(\n\t\t\t\t\t\t(a) => a.container_name()\n\t\t\t\t\t\t,model.containers()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tmodel.materials().forEach((material) => {\n\t\t\t\t\tconst name = material.distribution_container_name()\n\n\t\t\t\t\tconst containerDesignation =\n\t\t\t\t\t\tcheckprop(name, 'container_id', model.containerIndex())\n\n\t\t\t\t\tcontainerDesignation\n\t\t\t\t\t!= material.distribution_container_id()\n\t\t\t\t\t\t? material.created = true\n\t\t\t\t\t\t: null\n\n\t\t\t\t\tmaterial.distribution_container_id( containerDesignation )\n\n\t\t\t\t\tif (model.containerIndex()[name]){\n\t\t\t\t\t\tmodel.containerIndex()[name].holdings =\n\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\tNumber(checkprop(name, 'holdings', model.containerIndex()))\n\t\t\t\t\t\t\t\t+ Number(material.distribution_amount())\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tcheckprop(name, 'capacity', model.containerIndex())\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: Number(\n\t\t\t\t\t\t\t\tmodel.supplierItemIndex()[material.supplier_items_id()]\n\t\t\t\t\t\t\t\t? model.supplierItemIndex()[material.supplier_items_id()].supplier_items_batch()\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tmodel.containerIndex()[name].containerIsFull =\n\t\t\t\t\t\t\tNumber(checkprop(name, 'holdings', model.containerIndex())) < Number(checkprop(name, 'capacity', model.containerIndex()))\n\t\t\t\t\t\t\t|| Number(checkprop(name, 'capacity', model.containerIndex())) == 0\n\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t: true\n\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tmodel.statProjectMaterials()\n\t\t\t\treturn model.containerIndex()\n\t\t\t})\n\t}\n\n\tfunction prepSupplier(suppliersList){\n\n\t\tconst comparisonProp =\n\t\t\tmodel.vm().supplier_id\n\t\t\t&& model.vm().supplier_id()\n\t\t\t? 'supplier_id'\n\t\t\t: 'supplier_name'\n\n\n\t\tmodel.suppliers(\n\t\t\tR.uniqBy(\n\t\t\t\t(c) => c.supplier_id()\n\t\t\t\t,R.sort(\n\t\t\t\t\tR.descend(R.prop('__requestedAt'))\n\t\t\t\t\t,[].concat(\n\t\t\t\t\t\tsuppliersList\n\t\t\t\t\t\t,model.suppliers()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\tconst newSupplier =\n\t\t\tmodel.vm().supplier_id\n\t\t\t\t? model.suppliers().find((p) =>\n\t\t\t\t\tR.prop(comparisonProp, p)()\n\t\t\t\t\t== R.prop(comparisonProp, model.vm())()\n\t\t\t\t)\n\t\t\t\t: null\n\n\n\t\tmodel.make_items()\n\n\t\tif(\n\t\t\tnewSupplier\n\t\t\t&& (\n\t\t\t\t!model.vm()['__requestedAt']\n\t\t\t\t|| newSupplier['__requestedAt']\n\t\t\t\t>= model.vm()['__requestedAt']\n\t\t\t)\n\t\t){\n\t\t\tmodel.cloneSupplier( newSupplier )\n\t\t\tmodel.masterILIST(true)\n\t\t\tmodel.masterLLIST(true)\n\t\t\tmodel.edit(true)\n\t\t}\n\t}\n\n\tfunction fetchSuppliers(params){\n\t\treturn model.data.fetchSuppliers(params)\n\t\t\t.then(function(supplierList) {\n\t\t\t\tmodel.suppliers(supplierList)\n\t\t\t\treturn prepSupplier(supplierList)\n\t\t\t})\n\t}\n\n\tfunction fetchPresets(){\n return model.data.fetchPresets()\n\t\t\t.then(function(res){\n\t\t\t\tmodel.presets(model.copy_items(res, false))\n\t\t\t\tmodel.originalPresets(res)\n\t\t\t\tmodel.presetsIndexByDiscipline(\n\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t(a) => a.distribution_entity_name()\n\t\t\t\t\t\t,res\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tmodel.selected_preset(model.selected_preset())\n\t\t\t\tmodel.DeletePItems([])\n\t\t\t\tmodel.d_item_vm({})\n\t\t\t\treturn Promise.resolve([])\n\t\t\t})\n\t}\n\n\tconst materialPrep = function(res){\n\t\tmodel.materials(model.copy_items(res, false))\n\t\tmodel.originalMaterials(res)\n\t\tmodel.MaterialIndex(\n\t\t\tR.indexBy(\n\t\t\t\t(a) => a.distribution_id()\n\t\t\t\t,res\n\t\t\t)\n\t\t)\n\t\tmodel.originalMaterialIndex(\n\t\t\tR.indexBy(\n\t\t\t\t(a) => a.distribution_id()\n\t\t\t\t,model.originalMaterials()\n\t\t\t)\n\t\t)\n\t\treturn Promise.resolve([])\n\t}\n\n\tconst fetchMaterials = function(){\n\t\treturn model.data.fetchMaterials({\n\t\t\tcompletedProjects: model.completedProjects()\n\t\t\t,projects: []\n\t\t\t,warehouse_id: null\n\t\t})\n\t\t\t.then( materialPrep )\n\t\t\t.then( m.redraw )\n\t}\n\n\n\n\tconst fetchOrders = function(){\n\t\treturn model.data.fetchOrders({\n\t\t\tcompletedProjects: model.completedProjects()\n\t\t\t,project_id: null\n\t\t\t,warehouse_id: null\n\t\t})\n\t\t\t.then(model.originalOrders)\n\t\t\t.then(m.redraw)\n\t}\n\n\n\tconst sendSupplier = function(){\n\t\tconst supplierlist = [model.vm()]\n\t\tmodel.location_vm({})\n\t\tmodel.item_vm({})\n\t\treturn Promise.all([\n\t\t\tdeleteLocation(true)\n\t\t\t,deleteItem(true)\n\t\t])\n\t\t.then(function(){\n\t\t\tmodel.DeleteSLocations([])\n\t\t\tmodel.DeleteSItems([])\n\t\t\treturn model.api.suppliers.patch(supplierlist)\n\t\t\t.then(function(suppliersList){\n\t\t\t\tprepSupplier(suppliersList)\n\t\t\t\tmodel.consolidate()\n\t\t\t\treturn true\n\t\t\t})\n\t\t})\n }\n\n\tfunction prepWarehouse(warehouseList){\n\n\t\tconst comparisonProp =\n\t\t\tmodel.warehouse_vm().warehouse_id\n\t\t\t&& model.warehouse_vm().warehouse_id()\n\t\t\t? 'warehouse_id'\n\t\t\t: 'warehouse_name'\n\n\t\tmodel.warehouses(\n\t\t\tR.uniqBy(\n\t\t\t\t(c) => c.warehouse_id()\n\t\t\t\t,R.sort(\n\t\t\t\t\tR.descend(R.prop('__requestedAt'))\n\t\t\t\t\t,[].concat(\n\t\t\t\t\t\twarehouseList\n\t\t\t\t\t\t,model.warehouses()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\tconst newWarhouse =\n\t\t\tmodel.warehouse_vm().warehouse_id\n\t\t\t\t? model.warehouses().find((w) =>\n\t\t\t\t\tR.prop(comparisonProp, w)()\n\t\t\t\t\t== R.prop(comparisonProp, model.warehouse_vm())()\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t// model.data.routeids(model.warehouses().map(R.prop('contractrecognitionid')))\n\n\t\tif (\n\t\t\tnewWarhouse\n\t\t\t&& (\n\t\t\t\t!model.warehouse_vm()['__requestedAt']\n\t\t\t\t|| newWarhouse['__requestedAt']\n\t\t\t\t>= model.warehouse_vm()['__requestedAt']\n\t\t\t)\n\t\t){\n\t\t\tmodel.warehouse_vm(newWarhouse)\n\t\t\tmodel.cloneWarehouse(newWarhouse)\n\t\t}\n\t}\n\n\n function sendWarehouse(){\n\t\tmodel.warehouse_vm().warehouse_items = []\n const warehouselist = [model.warehouse_vm()]\n\t\tmodel.data.currentRoute('Nothing')\n\t\treturn model.api.warehouses.patch(warehouselist)\n\t\t\t.then(function(warehouseList){\n\t\t\t\tsendAllDistriution()\n\t\t\t\t.then(function(){\n\t\t\t\t\tprepWarehouse(warehouseList)\n\t\t\t\t\treturn model.data.currentRoute('materials')\n\t\t\t\t})\n\t\t\t})\n }\n\n let sendPreset = function(){\n\t\treturn deletePreset(true)\n\t\t .then(function(){\n\t\t\treturn model.api.presets.patch.many(\n\t\t\t\tmodel.presets().filter(c => c.created )\n\t\t\t)\n\t\t\t\t.then(fetchPresets)\n\t\t\t\t.then(() => model.preset_vm(null))\n\t\t })\n }\n\n\tlet transferItems = function({orders, operation}){\n\n\t\tconst newmaterials =\n\t\t(\n\t\t\toperation == 'splitorders'\n\t\t\t? orders.map((anorder) => {\n\t\t\t\tconst o = anorder.order\n\t\t\t\t// find item to send through mitosis\n\t\t\t\tconst m =\n\t\t\t\t\tmodel.materials().find((mat) =>\n\t\t\t\t\t\tmat.distribution_id()\n\t\t\t\t\t\t== o.distribution_id()\n\t\t\t\t\t)\n\t\t\t\tm.distribution_amount(o.order_amount()-o.order_received())\n\t\t\t\tm.created = true\n\t\t\t\t// add props to materials so they can be transferred to the new order\n\t\t\t\tm.orderdetail = {\n\t\t\t\t\torder_notes: o.order_notes() + ' split from ' + o.order_name()\n\t\t\t\t\t,order_received: o.order_received()\n\t\t\t\t\t,order_stock_location: o.order_stock_location()\n\t\t\t\t\t,order_submission_date: o.order_submission_date()\n\t\t\t\t\t,order_eta: o.order_eta()\n\t\t\t\t\t,listindex: anorder.listindex\n\t\t\t\t}\n\t\t\t\to.order_amount(o.order_received())\n\t\t\t\to.created = true\n\t\t\t\treturn m\n\t\t\t})\n\t\t\t: model.transfer_vm()\n\t\t)\n\t\t.map((item) => {\n\t\t\tconst item_mitosis = model.resetNewMaterial()\n\n\t\t\tdelete item.attrs\n\t\t\tlet base_material = model.originalMaterials().find(\n\t\t\t\t\t(material) =>\n\t\t\t\t\t\tmaterial.distribution_id()\n\t\t\t\t\t\t== item.distribution_id()\n\t\t\t)\n\t\t\tlet edit_material = model.materials().find(\n\t\t\t\t\t(material) =>\n\t\t\t\t\t\tmaterial.distribution_id()\n\t\t\t\t\t\t== item.distribution_id()\n\t\t\t)\n\t\t\tif (item.distribution_amount() == base_material.distribution_amount() ){\n\t\t\t\tedit_material.created = true\n\t\t\t\tedit_material.distribution_entity_id(model.transfer_object.to().transfer_id)\n\t\t\t\tedit_material.distribution_entity_name(model.transfer_object.to().transfer_name)\n\t\t\t\tedit_material.distribution_stocked(model.transfer_object.to().tranfer_location)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst keepqty = item.distribution_amount()\n\t\t\t\tconst tranferqty = base_material.distribution_amount() - item.distribution_amount()\n\t\t\t\titem_mitosis.distribution_container_name(\n\t\t\t\t\titem.distribution_ordered()\n\t\t\t\t\t&& item.distribution_ordered() != 'Cancelled'\n\t\t\t\t\t\t? item.distribution_container_name()\n\t\t\t\t\t\t: null\n\t\t\t\t)\n\t\t\t\titem_mitosis.distribution_container_id(\n\t\t\t\t\titem.distribution_ordered()\n\t\t\t\t\t&& item.distribution_ordered() != 'Cancelled'\n\t\t\t\t\t\t? item.distribution_container_id()\n\t\t\t\t\t\t: null\n\t\t\t\t),\n\t\t\t\titem_mitosis.distribution_entity_id(\n\t\t\t\t\torders\n\t\t\t\t\t? item.distribution_entity_id()\n\t\t\t\t\t: model.transfer_object.to().transfer_id\n\t\t\t\t)\n\t\t\t\titem_mitosis.distribution_entity_name(\n\t\t\t\t\torders\n\t\t\t\t\t? item.distribution_entity_name()\n\t\t\t\t\t: model.transfer_object.to().transfer_name\n\t\t\t\t)\n\t\t\t\titem_mitosis.distribution_stocked(\n\t\t\t\t\torders\n\t\t\t\t\t?item.distribution_stocked()\n\t\t\t\t\t: model.transfer_object.to().tranfer_location\n\t\t\t\t)\n\t\t\t\titem_mitosis.distribution_id( uuid.v4() )\n\t\t\t\titem_mitosis.distribution_amount( keepqty )\n\t\t\t\titem_mitosis.distribution_batch( item.distribution_batch() )\n\t\t\t\titem_mitosis.distribution_silo( item.distribution_silo() )\n\t\t\t\titem_mitosis.distribution_ordered( item.distribution_ordered() )\n\n\t\t\t\tif(\n\t\t\t\t\toperation == 'transferorders'\n\t\t\t\t\t&& item.distribution_ordered()\n\t\t\t\t\t&& item.distribution_ordered() != 'Cancelled'\n\t\t\t\t){\n\n\t\t\t\t\tconst originalOrder = model.orders().find((o) => o.distribution_id() == item.distribution_id())\n\t\t\t\t\toriginalOrder.created = true\n\t\t\t\t\toriginalOrder.order_amount(tranferqty)\n\t\t\t\t\toriginalOrder.order_received(tranferqty)\n\n\t\t\t\t\tmodel.orders().push(\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\toriginalOrder\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\torder_id: m.prop(null)\n\t\t\t\t\t\t\t\t,order_amount: m.prop(keepqty)\n\t\t\t\t\t\t\t\t,order_received: m.prop(keepqty)\n\t\t\t\t\t\t\t\t,created: true\n\t\t\t\t\t\t\t\t,distribution_id: m.prop(item_mitosis.distribution_id())\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t}\n\n\t\t\t\titem_mitosis.supplier_items_id( item.supplier_items_id() )\n\t\t\t\titem_mitosis.distribution_material_name( item.distribution_material_name() )\n\t\t\t\titem_mitosis.distribution_material_description( item.distribution_material_description() )\n\t\t\t\titem_mitosis.supplier_id( item.supplier_id() )\n\t\t\t\titem_mitosis.created = true\n\t\t\t\titem_mitosis.orderdetail = item.orderdetail\n\t\t\t\tedit_material.distribution_amount(tranferqty)\n\t\t\t\tedit_material.created = true\n\t\t\t\tmodel.materials().push(item_mitosis)\n\t\t\t}\n\t\t\tmodel.MaterialIndex()[item_mitosis.distribution_id()] = item_mitosis\n\t\t\treturn item_mitosis\n\t\t})\n\n\t\tmodel.consolidate()\n\t\tmodel.transfer_object.from(model.transfer_object.from())\n\t\tmodel.transfer_object.to(model.transfer_object.to())\n\n\t\t// pump result through makeorders\n\t\toperation == 'splitorders' ? makeOrders(newmaterials) : null\n\n\t\treturn operation == 'transferorders'\n\t\t|| operation == 'splitorders' ? sendAllDistriution() : true\n\t}\n\n\n\tconst sendOrders = function(){\n\t\tconst updateList = []\n\n\t\tmodel.order_vm.order().forEach((oitem) => {\n\t\t\t// oitem.order_eta(null)\n\t\t\toitem.created = true\n\t\t\tconst updateItem =\n\t\t\t\tmodel.materials()\n\t\t\t\t.find((m) =>\n\t\t\t\t\tm.distribution_id()\n\t\t\t\t\t== oitem.distribution_id()\n\t\t\t\t)\n\n\t\t\tupdateItem.created = true\n\t\t\tupdateItem.distribution_ordered('Cancelled')\n\t\t\tupdateList.push(updateItem)\n\t\t})\n\n\t\tmodel.order_vm.orderUpdates()\n\t\t\t.forEach((u) => {\n\t\t\t\tconst updateItem =\n\t\t\t\t\tmodel.materials()\n\t\t\t\t\t.find((m) =>\n\t\t\t\t\t\tm.distribution_id()\n\t\t\t\t\t\t== u.distribution_id()\n\t\t\t\t\t)\n\t\t\t\tif(updateItem){\n\t\t\t\t\tupdateItem.distribution_amount(u.order_amount())\n\t\t\t\t\tupdateItem.distribution_stocked(u.order_stock_location())\n\t\t\t\t\tupdateItem.created = true\n\t\t\t\t\tupdateList.push(updateItem)\n\t\t\t\t}\n\t\t\t})\n\n\n\t\tmodel.orders().forEach((o) => {\n\t\t\to.order_submission_date(\n\t\t\t\to.order_submission_date() <= 0\n\t\t\t\t\t? 0\n\t\t\t\t\t: new Date(o.order_submission_date()).getTime()\n\t\t\t)\n\t\t\to.order_eta(\n\t\t\t\t!o.order_eta()\n\t\t\t\t\t? o.order_eta()\n\t\t\t\t\t: new Date(o.order_eta()).getTime()\n\t\t\t)\n\t\t})\n\n\t\tmodel.consolidate()\n\n\t\treturn sendAllDistriution()\n\t\t\t.then(function(){\n\t\t\t\tmodel.order_vm['order']([])\n\t\t\t\tmodel.order_vm['orderUpdates']([])\n\t\t\t\treturn true\n })\n\t}\n\n\tlet makeOrders = function(newmaterials){\n\t\tconst reflist = newmaterials || model.order_vm.order()\n\t\tlet supplier_list = R.pipe(R.map( R.invoker(0, 'supplier_id')),R.uniq)(reflist)\n\t\tsupplier_list.forEach((supplier) => {\n\t\t\tlet supplierObj = R.find(function(chr) { return chr.supplier_name() == supplier}, model.suppliers())\n\t\t\tlet filter_list = reflist.filter((o) => o.supplier_id() == supplier)\n\n\t\t\tlet suOArray = supplierObj.supplier_name().split(' ').map((word) => word.replace(regExes.uniqPattern, '').slice(0,1).charAt(0).toUpperCase()).join('')\n\t\t\tlet deOArray = filter_list[0].distribution_entity_name().split(' ').map((word) => word.replace(regExes.uniqPattern, '').slice(0,1).charAt(0).toUpperCase()).join('')\n\n\t\t\tlet pot_order_No = suOArray + '-' + deOArray\n\t\t\tlet incriment =\n\t\t\t\tR.uniq(\n\t\t\t\t\tmodel.orders().filter((o) =>\n\t\t\t\t\t\to.order_name().slice(0, o.order_name().lastIndexOf('-')) == pot_order_No\n\t\t\t\t\t\t&& o.order_id()\n\t\t\t\t\t)\n\t\t\t\t).length + 1\n\n\t\t\tlet order_No = pot_order_No + '-' + incriment\n\t\t\tfilter_list.forEach((item) => {\n\t\t\t\titem.distribution_ordered(order_No)\n\t\t\t\titem.created = true\n\t\t\t\tlet supplier_itemObj = R.find(\n\t\t\t\t\tfunction(chr) { return chr.supplier_items_id() == item.supplier_items_id()},\n\t\t\t\t\tsupplierObj.supplier_items\n\t\t\t\t)\n\t\t\t\tlet OrderItem = {\n\t\t\t\t\tcreated: true\n\t\t\t\t\t,order_id: m.prop()\n\t\t\t\t\t,organization_id: m.prop()\n\t\t\t\t\t,distribution_id: m.prop(item.distribution_id())\n\t\t\t\t\t,order_name: m.prop(order_No)\n\t\t\t\t\t,supplier_items_id: m.prop(item.supplier_items_id())\n\t\t\t\t\t,order_items_name: m.prop(item.distribution_material_name())\n\t\t\t\t\t,order_items_description: m.prop(item.distribution_material_description())\n\t\t\t\t\t,order_amount: m.prop(item.distribution_amount())\n\t\t\t\t\t,order_received: m.prop(0)\n\t\t\t\t\t,order_notes: m.prop(item.orderdetail ? item.orderdetail.order_notes : '')\n\t\t\t\t\t,order_items_cost: m.prop(\n\t\t\t\t\t\titem.distribution_silo() || !model.containerIndex()[item.distribution_container_name()].containerIsFull\n\t\t\t\t\t\t? supplier_itemObj.supplier_items_cost() * item.distribution_amount()\n\t\t\t\t\t\t: (\n\t\t\t\t\t\t\tsupplier_itemObj.supplier_items_batch_cost()\n\t\t\t\t\t\t\t|| supplier_itemObj.supplier_items_cost()\n\t\t\t\t\t\t ) * item.distribution_amount()\n\t\t\t\t\t)\n\t\t\t\t\t,supplier_id: m.prop(supplierObj.supplier_id())\n\t\t\t\t\t,order_supplier_name: m.prop(supplierObj.supplier_name())\n\t\t\t\t\t,order_stock_location: m.prop( item.orderdetail ? item.orderdetail.order_stock_location : item.distribution_stocked())\n\t\t\t\t\t,order_submission_date : m.prop( item.orderdetail ? item.orderdetail.order_submission_date : Date.parse( new Date() ) )\n\t\t\t\t\t,order_eta: m.prop( item.orderdetail ? item.orderdetail.order_eta : null)\n\t\t\t\t}\n\t\t\t\titem.orderdetail ? model.orders(R.insert(item.orderdetail.listindex, OrderItem, model.orders())) : model.orders().push(OrderItem)\n\t\t\t})\n\t\t\t// Send Order to supplier by email? Print Order to PDF?\n\t\t})\n\t\tmodel.order_vm.order([])\n }\n\n const sendContainer = function(){\n\t\treturn model.api.containers.patch.many(model.containers())\n }\n\n\tconst sendAllDistriution = function(){\n\t\tmodel.savingProp(true)\n\t\tmodel.assessContainers()\n\t\tconst updateList = model.materials().filter((c) => c.created )\n\t\tconst orderList = model.orders().filter((c) => c.created )\n\t\treturn Promise.all([\n\t\t\tdeleteDitem(true)\n\t\t\t,deleteContainer()\n\t\t\t,sendContainer()\n\t\t])\n\t\t.then(function(){\n\t\t\treturn model.api.materials.patch.many(updateList)\n\t\t\t.then(function(){\n\t\t\t\treturn orderList.length && model.editOrdersPermissions()\n\t\t\t\t? model.api.orders.patch.many(orderList)\n\t\t\t\t: R.T()\n\t\t\t})\n\t\t\t\t.then(function(){\n\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\tfetchMaterials()\n\t\t\t\t\t\t,fetchOrders()\n\t\t\t\t\t])\n\t\t\t\t\t.then( fetchContainers )\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\tmodel.DeleteDItems([])\n\t\t\t\t\t\tmodel.d_item_vm({})\n\t\t\t\t\t\tmodel.transfer_object.to(model.transfer_object.to())\n\t\t\t\t\t\tmodel.available_yards()\n\t\t\t\t\t\tmodel.selected_pt(model.selected_pt())\n\t\t\t\t\t\tmodel.SelectedProject(model.SelectedProject())\n\t\t\t\t\t\tmodel.masterILIST(true)\n\t\t\t\t\t\tmodel.edit(true)\n\t\t\t\t\t\tmodel.savingProp(false)\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t})\n\t}\n\n\tlet deleteOrder = function(order){\n let orderid = order.order_id()\n return Promise.resolve(\n orderid && model.api.orders.remove.one(orderid)\n\t\t)\n\t\t\t.then(fetchOrders)\n }\n\n let deleteSupplier = function(){\n let supplier_id = model.vm().supplier_id()\n return Promise.resolve(\n supplier_id && model.api.suppliers.remove.one(supplier_id)\n )\n .then(model.deleteSupplier)\n }\n\n let deleteWarehouse = function(){\n\t\tconst warehouse_id = model.warehouse_vm().warehouse_id()\n return (\n\t\t\twarehouse_id\n\t\t\t? model.api.warehouses.remove.one(warehouse_id)\n\t\t\t: Promise.resolve([])\n\t\t)\n\t\t.then(function(){\n\t\t\tmodel.deleteWarehouse()\n\t\t\tmodel.warehouse_vm({})\n\t\t\treturn true\n\t\t})\n }\n\n var deleteLocation = function(makeAPICalls){\n\t\tif (!makeAPICalls){\n\t\t\tlet lindex = model.vm().supplier_locations\n\t\t\t\t.findIndex((li) =>\n\t\t\t\t\tli.supplier_locations_location()\n\t\t\t\t\t== model.location_vm().supplier_locations_location()\n\t\t\t\t)\n\t\t\tmodel.DeleteSLocations().push(model.location_vm())\n\t\t\tmodel.vm().supplier_locations.splice(lindex, 1)\n\t\t\tmodel.location_vm({})\n\t\t}\n\t\treturn makeAPICalls\n\t\t\t? \t\t\t\tPromise.all(\n\n\t\t\t\t\tmodel.DeleteSLocations().filter((p) => p.supplier_locations_id() )\n\t\t\t\t\t\t.map((slocation) =>\n\t\t\t\t\t\t\tmodel.api.supplier_locations.remove.one(slocation.supplier_locations_id())\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t: Promise.resolve(null)\n\n\t\t\t.then(function(){\n\t\t\t\tmodel.masterLLIST(true)\n\t\t\t\tm.redraw()\n\t\t\t})\n }\n\n\n var deleteItem = function(makeAPICalls){\n\t\tif (!makeAPICalls){\n\t\t\tlet sindex = model.vm().supplier_items\n\t\t\t\t.findIndex((si) =>\n\t\t\t\t\tsi.supplier_items_name()\n\t\t\t\t\t== model.item_vm().supplier_items_name()\n\t\t\t\t)\n\t\t\tmodel.DeleteSItems().push(model.item_vm())\n\t\t\tmodel.vm().supplier_items.splice(sindex, 1)\n\t\t\tmodel.item_vm({})\n\t\t}\n\t\treturn makeAPICalls\n\t\t\t? \t\t\t\tPromise.all(\n\t\t\t\t\tmodel.DeleteSItems().filter((p) => p.supplier_items_id())\n\t\t\t\t\t\t.map((sitem) =>\n\t\t\t\t\t\t\tmodel.api.supplier_items.remove.one(sitem.supplier_items_id())\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t: Promise.resolve(null)\n\n\t\t\t.then(function(){\n\t\t\t\tmodel.masterILIST(true)\n\t\t\t})\n }\n\n\n\tfunction deleteDitem(makeAPICalls, /*iIndex*/){\n\t\tif ( Object.keys(model.d_item_vm()).length ){\n\n\t\t\texposeObject(model.d_item_vm())\n\t\t\t.forEach((d) => {\n\t\t\t\tconst orderIndex =\n\t\t\t\t\tmodel.order_vm.order()\n\t\t\t\t.findIndex((o) =>\n\t\t\t\t\t\to.distribution_id() == d.distribution_id()\n\t\t\t\t)\n\n\t\t\t\torderIndex > -1\n\t\t\t\t? model.order_vm.order().splice(orderIndex ,1)\n\t\t\t\t: null\n\n\t\t\t\tmodel.DeleteDItems().push(d)\n\n\t\t\t\tmodel.materials().splice(\n\t\t\t\t\tmodel.materials()\n\t\t\t\t\t.findIndex((pA) =>\n\t\t\t\t\t\tpA.key\n\t\t\t\t\t\t== d.key\n\t\t\t\t\t)\n\t\t\t\t\t, 1\n\t\t\t\t)\n\t\t\t})\n\n\t\t\tdelete model.errors()['Float']\n\t\t\tdelete model.errors()['Units']\n\t\t\tmodel.consolidate()\n\t\t\tmodel.d_item_vm({})\n\t\t\tmodel.masterILIST(true)\n\t\t}\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tmodel.DeleteDItems().filter((di) => di.distribution_id())\n\t\t\t\t.map((d) => model.api.materials.remove.one(d.distribution_id()))\n\t\t\t)\n\t\t\t\t// .then(() => {\n\t\t\t\t// \tmodel.DeleteDItems().forEach((d) =>\n\t\t\t\t// \t\tmodel.originalMaterials().splice(\n\t\t\t\t// \t\t\tmodel.originalMaterials()\n\t\t\t\t// \t\t\t.findIndex((pA) =>\n\t\t\t\t// \t\t\t\tpA.key\n\t\t\t\t// \t\t\t\t== d.key\n\t\t\t\t// \t\t\t)\n\t\t\t\t// \t\t\t, 1\n\t\t\t\t// \t\t)\n\t\t\t\t// \t)\n\t\t\t\t// \treturn model.warehouse_vm(model.warehouse_vm())\n\t\t\t\t// })\n\t\t\t: Promise.resolve(null)\n\t}\n\n\tfunction deletePreset(makeAPICalls, name){\n\t\tif ( !makeAPICalls ) {\n\n\t\t\tconst presetlist = !name\n\t\t\t\t? exposeObject(model.d_item_vm())\n\t\t\t\t: model.presets().filter((p) =>\n\t\t\t\t\tp.presets_name() == name\n\t\t\t\t)\n\n\t\t\tpresetlist.forEach((p) => {\n\t\t\t\tmodel.DeletePItems().push(p)\n\t\t\t\tdelete model.errors()[p.distribution_material_name() + ', Units']\n\t\t\t\tmodel.presets().splice(\n\t\t\t\t\tmodel.presets()\n\t\t\t\t\t.findIndex((pA) =>\n\t\t\t\t\t\tpA.key\n\t\t\t\t\t\t== p.key\n\t\t\t\t\t)\n\t\t\t\t\t, 1\n\t\t\t\t)\n\t\t\t})\n\n\n\t\t\tmodel.refreshList(true)\n\t\t\tmodel.d_item_vm({})\n\t\t}\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tmodel.DeletePItems().filter((p) => p.presets_id())\n\t\t\t\t\t.map((preset) =>\n\t\t\t\t\t\tmodel.api.presets.remove.one(preset.presets_id())\n\t\t\t\t)\n\t\t\t)\n\t\t\t: Promise.resolve(null)\n\t}\n\n\tfunction deleteContainer(){\n\t\treturn Promise.all(\n\t\t\t\tmodel.container_vm().selected.container.map((c) =>\n\t\t\t\t\tmodel.api.containers.remove.one(c.container_id())\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then(function(){\n\t\t\t\tmodel.container_vm().selected.container = []\n\t\t\t})\n\t}\n\n\tfunction clonePreset(){\n\t\tdeletePreset(false, model.selected_preset())\n\t\tconst newEntityID =\n\t\t\tmodel.organizations_disciplines()\n\t\t\t.find(\n\t\t\t\tR.propEq(\n\t\t\t\t\t'orgDisciplineNameDescription'\n\t\t\t\t\t,model.selected_preset()\n\t\t\t\t)\n\t\t\t)\n\t\t\t.organizations_disciplines_id\n\n\t\tmodel.presets().filter((p) =>\n\t\t\tp.presets_name()\n\t\t\t== model.preset_vm()\n\t\t)\n\t\t.forEach((item) => {\n\t\t\tlet new_preset = model.makePreset(item)\n\t\t\tnew_preset.presets_id(null)\n\t\t\tnew_preset.presets_name( model.selected_preset() )\n\t\t\tnew_preset.distribution_entity_name( model.selected_preset() )\n\t\t\tnew_preset.distribution_entity_id( newEntityID )\n\t\t\tmodel.presets().push(new_preset)\n\t\t})\n\t\tmodel.selected_preset(model.selected_preset())\n }\n\n\n\tfunction applyPreset(project){\n\t\tconst ditems = []\n\t\tproject.disciplines.forEach((discipline) => {\n\t\t\tdiscipline\n\t\t\t.outstandingMaterials\n\t\t\t.forEach((om) => {\n\t\t\t\tlet preset =\n\t\t\t\t\tmodel.presetsIndexByDiscipline()\n\t\t\t\t\t[discipline.discplineNameDescription]\n\t\t\t\t\t.find((p) =>\n\t\t\t\t\t\tp.supplier_items_id()\n\t\t\t\t\t\t== om.supplier_items_id\n\t\t\t\t\t)\n\n\t\t\t\tlet damount = om.quantity\n\t\t\t\tlet ditem = model.resetNewMaterial()\n\t\t\t\tditem.organization_id(preset.organization_id()),\n\t\t\t\tditem.distribution_entity_name(preset.distribution_entity_name()),\n\t\t\t\tditem.distribution_entity_id(discipline.discipline_id()),\n\t\t\t\tditem.supplier_id(preset.supplier_id()),\n\t\t\t\tditem.supplier_items_id(preset.supplier_items_id()),\n\t\t\t\tditem.distribution_material_name(preset.distribution_material_name()),\n\t\t\t\tditem.distribution_material_description(preset.distribution_material_description()),\n\t\t\t\tditem.distribution_amount(damount),\n\t\t\t\tditem.distribution_batch(preset.distribution_batch()),\n\t\t\t\tditem.distribution_container_name(null),\n\t\t\t\tditem.distribution_container_id(null),\n\t\t\t\tditem.distribution_silo(preset.distribution_silo()),\n\t\t\t\tditem.distribution_ordered(''),\n\t\t\t\tditem.distribution_stocked(project.project_name() + \" - \" + project.project_material_suburb()),\n\t\t\t\tditem.distribution_float(preset.distribution_float())\n\t\t\t\tditems.push(ditem)\n\t\t\t})\n\t\t})\n\n\t\tif( ditems.length ){\n\t\t\tmodel.materials( [].concat(ditems, model.materials()) )\n\t\t\tmodel.consolidate()\n\t\t\tmodel.selected_pt(model.selected_pt())\n\t\t\tmodel.masterILIST(true)\n\t\t}\n\t\treturn Promise.resolve([])\n\t}\n\n function SupplierLocationsButton(location, returnSTATE){\n const name = model.location_vm().supplier_locations_location\n const activated =\n\t\t\tname\n\t\t\t&& name() == location.supplier_locations_location()\n\t\t\t&& model.editSupplierPermissions()\n return returnSTATE\n\t\t\t? activated\n\t\t\t: activated\n\t\t\t? m('button.btn', {\n\t\t\t\tonclick: () => {model.location_vm({})}\n\t\t\t}, 'Done')\n\t\t\t: m('button.btn', {\n\t\t\t\tonclick: () => {\n\t\t\t\t\tlocation.created = true\n\t\t\t\t\tmodel.location_vm(location)\n\t\t\t\t}\n\t\t\t}, 'Edit')\n }\n\n function SupplierItemsButton(item){\n const name = model.item_vm().supplier_items_name\n const activated =\n\t\t\tname\n\t\t\t&& name() == item.supplier_items_name()\n\t\t\t&& model.editSupplierPermissions()\n return {\n\t\t\tonclick: (v) => {\n\t\t\t\tif(!v.currentTarget.checked){\n\t\t\t\t\tmodel.item_vm({})\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\titem.created = true\n\t\t\t\t\tmodel.item_vm(item)\n\t\t\t\t}\n\t\t\t}\n\t\t\t,type: 'checkbox'\n\t\t\t,checked: activated || false\n\t\t\t,disabled: !model.editSupplierPermissions()\n\t\t}\n }\n\n\n\n function PresetItemsButton(item){\n const activated =\n\t\t\tmodel.d_item_vm()[item.key]\n\t\t\t&& model.editMaterialsPermissions()\n\n return activated\n\t\t\t? m('button.btn.btn', {\n\t\t\t\tonclick: () => { delete model.d_item_vm()[item.key] }\n\t\t\t\t,disabled: !!model.errorsMessage().length\n\t\t\t\t,title: 'Confirm Changes'\n\t\t\t}, 'Done' )\n\t\t\t\t: m('button.btn', {\n\t\t\t\tdisabled: !!model.new_material().distribution_id\n\t\t\t\t,onclick: () => {\n\t\t\t\t\t\titem.created = true\n\t\t\t\t\tmodel.d_item_vm()[item.key] = item\n\t\t\t\t\t}\n\t\t\t\t}, 'Edit')\n }\n\n function DistributionItemsButton(item){\n const activated =\n\t\t\tmodel.d_item_vm()[item.key]\n\t\t\t&& model.editMaterialsPermissions()\n\n return {\n\t\t\tonclick: (v) => {\n\t\t\t\tif(!v.currentTarget.checked){\n\t\t\t\t\tdelete model.d_item_vm()[item.key]\n\t\t\t\t\tmodel.consolidate()\n\t\t\t\t} else {\n\t\t\t\t\titem.created = true\n\t\t\t\t\tmodel.d_item_vm()[item.key] = item\n\t\t\t\t}\n\t\t\t}\n\t\t\t,type: 'checkbox'\n\t\t\t,disabled: model.errorsMessage().length > 0\n\t\t\t\t|| !!model.new_material().distribution_id\n\t\t\t,title: 'Edit'\n\t\t\t,checked: activated || false\n\t\t}\n }\n\n\n function WarehouseItemsButton(item){\n\n const activated =\n\t\t\tmodel.d_item_vm()[item.key]\n\t\t\t&& model.editWarehousePermissions()\n\n return {\n\t\t\tonclick: (v) => {\n\t\t\t\tif(!v.currentTarget.checked){\n\t\t\t\t\tdelete model.d_item_vm()[item.key]\n\t\t\t\t\tmodel.consolidate()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\titem.created = true\n\t\t\t\t\tmodel.d_item_vm()[item.key] = item\n\t\t\t\t}\n\t\t\t}\n\t\t\t,type: 'checkbox'\n\t\t\t,title: 'Edit'\n\t\t\t,disabled: !!model.errorsMessage().length || !!model.new_material().distribution_id\n\t\t\t,checked: activated || false\n\t\t}\n\t}\n\n\tmodel.data.currentRoute('Nothing')\n\tprop.merge(\n\t\t[\n\t\t\tmodel.data.initiateContractFetch\n\t\t]\n\t)\n\t\t.map(function([i]){\n\n\t\t\t// const s = i.schedule_id\n\t\t\tconst schange = i.schange || !model.data.routeInitialized()['materials']\n\t\t\tconst ochange = i.ochange || !model.data.routeInitialized()['materials']\n\n\t\t\tif ( ochange ){\n\t\t\t\tmodel.viewtype(MainList)\n\t\t\t\tmodel.inverseProjectsList([])\n\t\t\t\tmodel.checkMultipleProjects([])\n\t\t\t\tmodel.refreshList(false)\n\t\t\t\tmodel.SelectedProject({})\n\t\t\t\tmodel.SelectedDiscipline({})\n\t\t\t\tmodel.selected_pt({})\n\t\t\t\tmodel.selected_preset(null)\n\t\t\t\tmodel.vm({})\n\t\t\t\tmodel.preset_vm(null)\n\t\t\t\tmodel.project_vm({})\n\t\t\t\tmodel.warehouse_vm({})\n\t\t\t\tmodel.new_material({})\n\t\t\t\tmodel.d_item_vm({})\n\t\t\t\tmodel.item_vm({})\n\t\t\t\tmodel.location_vm({})\n\t\t\t\tmodel.transfer_object.from(null)\n\t\t\t\tmodel.transfer_object.to(null)\n\t\t\t\tmodel.suppliers([])\n\t\t\t\tmodel.warehouses([])\n\t\t\t\tmodel.DeleteDItems([])\n\t\t\t\tmodel.DeletePItems([])\n\t\t\t\tmodel.DeleteSItems([])\n\t\t\t\tmodel.DeleteSLocations([])\n\t\t\t\tmodel.deleteWStateProp(false)\n\t\t\t\tmodel.deleteSStateProp(false)\n\t\t\t}\n\n\t\t\tmodel.loading(true)\n\t\t\tmodel.metaDataLoading(true)\n\t\t\treturn Promise.all([\n\t\t\t\t!ochange ? [] : fetchOrganizationsDisciplines()\n\t\t\t\t,!ochange ? [] : fetchWarehouses({})\n\t\t\t\t,!ochange ? [] : fetchMaterials()\n\t\t\t\t,!ochange ? [] : fetchResource()\n\t\t\t\t,!schange ? [] : fetchProjects()\n\t\t\t\t,!ochange ? [] : fetchPresets()\n\t\t\t\t,!ochange ? [] : fetchOrders()\n\t\t\t\t,!ochange ? [] : fetchSuppliers({ depth: 1 })\n\t\t\t])\n\t\t\t\t.then(function(){\n\t\t\t\t\ti.schange = false\n\t\t\t\t\ti.ochange = false\n\t\t\t\t\tmodel.metaDataLoading(true)\n\t\t\t\t\tmodel.statProjectMaterials()\n\t\t\t\t\tmodel.loading(false)\n\t\t\t\t\tmodel.data.currentRoute('materials')\n\t\t\t\t\treturn fetchSuppliers({})\n\t\t\t\t\t.then( fetchContainers )\n\t\t\t\t\t.then( function(){\n\t\t\t\t\t\tmodel.metaDataLoading(false)\n\t\t\t\t\t\tmodel.available_yards()\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t})\n\n\treturn {\n\t\tfetchContainers\n\t\t, fetchSuppliers\n\t\t, fetchProjects\n\t\t, fetchResource\n\t\t, fetchWarehouses\n\t\t, fetchPresets\n\t\t, fetchMaterials\n\t\t, fetchOrders\n\t\t, deleteSupplier\n\t\t, deleteLocation\n\t\t, deleteItem\n\t\t, deleteDitem\n\t\t, sendSupplier\n\t\t, deleteWarehouse\n\t\t, sendWarehouse\n\t\t, sendContainer\n\t\t, applyPreset\n\t\t, sendOrders\n\t\t, transferItems\n\t\t, sendPreset\n\t\t, deletePreset\n\t\t, deleteContainer\n\t\t, SupplierLocationsButton\n\t\t, SupplierItemsButton\n\t\t, clonePreset\n\t\t, sendAllDistriution\n\t\t, PresetItemsButton\n\t\t, DistributionItemsButton\n\t\t, WarehouseItemsButton\n\t\t, makeOrders\n\t\t, deleteOrder\n\t}\n}\n\n/*\n\tModel: Data storage and functions that interact with that data.\n\n\tThe vm represents the view model, any thing to do with the state of the UI\n\tthat doesn't map to a database record is stored on the view model.\n\n\tIt could be whether or not a button is disabled due to a background process.\n\tOr it could be storing how many items are selected in order to render a tally.\n\n*/\nfunction Model(data, activeMTab, activeDTab, activeWTab){\n\n\tconst metaDataLoading = data.scoped(true)\n\tconst loading = data.scoped(true)\n\tconst resources = m.prop([])\n\tconst materials = data.scoped([])\n\tconst suppliers = m.prop([])\n\tconst projects = data.scoped([])\n\tconst warehouses = data.scoped([])\n\tconst presets = m.prop([])\n\tconst containers = m.prop([])\n\tconst projects_tasks = m.prop([])\n\tconst originalOrders = data.scoped([])\n\tconst items = data.scoped([])\n\tconst users = m.prop([])\n\tconst roles = m.prop([])\n\tconst containerIndex = data.scoped([])\n\tconst supplierItemIndex = m.prop([])\n\tconst originalMaterialIndex = m.prop({})\n\tconst uniqcontIndex = m.prop([])\n\tconst MaterialIndex = data.scoped([])\n\tconst errors = data.scoped([])\n\tconst errorsMessage = errors.map((e) =>\n\t\tObject.keys(e)\n\t\t.map((a) =>\n\t\t\te[a]\n\t\t\t\t? a + ' ' + e[a]\n\t\t\t\t: ''\n\t\t)\n\t\t.filter((a) => a)\n\t)\n\tconst completedProjects = data.scoped('inprogress')\n\tconst originalPresets = m.prop([])\n\tconst originalMaterials = data.scoped([])\n\tconst presetsIndexByDiscipline = data.scoped({})\n\tconst projectIndex =\n\t\tprojects.map(R.indexBy(R.pipe(R.prop('project_id'), R.call)))\n\tconst projectPresetsIndexByDiscipline =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tpresetsIndexByDiscipline\n\t\t\t\t,projects\n\t\t\t\t,materials\n\t\t\t]\n\t\t)\n\t\t.map(([i, p, /*m*/]) => {\n\t\t\treturn p\n\t\t\t? R.unnest(p.map((project) => project.disciplines || []))\n\t\t\t.forEach((d) => {\n\t\t\t\tconst pmaterials = i[d.discplineNameDescription] || []\n\t\t\t\tconst dmaterials = materials().filter((m) => m.distribution_entity_id() == d.discipline_id() )\n\n\t\t\t\td.outstandingMaterials =\n\t\t\t\t\tpmaterials.map((preset) => {\n\t\t\t\t\t\tconst alreadySetArray =\n\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\tR.pluck('distribution_amount')\n\t\t\t\t\t\t\t\t,R.map(R.call)\n\t\t\t\t\t\t\t)(dmaterials.filter((m) => m.supplier_items_id() == preset.supplier_items_id()))\n\n\t\t\t\t\t\tconst alreadySet = alreadySetArray.reduce( (prev, curr) => prev + curr, 0 )\n\t\t\t\t\t\tconst entitledAmount = preset.distribution_amount() * d.discipline_work()\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsupplier_items_id: preset.supplier_items_id()\n\t\t\t\t\t\t\t,quantity: alreadySet < entitledAmount\n\t\t\t\t\t\t\t? entitledAmount - alreadySet\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((a) => a.quantity)\n\t\t\t})\n\t\t\t: []\n\t\t})\n\n\t// fetch suppliers to discard/reset\n\t// push into stream from original container to discard/reset\n\n\tconst DeleteDItems = m.prop([])\n\tconst DeletePItems = m.prop([])\n\tconst DeleteSItems = m.prop([])\n\tconst DeleteSLocations = m.prop([])\n\n\tconst organizations_disciplines = data.scoped([])\n\tconst availableYardSelections = data.scoped([])\n\tconst deleteWStateProp = m.prop(false)\n\tconst deleteSStateProp = m.prop(false)\n\tconst editWarehousePermissions = m.prop(false)\n\tconst editSupplierPermissions = m.prop(false)\n\tconst editOrdersPermissions = m.prop(false)\n\tconst editMaterialsPermissions = m.prop(false)\n\tconst inverseProjectsList = data.scoped([])\n\tconst checkMultipleProjects = data.scoped([])\n\tconst refreshList = data.scoped(false)\n\tconst SelectedProject = data.scoped({})\n\tconst SelectedDiscipline = data.scoped({})\n\tconst selected_pt = data.scoped({})\n\tconst selected_preset = data.scoped(null)\n\tconst vm = data.scoped({})\n\tconst preset_vm = data.scoped(null)\n\tconst project_vm = data.scoped({})\n\tconst warehouse_vm = data.scoped({})\n\tconst transfer_object = {\n\t\tfrom: data.scoped(null)\n\t\t,to: data.scoped(null)\n\t}\n\tconst new_material = data.scoped({})\n\tconst d_item_vm = data.scoped({})\n\tconst item_vm = m.prop({})\n\tconst location_vm = m.prop({})\n\tconst savingProp = m.prop(false)\n\n\tconst SelectedProjectDisciplines =\n\t\tSelectedProject.map((p) => {\n\n\t\t\tconst projectOption =\n\t\t\t\tp.project_name\n\t\t\t\t? R.merge(\n\t\t\t\t\tp\n\t\t\t\t\t,{discplineNameDescription: p.project_name()}\n\t\t\t\t)\n\t\t\t\t: []\n\n\t\t\tif( projectOption ){\n\t\t\t\tSelectedDiscipline(projectOption)\n\t\t\t\tselected_pt(projectOption)\n\t\t\t}\n\n\t\t\treturn p.disciplines\n\t\t\t\t? [].concat(\n\t\t\t\t\tp.disciplines\n\t\t\t\t\t,projectOption\n\t\t\t\t)\n\t\t\t\t: []\n\t\t})\n\n\tfunction copiedOrders(oList){\n\t\treturn oList.map((item) => ({\n\t\t\t\tcreated: false\n\t\t\t\t,filecount: Number(item.filecount)\n\t\t\t\t,order_id: m.prop(item.order_id())\n\t\t\t\t,organization_id: m.prop(item.organization_id())\n\t\t\t\t,distribution_id: m.prop(item.distribution_id())\n\t\t\t\t,supplier_id: m.prop(item.supplier_id())\n\t\t\t\t,supplier_items_id: m.prop(item.supplier_items_id())\n\t\t\t\t,order_name: m.prop(item.order_name())\n\t\t\t\t,order_items_name: m.prop(item.order_items_name())\n\t\t\t\t,order_items_description: m.prop(item.order_items_description())\n\t\t\t\t,order_amount: m.prop(item.order_amount())\n\t\t\t\t,order_received: m.prop(item.order_received())\n\t\t\t\t,order_notes: m.prop(item.order_notes())\n\t\t\t\t,order_items_cost: m.prop( item.order_items_cost() )\n\t\t\t\t,order_supplier_name: m.prop(item.order_supplier_name())\n\t\t\t\t,order_stock_location: m.prop(item.order_stock_location())\n\t\t\t\t,order_submission_date : m.prop( item.order_submission_date() )\n\t\t\t\t,order_eta: m.prop( item.order_eta() )\n\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t})\n\t\t)\n\t}\n\n\tconst orders = originalOrders.map((oList) => copiedOrders(oList) )\n\tconst cancelledOrders =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\torders\n\t\t\t\t,MaterialIndex\n\t\t\t]\n\t\t)\n\t\t.map(([oList, ]) =>\n\t\t\toList.filter((o) =>\n\t\t\t\tMaterialIndex()[o.distribution_id()]\n\t\t\t\t&& MaterialIndex()[o.distribution_id()].distribution_ordered() == 'Cancelled'\n\t\t\t\t&& (MaterialIndex()[o.distribution_id()].project_id || MaterialIndex()[o.distribution_id()].warehouse_id)\n\t\t\t)\n\t\t)\n\n\tconst orderedOrders =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\torders\n\t\t\t\t,MaterialIndex\n\t\t\t]\n\t\t)\n\t\t.map(([oList, ]) =>\n\t\t\toList.filter((o) =>\n\t\t\t\tMaterialIndex()[o.distribution_id()]\n\t\t\t\t&& MaterialIndex()[o.distribution_id()].distribution_ordered() != 'Cancelled'\n\t\t\t\t&& (MaterialIndex()[o.distribution_id()].project_id || MaterialIndex()[o.distribution_id()].warehouse_id)\n\t\t\t)\n\t\t)\n\n\tconst lostOrders =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\torders\n\t\t\t\t,MaterialIndex\n\t\t\t]\n\t\t)\n\t\t.map(([oList, ]) =>\n\t\t\toList.filter((o) =>\n\t\t\t\tMaterialIndex()[o.distribution_id()]\n\t\t\t\t&& !MaterialIndex()[o.distribution_id()].project_id\n\t\t\t\t&& !MaterialIndex()[o.distribution_id()].warehouse_id\n\t\t\t)\n\t\t)\n\n\tconst presetOptions =\n\t\torganizations_disciplines.map((/*p*/) => {\n\t\t\treturn R.pluck(\n\t\t\t\t'orgDisciplineNameDescription'\n\t\t\t\t,organizations_disciplines()\n\t\t\t)\n\t\t})\n\n\tconst presetCloneOptions =\n\t\tselected_preset.map((p) => {\n\t\t\tnew_material({})\n\t\t\treturn R.filter(\n\t\t\t\t(c) => c != p\n\t\t\t\t,presetOptions()\n\t\t\t\t.filter((od) =>\n\t\t\t\t\tpresets().some((p) =>\n\t\t\t\t\t\tp.presets_name() == od\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t})\n\n\tconst order_vm = {\n\t\torder: data.scoped([])\n\t\t,orderUpdates: data.scoped([])\n\t}\n\n\tconst transfer_vm = transfer_object.from.map(() => [])\n\n\tconst container_vm = m.prop({\n\t\tselected: {\n\t\t\tcontainer: []\n\t\t}\n\t})\n\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Material'\n\t\t\t\t\t,'Order'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\n\tlet deleteSupplier = function(){\n\t\tlet index = R.findIndex(\n function(chr) { return chr.supplier_id() == vm().supplier_id()},\n suppliers()\n )\n\t\tsuppliers().splice(index, 1)\n\t\tvm({})\n\t}\n\n\n\tlet deleteWarehouse = function(){\n\t\tlet index = R.findIndex(\n function(chr) {\n\t\t\t\treturn chr.warehouse_id()\n\t\t\t\t== warehouse_vm().warehouse_id()},\n warehouses()\n )\n\t\twarehouses().splice(index, 1)\n\t\twarehouse_vm({})\n\t}\n\n\tlet resetForm = function(){\n\t\treturn {\n\t\t\t\torganization_id: m.prop(null)\n\t\t\t\t,supplier_id: m.prop(null)\n\t\t\t\t,supplier_name: m.prop(null)\n\t\t\t\t,supplier_locations: []\n\t\t\t\t,supplier_items: []\n\t\t\t\t,supplier_delivery: m.prop(null)\n\t\t\t}\n\t\t}\n\n\n\tlet resetIForm = function(){\n\t\treturn {\n\t\t\t\tsupplier_id: m.prop(null)\n\t\t\t\t,supplier_items_id: m.prop(uuid.v4())\n\t\t\t\t,supplier_items_name: m.prop(null)\n\t\t\t\t,supplier_items_description: m.prop(null)\n\t\t\t\t,supplier_items_cost: m.prop(0)\n\t\t\t\t,supplier_items_batch: m.prop(0)\n\t\t\t\t,supplier_items_batch_cost: m.prop(0)\n\t\t\t\t,supplier_items_supply_time: m.prop(2)\n\t\t\t\t,supplier_items_available: m.prop(true)\n\t\t\t\t,supplier_items_uom: m.prop('each')\n\t\t\t\t,supplier_items_minimum_order: m.prop(0)\n\t\t\t\t,created: true\n\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t}\n\t\t}\n\n\n\tlet resetLForm = function(){\n\t\treturn {\n\t\t\t\tsupplier_id: m.prop(null)\n\t\t\t\t,supplier_locations_id: m.prop(null)\n\t\t\t\t,supplier_locations_location: m.prop(null)\n\t\t\t\t,supplier_locations_regular_operating_hours: m.prop('7am - 4pm Mon-Fri')\n\t\t\t\t,supplier_locations_weekend_operating_hours: m.prop('8am -12pm Sat-Sun')\n\t\t\t\t,supplier_locations_public_holiday_operating_hours: m.prop('Closed')\n\t\t\t\t,supplier_locations_phone: m.prop(null)\n\t\t\t\t,supplier_locations_email: m.prop(null)\n\t\t\t\t,created: true\n\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t}\n\t\t}\n\n\tlet resetNewMaterial = function(){\n\t\treturn {\n\t\t\t\tcreated: true\n\t\t\t\t,organization_id: m.prop(null)\n\t\t\t\t,distribution_id: m.prop(null)\n\t\t\t\t,distribution_entity_name: m.prop(null)\n\t\t\t\t,distribution_entity_id: m.prop(null)\n\t\t\t\t,supplier_id: m.prop(null)\n\t\t\t\t,supplier_items_id: m.prop(null)\n\t\t\t\t,distribution_material_name: m.prop(null)\n\t\t\t\t,distribution_material_description: m.prop(null)\n\t\t\t\t,distribution_amount: m.prop(0)\n\t\t\t\t,distribution_batch: m.prop(0)\n\t\t\t\t,distribution_container_name: m.prop(null)\n\t\t\t\t,distribution_container_id: m.prop(null)\n\t\t\t\t,distribution_silo: m.prop(false)\n\t\t\t\t,distribution_ordered: m.prop('')\n\t\t\t\t,distribution_float: m.prop(0)\n\t\t\t\t,distribution_stocked: m.prop(\n\t\t\t\t\twarehouse_vm().warehouse_name\n\t\t\t\t\t\t? warehouse_vm().warehouse_name() + \" - \" + warehouse_vm().warehouse_location()\n\t\t\t\t\t\t: !project_vm().project_name\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: SelectedProject().project_name() + \" - \" + SelectedProject().project_material_suburb()\n\t\t\t\t\t)\n\t\t\t\t,supplier_items_unique_recognition: m.prop(null)\n\t\t\t\t,key: Math.random().toString(15).slice(2, 14)\n\t\t\t}\n\t\t}\n\n\tlet resetWForm = function(){\n\t\treturn {\n\t\t\t\twarehouse_id: m.prop(null)\n\t\t\t\t,organization_id: m.prop(null)\n\t\t\t\t,warehouse_name: m.prop(null)\n\t\t\t\t,warehouse_location: m.prop(null)\n\t\t\t\t,warehouse_operating_hours_regular: m.prop('7am - 4pm Mon-Fri')\n\t\t\t\t,warehouse_operating_hours_weekend: m.prop('8am -12pm Sat-Sun')\n\t\t\t\t,warehouse_operating_hours_public_holiday: m.prop('Closed')\n\t\t\t\t,warehouse_phone: m.prop(null)\n\t\t\t\t,warehouse_email: m.prop(null)\n\t\t\t\t,warehouse_items: []\n\t\t\t\t,warehouse_delivery: m.prop(null)\n\t\t\t}\n\t\t}\n\n\tlet makePreset = function(item /*, clone */){\n\t\tlet preset = {\n\t\t\tcreated: true\n\t\t\t,presets_id: m.prop(null)\n\t\t\t,presets_name: m.prop(item.distribution_entity_name())\n\t\t\t,organization_id: m.prop(null)\n\t\t\t,distribution_entity_name: m.prop(item.distribution_entity_name())\n\t\t\t,distribution_entity_id: m.prop(item.distribution_entity_id())\n\t\t\t,supplier_id: m.prop(item.supplier_id())\n\t\t\t,supplier_items_id: m.prop(item.supplier_items_id())\n\t\t\t,distribution_material_name: m.prop(item.distribution_material_name())\n\t\t\t,distribution_material_description: m.prop(item.distribution_material_description())\n\t\t\t,distribution_amount: m.prop(item.distribution_amount())\n\t\t\t,distribution_batch: m.prop(item.distribution_batch())\n\t\t\t,distribution_container_name: m.prop(item.distribution_container_name())\n\t\t\t,distribution_container_id: m.prop(item.distribution_container_id())\n\t\t\t,distribution_silo: m.prop(item.distribution_silo())\n\t\t\t,distribution_ordered: m.prop(item.distribution_ordered())\n\t\t\t,distribution_stocked: m.prop(item.distribution_stocked())\n\t\t\t,distribution_float: m.prop(item.distribution_float())\n\t\t\t,key: Math.random().toString(15).slice(2, 14)\n\t\t}\n\t\treturn preset\n\t}\n\n\n\tlet DeleteWDisabled = function (returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d) =>\n\t\t\t\td.warehouse_id\n\t\t\t\t&& ItemConsolidation(d)\n\t\t\t\t.filter((i) =>\n\t\t\t\t\ti.distribution_ordered()\n\t\t\t\t\t&& i.distribution_ordered() != 'Cancelled'\n\t\t\t\t)\n\t\t\t\t.length != 0\n\t\t\t\t\t? `To delete this Warehouse, transfer its items to another location`\n\t\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t``\n\t\t\t,''\n\t\t\t,''\n\t\t\t,[warehouse_vm()]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,true\n\t\t)\n\t}\n\n\tlet edit = m.prop(false)\n\n\tlet check_new_material = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d, prop='distribution_material_name') => items().length != 0 && d[prop] && !d[prop]() ? `Item Name` : null\n\t\t\t,(d, prop='distribution_stocked') => items().length != 0 && d[prop] && !d[prop]() ? `Item stocked location` : null\n\t\t\t,(d, prop='distribution_amount') => items().length != 0 && d[prop] && !d[prop]() ? `Units` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To add this, `\n\t\t\t,' and '\n\t\t\t, ' must not be empty'\n\t\t\t, new_material().distribution_id\n\t\t\t\t? [new_material()]\n\t\t\t\t: exposeObject(d_item_vm())\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,Object.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.concat(\n\t\t\t\t\t!data.readSupplierPermissions()\n\t\t\t\t\t\t? `Supplier permissions are required to Add Materials.`\n\t\t\t\t\t\t: items().length == 0\n\t\t\t\t\t\t\t? `Create items in Suppliers to then distribute around Projects, Automated Items and Warehouses`\n\t\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tlet SItemDelete = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t() => item_vm().supplier_items_id\n\t\t\t\t\t&& materials().some((m) =>\n\t\t\t\t\t\tm.supplier_items_id()\n\t\t\t\t\t\t== item_vm().supplier_items_id()\n\t\t\t\t\t\t&& m.distribution_entity_name()\n\t\t\t\t\t)\n\t\t\t\t? `The selected supplier item can't be deleted, it is being used in projects or warehouses`\n\t\t\t\t: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t``\n\t\t\t,''\n\t\t\t, ''\n\t\t\t,[item_vm()]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,true\n\t\t)\n\t}\n\n\tlet check_inames = function (returnBoolean){\n\t\tconst count = R.countBy( chr =>\n\t\t\tchr.supplier_items_name()\n\t\t\t, vm().supplier_items\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d, prop='supplier_items_name') => !d[prop]()\n\t\t\t\t? `Item Name must not be empty` : null\n\t\t\t,(d, prop='supplier_items_name') => count[d[prop]()] > 1\n\t\t\t\t? `Item Names must not be duplicated, check ` + d[prop]() : null\n\t\t\t,(d, prop='supplier_items_description') => !d[prop]()\n\t\t\t\t? `Item Description must not be empty` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t, '. '\n\t\t\t,vm().supplier_items\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,[SItemDelete(true)]\n\t\t\t,errorsMessage()\n\t\t)\n\t}\n\n\tlet check_lnames = function (returnBoolean){\n\t\tconst count = R.countBy( chr =>\n\t\t\tchr.supplier_locations_location()\n\t\t\t, vm().supplier_locations\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d, prop='supplier_locations_location') => !d[prop]()\n\t\t\t\t? `Supplier Outlet Address must not be empty` : null\n\t\t\t,(d, prop='supplier_locations_location') => count[d[prop]()] > 1\n\t\t\t\t? `Supplier Outlet Addresses must not be duplicated, check ` + d[prop]() : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and '\n\t\t\t\t,''\n\t\t\t,vm().supplier_locations\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,errorsMessage()\n\t\t)\n\t}\n\n\n\tlet SaveSupplierDisabled = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.supplier_name()\n\t\t\t, suppliers().filter((c) =>\n\t\t\t\tc.supplier_id() != vm().supplier_id()\n\t\t\t).concat(vm())\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.supplier_name() ? `Supplier Name must not be empty` : null\n\t\t\t,(d) => count[d.supplier_name()] > 1 ? `Supplier Names must not be duplicated` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t, ''\n\t\t\t,[vm()]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,errorsMessage()\n\t\t)\n\t}\n\n\n\tlet DeleteSDisabled = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d) => d.length == 0 ? returnBoolean ? `Suppliers are empty` : '' : null\n\t\t\t,(d) => !d.supplier_name || !d.supplier_name() ? returnBoolean ? `Supplier Name is empty` : '' : null\n\t\t\t,(d) => d.supplier_name\n\t\t\t\t&& materials().some((i) =>\n\t\t\t\t\tvm().supplier_items.find((si) =>\n\t\t\t\t\t\tsi.supplier_items_id()\n\t\t\t\t\t\t== i.supplier_items_id()\n\t\t\t\t\t)\n\t\t\t\t).length\n\t\t\t\t\t? `This supplier can't be deleted, its items are being used in projects or warehouses`\n\t\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t``\n\t\t\t,''\n\t\t\t, ''\n\t\t\t,[\n\t\t\t\tsuppliers()\n\t\t\t\t,vm()\n\t\t\t\t,vm()\n\t\t\t]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,true\n\t\t)\n\t}\n\n\tlet check_wnames = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => chr.warehouse_name()\n\t\t\t, warehouses().filter((c) =>\n\t\t\t\tc.warehouse_id() != warehouse_vm().warehouse_id()\n\t\t\t).concat(warehouse_vm())\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.warehouse_name() ? `Warehouse Name must not be empty` : null\n\t\t\t,(d) => !d.warehouse_location() ? `Warehouse Address must not be empty` : null\n\t\t\t,(d) => count[d.warehouse_name()] > 1 ? `Warehouse Names must not be duplicated` : null\n\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t, ''\n\t\t\t,[warehouse_vm()]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,errorsMessage()\n\t\t)\n\t}\n\n\n\tlet check_preset = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d, prop='distribution_material_name') => d[prop] && items().length > 0 && !d[prop]() ? `Item Name` : null\n\t\t\t,(d, prop='distribution_amount') => d[prop] && items().length > 0 && !d[prop]() ? `Units` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\titems().length > 0 ? `To save this automated fill ` : ''\n\t\t\t,items().length > 0 ? ' and ' : ''\n\t\t\t,items().length > 0 ? ' must not be empty' : ``\n\t\t\t,new_material().distribution_id\n\t\t\t\t? [new_material()]\n\t\t\t\t: exposeObject(d_item_vm())\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,Object.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.concat(\n\t\t\t\t\t!data.readSupplierPermissions()\n\t\t\t\t\t\t? `Supplier permissions are required to Add Materials.`\n\t\t\t\t\t\t: items().length == 0 && !metaDataLoading()\n\t\t\t\t\t\t\t? `Create items in Suppliers to then distribute around Projects, Automated Items and Warehouses`\n\t\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\tlet transferCheck = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t() => warehouse_vm().warehouse_id && warehouse_vm().warehouse_id() && data.schedule_id() == null ? `Select a schedule to include project options but save the warehouse first to keep its progress` : null\n\t\t\t,() => transfer_object.to() && transfer_object.to() == transfer_object.from() ? `Its not wise to transfer items to and from the same place` : null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t''\n\t\t\t,''\n\t\t\t,``\n\t\t\t,[transfer_object]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,true\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,errorsMessage()\n\t\t)\n\t}\n\n\n\tlet FilteredMaterialspt = function(project, useList){\n\n\t\tconst mlist = useList || materials\n\t\treturn !project.disciplines\n\t\t\t? []\n\t\t\t: [].concat(\n\t\t\t\tmlist().filter((p) =>\n\t\t\t\t\tp.distribution_entity_id()\n\t\t\t\t\t== project.project_id()\n\t\t\t)\n\t\t\t\t,R.unnest(\n\t\t\t\t\tproject.disciplines.map((d) =>\n\t\t\t\t\t\tmlist().filter((m) =>\n\t\t\t\t\t\t\tm.distribution_entity_id()\n\t\t\t\t\t\t\t== d.discipline_id()\n\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t)\n\t}\n\n\n\tlet available_yards = function(){\n\t \tlet yards = []\n\n\t \twarehouses().forEach((w) => {\n\t \t\tlet yard = { storage_location: w.warehouse_name() + \" - \" + w.warehouse_location()}\n\t \t\tyards.push(yard)\n\t \t})\n\n\t \tprojects().forEach((p) => {\n\t \t\tlet yard = { storage_location: p.project_name() + \" - \" + p.project_material_suburb()}\n\t \t\tyards.push(yard)\n\t \t})\n\n\t \tresources().forEach((r) => {\n\t \t\tlet yard = { storage_location: r.contractor_name() + \" - \" + r.contractor_yard()}\n\t \t\tyards.push(yard)\n\t \t})\n\n\t \tmaterials().forEach((m) => {\n\t \t\tlet index = R.findIndex(\n function(chr) { return chr.storage_location == m.distribution_stocked() },\n yards\n )\n\t \t\tif (index == -1 ){\n\t\t\t\tlet yard = { storage_location: m.distribution_stocked() }\n\t\t\t\tyards.push(yard)\n\t \t\t}\n\t \t})\n\t\treturn availableYardSelections(yards)\n\t}\n\n\tconst transfers = prop.merge(\n\t\t[\n\t\t\twarehouses\n\t\t\t,projects\n\t\t]\n\t)\n\t.map(\n\t\t([warehouses, projects]) =>\n\t\t\t[].concat(\n\t\t\t\teditWarehousePermissions()\n\t\t\t\t\t? warehouses.map(\n\t\t\t\t\tw => ({\n\t\t\t\t\t\ttransfer_name: w.warehouse_name()\n\t\t\t\t\t\t,transfer_id: w.warehouse_id()\n\t\t\t\t\t\t,tranfer_location: w.warehouse_location()\n\t\t\t\t\t\t,warehouse_id: w.warehouse_id()\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\t: []\n\t\t\t\t,\n\t\t\t\teditMaterialsPermissions() || editWarehousePermissions()\n\t\t\t\t\t? projects.map(\n\t\t\t\t\tp => ({\n\t\t\t\t\t\ttransfer_name: p.project_name()\n\t\t\t\t\t\t,transfer_id: p.project_id()\n\t\t\t\t\t\t,tranfer_location: p.project_material_suburb()\n\t\t\t\t\t\t,project_id: p.project_id()\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\t: []\n\t\t\t)\n\t)\n\n\tconst transfersFrom = prop.merge(\n\t\t[\n\t\t\ttransfers\n\t\t\t,transfer_object.to\n\t\t\t,warehouse_vm\n\t\t]\n\t)\n\t.map(\n\t\t([transferList, selectedTransfer]) =>\n\t\t\tselectedTransfer\n\t\t\t\t? transferList.filter((t) => t.transfer_id != selectedTransfer.transfer_id)\n\t\t\t\t: transferList\n\t)\n\n\n\tconst transfersTo = prop.merge(\n\t\t[\n\t\t\ttransfers\n\t\t\t,transfer_object.from\n\t\t\t,warehouse_vm\n\t\t]\n\t)\n\t.map(\n\t\t([transferList, selectedTransfer]) =>\n\t\t\tselectedTransfer\n\t\t\t\t? transferList.filter((t) => t.transfer_id != selectedTransfer.transfer_id)\n\t\t\t\t: transferList\n\t)\n\n\tlet make_items = function(){\n\t\titems([])\n\t\tsuppliers().forEach((supplier) => {\n\t\t\tsupplier.supplier_items.forEach((item) => {\n\t\t\t\tif (item.supplier_items_available()){\n\t\t\t\t\tlet listed_item = {\n\t\t\t\t\t\tsupplier_items_unique_recognition: item.supplier_items_name() + ' - ' + item.supplier_items_description() + ' - ' + supplier.supplier_name()\n\t\t\t\t\t\t,supplier_id: supplier.supplier_id()\n\t\t\t\t\t\t,supplier_items_id: item.supplier_items_id()\n\t\t\t\t\t\t,supplier_items_name: item.supplier_items_name()\n\t\t\t\t\t\t,supplier_items_description: item.supplier_items_description()\n\t\t\t\t\t\t,supplier_items_cost: item.supplier_items_cost()\n\t\t\t\t\t\t,supplier_items_batch: item.supplier_items_batch()\n\t\t\t\t\t\t,supplier_items_batch_cost: item.supplier_items_batch_cost()\n\t\t\t\t\t\t,supplier_items_available: item.supplier_items_available()\n\t\t\t\t\t\t,supplier_items_uom: item.supplier_items_uom()\n\t\t\t\t\t\t,supplier_items_minimum_order: item.supplier_items_minimum_order()\n\t\t\t\t\t}\n\t\t\t\t\titems().push(listed_item)\n\t\t\t\t}\n\t\t\t\titem.supplier_name = supplier.supplier_name()\n\t\t\t})\n\t\t})\n\n\t\tsupplierItemIndex(\n\t\t\tR.indexBy(\n\t\t\t\t(si) => si.supplier_items_id()\n\t\t\t\t,R.chain(\n\t\t\t\t\t(s) => s.supplier_items\n\t\t\t\t\t,suppliers()\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t\treturn items(items())\n\t}\n\n\n\tlet check_ordered = function(item){\n\t\treturn order_vm.order().find((m) =>\n\t\t\tuniqItem(m, uniqDItem) == uniqItem(item, uniqDItem)\n )\n\t}\n\n\tlet check_order_vm = function(item){\n\t\tlet removal_list =\n\t\t\torder_vm.order()\n\t\t\t.filter((selected_container_item) =>\n\t\t\t\tselected_container_item.distribution_container_name()\n\t\t\t\t== item.distribution_container_name()\n\t\t\t)\n\n\t\tremoval_list.forEach((removal_item) => {\n\t\t\tlet index = R.findIndex(\n\t\t\t\t(chr) => chr.distribution_id()\n\t\t\t\t== removal_item.distribution_id()\n ,order_vm.order()\n )\n\t\t\tif (index >= 0){ order_vm.order().splice(index, 1) }\n\t\t})\n\t}\n\n\n\n\n\tlet statProjectMaterials = function(){\n\t\tconst sumDollars = (list) =>\n\t\t\t\tR.sum(\n\t\t\t\t\tlist.map((m) =>\n\t\t\t\t\t\t!containerIndex()[m.distribution_container_name()]\n\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t: containerIndex()[m.distribution_container_name()].containerIsFull\n\t\t\t\t\t\t\t? supplierItemIndex()[m.supplier_items_id()].supplier_items_batch_cost() * m.distribution_amount()\n\t\t\t\t\t\t\t: supplierItemIndex()[m.supplier_items_id()].supplier_items_cost() * m.distribution_amount()\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\tif ( Object.keys(containerIndex()).length != 0 && Object.keys(supplierItemIndex()).length != 0){\n\t\t\tprojects().forEach((p) => {\n\t\t\t\tlet mlist = FilteredMaterialspt(p)\n\t\t\t\tlet mlistOrdered = mlist.filter((item) =>\n\t\t\t\t\t\titem.distribution_ordered()\n\t\t\t\t\t\t&& item.distribution_ordered() != 'Cancelled'\n\t\t\t\t\t)\n\t\t\t\tp.project_items = mlist\n\t\t\t\tp.orderedStat =\n\t\t\t\t\tmlist.length == 0\n\t\t\t\t\t\t? `Not Created`\n\t\t\t\t\t\t: mlist.length != 0 && mlistOrdered.length == 0\n\t\t\t\t\t\t\t? 'Not ordered yet'\n\t\t\t\t\t\t\t: mlistOrdered.length/mlist.length * 100\n\n\t\t\t\tp.orderedValue =\n\t\t\t\t\t'$ ' + sumDollars(mlistOrdered).toFixed(2)\n\n\t\t\t\tp.materialValue =\n\t\t\t\t\t'$ ' + sumDollars(mlist).toFixed(2)\n\t\t\t})\n\t\t}\n\n\t}\n\n\n\tlet copy_items = function(copyList, creatNewOrCopy){\n\t\tlet copies = []\n\t\tif (copyList.length > 0){\n\t\t\tcopyList.forEach((item) => {\n\t\t\t\tlet copy_item = resetNewMaterial()\n\t\t\t\titem.presets_id\n\t\t\t\t\t? copy_item.presets_id = m.prop(item.presets_id())\n\t\t\t\t\t: null\n\t\t\t\titem.presets_name\n\t\t\t\t\t? copy_item.presets_name = m.prop(item.distribution_entity_name())\n\t\t\t\t\t: null\n\t\t\t\titem.distribution_id\n\t\t\t\t\t? copy_item.distribution_id( item.distribution_id() )\n\t\t\t\t\t: delete copy_item.distribution_id\n\t\t\t\tcopy_item.created = creatNewOrCopy\n\t\t\t\tcopy_item.organization_id(item.organization_id())\n\t\t\t\tcopy_item.distribution_entity_id( item.distribution_entity_id() )\n\t\t\t\tcopy_item.distribution_entity_name( item.distribution_entity_name() )\n\t\t\t\tcopy_item.supplier_id( item.supplier_id() )\n\t\t\t\tcopy_item.supplier_items_id( item.supplier_items_id() )\n\t\t\t\tcopy_item.distribution_material_name( item.distribution_material_name() )\n\t\t\t\tcopy_item.distribution_material_description( item.distribution_material_description() )\n\t\t\t\tcopy_item.distribution_amount( item.distribution_amount() )\n\t\t\t\tcopy_item.distribution_batch( item.distribution_batch() )\n\t\t\t\tcopy_item.distribution_container_name( item.distribution_container_name() )\n\t\t\t\tcopy_item.distribution_container_id( item.distribution_container_id() )\n\t\t\t\tcopy_item.distribution_silo( item.distribution_silo() )\n\t\t\t\tcopy_item.distribution_ordered( item.distribution_ordered() )\n\t\t\t\tcopy_item.distribution_stocked( item.distribution_stocked() )\n\t\t\t\tcopy_item.distribution_float( item.distribution_float() )\n\t\t\t\tcopy_item.key = Math.random().toString(15).slice(2, 8)\n\t\t\t\tcopy_item.supplier_name = (supplierItemIndex()[item.supplier_items_id()] || {}).supplier_name || ''\n\t\t\t\tcopy_item.order_eta = item.order_eta\n\t\t\t\tcopy_item.order_received = item.order_received\n\t\t\t\tcopy_item.project_id = item.project_id\n\t\t\t\tcopy_item.warehouse_id = item.warehouse_id\n\t\t\t\tcopy_item.order_name = item.order_name\n\t\t\t\tcopy_item.requiredby = item.requiredby\n\t\t\t\tcopy_item.discipline_id = item.discipline_id\n\t\t\t\tcopy_item.project_start_date = item.project_start_date\n\t\t\t\tcopy_item.discipline_start_date = item.discipline_start_date\n\t\t\t\tdelete copy_item.supplier_items_unique_recognition\n\t\t\t\tcopies.push(copy_item)\n\t\t\t})\n\t\t}\n\t\treturn copies\n\t}\n\n\tlet getUniqueContainerName = function(yard){\n\n\t\tlet container_list = R.pipe(R.map( R.invoker(0, 'distribution_container_name')), R.uniq)(materials())\n\t\tlet container_count = container_list.length - 1\n\t\tdo {\n\t\t\tcontainer_count = container_count + 1\n\n\t\t\tlet deOArray = yard.storage_location.split(' ').map((word) => word.replace(regExes.uniqPattern, '').slice(0,1).charAt(0).toUpperCase()).join('')\n\n\t\t\tvar container_plausible = deOArray + '-' + container_count\n\t\t\tvar container_check = R.findIndex(\n\t\t\t\tfunction(chr) { return chr == container_plausible },\n\t\t\t\tcontainer_list\n\t\t\t)\n\t\t}\n\t\twhile( container_check >= 0 )\n\t\treturn container_plausible\n\t}\n\n\tlet consolidate = function(){\n\t\tconst ItemList =\n\t\t\tmaterials().filter((m) =>\n\t\t\t\t!m.distribution_ordered()\n\t\t\t\t&& m.distribution_ordered() != 'Cancelled'\n\t\t\t)\n\t\t// Make containers for siloed items\n\n\t\tlet silo_list = ItemList.filter((material) => material.distribution_silo() == true)\n\n\t\tlet silo_unordered = silo_list.filter((material) => !material.distribution_ordered())\n\n\t\tsilo_unordered.forEach((material) => {\n\t\t\tlet container_plausible = getUniqueContainerName({storage_location: material.distribution_stocked() })\n\t\t\tmaterial.distribution_container_name(container_plausible)\n\t\t\tmaterial.created = true\n\t\t})\n\t\t// Make containers for non-batchable items\n\t\tlet nonBatchable = ItemList.filter((material) => material.distribution_batch() == 0)\n\t\tlet nonBatchable_unordered = nonBatchable.filter((material) => !material.distribution_ordered())\n\t\tnonBatchable_unordered.forEach((material) => {\n\t\t\tlet container_plausible = getUniqueContainerName({storage_location: material.distribution_stocked() })\n\t\t\tmaterial.distribution_container_name(container_plausible)\n\t\t\tmaterial.created = true\n\t\t})\n\t\t// Make containers for batchable items that have a greater quanitity than the batch quantiity. Would be special reauest from supplier, but is possible\n\t\tlet specialOrder = ItemList.filter((material) => Number(material.distribution_amount()) >= Number(material.distribution_batch()))\n\t\tlet specialOrder__unordered = specialOrder.filter((material) => !material.distribution_ordered())\n\t\tspecialOrder__unordered.forEach((material) => {\n\t\t\tlet container_plausible = getUniqueContainerName({storage_location: material.distribution_stocked() })\n\t\t\tmaterial.distribution_container_name(container_plausible)\n\t\t\tmaterial.created = true\n\t\t})\n\t\t// Consolidate all other materials\n\t\tlet consolidation_list = ItemList.filter((material) => material.distribution_silo() == false)\n\t\tlet batchable = consolidation_list.filter((material) => material.distribution_batch() != 0)\n\t\tlet notspecial = batchable.filter((material) => Number(material.distribution_amount()) < Number(material.distribution_batch()) )\n\t\tlet notordered = notspecial.filter((material) => !material.distribution_ordered())\n\t\tavailableYardSelections().forEach((yard) => {\n\t\t\tlet unsorted_common_yards = notordered.filter((material) => material.distribution_stocked() == yard.storage_location)\n\t\t\tlet unique_item_descriptions = R.pipe(R.map( R.invoker(0, 'distribution_material_description')), R.uniq)(unsorted_common_yards)\n\t\t\tunique_item_descriptions.forEach((description) => {\n let unsorted_common_description = R.pipe(\n R.filter((material) => material.distribution_material_description() == description),\n R.sortBy(R.propEq(\"distribution_amount\")),\n //todo-james why are we reversing, why does the order matter? its a short cut to finding the best solution\n R.reverse\n )(unsorted_common_yards)\n\n unsorted_common_description.forEach(function(item){\n item.distribution_container_name( null )\n item.distribution_container_id( null )\n })\n\n\t\t\t\tlet container_plausible = getUniqueContainerName(yard)\n\n\t\t\t\tlet allitemscount = unsorted_common_description.length\n\t\t\t\tlet sumOnDrum = 0\n\t\t\t\tlet x = 0\n\t\t\t\tlet TotAllo = 0\n\t\t\t\tlet Remainders = 0\n\t\t\t\tdo {\n\t\t\t\t\twhile( x <= 25 && allitemscount > TotAllo ){\n\t\t\t\t\t\tunsorted_common_description.forEach( (material) => {\n\t\t\t\t\t\t\tif ( material.distribution_container_name() == null ){\n let distribution_batch = Number(material.distribution_batch())\n\t\t\t\t\t\t\t\tlet intervals = [\n 0,0.0008,0.001,0.002,0.004,0.008,0.0125\n ,0.0175,0.020,0.025 ,0.030,0.0375,0.045,0.06\n ,0.08,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1\n\t\t\t\t\t\t\t\t,].map(R.multiply(distribution_batch))\n\n\t\t\t\t\t\t\t\tif ( TotAllo == 0){\n\t\t\t\t\t\t\t\t\tlet i = 0\n\t\t\t\t\t\t\t\t\tRemainders = distribution_batch - sumOnDrum\n\t\t\t\t\t\t\t\t\twhile (Remainders > intervals[i]){\n\t\t\t\t\t\t\t\t\t\ti = i + 1\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tx = i\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet fitsOnDrum = (material, sumOnDrum, x) =>\n\t\t\t\t\t\t\t\t\tNumber(material.distribution_amount()) <= distribution_batch - sumOnDrum\n\t\t\t\t\t\t\t\t\t&& Number(material.distribution_amount()) >= distribution_batch - sumOnDrum - Number(intervals[x])\n\n\n\t\t\t\t\t\t\t if(sumOnDrum < distribution_batch ){\n\t\t\t\t\t\t\t \tif( fitsOnDrum(material, sumOnDrum, x) ){\n\t\t\t\t\t\t\t\t\t\tsumOnDrum = sumOnDrum + Number(material.distribution_amount())\n\t\t\t\t\t\t\t\t\t\tmaterial.distribution_container_name(container_plausible)\n\t\t\t\t\t\t\t\t\t\tmaterial.created = true\n\t\t\t\t\t\t\t\t\t\tTotAllo = TotAllo + 1\n\t\t\t\t\t\t\t\t\t\tx = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tx = x + 1\n\t\t\t\t\t}\n\t\t\t\t\tx = 0\n\t\t\t\t\tsumOnDrum = 0\n\t\t\t\t\tcontainer_plausible = getUniqueContainerName(yard)\n\t\t\t\t}\n\t\t\t\twhile(allitemscount > TotAllo)\n\t\t\t})\n\t\t})\n\t}\n\n\n\n\n\n\tlet assessContainers = function(){\n\t\tconst cContainers =\n\t\t\tR.uniqBy(\n\t\t\t\t(a) => a.distribution_container_name()\n\t\t\t\t,materials().filter((a) => a.distribution_container_name() )\n\t\t\t)\n\n\t\tuniqcontIndex(\n\t\t\tR.indexBy(\n\t\t\t\t(c) => c.distribution_container_name()\n\t\t\t\t,cContainers\n\t\t\t)\n\t\t)\n\n\t\tcontainers()\n\t\t\t.filter((a) =>\n\t\t\t\t!uniqcontIndex()[a.container_name()]\n\t\t\t)\n\t\t\t.map((m) =>\n\n\t\t\t\t\tcontainers().splice(\n\t\t\t\t\t\tcontainers().findIndex((c) =>\n\t\t\t\t\t\t\tc.container_name()\n\t\t\t\t\t\t\t== m.container_name()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, 1\n\t\t\t\t\t)\n\n\t\t\t\t&& m.container_id\n\t\t\t\t&& container_vm().selected.container.push(m)\n\t\t\t)\n\n\n\t\tconst nContainers = cContainers\n\t\t\t\t.filter((a) =>\n\t\t\t\t!containerIndex()[a.distribution_container_name()]\n\t\t\t\t)\n\t\t\t\t.map( (material) =>\n\t\t\t\t({\n\t\t\t\t\tcontainer_id: m.prop(null)\n\t\t\t\t\t,container_name: m.prop(material.distribution_container_name())\n\t\t\t\t\t,container_silo: m.prop(material.distribution_silo())\n\t\t\t\t\t,organization_id: m.prop(material.organization_id())\n\t\t\t\t})\n\t\t\t)\n\n\t\tcontainers(containers().concat(nContainers))\n\t}\n\n\n\n\tlet check_float = function(item){\n\t\tlet warehouse_amount = WarehouseItems().filter((m) => m.supplier_items_id() == item.supplier_items_id() )\n\t\tlet count = 0\n\t\twarehouse_amount.forEach((witem) => {\n\t\t\tif(\twitem.distribution_ordered() && witem.distribution_ordered() != \"Cancelled\"){\n\t\t\t\tcount = count + Number(witem.distribution_amount())\n\t\t\t}\n\t\t})\n\t\treturn count < item.distribution_float()\n\t}\n\n\tlet updatefloats = function(value){\n\t\tif ( value != null ){\n\n\t\t\tconst newMaterialList =\n\t\t\t\tObject.keys(d_item_vm()).length\n\t\t\t\t\t? []\n\t\t\t\t\t: [new_material()]\n\n\t\t\tconst releventItems =\n\t\t\t\tR.uniqBy(\n\t\t\t\t\tR.pipe(R.prop('supplier_items_id'), R.call)\n\t\t\t\t\t,Object.keys(d_item_vm()).length\n\t\t\t\t\t\t? exposeObject(d_item_vm())\n\t\t\t\t\t\t: [new_material()]\n\t\t\t\t)\n\n\t\t\tWarehouseItems()\n\t\t\t.filter((m) =>\n\t\t\t\treleventItems.find((i) =>\n\t\t\t\t\tm.supplier_items_id()\n\t\t\t\t\t== i.supplier_items_id()\n\t\t\t\t)\n\t\t\t)\n\t\t\t.concat( newMaterialList )\n\t\t\t.forEach((i) => {\n\t\t\t\ti.created = true\n\t\t\t\ti.distribution_float(value)\n\t\t\t})\n\n\t\t}\n\t\treturn Object.keys(d_item_vm()).length\n\t\t\t? d_item_vm()[Object.keys(d_item_vm())[0]].distribution_float()\n\t\t\t: new_material().distribution_float()\n\t}\n\n\tlet permissions = data.permissions\n\n\tpermissions.map(function(p){\n\n\t\tconst hasWrite = k => Permissions.hasWrite(p, k)\n\n\t\teditWarehousePermissions( ['warehouse_management'].some(hasWrite) )\n\t\teditSupplierPermissions( ['supplier_management'].some(hasWrite) )\n\t\teditOrdersPermissions( ['order_management'].some(hasWrite) )\n\t\teditMaterialsPermissions( ['material_management'].some(hasWrite) )\n\t\tm.redraw()\n\t\treturn null\n\t})\n\n\tvar ItemConsolidation = function(object, uselist){\n\n\t\tconst id =\n\t\t\tobject\n\t\t\t&& (object.transfer_id || object.warehouse_id)\n\t\t\t? object.transfer_id\n\t\t\t\t? object.transfer_id\n\t\t\t\t: object.warehouse_id()\n\t\t\t: null\n\n\t\tconst subids =\n\t\t\tobject && object.project_id\n\t\t\t? projectIndex()[id].disciplines.map(R.pipe(R.prop('discipline_id'), R.call))\n\t\t\t: []\n\n\t\tconst mlist = uselist || materials\n\n\t\treturn R.sortBy(\n\t\t\tR.prop('order_eta')\n\t\t\t,mlist()\n\t\t\t\t.filter((m) =>\n\t\t\t\t\tm.distribution_entity_id() == id\n\t\t\t\t\t|| subids.find(R.equals(m.distribution_entity_id()))\n\t\t\t\t\t&& m.distribution_ordered() != 'Cancelled'\n\t\t\t\t)\n\t\t\t)\n\t}\n\n\tconst transferToMaterialIndex =\n\t\ttransfer_object.to.map((t) =>\n\t\t\tR.groupBy(\n\t\t\t\t(a) => a.distribution_material_name()\n\t\t\t\t,ItemConsolidation(t)\n\t\t\t)\n\t\t)\n\n\tlet setnew_material = function(){ new_material(resetNewMaterial()) }\n\n\tconst cloneSupplier = function(supplier){\n\t\tlet newSupplier = resetForm()\n\n\t\tnewSupplier.organization_id(supplier.organization_id()),\n\t\tnewSupplier.supplier_id(supplier.supplier_id()),\n\t\tnewSupplier.supplier_name(supplier.supplier_name()),\n\t\tnewSupplier.supplier_delivery(supplier.supplier_delivery())\n\t\tnewSupplier.__requestedAt = supplier.__requestedAt\n\n\t\tnewSupplier.supplier_locations =\n\t\t\tsupplier.supplier_locations.map((slocation) => {\n\t\t\t\tlet newSLocations = resetLForm()\n\t\t\t\tnewSLocations.supplier_id(slocation.supplier_id())\n\t\t\t\tnewSLocations.supplier_locations_id(slocation.supplier_locations_id())\n\t\t\t\tnewSLocations.supplier_locations_location(slocation.supplier_locations_location())\n\t\t\t\tnewSLocations.supplier_locations_regular_operating_hours(slocation.supplier_locations_regular_operating_hours())\n\t\t\t\tnewSLocations.supplier_locations_weekend_operating_hours(slocation.supplier_locations_weekend_operating_hours())\n\t\t\t\tnewSLocations.supplier_locations_public_holiday_operating_hours(slocation.supplier_locations_public_holiday_operating_hours())\n\t\t\t\tnewSLocations.supplier_locations_phone(slocation.supplier_locations_phone())\n\t\t\t\tnewSLocations.supplier_locations_email(slocation.supplier_locations_email())\n\t\t\t\tnewSLocations.created = false\n\t\t\t\tnewSLocations.key = Math.random().toString(15).slice(2, 8)\n\t\t\t\treturn newSLocations\n\t\t\t})\n\n\t\tnewSupplier.supplier_items =\n\t\t\tsupplier.supplier_items.map((sitem) => {\n\t\t\t\tlet newSItems = resetIForm()\n\t\t\t\tnewSItems.supplier_id(sitem.supplier_id())\n\t\t\t\tnewSItems.supplier_items_id(sitem.supplier_items_id())\n\t\t\t\tnewSItems.supplier_items_name(sitem.supplier_items_name())\n\t\t\t\tnewSItems.supplier_items_description(sitem.supplier_items_description())\n\t\t\t\tnewSItems.supplier_items_cost(sitem.supplier_items_cost())\n\t\t\t\tnewSItems.supplier_items_batch(sitem.supplier_items_batch())\n\t\t\t\tnewSItems.supplier_items_batch_cost(sitem.supplier_items_batch_cost())\n\t\t\t\tnewSItems.supplier_items_supply_time(sitem.supplier_items_supply_time())\n\t\t\t\tnewSItems.supplier_items_available(sitem.supplier_items_available())\n\t\t\t\tnewSItems.supplier_items_uom(sitem.supplier_items_uom())\n\t\t\t\tnewSItems.supplier_items_minimum_order(sitem.supplier_items_minimum_order())\n\t\t\t\tnewSItems.created = false\n\t\t\t\tnewSItems.key = Math.random().toString(15).slice(2, 8)\n\t\t\t\tnewSItems.supplier_name = supplier.supplier_name()\n\t\t\t\treturn newSItems\n\t\t\t})\n\t\tvm(newSupplier)\n\t}\n\n\tconst cloneWarehouse = function(warehouse){\n\t\tlet newWarehouse = resetWForm()\n\t\tnewWarehouse.warehouse_id(warehouse.warehouse_id()),\n\t\tnewWarehouse.organization_id(warehouse.organization_id()),\n\t\tnewWarehouse.warehouse_name(warehouse.warehouse_name()),\n\t\tnewWarehouse.warehouse_location(warehouse.warehouse_location()),\n\t\tnewWarehouse.warehouse_operating_hours_regular(warehouse.warehouse_operating_hours_regular()),\n\t\tnewWarehouse.warehouse_operating_hours_weekend(warehouse.warehouse_operating_hours_weekend()),\n\t\tnewWarehouse.warehouse_operating_hours_public_holiday(warehouse.warehouse_operating_hours_public_holiday()),\n\t\tnewWarehouse.warehouse_phone(warehouse.warehouse_phone()),\n\t\tnewWarehouse.warehouse_email(warehouse.warehouse_email()),\n\t\tnewWarehouse.warehouse_delivery(warehouse.warehouse_delivery())\n\t\tnewWarehouse.warehouse_items = []\n\t\tnewWarehouse.__requestedAt = warehouse.__requestedAt\n\t\twarehouse_vm(newWarehouse)\n\t}\n\n\tlet viewtype = data.scoped(MainList)\n\tlet activeMainTab = m.prop('Warehouses & Stock')\n\n\tconst DeletePending = m.prop(false)\n\tconst transferItems =\n\t\tprop.merge(\n\t\t\t[transfer_object.from\n\t\t\t,transfer_vm]\n\t\t)\n\t\t.map(([t, ]) =>\n\t\t\tItemConsolidation(t).filter((i) =>\n\t\t\t\ti.distribution_id()\n\t\t\t\t&& (!i.order_received || i.order_received >= i.distribution_amount())\n\t\t\t\t&& i.distribution_ordered() != 'Cancelled'\n\t\t\t)\n\t\t)\n\n\tconst ProjectItems =\n\t\tprop.merge(\n\t\t\t[selected_pt\n\t\t\t,new_material\n\t\t\t,d_item_vm\n\t\t\t,order_vm.orderUpdates\n\t\t\t,order_vm.order\n\t\t\t,transfer_object.from]\n\t\t)\n\t\t.map(([p,]) => FilteredMaterialspt(p))\n\n\tconst WarehouseItems =\n\t\tprop.merge(\n\t\t\t[warehouse_vm\n\t\t\t,new_material\n\t\t\t,d_item_vm\n\t\t\t,order_vm.orderUpdates\n\t\t\t,order_vm.order\n\t\t\t,transfer_object.from]\n\t\t)\n\t\t.map(([w, ]) =>\n\t\t\tItemConsolidation(w)\n\t\t)\n\n\tconst PresetItems =\n\t\tprop.merge(\n\t\t\t[selected_preset\n\t\t\t,new_material\n\t\t\t,d_item_vm]\n\t\t)\n\t\t.map(([pr, ]) =>\n\t\t\tpresets().filter((p) =>\n\t\t\t\tpr\n\t\t\t\t? p.presets_name() == pr\n\t\t\t\t\t: false\n\t\t\t)\n\t\t)\n\n\tlet baseProjectString =\n\t\tprop.merge(\n\t\t\t[SelectedProject\n\t\t\t,containerIndex\n\t\t\t]\n\t\t)\n\t\t.map(([p, ]) => FilteredMaterialspt(p, originalMaterials) )\n\n\tlet baseWarehouseString =\n\t\tprop.merge(\n\t\t\t[warehouse_vm\n\t\t\t,containerIndex\n\t\t\t]\n\t\t)\n\t\t.map(([w, ]) => {\n\t\t\treturn ItemConsolidation(w, originalMaterials)\n\t\t})\n\n\tlet basePresetString =\n\t\tselected_preset.map((pr) =>\n\t\t\toriginalPresets().filter((p) =>\n\t\t\t\tp.presets_name()\n\t\t\t\t== pr\n\t\t\t)\n\t\t)\n\n\tlet stockedMaterials =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tWarehouseItems\n\t\t\t\t,MaterialIndex\n\t\t\t\t,materials\n\t\t\t]\n\t\t)\n\t\t.map(([wList, ]) =>\n\t\t\twList.filter((o) =>\n\t\t\t\to && o.distribution_ordered() != 'Cancelled'\n\t\t\t)\n\t\t)\n\n\n\tlet cancelledMaterials =\n\t\tprop.merge(\n\t\t\t[\n\t\t\t\tWarehouseItems\n\t\t\t\t,MaterialIndex\n\t\t\t\t,materials\n\t\t\t]\n\t\t)\n\t\t.map(([wList, ]) =>\n\t\t\twList.filter((o) =>\n\t\t\t\to && o.distribution_ordered() == 'Cancelled'\n\t\t\t)\n\t\t)\n\n\tfunction uploadmetadata({only}){\n\t\treturn R.pickBy(\n\t\t\t(a, k) => a && (!only || !Object.keys(only).length || (only && only[k]) || k == 'user_id' || k == 'organization_id')\n\t\t\t,{\n\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t, supplier_items_id: activeMainTab() == 'Suppliers' && item_vm().supplier_items_id && item_vm().supplier_items_id()\n\t\t\t\t, order_id: only && only.order_id\n\t\t\t}\n\t\t)\n\t}\n\n\tconst supplierItemsSide = data.scoped(-1)\n\n\tfunction setSide(prop, v){\n\t\tif(v){ prop(Math.abs(v)*supplierItemsSide()) }\n\t\treturn prop()\n\t}\n\n\tconst supplierdetailPaneInputs = function(item, ctrl){\n\n\t\tconst locationView = ctrl.activeTab() == 'Outlets'\n\t\tconst itemView = ctrl.activeTab() == 'Items'\n\n\n\t\tlet itemInputs = function(){\n\t\t\treturn [\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Item Name'\n\t\t\t\t\t\t,elements.textInput(item.supplier_items_name)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Description'\n\t\t\t\t\t\t,elements.textInput(item.supplier_items_description)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Unit Cost'\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Unit Cost'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: (v) => setSide(item.supplier_items_cost, v)\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\theight: 2em;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\tpadding-bottom: 3em;\n\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\tbackground-color: inherit;\n\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t`\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick: () => supplierItemsSide( supplierItemsSide() * -1 )\n\t\t\t\t\t}\n\t\t\t\t\t, [\n\t\t\t\t\t\tsupplierItemsSide() < 0\n\t\t\t\t\t\t\t? 'Expense'\n\t\t\t\t\t\t\t: 'Revenue'\n\t\t\t\t\t\t,supplierItemsSide() < 0\n\t\t\t\t\t\t\t? elements.switchiconNeuRight()\n\t\t\t\t\t\t\t: elements.switchiconNeuLeft()\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Batch Qty'\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Batch Qty'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: item.supplier_items_batch\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Batch Cost'\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Batch Cost'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: (v) => setSide(item.supplier_items_batch_cost, v)\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Availability')\n\t\t\t\t\t\t,elements.checkbox({\n\t\t\t\t\t\t\tonchange (event){\n\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\titem.supplier_items_available(true)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\titem.supplier_items_available(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,checked: item.supplier_items_available()\n\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t,title: 'This item is catalogued for sale'\n\t\t\t\t\t\t})\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Supply Time (Days)'\n\t\t\t\t\t\t, m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Supply Time'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: item.supplier_items_supply_time\n\t\t\t\t\t\t\t\t,attrs: {placeholder: \"2\", step: 1, min:0}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Unit of Measure'\n\t\t\t\t\t\t,elements.select(['metres', 'each', 'predefined standard'], item.supplier_items_uom, {})\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Min. Order'\n\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Min. Order'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: item.supplier_items_minimum_order\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields: () => uploadmetadata({})\n\t\t\t\t\t, data\n\t\t\t\t})\n\n\t\t\t]\n\t\t}\n\n\t\tlet locationInputs = function(){\n\t\t\treturn [\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Supplier Outlets'\n\t\t\t\t\t\t,elements.textInput(item.supplier_locations_location, {placeholder: \"982 Homer Street, Greenvile, NSW, 2206\"} )\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Regular Operating Hours'\n\t\t\t\t\t\t,elements.textInput(item.supplier_locations_regular_operating_hours, {placeholder: \"9am - 5pm\"} )\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Weekend Operating Hours'\n\t\t\t\t\t\t,elements.textInput(item.supplier_locations_weekend_operating_hours, {placeholder: \"10am - 4pm\"} )\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'PH Operating Hours'\n\t\t\t\t\t\t,elements.textInput(item.supplier_locations_public_holiday_operating_hours, {placeholder: \"Closed\"} )\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Ph'\n\t\t\t\t\t\t,elements.telephoneInput(item.supplier_locations_phone, {placeholder: \"02 XXXX XXXX\"} )\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label'\n\t\t\t\t\t\t, 'Email'\n\t\t\t\t\t\t,elements.textInput(item.supplier_locations_email, {placeholder: \"john@harth.io\"})\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t]\n\t\t}\n\n\t\treturn [\n\t\t\titem.supplier_locations_location && locationView\n\t\t\t|| item.supplier_items_name && itemView\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tlocationView\n\t\t\t\t\t\t\t? ctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\t\tm('button.btn', {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.location_vm({})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, 'Done')\n\t\t\t\t\t\t\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteLocation()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.location_vm().supplier_locations_location\n\t\t\t\t\t\t\t\t\t\t,title: 'Delete a suppliers outlets'\n\t\t\t\t\t\t\t\t\t}, 'Delete' )\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t: ctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\t\tm('button.btn', {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.item_vm({})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, 'Done')\n\t\t\t\t\t\t\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteItem()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,disabled: !!ctrl.model.SItemDelete(true)\n\t\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.item_vm().supplier_items_name\n\t\t\t\t\t\t\t\t\t\t,title: 'Delete a supplier item'\n\t\t\t\t\t\t\t\t\t}, 'Delete' )\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t])\n\t\t\t\t\t,locationView\n\t\t\t\t\t\t? locationInputs()\n\t\t\t\t\t\t: itemInputs()\n\t\t\t\t]\n\t\t\t\t: []\n\n\t\t]\n\t}\n\n\tlet supplierdetailsPaneOpen =\n\t\t() =>\n\t\t\t// vm().supplier_id && (\n\t\t\t\tlocation_vm().supplier_locations_location\n\t\t\t\t|| item_vm().supplier_items_name\n\t\t\t// )\n\n\n\tconst detailPaneInputs = function(item, ctrl){\n\n\t\tconst WarehouseView =\n\t\t\twarehouse_vm().warehouse_id != null\n\t\t\t&& activeMainTab() == 'Warehouses & Stock'\n\n\t\tconst ProjectView =\n\t\t\tselected_pt().project_id\n\t\t\t\t&& ctrl.activeDTab() == 'Distribution'\n\n\t\tconst PresetView = !WarehouseView && !ProjectView\n\n\t\tconst commonInputs = function(){\n\n\t\t\treturn [\n\n\t\t\t\titem.supplier_items_unique_recognition\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t!editMaterialsPermissions()\n\t\t\t\t\t\t? ctrl.model.new_material().supplier_items_unique_recognition()\n\t\t\t\t\t\t: m('label.control-label.mb1'\n\t\t\t\t\t\t\t,'Item Name '\n\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t() => ctrl.model.new_material().supplier_items_unique_recognition()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\t\tctrl.model.items\n\t\t\t\t\t\t\t\t\t\t,(v) => {\n\n\t\t\t\t\t\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_material_name(v.supplier_items_name)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().supplier_items_id(v.supplier_items_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().supplier_id(v.supplier_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif( WarehouseView ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_id(warehouse_vm().warehouse_id())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_name(warehouse_vm().warehouse_name())\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet indexObj = R.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunction(chr) { return chr.supplier_items_id() == ctrl.model.new_material().supplier_items_id()},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWarehouseItems()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ( indexObj ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_float( indexObj.distribution_float() )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if ( ProjectView ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_id(SelectedProject().project_id())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_name(SelectedProject().project_name())\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if ( PresetView ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_name(selected_preset())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_entity_id(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\torganizations_disciplines().find((o) =>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.organizations_disciplines_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ o.organizations_disciplines_description\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== selected_preset()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t).organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_material_description(v.supplier_items_description)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().distribution_batch(v.supplier_items_batch)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().supplier_items_unique_recognition(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tv.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.new_material().supplier_name = (supplierItemIndex()[v.supplier_items_id] || {}).supplier_name || ''\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,'supplier_items_unique_recognition'\n\t\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\t\tdisabled: ctrl.model.items().length == 0\n\t\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\texposeObject(d_item_vm())\n\t\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t'p.pv1.ma0'\n\t\t\t\t\t\t\t\t, a.distribution_amount()\n\t\t\t\t\t\t\t\t+ ' x '\n\t\t\t\t\t\t\t\t+ a.distribution_material_name()\n\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t+ a.distribution_material_description()\n\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t+ a.supplier_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,!(\n\t\t\t\t\titem.supplier_items_unique_recognition\n\t\t\t\t\t? supplierItemIndex()[item.supplier_items_id()]\n\t\t\t\t\t: supplierItemIndex()[item[Object.keys(item)[0]].supplier_items_id()]\n\t\t\t\t)\n\t\t\t\t? elements.alert(`warning`, `This item does not exist in any of the suppliers`)\n\t\t\t\t: ''\n\n\t\t\t\t,ProjectView\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Assigned To')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t? item.distribution_entity_name()\n\t\t\t\t\t\t\t\t\t: item[Object.keys(item)[0]].distribution_entity_name()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tSelectedProjectDisciplines\n\t\t\t\t\t\t\t\t\t,R.when(Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t!v.discipline_id && v.project_id\n\t\t\t\t\t\t\t\t\t\t\t\t? v.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t: v.discipline_id()\n\t\t\t\t\t\t\t\t\t\t\t, 'distribution_entity_id'\n\t\t\t\t\t\t\t\t\t\t\t, item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t\t? [item]\n\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t!v.discipline_id && v.project_id\n\t\t\t\t\t\t\t\t\t\t\t\t? v.project_name()\n\t\t\t\t\t\t\t\t\t\t\t\t: v.discplineNameDescription\n\t\t\t\t\t\t\t\t\t\t\t, 'distribution_entity_name'\n\t\t\t\t\t\t\t\t\t\t\t, item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t\t? [item]\n\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'discplineNameDescription'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\tplaceholder: 'Select a discipline or assign to ' + project_vm().project_name()\n\t\t\t\t\t\t\t\t\t\t,disabled: !SelectedProjectDisciplines().length\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t,WarehouseView || ProjectView ? 'Units' : 'Units/Per Discipline Rate')\n\t\t\t\t\t,!editMaterialsPermissions()\n\t\t\t\t\t\t? 'As Above '\n\t\t\t\t\t\t: m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors //: m.prop({})\n\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\tWarehouseView\n\t\t\t\t\t\t\t\t\t\t|| ProjectView ? 'Units' : 'Units/Per Discipline Rate'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: (value) =>\n\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t\t\t, 'distribution_amount'\n\t\t\t\t\t\t\t\t\t\t, item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t? [item]\n\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,item.supplier_items_unique_recognition\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Batch Qty')\n\t\t\t\t\t\t,item.distribution_batch()\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t,WarehouseView || ProjectView\n\t\t\t\t\t? [\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\tm('label.control-label', 'Silo')\n\t\t\t\t\t\t\t,m('input[type=checkbox]', {\n\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\tevent.currentTarget.checked\n\t\t\t\t\t\t\t\t\t\t, 'distribution_silo'\n\t\t\t\t\t\t\t\t\t\t, item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t? [item]\n\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,checked: item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t? item.distribution_silo()\n\t\t\t\t\t\t\t\t\t: item[Object.keys(item)[0]].distribution_silo()\n\t\t\t\t\t\t\t\t,disabled: !editMaterialsPermissions()\n\t\t\t\t\t\t\t\t,title: [\n\t\t\t\t\t\t\t\t\t'Selecting this will segregate this material in to its own container,'\n\t\t\t\t\t\t\t\t\t,'otherwise Odin will bunch the material to try'\n\t\t\t\t\t\t\t\t\t,'and make more efficient and cheaper bulk orders'\n\t\t\t\t\t\t\t\t].join(' ')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t])\n\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Stocked Address ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t? item.distribution_stocked()\n\t\t\t\t\t\t\t\t: item[Object.keys(item)[0]].distribution_stocked()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\tctrl.model.availableYardSelections\n\t\t\t\t\t\t\t\t\t,(value) =>\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t\t\t\t, 'distribution_stocked'\n\t\t\t\t\t\t\t\t\t\t\t, item.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t\t\t\t\t? [item]\n\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,'storage_location'\n\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,disabled: !editMaterialsPermissions()\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,item.supplier_items_unique_recognition\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Auto Order')\n\t\t\t\t\t\t,m('input[type=checkbox]', {\n\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\tif( supplierItemIndex()[item.supplier_items_id()] ){\n\t\t\t\t\t\t\t\t\titem.autoreceived = event.currentTarget.checked\n\t\t\t\t\t\t\t\t\titem.autoorder = event.currentTarget.checked\n\t\t\t\t\t\t\t\t\titem.supplier_items_cost = supplierItemIndex()[item.supplier_items_id()].supplier_items_cost()\n\t\t\t\t\t\t\t\t\titem.supplier_items_batch_cost = supplierItemIndex()[item.supplier_items_id()].supplier_items_batch_cost()\n\t\t\t\t\t\t\t\t\titem.supplier_name = supplierItemIndex()[item.supplier_items_id()].supplier_name\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,checked: item.autoreceived\n\t\t\t\t\t\t\t,disabled: !editMaterialsPermissions() || !supplierItemIndex()[item.supplier_items_id()]\n\t\t\t\t\t\t\t,title: `Selecting this will set the material to be received today`\n\t\t\t\t\t\t})\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\t\t\t\t]\n\t\t\t\t: []\n\n\t\t\t\t,WarehouseView\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Float')\n\t\t\t\t\t\t,!editMaterialsPermissions()\n\t\t\t\t\t\t\t? item[Object.keys(item)[0]].distribution_float()\n\t\t\t\t\t\t\t: Pencil(\n\t\t\t\t\t\t\t\tctrl.model.updatefloats\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Float'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: ctrl.model.updatefloats\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t,title: \"Minimum amount that should be kept in the warehouse for daily use\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: []\n\t\t\t]\n\t\t}\n\n\t\tconst projectOptionsList = function(){\n\t\t\treturn [\n\n\t\t\t\tm(`br`)\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled: !inverseProjectsList().length\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t\t\t\t\t\t\t? ctrl.model.completedProjects(\"inprogress\")\n\t\t\t\t\t\t\t\t\t: ctrl.model.completedProjects(\"completed\")\n\t\t\t\t\t\t\t\treturn ctrl.intent.fetchProjects()\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, title: \"Switch between running and completed projects\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Switch'\n\t\t\t\t\t)\n\t\t\t\t\t,m(`label`,\n\t\t\t\t\t\tctrl.model.completedProjects() == \"completed\"\n\t\t\t\t\t\t\t? ' to Current Projects'\n\t\t\t\t\t\t\t: ' to Completed Projects'\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,m('hr')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t!checkMultipleProjects().some((p) =>\n\t\t\t\t\t\t\t\t\tp.disciplines.some((d) => (d.outstandingMaterials || []).length)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tcheckMultipleProjects().forEach((p) =>ctrl.intent.applyPreset(p))\n\t\t\t\t\t\t\t\tctrl.intent.sendAllDistriution()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, title: \"Switch between running and completed projects\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Apply'\n\t\t\t\t\t)\n\t\t\t\t\t,m(`label`,' Automated fill material to all projects' )\n\t\t\t\t])\n\t\t\t\t,m(`label`\n\t\t\t\t\t,`Add materials required to complete each project. Quantities will be matched to existing works on the project if the project is deficient`\n\t\t\t\t)\n\t\t\t]\n\t\t}\n\n\t\treturn [\n\t\t\tcheckMultipleProjects().length\n\t\t\t? projectOptionsList()\n\t\t\t: Object.keys(d_item_vm()).length\n\t\t\t|| new_material().distribution_material_name\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('button.btn.btn-primary', {\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tPresetView\n\t\t\t\t\t\t\t\t? !!check_preset(true)\n\t\t\t\t\t\t\t\t: ProjectView\n\t\t\t\t\t\t\t\t\t? !!check_new_material(true)\n\t\t\t\t\t\t\t: !!check_new_material(true) || !!check_wnames(true)\n\n\t\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\titem.supplier_items_unique_recognition\n\t\t\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t\t\tWarehouseView\n\t\t\t\t\t\t\t\t\t|| ProjectView\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\tmaterials().unshift( item )\n\t\t\t\t\t\t\t\tmaterials(materials())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if( item.supplier_items_unique_recognition ){\n\t\t\t\t\t\t\t\tpresets().unshift(makePreset( item ))\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconsolidate()\n\t\t\t\t\t\t\t\tnew_material({})\n\t\t\t\t\t\t\td_item_vm({})\n\t\t\t\t\t\t\tmasterILIST(true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}, item.supplier_items_unique_recognition\n\t\t\t\t\t\t? 'Add'\n\t\t\t\t\t\t: 'Done'\n\t\t\t\t\t)\n\n\t\t\t\t\t,!item.distribution_id\n\t\t\t\t\t\t? m('button.btn.btn-warning', {\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\tWarehouseView\n\t\t\t\t\t\t\t\t? ctrl.intent.deleteDitem(false, 'warehouse')\n\t\t\t\t\t\t\t\t: ProjectView\n\t\t\t\t\t\t\t\t? ctrl.intent.deleteDitem(false, 'project')\n\t\t\t\t\t\t\t\t: ctrl.intent.deletePreset(false, '')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\texposeObject(d_item_vm())\n\t\t\t\t\t\t\t\t.some((i) => i.distribution_ordered() )\n\t\t\t\t\t\t\t,title: 'Delete this item'\n\t\t\t\t\t\t}, 'Delete' )\n\t\t\t\t\t\t: m('button.btn.btn-warning', {\n\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\t\tnew_material({})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 'Discard')\n\t\t\t\t\t])\n\t\t\t\t\t,commonInputs()\n\t\t\t\t]\n\t\t\t\t: []\n\t\t]\n\n\t}\n\tlet detailsPaneOpen = () =>\n\t\tnew_material().distribution_material_name\n\t\t|| checkMultipleProjects().length\n\t\t|| Object.keys(d_item_vm()).length\n\n\n\n\tlet filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'supplier_'}\n\t\t\t,{ugly_name: 'supplier_locations_'}\n\t\t\t,{ugly_name: 'disciplines_'}\n\t\t\t,{ugly_name: 'disciplines_contractors_'}\n\t\t\t,{ugly_name: \"distribution_material_name\", better_name: \"Material Name\"}\n\t\t\t,{ugly_name: \"distribution_material_description\", better_name: \"Material Description\"}\n\t\t\t,{ugly_name: \"distribution_entity_name\", better_name: \"Assigned To\"}\n\t\t\t,{ugly_name: \"distribution_amount\", better_name: \"Material Amount\"}\n\t\t\t,{ugly_name: \"distribution_batch\", better_name: \"Material Batch\"}\n\t\t\t,{ugly_name: \"distribution_container_name\", better_name: \"Material Container Name\"}\n\t\t\t,{ugly_name: \"distribution_silo\", better_name: \"Material Silo\"}\n\t\t\t,{ugly_name: \"distribution_ordered\", better_name: \"Material Ordered\"}\n\t\t\t,{ugly_name: \"distribution_float\", better_name: \"Material Float\"}\n\t\t\t,{ugly_name: \"distribution_stocked\", better_name: \"Material Stocked\"}\n\t\t\t,{ugly_name: 'supplier_locations_location', better_name: \"Supplier Outlets\"}\n\t\t\t,{ugly_name: 'supplier_locations_regular_operating_hours', better_name: \"Supplier Regular Operating Hours\"}\n\t\t\t,{ugly_name: 'supplier_locations_weekend_operating_hours', better_name: \"Supplier Weekend Operating Hours\"}\n\t\t\t,{ugly_name: 'supplier_locations_public_holiday_operating_hours', better_name: \"Supplier Public Holiday Operating Hours\"}\n\t\t\t,{ugly_name: 'supplier_locations_phone', better_name: \"Supplier Phone\"}\n\t\t\t,{ugly_name: 'supplier_locations_email', better_name: \"Supplier Email\"}\n\t\t\t,{ugly_name: 'order_items_cost', better_name: \"Order Cost\"}\n\t\t\t,{ugly_name: 'project_commissioning_date', better_name: \"Handover Date\"}\n\t\t\t,{ugly_name: 'project_final_acceptance', better_name: \"Liability End Date\"}\n\t\t\t,{ugly_name: 'project_completion_marker', better_name: \"Project Completion\"}\n\t\t\t,{ugly_name: 'relatedDiscipline', better_name: \"Related Discipline\"}\n\t\t\t,{ugly_name: 'supplier_items_uom', better_name: \"Unit of Measure\"}\n\t\t\t// ,{ugly_name: 'project_extras_priority', better_name: \"Task Prioriy\"}\n\t\t\t// ,{ugly_name: 'project_extras_type', better_name: \"Task Name\"}\n\t\t\t// ,{ugly_name: 'project_extras_frequency', better_name: \"Task Frequency\"}\n\t\t\t// ,{ugly_name: 'project_extras_description', better_name: \"Task Description\"}\n\t\t\t// ,{ugly_name: 'project_extras_date_assigned', better_name: \"Task Date Assigned\"}\n\t\t\t// ,{ugly_name: 'project_extras_date_completed', better_name: \"Task Date Completed\"}\n\t\t\t// ,{ugly_name: 'project_extras_date_verified', better_name: \"Task Date Verified\"}\n\t\t\t// ,{ugly_name: 'project_extras_date_invalid', better_name: \"Task Date Invalid\"}\n\t\t\t// ,{ugly_name: 'project_extras_notes', better_name: \"Task Notes\"}\n\t\t\t// ,{ugly_name: 'project_extras_address', better_name: \"Task Address\"}\n\t\t\t// ,{ugly_name: 'project_extras_planned_amount', better_name: \"Task Amount\"}\n\t\t\t// ,{ugly_name: 'project_extras_actual_amount', better_name: \"Task Actual Amount\"}\n\t\t]\n\t\t,uniqueArrays: [\n\t\t\t{array_name: 'disciplines_contractors', unique: \"contractor_id\"}\n\t\t\t,{array_name: 'disciplines_contractors_crews', unique: \"crew_id\"}\n\t\t\t,{array_name: 'project_extras', unique: \"project_extras_id\"}\n\t\t]\n\t\t,Ptemplate: {\n\t\t\tproject_name: \"\"\n\t\t\t,project_draft_at: \"date\"\n\t\t\t,project_tendered_at: \"date\"\n\t\t\t,project_rejected_at: \"date\"\n\t\t\t,project_accepted_at: \"date\"\n\t\t\t,project_priority: 0\n\t\t\t,contract_name: \"\"\n\t\t\t,project_site_type: \"\"\n\t\t\t,project_suburb: \"\"\n\t\t\t,project_material_suburb: \"\"\n\t\t\t,project_start_date: \"date\"\n\t\t\t,project_dead_date: \"date\"\n\t\t\t,project_commissioning_date: \"date\"\n\t\t\t,project_final_acceptance: \"date\"\n\t\t\t,project_completion_marker: \"date\"\n\t\t\t,project_documents: \"\"\n\t\t\t,project_deliverables: \"\"\n\t\t\t,project_completion_comments: \"\"\n\t\t\t,disciplines: [{\n\t\t\t\tdiscipline_name: \"\"\n\t\t\t\t,discipline_order: 0\n\t\t\t\t,discipline_contract_multiplier:0\n\t\t\t\t,discipline_priority: 0\n\t\t\t\t,discipline_work: 0\n\t\t\t\t,discipline_planned: 0\n\t\t\t\t,discipline_combination_limit: 0\n\t\t\t\t,discipline_completed: 0\n\t\t\t\t,discipline_harshness: 0\n\t\t\t\t,discipline_percent: 0\n\t\t\t\t,discipline_flow: \"\"\n\t\t\t\t,discipline_start_date: \"date\"\n\t\t\t\t,discipline_end_date: \"date\"\n\t\t\t\t,discipline_recovery: true\n\t\t\t\t,discipline_auto_assign_tasks: true\n\t\t\t\t,discipline_strict_start: true\n\t\t\t\t,discipline_strict_end: true\n\t\t\t\t,discipline_consistency: true\n\t\t\t\t,discipline_consolidate_start: true\n\t\t\t}]\n\t\t\t,project_items: [{\n\t\t\t\tdistribution_material_name: \"\"\n\t\t\t\t,distribution_material_description: \"\"\n\t\t\t\t,distribution_amount: 0\n\t\t\t\t,distribution_batch: 0\n\t\t\t\t,distribution_container_name: \"\"\n\t\t\t\t,distribution_silo: true\n\t\t\t\t,distribution_ordered: \"\"\n\t\t\t\t,distribution_float: 0\n\t\t\t\t,distribution_stocked: \"\"\n\t\t\t\t,distribution_entity_name: \"\"\n\t\t\t}]\n\t\t}\n\t\t,Mtemplate: {\n\t\t\tdistribution_material_name: \"\"\n\t\t\t,distribution_material_description: \"\"\n\t\t\t,distribution_amount: 0\n\t\t\t,distribution_batch: 0\n\t\t\t,distribution_container_name: \"\"\n\t\t\t,distribution_silo: true\n\t\t\t,distribution_ordered: \"\"\n\t\t\t,distribution_float: 0\n\t\t\t,distribution_stocked: \"\"\n\t\t}\n\t\t,Stemplate: {\n\t\t\tsupplier_name: \"\"\n\t\t\t,supplier_locations: [{\n\t\t\t\tsupplier_locations_location: \"\"\n\t\t\t\t,supplier_locations_regular_operating_hours: \"\"\n\t\t\t\t,supplier_locations_weekend_operating_hours: \"\"\n\t\t\t\t,supplier_locations_public_holiday_operating_hours: \"\"\n\t\t\t\t,supplier_locations_phone: \"\"\n\t\t\t\t,supplier_locations_email: \"\"\n\t\t\t}]\n\t\t\t,supplier_items: [{\n\t\t\t\tsupplier_items_uom: \"\"\n\t\t\t\t,supplier_items_minimum_order: 0\n\t\t\t\t,supplier_items_name: \"\"\n\t\t\t\t,supplier_items_description: \"\"\n\t\t\t\t,supplier_items_cost: 0\n\t\t\t\t,supplier_items_batch: 0\n\t\t\t\t,supplier_items_batch_cost: 0\n\t\t\t\t,supplier_items_available: true\n\t\t\t\t,supplier_items_supply_time: 0\n\t\t\t}]\n\t\t\t,supplier_delivery: true,\n\t\t}\n\t\t,Wtemplate: {\n\t\t\twarehouse_name: \"\"\n\t\t\t,warehouse_location: \"\"\n\t\t\t,warehouse_operating_hours_regular: \"\"\n\t\t\t,warehouse_operating_hours_weekend: \"\"\n\t\t\t,warehouse_operating_hours_public_holiday: \"\"\n\t\t\t,warehouse_phone: \"\"\n\t\t\t,warehouse_email: \"\"\n\t\t\t,warehouse_items: [{\n\t\t\t\tdistribution_material_name: \"\"\n\t\t\t\t,distribution_material_description: \"\"\n\t\t\t\t,distribution_amount: 0\n\t\t\t\t,distribution_batch: 0\n\t\t\t\t,distribution_container_name: \"\"\n\t\t\t\t,distribution_silo: true\n\t\t\t\t,distribution_ordered: \"\"\n\t\t\t\t,distribution_float: 0\n\t\t\t\t,distribution_stocked: \"\"\n\t\t\t}]\n\t\t\t,warehouse_delivery: true\n\t\t}\n\t\t,Otemplate: {\n\t\t\torder_name: \"\"\n\t\t\t,order_items_name: \"\"\n\t\t\t,order_items_description: \"\"\n\t\t\t,order_amount: 0\n\t\t\t,order_notes: \"\"\n\t\t\t,order_received: 0\n\t\t\t,order_items_cost: 0\n\t\t\t,order_supplier_name: \"\"\n\t\t\t,order_stock_location: \"\"\n\t\t\t,order_submission_date : \"date\"\n\t\t\t,order_eta: \"date\"\n\t\t}\n\t}\n\n\tlet getfilters = function(button, marker){\n\t\tlet datainput = null\n\t\tlet selectedFilter = null\n\t\tswitch (marker){\n\t\t\tcase \"Project\":\n\t\t\t\tdatainput = filterFunction.projectFilters\n\t\t\t\tselectedFilter = 'projectFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Project Item\":\n\t\t\t\tdatainput = filterFunction.projectIFilters\n\t\t\t\tselectedFilter = 'projectIFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Warehouse\":\n\t\t\t\tdatainput = filterFunction.warehouseFilters\n\t\t\t\tselectedFilter = 'warehouseFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Warehouse Item\":\n\t\t\t\tdatainput = filterFunction.warehouseIFilters\n\t\t\t\tselectedFilter = 'warehouseIFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Supplier\":\n\t\t\t\tdatainput = filterFunction.supplierFilters\n\t\t\t\tselectedFilter = 'supplierFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Supplier Item\":\n\t\t\t\tdatainput = filterFunction.supplierIFilters\n\t\t\t\tselectedFilter = 'supplierIFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Supplier Address\":\n\t\t\t\tdatainput = filterFunction.supplierLFilters\n\t\t\t\tselectedFilter = 'supplierLFilters'\n\t\t\t\tbreak;\n\t\t\tcase \"Order\":\n\t\t\t\tdatainput = filterFunction.orderFilters\n\t\t\t\tselectedFilter = 'orderFilters'\n\t\t\t\tbreak;\n\t\t}\n\t\tif (datainput == null){\n\t\t\tfilterFunction.projectFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Ptemplate\n\t\t\t\t,disabled: () => projects().length == 0\n\t\t\t}\n\t\t\tfilterFunction.projectIFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Mtemplate\n\t\t\t\t,disabled: () => ProjectItems()\n\t\t\t\t\t? ProjectItems().length == 0\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\tfilterFunction.warehouseFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Wtemplate\n\t\t\t\t,disabled: () => warehouses().length == 0\n\t\t\t}\n\t\t\tfilterFunction.warehouseIFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Wtemplate.warehouse_items[0]\n\t\t\t\t,disabled: () => WarehouseItems()\n\t\t\t\t\t? WarehouseItems().length == 0\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\tfilterFunction.supplierFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Stemplate\n\t\t\t\t,disabled: () => suppliers().length == 0\n\t\t\t}\n\t\t\tfilterFunction.supplierIFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Stemplate.supplier_items[0]\n\t\t\t\t,disabled: () => vm().supplier_items\n\t\t\t\t\t? vm().supplier_items.length == 0\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\tfilterFunction.supplierLFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Stemplate.supplier_locations[0]\n\t\t\t\t,disabled: () => vm().supplier_locations\n\t\t\t\t\t? vm().supplier_locations.length == 0\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\tfilterFunction.orderFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Otemplate\n\t\t\t\t,disabled: () => orders().length == 0\n\t\t\t}\n\t\t\tdatainput = filterFunction[selectedFilter]\n\t\t}\n\t\tlet gotfilters = datainput == null ? null : datainput.operationalFilters(\n\t\t\tfilterView( datainput.template, datainput.filters(), datainput.changeNames, datainput.uniqueArrays, datainput.disabled, marker, data.scoped)\n\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters\n\t\t\t? gotfilters.generatedElements\n\t\t\t: null\n\t}\n\n\tlet CONSTANTitems = data.scoped([])\n\tvar masterILIST = function(mcreate){\n\t\tif ( mcreate ){\n\t\t\tCONSTANTitems(\n\t\t\t\tR.unnest(\n\t\t\t\t\tR.partition(\n\t\t\t\t\t\t(c) => c.created\n\t\t\t\t\t\t, activeMainTab() == 'Warehouses & Stock'\n\t\t\t\t\t\t\t? activeMTab() == 'Stocked'\n\t\t\t\t\t\t\t\t? stockedMaterials()\n\t\t\t\t\t\t\t\t: cancelledMaterials()\n\t\t\t\t\t\t\t: activeMainTab() == 'Project Distributions'\n\t\t\t\t\t\t\t\t? ProjectItems() || []\n\t\t\t\t\t\t\t\t: activeMainTab() == 'Transfer Items'\n\t\t\t\t\t\t\t\t|| activeMainTab() == 'Automated Items'\n\t\t\t\t\t\t\t\t|| activeMainTab() == 'Manage Orders'\n\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t: vm().supplier_items\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\treturn ListProcessing(\n\t\t\tCONSTANTitems()\n\t\t\t,activeMainTab() == 'Warehouses & Stock'\n\t\t\t\t? filterFunction.warehouseIFilters.filters()\n\t\t\t\t: activeMainTab() == 'Project Distributions'\n\t\t\t\t\t? filterFunction.projectIFilters.filters()\n\t\t\t\t\t: filterFunction.supplierIFilters.filters()\n\t\t)\n\t}\n\n\tlet CONSTANTlocations = data.scoped([])\n\tlet masterLLIST = function(mcreate){\n\t\tif ( mcreate ){\n\t\t\tCONSTANTlocations(\n\t\t\t\tR.unnest(\n\t\t\t\t\tR.partition(\n\t\t\t\t\t\t(c) => c.created\n\t\t\t\t\t\t,vm().supplier_locations\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\treturn ListProcessing(\n\t\t\t\tCONSTANTlocations()\n\t\t\t\t,filterFunction.supplierLFilters.filters()\n\t\t\t)\n\t}\n\n\n\tprop.merge(\n\t\t[\n\t\t\tactiveMTab\n\t\t]\n\t)\n\t.map(([]) =>\n\t\tactiveWTab() == 'Warehouse Items'\n\t\t|| activeDTab() == 'Items'\n\t\t? masterILIST(true)\n\t\t: null\n\t)\n\n\tfunction validOrder(order){\n\t\treturn editOrdersPermissions()\n\t\tMaterialIndex()[order.distribution_id()]\n\t\t&& MaterialIndex()[order.distribution_id()]\n\t\t\t.distribution_ordered() != 'Cancelled'\n\t\t&& !order_vm.order().find(\n\t\t\t(chr) =>\n\t\t\t\tchr.order_id()\n\t\t\t\t== order.order_id()\n\t\t)\n\t}\n\n\n\tconst setOptions = function(value, prop, dataObject){\n\n\t\tconst standard =\n\t\t\tArray.isArray(dataObject)\n\t\t\t? 0\n\t\t\t: Object.keys(dataObject)[0]\n\n\t\tconst dtype = typeof dataObject[standard][prop] == 'function'\n\n\n\t\tvalue || value == false || value == '' || value == 0\n\t\t\t? (\n\t\t\t\tArray.isArray(dataObject)\n\t\t\t\t\t? dataObject\n\t\t\t\t\t: exposeObject(dataObject)\n\t\t\t)\n\t\t\t.forEach((i) => {\n\t\t\t\ti['created'] = true\n\n\t\t\t\tif( activeMainTab() == 'Manage Orders' ){\n\t\t\t\t\t!order_vm.orderUpdates()\n\t\t\t\t\t.find((o) =>\n\t\t\t\t\t\to.order_id()\n\t\t\t\t\t\t\t\t== i.order_id()\n\t\t\t\t\t)\n\t\t\t\t\t&& order_vm.orderUpdates().push(i)\n\t\t\t\t}\n\n\t\t\t\treturn dtype\n\t\t\t\t\t? i[prop](value)\n\t\t\t\t\t: i[prop] = value\n\n\t\t\t})\n\t\t\t: null\n\n\t\treturn dtype\n\t\t\t? dataObject[standard][prop]()\n\t\t\t: dataObject[standard][prop]\n\t}\n\n\tconst resetView =\n\t\t() => {\n\t\t\tviewtype(MainList)\n\t\t\terrors({})\n\t\t\tmaterials(\n\t\t\t\tmaterials()\n\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t.concat(DeleteDItems())\n\t\t\t)\n\t\t\tmaterials(\n\t\t\t\tmaterials().concat(\n\t\t\t\t\tcopy_items(\n\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqDItem) == uniqItem(y, uniqDItem)\n\t\t\t\t\t\t\t,originalMaterials()\n\t\t\t\t\t\t\t,materials()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,false\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\tnew_material({})\n\t\t\tSelectedDiscipline({})\n\t\t\tselected_pt({})\n\t\t\tproject_vm({})\n\t\t\tedit(false)\n\t\t\tDeleteDItems([])\n\t\t}\n\n\tconst editLink =\n\t\t(o, tabProp, setTab) => {\n\n\t\t\tif(setTab == 'Warehouse Items'){\n\t\t\t\tcloneWarehouse(o)\n\t\t\t\tmasterILIST(true)\n\n\t\t\t\tproject_vm({})\n\t\t\t\ttransfer_object.to(null)\n\t\t\t\ttransfer_object.from(null)\n\t\t\t\tedit(true)\n\t\t\t\ttabProp(setTab)\n\t\t\t\tviewtype(EditWarehouse)\n\t\t\t}\n\n\t\t\tif(setTab == 'Items'){\n\t\t\t\tcloneSupplier(o)\n\t\t\t\tmasterLLIST(true)\n\t\t\t\tmasterILIST(true)\n\n\t\t\t\tviewtype(EditSupplier)\n\t\t\t\tedit(true)\n\t\t\t\ttabProp(setTab)\n\t\t\t}\n\t\t}\n\n\tconst addMaterialsButton =\n\t\t(attrs={}) =>\n\t\t\tm(`button`\n\t\t\t\t+ css`\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tpadding: 0.7em 1em;\n\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\topacity: 1;\n\t\t\t\t`\n\t\t\t\t.$hover(`\n\t\t\t\t\topacity: 0.8;\n\t\t\t\t`)\n\t\t\t\t.$active(`\n\t\t\t\t\topacity: 0.5;\n\t\t\t\t`)\n\t\t\t\t,R.merge(\n\t\t\t\t\t{\n\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\td_item_vm({})\n\t\t\t\t\t\t\t\tsetnew_material()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,attrs\n\t\t\t\t)\n\t\t\t\t, '+ Materials '\n\t\t\t)\n\t// const forceRedraw =\n\t\tprop.merge(\n\t\t\t[ errors\n\t\t\t, CONSTANTlocations\n\t\t\t, CONSTANTitems\n\t\t\t, warehouses\n\t\t\t, metaDataLoading\n\t\t\t, projects\n\t\t\t, materials\n\t\t\t]\n\t\t).map(function(){\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\treturn setTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t})\n\n\treturn {check_preset, projects\n\t\t,suppliers\n\t\t,resources\n\t\t,data\n\t\t,vm\n\t\t,edit\n\t\t,resetForm\n\t\t,resetLForm\n\t\t,deleteWarehouse\n\t\t,check_new_material\n\t\t,makePreset\n\t\t,check_lnames\n\t\t,SaveSupplierDisabled\n\t\t,DeleteSDisabled\n\t\t,viewtype\n\t\t,item_vm\n\t\t,location_vm\n\t\t,check_inames\n\t\t,resetIForm\n\t\t,projects_tasks\n\t\t,items\n\t\t,transfer_object\n\t\t,materials\n\t\t,project_vm\n\t\t,warehouses\n\t\t,warehouse_vm\n\t\t,DeleteWDisabled\n\t\t,resetWForm\n\t\t,check_wnames\n\t\t,presets\n\t\t,containers\n\t\t,transfers\n\t\t,selected_pt\n\t\t,FilteredMaterialspt\n\t\t,d_item_vm\n\t\t,orders\n\t\t,order_vm\n\t\t,check_ordered\n\t\t,available_yards\n\t\t,make_items\n\t\t,new_material\n\t\t,consolidate\n\t\t,resetNewMaterial\n\t\t,check_order_vm\n\t\t,transfer_vm\n\t\t,copy_items\n\t\t,SelectedProject\n\t\t,SelectedDiscipline\n\t\t,preset_vm\n\t\t,deleteSupplier\n\t\t,container_vm\n\t\t,assessContainers\n\t\t,selected_preset\n\t\t,check_float\n\t\t,updatefloats\n\t\t,setnew_material\n\t\t,request:data.request\n\t\t,editWarehousePermissions\n\t\t,editSupplierPermissions\n\t\t,users\n\t\t,roles\n\t\t,permissions\n\t\t,ItemConsolidation\n\t\t,getfilters\n\t\t,filterFunction\n\t\t,organizations_disciplines\n\t\t,availableYardSelections\n\t\t,loading\n\t\t,masterILIST\n\t\t,masterLLIST\n\t\t,SItemDelete\n\t\t,DeletePending\n\t\t,DeleteDItems\n\t\t,DeletePItems\n\t\t,DeleteSItems\n\t\t,DeleteSLocations\n\t\t,containerIndex\n\t\t,supplierItemIndex\n\t\t,statProjectMaterials\n\t\t,MaterialIndex\n\t\t,transferCheck\n\t\t,deleteWStateProp\n\t\t,deleteSStateProp\n\t\t,api: data.api\n\t\t,baseProjectString\n\t\t,baseWarehouseString\n\t\t,basePresetString\n\t\t,ProjectItems\n\t\t,WarehouseItems\n\t\t,PresetItems\n\t\t,transferItems\n\t\t,savingProp\n\t\t,originalPresets\n\t\t,originalMaterials\n\t\t,refreshList\n\t\t,activeMainTab\n\t\t,cloneSupplier\n\t\t,cloneWarehouse\n\t\t,detailsPaneOpen\n\t\t,detailPaneInputs\n\t\t,supplierdetailPaneInputs\n\t\t,supplierdetailsPaneOpen\n\t\t,transfersFrom\n\t\t,transfersTo\n\t\t,originalMaterialIndex\n\t\t,errors\n\t\t,errorsMessage\n\t\t,editOrdersPermissions\n\t\t,editMaterialsPermissions\n\t\t,missingPermissions\n\t\t,transferToMaterialIndex\n\t\t,presetOptions\n\t\t,presetCloneOptions\n\t\t,presetsIndexByDiscipline\n\t\t,projectPresetsIndexByDiscipline\n\t\t,validOrder\n\t\t,originalOrders\n\t\t,copiedOrders\n\t\t,setOptions\n\t\t,completedProjects\n\t\t,metaDataLoading\n\t\t,SelectedProjectDisciplines\n\t\t,inverseProjectsList\n\t\t,checkMultipleProjects\n\t\t,resetView\n\t\t,editLink\n\t\t,addMaterialsButton\n\t\t,cancelledOrders\n\t\t,orderedOrders\n\t\t,lostOrders\n\t\t,projectIndex\n\t\t,stockedMaterials\n\t\t,cancelledMaterials\n\t\t,uploadmetadata\n\t}\n}\n\n\n\n\n/*\n\tThe controller is the glue that sticks the model and intent together.\n\tIt exposes the model and intent to the view by returning them.\n\n\tThe controller \"controls\" how each layer interacts.\n*/\nfunction Main({ attrs: { data } }){\n\n\tlet activeTab = data.scoped('Summary')\n\tlet activeDTab = data.scoped('Distribution')\n\tlet activeWTab = data.scoped('Warehouse Details')\n\tlet activeOTab = data.scoped('Ordered')\n\tlet activeMTab = data.scoped('Stocked')\n\tlet model = Model(data, activeMTab, activeDTab, activeWTab)\n\tlet intent = Intent(model)\n\n\treturn {\n\t\tview(){\n\t\t\treturn view({\n\t\t\t\tmodel, intent, activeTab, activeDTab, activeWTab, activeOTab, activeMTab\n\t\t\t})\n\t\t}\n\t}\n}\n\n/*\n\tThe view provides the user ways to transfer their intent into really action within the system.\n\tThe view accesses data from the model layer, and binds intent functions to user inputs.\n*/\n\n\nlet view = function(ctrl){\n\treturn m('div'+ css`\n\t\t\tmin-height: 600px;\n\t\t`\n\t\t,ctrl.model.viewtype()(ctrl)\n\t\t,DetailsPane(\n\t\t\tctrl.model.activeMainTab() =='Suppliers'\n\t\t\t\t? ctrl.model.supplierdetailsPaneOpen\n\t\t\t\t: ctrl.model.detailsPaneOpen\n\n\t\t\t, ctrl.model.activeMainTab() =='Suppliers'\n\t\t\t\t? ctrl.activeTab() == 'Outlets'\n\t\t\t\t\t? ctrl.model.location_vm().supplier_locations_location\n\t\t\t\t\t\t? ctrl.model.location_vm().supplier_locations_location()\n\t\t\t\t\t\t: ''\n\t\t\t\t\t: ctrl.model.item_vm().supplier_items_name\n\t\t\t\t\t\t? ctrl.model.item_vm().supplier_items_name()\n\t\t\t\t\t\t: ''\n\t\t\t\t: ctrl.model.new_material().distribution_material_name\n\t\t\t\t\t? ctrl.model.new_material().distribution_material_name()\n\t\t\t\t\t: ctrl.model.checkMultipleProjects().length\n\t\t\t\t\t? 'Project Material Options'\n\t\t\t\t\t: ''\n\n\t\t\t, () =>\n\t\t\t\tctrl.model.activeMainTab() =='Suppliers'\n\t\t\t\t? ctrl.model.supplierdetailPaneInputs(\n\t\t\t\t\tctrl.activeTab() == 'Outlets'\n\t\t\t\t\t\t? ctrl.model.location_vm()\n\t\t\t\t\t\t: ctrl.model.item_vm()\n\t\t\t\t\t,ctrl\n\t\t\t\t)\n\t\t\t\t: ctrl.model.new_material().distribution_id\n\t\t\t\t? ctrl.model.detailPaneInputs(\n\t\t\t\t\tctrl.model.new_material()\n\t\t\t\t\t,ctrl\n\t\t\t\t)\n\t\t\t\t: ctrl.model.detailPaneInputs(\n\t\t\t\t\tctrl.model.d_item_vm()\n\t\t\t\t\t,ctrl\n\t\t\t\t)\n\t\t)\n\t)\n}\n\n\n\nfunction MainList(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tctrl.model.editWarehousePermissions() || ctrl.model.editMaterialsPermissions()\n\t\t\t? elements.tabset(['Warehouses & Stock', 'Suppliers', 'Project Distributions', 'Manage Orders', 'Transfer Items', 'Automated Items'], ctrl.model.activeMainTab)\n\t\t\t: elements.tabset(['Warehouses & Stock', 'Suppliers', 'Project Distributions', 'Manage Orders'], ctrl.model.activeMainTab)\n\n\t\t,m('br')\n\t\t\t,ctrl.model.activeMainTab() == 'Warehouses & Stock'\n\t\t\t? [\n\t\t\t\tm('br')\n\t\t\t\t,ctrl.model.editWarehousePermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.project_vm({})\n\t\t\t\t\t\t\t\tctrl.model.warehouse_vm(ctrl.model.resetWForm())\n\t\t\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\t\t\tctrl.model.transfer_object.to(null)\n\t\t\t\t\t\t\t\tctrl.model.transfer_object.from(null)\n\t\t\t\t\t\t\t\tctrl.activeWTab('Warehouse Details')\n\t\t\t\t\t\t\t\tctrl.model.viewtype(EditWarehouse)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Create a warehouse or a stockyard for ordered materials\"\n\t\t\t\t\t\t},\"Create\")\n\t\t\t\t\t\t,elements.confirmDelete(\n\t\t\t\t\t\t\tctrl.intent.deleteWarehouse\n\t\t\t\t\t\t\t,ctrl.model.warehouse_vm().pending\n\t\t\t\t\t\t\t,() => !ctrl.model.warehouse_vm().warehouse_name\n\t\t\t\t\t\t\t\t|| ctrl.model.DeleteWDisabled(true)\n\t\t\t\t\t\t\t,ctrl.model.deleteWStateProp\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t: elements.list([\n\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\tdisabled: ctrl.model.warehouses().length > 0 ? ctrl.model.warehouse_vm().warehouse_name == null ? true : false : true\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.project_vm({})\n\t\t\t\t\t\t\t\tctrl.model.viewtype(EditWarehouse)\n\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\tctrl.activeWTab('Warehouse Details')\n\t\t\t\t\t\t\t\tctrl.model.transfer_object.to(null)\n\t\t\t\t\t\t\t\tctrl.model.transfer_object.from(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"View a warehouse's details and stocked materials\"\n\t\t\t\t\t\t},\"View\")\n\t\t\t\t\t])\n\t\t\t\t,ctrl.model.getfilters(null, \"Warehouse\")\n\t\t\t\t,ctrl.model.DeleteWDisabled()\n\t\t\t\t,elements.table(ctrl.model.data, ['Manage', 'Warehouse', 'Address', 'Operating Hours', 'Delivery', 'Phone', 'Email'],\n\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t// R.partition(\n\t\t\t\t\t\t// \t(c) => c.created,\n\t\t\t\t\t\t\tListProcessing(\n\t\t\t\t\t\t\t\tctrl.model.warehouses()\n\t\t\t\t\t\t\t\t,ctrl.model.filterFunction.warehouseFilters.filters()\n\t\t\t\t\t\t\t\t, \"warehouse_name\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t// )\n\t\t\t\t\t).map(\n\t\t\t\t\t\tfunction(warehouse){\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\tctrl.model.cloneWarehouse(warehouse)\n\t\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\tctrl.model.warehouse_vm({})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,checked: ctrl.model.warehouse_vm().warehouse_id == null ? false : ctrl.model.warehouse_vm().warehouse_id() == warehouse.warehouse_id() ? true : false\n\t\t\t\t\t\t\t\t,disabled: ctrl.model.warehouse_vm().warehouse_id == null ? false : ctrl.model.warehouse_vm().warehouse_id() == warehouse.warehouse_id() ? false : true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,m('a'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick: () => ctrl.model.editLink(warehouse, ctrl.activeWTab, 'Warehouse Items')\n\t\t\t\t\t\t\t\t\t,title: \"Edit a warehouse\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,warehouse.warehouse_name()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,warehouse.warehouse_location()\n\t\t\t\t\t\t\t,elements.list([warehouse.warehouse_operating_hours_regular(), warehouse.warehouse_operating_hours_weekend(), warehouse.warehouse_operating_hours_public_holiday()])\n\t\t\t\t\t\t\t,warehouse.warehouse_delivery() ? 'Yes' : 'No'\n\t\t\t\t\t\t\t,warehouse.warehouse_phone()\n\t\t\t\t\t\t\t,warehouse.warehouse_email()\n\t\t\t\t\t\t,]}\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,ctrl.model.warehouses().length == 0\n\t\t\t\t\t? ctrl.model.loading()\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: ctrl.model.data.readWarehousePermissions()\n\t\t\t\t\t\t\t? elements.alert('info',`Create warehouses to track stored materials`)\n\t\t\t\t\t\t\t: elements.alert('info',`Requires Warehouse Permissions`)\n\t\t\t\t\t: null\n\t\t\t]\n\t\t\t: ctrl.model.activeMainTab() == 'Project Distributions'\n\t\t\t? [\n\t\t\t\tm('br')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm(\"button.btn.btn\", {\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tctrl.model.checkMultipleProjects().length\n\t\t\t\t\t\t\t\t? ctrl.model.checkMultipleProjects([])\n\t\t\t\t\t\t\t\t: ctrl.model.checkMultipleProjects(ctrl.model.projects())\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Options'\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t,m('br')\n\t\t\t\t,elements.list([ctrl.model.getfilters(null, \"Project\")])\n\t\t\t\t,elements.table(ctrl.model.data,\n\t\t\t\t\t[\n\t\t\t\t\t\t 'Project'\n\t\t\t\t\t\t, 'Material Ordered %'\n\t\t\t\t\t\t, 'Estimated Value $'\n\t\t\t\t\t\t, 'Ordered $'\n\t\t\t\t\t\t, 'Apply Automated Items'\n\t\t\t\t\t\t, 'Stocked Orders'\n\t\t\t\t\t]\n\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t// R.partition(\n\t\t\t\t\t\t// \t(c) => c.created,\n\t\t\t\t\t\t\tListProcessing(\n\t\t\t\t\t\t\t\tctrl.model.projects()\n\t\t\t\t\t\t\t\t,ctrl.model.filterFunction.projectFilters.filters()\n\t\t\t\t\t\t\t\t, \"project_name\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t// )\n\t\t\t\t\t).map(\n\t\t\t\t\t\tfunction(project) {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tm('a'\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Check, set or order project materials'\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.SelectedProject(project)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.project_vm(project)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.selected_pt(project)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.warehouse_vm({})\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.viewtype(EditDistribution)\n\t\t\t\t\t\t\t\t\t\t\tctrl.activeDTab('Distribution')\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects([])\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, project.project_name()\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,project.orderedStat\n\t\t\t\t\t\t\t\t,project.materialValue\n\t\t\t\t\t\t\t\t,project.orderedValue\n\n\t\t\t\t\t\t\t\t,m('button.btn.btn-secondary'\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tdisabled: !ctrl.model.editMaterialsPermissions()\n\t\t\t\t\t\t\t\t\t\t\t|| ctrl.model.presets().length == 0\n\t\t\t\t\t\t\t\t\t\t\t|| !project.disciplines.some((d) => (d.outstandingMaterials || []).length)\n\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\t\treturn ctrl.intent.applyPreset(project)\n\t\t\t\t\t\t\t\t\t\t\t\t.then(ctrl.intent.sendAllDistriution)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,title: `This will apply automated items to ` + project.project_name()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, \"Apply\"\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('stocked-orders-breakdown'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\tR.partition(\n\t\t\t\t\t\t\t\t\t\t\tR.prop('order_eta')\n\t\t\t\t\t\t\t\t\t\t\t,R.uniqBy(\n\t\t\t\t\t\t\t\t\t\t\t\t(a) => a.order_name + a.distribution_stocked()\n\t\t\t\t\t\t\t\t\t\t\t\t, ctrl.model.FilteredMaterialspt(project)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t\t\txs => xs.some( xs => xs.length != 0 )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\txs => xs\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tr => r.map(\n\t\t\t\t\t\t\t\t\t\t\t\ts => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\ts\n\t\t\t\t\t\t\t\t\t\t\t\t\t,alert:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.order_eta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? new Date(s.order_eta).getTime() > new Date(s.requiredby || s.discipline_start_date || s.project_start_date).getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !s.order_eta && new Date(s.requiredby || s.discipline_start_date || s.project_start_date).getTime() < new Date().getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| new Date(s.order_eta).getTime() > new Date(s.requiredby || s.discipline_start_date || s.project_start_date).getTime()\n\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t(r, i) => [\n\t\t\t\t\t\t\t\t\t\t\t\tr\n\t\t\t\t\t\t\t\t\t\t\t\t, !i\n\t\t\t\t\t\t\t\t\t\t\t\t, !i ? 'Received' : 'Outstanding'\n\t\t\t\t\t\t\t\t\t\t\t\t, r.every( x => !x.alert )\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map(([r, isReceived, label, noAlerts]) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.stocked-order-section'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground-color: rgb(247, 247, 247);\n\t\t\t\t\t\t\t\t\t\t\t\t\tbox-shadow: 0px 5px 10px -4px #0000001f;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,m('.stocked-orders-header'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 1em 1em 0em 1em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,m('.stocked-order-label'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: auto auto;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, m('b',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tr.length == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'No Orders ' + label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: label + ':'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,r.length > 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? m(''\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground-color: #484848;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0.3em 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder-left: solid 0.2em ${ noAlerts ? `#0688f7` : 'red'};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder-radius: 0.2em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbox-shadow: -1px 4px 7px 0px #0000001f;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, r.length + ' Order'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ (r.length > 1 ? 's' : '')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,m('.stock-orders-content'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: ${ r.length == 0 ? `0.5em` : `1em`};\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.map( ({ s, alert }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('.stocked-orders' + css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.4em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 5em 19em 7em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 1em 0em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`, [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('b'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`word-break: break-all`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.order_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, s.order_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,s.distribution_stocked()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.split(' - ')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map( x => m('span', x))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`text-align: right;`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talert\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '.dark-red'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,( isReceived ? '' : 'Required by ')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.order_eta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? moment(s.order_eta).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: moment(s.requiredby || s.discipline_start_date || s.project_start_date).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.concat([\n\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t\t// m('b'\n\t\t\t\t\t\t\t\t\t\t// \t+ css`\n\t\t\t\t\t\t\t\t\t\t// \t\tbackground-color: rgb(247, 247, 247);\n\t\t\t\t\t\t\t\t\t\t// \t\tbox-shadow: 0px 5px 10px -4px #0000001f;\n\t\t\t\t\t\t\t\t\t\t// \t\tpadding: 1em;\n\t\t\t\t\t\t\t\t\t\t// \t`\n\t\t\t\t\t\t\t\t\t\t// \t, 'No Materials'\n\t\t\t\t\t\t\t\t\t\t// )\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t.shift()\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t]}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,ctrl.model.data.schedule_id() == null\n\t\t\t\t\t? elements.alert('info',`Select a schedule to include project options`)\n\t\t\t\t\t: ctrl.model.projects().length == 0\n\t\t\t\t\t\t? ctrl.model.loading()\n\t\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t\t: ctrl.model.data.readProjectPermissions()\n\t\t\t\t\t\t\t\t? elements.alert('info',`There aren't any projects in this schedule`)\n\t\t\t\t\t\t\t\t: elements.alert('info',`Requires Project Permissions`)\n\t\t\t\t\t: null\n\n\t\t\t]\n\t\t\t: ctrl.model.activeMainTab() == 'Suppliers'\n\t\t\t? [\n\t\t\t\tm('br')\n\t\t\t\t,ctrl.model.editSupplierPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\t\t\tctrl.model.location_vm({})\n\t\t\t\t\t\t\t\tctrl.model.item_vm({})\n\t\t\t\t\t\t\t\tctrl.model.vm(ctrl.model.resetForm())\n\t\t\t\t\t\t\t\tctrl.model.masterLLIST(true)\n\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\tctrl.model.viewtype(EditSupplier)\n\t\t\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\t\t\tctrl.activeTab('Outlets')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Create a supplier, their details and products to track against warehouses and projects\"\n\t\t\t\t\t\t},\"Create\")\n\t\t\t\t\t\t,elements.confirmDelete(\n\t\t\t\t\t\t\tctrl.intent.deleteSupplier\n\t\t\t\t\t\t\t,ctrl.model.vm().pending\n\t\t\t\t\t\t\t,() => ctrl.model.DeleteSDisabled(true)\n\t\t\t\t\t\t\t,ctrl.model.deleteSStateProp\n\t\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: elements.list([\n\t\t\t\t\t\tm(\"button.btn.\", {\n\t\t\t\t\t\t\tdisabled: ctrl.model.suppliers().length > 0 ? ctrl.model.vm().supplier_name == null ? true : false : true\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\t\t\tctrl.model.viewtype(EditSupplier)\n\t\t\t\t\t\t\t\t\t,ctrl.model.edit(true)\n\t\t\t\t\t\t\t\t\t,ctrl.activeTab('Outlets')\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t// .then(function(){\n\t\t\t\t\t\t\t\t\t// \tctrl.model.masterLLIST(true)\n\t\t\t\t\t\t\t\t\t// \tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"View a supplier's details and products\"\n\t\t\t\t\t\t},\"View\")\n\t\t\t\t\t])\n\t\t\t,ctrl.model.getfilters(null, \"Supplier\")\n\t\t\t,ctrl.model.DeleteSDisabled()\n\t\t\t,elements.table(ctrl.model.data, ['Manage', 'Supplier', 'Outlets', 'Operating Hours', 'Delivery'],\n\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t// R.partition(\n\t\t\t\t\t\t// \t(c) => c.created,\n\t\t\t\t\t\t\tListProcessing(\n\t\t\t\t\t\t\t\tctrl.model.suppliers()\n\t\t\t\t\t\t\t\t,ctrl.model.filterFunction.supplierFilters.filters()\n\t\t\t\t\t\t\t\t, \"supplier_name\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t// )\n\t\t\t\t\t).map(\n\t\t\t\t\t\tfunction(supplier) {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\telements.checkbox({\n\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\tctrl.model.cloneSupplier(supplier)\n\t\t\t\t\t\t\t\t\t\tctrl.model.masterLLIST(true)\n\t\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,checked: ctrl.model.vm().supplier_id == null ? false : ctrl.model.vm().supplier_id() == supplier.supplier_id() ? true : false\n\t\t\t\t\t\t\t\t,disabled: ctrl.model.vm().supplier_id == null ? false : ctrl.model.vm().supplier_id() == supplier.supplier_id() ? false : true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t,m('a'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick: () => ctrl.model.editLink(supplier, ctrl.activeTab, 'Items')\n\t\t\t\t\t\t\t\t\t,title: \"Edit a supplier's details and products\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,supplier.supplier_name()\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,supplier.supplier_locations.length > 0\n\t\t\t\t\t\t\t\t? R.join(\n\t\t\t\t\t\t\t\t\t' | '\n\t\t\t\t\t\t\t\t\t,R.pipe(\n\t\t\t\t\t\t\t\t\t\tR.map( R.invoker(0, 'supplier_locations_location'))\n\t\t\t\t\t\t\t\t\t\t,R.uniq\n\t\t\t\t\t\t\t\t\t)(supplier.supplier_locations)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t,supplier.supplier_locations.length > 0\n\t\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\t\t\tsupplier.supplier_locations[0].supplier_locations_regular_operating_hours()\n\t\t\t\t\t\t\t\t\t\t, supplier.supplier_locations[0].supplier_locations_weekend_operating_hours()\n\t\t\t\t\t\t\t\t\t\t, supplier.supplier_locations[0].supplier_locations_public_holiday_operating_hours()\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t,supplier.supplier_delivery() ? 'Yes' : 'No'\n\t\t\t\t\t\t]}\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t,ctrl.model.suppliers().length == 0\n\t\t\t\t\t? ctrl.model.loading()\n\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: ctrl.model.data.readSupplierPermissions()\n\t\t\t\t\t\t\t? elements.alert('info',`Suppliers are used to catalogue materials that can be used to stock projects and warehouses`)\n\t\t\t\t\t\t\t: elements.alert('info',`Requires Supplier Permissions`)\n\t\t\t\t: null\n\t\t\t]\n\t\t\t: ctrl.model.activeMainTab() == 'Manage Orders'\n\t\t\t? [\n\t\t\t\tm('br')\n\t\t\t\t,ctrl.model.editOrdersPermissions()\n\t\t\t\t\t? elements.list([\n\n\t\t\t\t\t\t!ctrl.model.order_vm.order().length\n\t\t\t\t\t\t&& !ctrl.model.order_vm.orderUpdates().length\n\t\t\t\t\t\t\t? m('button.btn', {\n\t\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t\t\t,title: 'Save updated details'\n\t\t\t\t\t\t\t}, 'Save')\n\t\t\t\t\t\t: elements.action('Save', ctrl.intent.sendOrders, ctrl.model.savingProp)\n\n\t\t\t\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\t\tdisabled: ctrl.model.order_vm.order().length == 0\n\t\t\t\t\t\t\t\t&& ctrl.model.order_vm.orderUpdates().length == 0\n\t\t\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\t\t\tctrl.model.order_vm.order([])\n\t\t\t\t\t\t\t\tctrl.model.order_vm.orderUpdates([])\n\t\t\t\t\t\t\t\tctrl.model.errors({})\n\n\t\t\t\t\t\t\t\tctrl.model.orders(\n\t\t\t\t\t\t\t\t\tctrl.model.orders()\n\t\t\t\t\t\t\t\t\t.filter((o) => !o.created)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tctrl.model.orders(\n\t\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\t\tctrl.model.orders()\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.copiedOrders(\n\t\t\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t\t\t(x, y) => x.order_id() == y.order_id()\n\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.originalOrders()\n\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.orders()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t\t\t\t},\"Discard Changes\")\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t,ctrl.model.getfilters(null, \"Order\")\n\t\t\t\t// ,[\n\t\t\t\t// \tctrl.model.order_vm.order()\n\t\t\t\t// \t,ctrl.model.order_vm.orderUpdates()\n\t\t\t\t// ]\n\t\t\t\t// .filter((oList) => oList.length )\n\t\t\t\t// .map((oList, oIndex) => {\n\t\t\t\t// \tconst summation =\n\t\t\t\t// \t\t!oList.length\n\t\t\t\t// \t\t\t? ``\n\t\t\t\t// \t\t\t: (\n\t\t\t\t// \t\t\t\toIndex == 1\n\t\t\t\t// \t\t\t\t? `Cancel `\n\t\t\t\t// \t\t\t\t: `Update `\n\t\t\t\t// \t\t\t)\n\t\t\t\t// \t\t\t+ oList.length\n\t\t\t\t// \t\t\t+ (\n\t\t\t\t// \t\t\t\toList.length == 1\n\t\t\t\t// \t\t\t\t\t? ` Order`\n\t\t\t\t// \t\t\t\t\t: ` Orders`\n\t\t\t\t// \t\t\t)\n\n\t\t\t\t// \treturn m(\n\t\t\t\t// \t\t'label.control-label'\n\t\t\t\t// \t\t,summation\n\t\t\t\t// \t)\n\t\t\t\t// })\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,elements.tabset(['Ordered', 'Cancelled', 'Lost'], ctrl.activeOTab)\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,ctrl.model.cancelledOrders().length == 0 && ctrl.activeOTab() == 'Cancelled'\n\t\t\t\t|| ctrl.model.orderedOrders().length == 0 && ctrl.activeOTab() == 'Ordered'\n\t\t\t\t|| ctrl.model.lostOrders().length == 0 && ctrl.activeOTab() == 'Lost'\n\t\t\t\t? ctrl.model.data.readOrderPermissions()\n\t\t\t\t\t? elements.alert(`info`, `Orders are verified items sent to the suppliers for delivery to the business`)\n\t\t\t\t\t: elements.alert(`info`, `Requires Order Management Permissions`)\n\t\t\t\t: ctrl.activeOTab() != 'Lost'\n\t\t\t\t\t? elements.table(\n\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\tctrl.activeOTab() == 'Cancelled' ? 'Delete' : 'Cancel'\n\t\t\t\t\t\t\t, 'Created Date'\n\t\t\t\t\t\t\t, 'Order Number'\n\t\t\t\t\t\t\t, 'Supplementing'\n\t\t\t\t\t\t\t, 'Item Name'\n\t\t\t\t\t\t\t, 'Order Amount'\n\t\t\t\t\t\t\t, 'Received Amount'\n\t\t\t\t\t\t\t, 'Split'\n\t\t\t\t\t\t\t, 'Supplier'\n\t\t\t\t\t\t\t, 'Delivery Address'\n\t\t\t\t\t\t\t, 'Expected Arrival'\n\t\t\t\t\t\t\t, 'Notes'\n\t\t\t\t\t\t\t, 'Files'\n\t\t\t\t\t\t\t, ''\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\tListProcessing(\n\t\t\t\t\t\t\t\tctrl.activeOTab() == 'Cancelled' ? ctrl.model.cancelledOrders() : ctrl.model.orderedOrders()\n\t\t\t\t\t\t\t\t,ctrl.model.filterFunction.orderFilters.filters()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(order, oi) => [\n\t\t\t\t\t\t\t\tctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t? !ctrl.model.MaterialIndex()[order.distribution_id()]\n\t\t\t\t\t\t\t\t\t|| ctrl.model.MaterialIndex()[order.distribution_id()].distribution_ordered() == 'Cancelled'\n\t\t\t\t\t\t\t\t\t? elements.confirmDelete(\n\t\t\t\t\t\t\t\t\t\t() => ctrl.intent.deleteOrder(order)\n\t\t\t\t\t\t\t\t\t\t,R.F\n\t\t\t\t\t\t\t\t\t\t,R.F\n\t\t\t\t\t\t\t\t\t\t,R.T\n\t\t\t\t\t\t\t\t\t\t,null\n\t\t\t\t\t\t\t\t\t\t,elements.trashBin()\n\t\t\t\t\t\t\t\t\t\t,elements.trashBin()\n\t\t\t\t\t\t\t\t\t\t,R.F\n\t\t\t\t\t\t\t\t\t\t,R.F\n\t\t\t\t\t\t\t\t\t\t,R.T\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: elements.checkbox({\n\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order().push(order)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\tlet index = R.findIndex(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfunction(chr) { return chr.order_id() == order.order_id() },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order().splice(index, 1)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,checked: R.findIndex(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfunction(chr) { return chr.order_id() == order.order_id() },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order()\n\t\t\t\t\t\t\t\t\t\t\t\t) >= 0\n\t\t\t\t\t\t\t\t\t\t,disabled: R.find(\tfunction(chr) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn chr.order_id() == order.order_id() },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.orderUpdates()\n\t\t\t\t\t\t\t\t\t\t\t\t\t) != null\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t,moment( order.order_submission_date() ).format(\"ll\")\n\n\t\t\t\t\t\t\t\t,order.order_name()\n\n\t\t\t\t\t\t\t\t,!ctrl.model.MaterialIndex()[order.distribution_id()]\n\t\t\t\t\t\t\t\t|| ctrl.model.MaterialIndex()[order.distribution_id()].distribution_ordered() == 'Cancelled'\n\t\t\t\t\t\t\t\t? 'Item Deleted '\n\t\t\t\t\t\t\t\t: !ctrl.model.projectIndex()[ctrl.model.MaterialIndex()[order.distribution_id()].project_id]\n\t\t\t\t\t\t\t\t&& ctrl.model.MaterialIndex()[order.distribution_id()].project_id\n\t\t\t\t\t\t\t\t? 'Closed Project - ' + ctrl.model.MaterialIndex()[order.distribution_id()].distribution_entity_name()\n\t\t\t\t\t\t\t\t: m('a'\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Check, set or order materials for this project or warehouse'\n\t\t\t\t\t\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\t\t\t\t\t\tif( ctrl.model.MaterialIndex()[order.distribution_id()].project_id ){\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst project =\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.projects().find((p) => p.project_id() == ctrl.model.MaterialIndex()[order.distribution_id()].project_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.SelectedProject(project)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.project_vm(project)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.selected_pt(project)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.warehouse_vm({})\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.viewtype(EditDistribution)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.activeDTab('Distribution')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.activeMainTab('Project Distributions')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultipleProjects([])\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if( ctrl.model.MaterialIndex()[order.distribution_id()].warehouse_id ){\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst warehouse =\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.warehouses().find((p) => p.warehouse_id() == ctrl.model.MaterialIndex()[order.distribution_id()].warehouse_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.cloneWarehouse(warehouse)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.project_vm({})\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_object.to(null)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_object.from(null)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.edit(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.activeWTab('Warehouse Items')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.activeMainTab('Warehouses & Stock')\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.viewtype(EditWarehouse)\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, ctrl.model.MaterialIndex()[order.distribution_id()].distribution_entity_name()\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,order.order_items_name()\n\n\t\t\t\t\t\t\t\t,ctrl.model.validOrder(order)\n\t\t\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t\t\t() => order.order_amount()\n\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: order.order_name() + ' Order Amount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tprop: (value) => ctrl.model.setOptions(value, 'order_amount', [order])\n\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: order.order_amount()\n\n\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t() => order.order_received()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: order.order_name() + ' Order Recieved'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: (value) => ctrl.model.setOptions(value, 'order_received', [order])\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,order.order_received() < order.order_amount()\n\t\t\t\t\t\t\t\t&& order.order_received() > 0\n\t\t\t\t\t\t\t\t&& ctrl.model.MaterialIndex()[order.distribution_id()]\n\t\t\t\t\t\t\t\t&& ctrl.model.MaterialIndex()[order.distribution_id()].distribution_ordered() != 'Cancelled'\n\t\t\t\t\t\t\t\t? m('a'\n\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\ttitle: \"Split this order into 2, the resulting order will be for the remaining un-recieved items\"\n\t\t\t\t\t\t\t\t\t\t,onclick: () => ctrl.intent.transferItems({orders:[{order:order, listindex:oi+1}], operation: 'splitorders'})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Split'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t\t\t,order.order_supplier_name()\n\n\t\t\t\t\t\t\t\t,ctrl.model.validOrder(order)\n\t\t\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t\t\t() => order.order_stock_location()\n\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.availableYardSelections\n\t\t\t\t\t\t\t\t\t\t\t\t\t,(value) => ctrl.model.setOptions(value, 'order_stock_location', [order])\n\t\t\t\t\t\t\t\t\t\t\t\t\t,'storage_location'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, () => ({})\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: order.order_stock_location()\n\n\t\t\t\t\t\t\t\t,ctrl.model.validOrder(order)\n\t\t\t\t\t\t\t\t\t? Pencil(\n\t\t\t\t\t\t\t\t\t\t() => order.order_eta()\n\t\t\t\t\t\t\t\t\t\t\t? moment( order.order_eta() ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\t\t\t(value) => ctrl.model.setOptions(value, 'order_eta', [order])\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: ctrl.model.MaterialIndex()[order.distribution_id()]\n\t\t\t\t\t\t\t\t\t\t.distribution_ordered() == 'Cancelled'\n\t\t\t\t\t\t\t\t\t\t\t? 'Cancelled'\n\t\t\t\t\t\t\t\t\t\t\t: order.order_eta()\n\t\t\t\t\t\t\t\t\t\t\t? moment( order.order_eta() ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t\t\t() => order.order_notes()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\t(value) => ctrl.model.setOptions(value, 'order_notes', [order])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('button.btn.btn-secondary'\n\t\t\t\t\t\t\t\t\t\t+css`\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\t\t\t\ttop: -0.1em;\n\t\t\t\t\t\t\t\t\t\t\theight: 2.9em';\n\t\t\t\t\t\t\t\t\t\t\twidth: 5em';\n\t\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tonclick: () => order.addFiles = !order.addFiles\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, order.addFiles ? 'Minimize' : !order.filecount ? 'Add' : order.filecount\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,order.addFiles\n\t\t\t\t\t\t\t\t\t? m(HarthUppy, {\n\t\t\t\t\t\t\t\t\t\tgetFields: () => ctrl.model.uploadmetadata({only:{order_id: order.order_id()}})\n\t\t\t\t\t\t\t\t\t\t, data: ctrl.model.data\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: elements.table(\n\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t'Delete'\n\t\t\t\t\t\t\t, 'Transfer'\n\t\t\t\t\t\t\t, 'Created Date'\n\t\t\t\t\t\t\t, 'Order Number'\n\t\t\t\t\t\t\t, 'Supplementing'\n\t\t\t\t\t\t\t, 'Item Name'\n\t\t\t\t\t\t\t, 'Order Amount'\n\t\t\t\t\t\t\t, 'Received Amount'\n\t\t\t\t\t\t\t, 'Supplier'\n\t\t\t\t\t\t\t, 'Delivery Address'\n\t\t\t\t\t\t\t, 'Expected Arrival'\n\t\t\t\t\t\t\t, 'Notes'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\tListProcessing(\n\t\t\t\t\t\t\t\tctrl.model.lostOrders()\n\t\t\t\t\t\t\t\t,ctrl.model.filterFunction.orderFilters.filters()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(order) => [\n\n\t\t\t\t\t\t\t\tctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t? m('button'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tborder-radius: 0.2em;\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.1);\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\tonclick: () => ctrl.intent.deleteOrder(order)\n\t\t\t\t\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t\t\t\t\t,title: \"Delete this order record\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,'Delete'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null\n\n\n\t\t\t\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\t\t\t\tctrl.model.transfers\n\t\t\t\t\t\t\t\t\t,R.when(Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\tconst item =\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.materials().find((o) =>\n\t\t\t\t\t\t\t\t\t\t\t\to.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== order.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\titem.distribution_entity_id(v.transfer_id)\n\t\t\t\t\t\t\t\t\t\titem.distribution_entity_name(v.transfer_name)\n\n\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.orderUpdates().push(order)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'transfer_name'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\tdisabled: ctrl.model.transfersFrom().length == 0\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,moment( order.order_submission_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t,order.order_name()\n\n\t\t\t\t\t\t\t\t,!ctrl.model.MaterialIndex()[order.distribution_id()]\n\t\t\t\t\t\t\t\t|| ctrl.model.MaterialIndex()[order.distribution_id()].distribution_ordered() == 'Cancelled'\n\t\t\t\t\t\t\t\t? 'Item Deleted '\n\t\t\t\t\t\t\t\t: ctrl.model.MaterialIndex()[order.distribution_id()].distribution_entity_name()\n\n\t\t\t\t\t\t\t\t,order.order_items_name()\n\t\t\t\t\t\t\t\t,order.order_amount()\n\t\t\t\t\t\t\t\t,order.order_received()\n\t\t\t\t\t\t\t\t,order.order_supplier_name()\n\t\t\t\t\t\t\t\t,order.order_stock_location()\n\t\t\t\t\t\t\t\t,order.order_eta()\n\t\t\t\t\t\t\t\t,order.order_notes()\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t]\n\t\t\t: ctrl.model.activeMainTab() == 'Automated Items'\n\t\t\t? EditPreset(ctrl)\n\t\t\t: TransferView(ctrl)\n\n\t])\n\n}\n\n\n\n\nfunction EditSupplier(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('br')\n\t\t,m('h4','Create or Edit Supplier Details')\n\t\t,m('hr')\n\t\t,elements.list([\n\t\t\tctrl.model.edit()\n\t\t\t\t? elements.back(\n\t\t\t\t\t\"Go back to the main view for projects, suppliers and warehouses\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\tctrl.model.viewtype(MainList)\n\t\t\t\t\t\tctrl.model.DeleteSLocations([])\n\t\t\t\t\t\tctrl.model.DeleteSItems([])\n\t\t\t\t\t\t\tctrl.activeTab('Outlets')\n\n\t\t\t\t\t\tctrl.model.location_vm({})\n\t\t\t\t\t\tctrl.model.item_vm({})\n\t\t\t\t\t}\n\t\t\t\t\t,{disabled: ctrl.model.savingProp()}\n\t\t\t\t)\n\t\t\t\t: m(\"button.btn.\", {\n\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\tctrl.model.viewtype(MainList)\n\t\t\t\t\t\tctrl.model.DeleteSLocations([])\n\t\t\t\t\t\tctrl.model.DeleteSItems([])\n\t\t\t\t\t\t\tctrl.activeTab('Outlets')\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard this supplier and all information\"\n\t\t\t\t},\"Discard\")\n\n\t\t\t\t,ctrl.model.SaveSupplierDisabled(true)\n\t\t\t\t|| ctrl.model.check_lnames(true)\n\t\t\t\t|| ctrl.model.check_inames(true)\n\t\t\t\t|| identical(\n\t\t\t\t\tctrl.model.suppliers().find((s) =>\n\t\t\t\t\t\ts.supplier_id()\n\t\t\t\t\t\t== ctrl.model.vm().supplier_id()\n\t\t\t\t\t)\n\t\t\t\t\t,ctrl.model.vm()\n\t\t\t\t)\n\n\t\t\t|| !ctrl.model.editSupplierPermissions()\n\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t: elements.action('Save', ctrl.intent.sendSupplier, ctrl.model.savingProp)\n\n\t\t\t,ctrl.model.edit()\n\t\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled:\n\t\t\t\t\t\t!ctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t|| ctrl.model.savingProp()\n\t\t\t\t\t\t|| identical(\n\t\t\t\t\t\t\tctrl.model.suppliers().find((s) =>\n\t\t\t\t\t\t\t\ts.supplier_id()\n\t\t\t\t\t\t\t\t== ctrl.model.vm().supplier_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,ctrl.model.vm()\n\t\t\t\t\t\t)\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.item_vm({})\n\t\t\t\t\t\tctrl.model.location_vm({})\n\t\t\t\t\t\tctrl.model.DeleteSItems([])\n\t\t\t\t\t\tctrl.model.DeleteSLocations([])\n\t\t\t\t\t\tctrl.model.cloneSupplier(\n\t\t\t\t\t\t\tctrl.model.suppliers().find((s) =>\n\t\t\t\t\t\t\t\ts.supplier_id()\n\t\t\t\t\t\t\t\t== ctrl.model.vm().supplier_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\tctrl.model.masterLLIST(true)\n\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t\t},\"Discard Changes\")\n\t\t\t\t: null\n\t\t])\n\t\t,m('br')\n\t\t,elements.list([\n\t\t\tm('label.control-label', 'Supplier Name',\n\t\t\t\telements.textInput( ctrl.model.vm().supplier_name, {disabled: ctrl.model.editSupplierPermissions() == false})\n\t\t\t)\n\t\t\t,elements.labelCheckbox({\n\t\t\t\t label: 'Delivery'\n\t\t\t\t, prop: ctrl.model.vm().supplier_delivery\n\t\t\t\t, attrs: {\n\t\t\t\t\tchecked: ctrl.model.vm().supplier_delivery()\n\t\t\t\t\t,disabled: ctrl.model.editSupplierPermissions() == false\n\t\t\t\t\t,title: \"Does this supplier deliver\"\n\t\t\t\t}\n\t\t\t})\n\t\t])\n\t\t,m('br')\n\t\t,ctrl.model.SaveSupplierDisabled()\n\n\t\t,ctrl.model.editSupplierPermissions()\n\t\t\t? elements.tabset(['Outlets', 'Items'], ctrl.activeTab)\n\t\t\t: elements.tabset(['Outlets'], ctrl.activeTab)\n\n\t\t,m('br')\n\t\t,ctrl.model.metaDataLoading()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: ctrl.activeTab() == 'Outlets'\n\t\t\t? [\n\t\t\t\tm('br')\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('h4','Supplier Outlets')\n\t\t\t\t\t,ctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t? m(`button`\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\twidth: 5em;\n\t\t\t\t\t\t\t\theight: 2.9em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tdisabled: !!ctrl.model.check_lnames(true)\n\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\tlet newL = ctrl.model.resetLForm()\n\t\t\t\t\t\t\t\t\tctrl.model.vm().supplier_locations.unshift(newL)\n\t\t\t\t\t\t\t\t\tctrl.model.location_vm({})\n\t\t\t\t\t\t\t\t\tctrl.model.masterLLIST(true)\n\t\t\t\t\t\t\t\t\tctrl.model.location_vm(newL)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: \"Create a supplier's outlet\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, '+ Outlet '\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t])\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,ctrl.model.getfilters(null, \"Supplier Address\")\n\t\t\t\t,ctrl.model.check_lnames()\n\t\t\t\t,ctrl.model.masterLLIST().length != 0\n\t\t\t\t\t? elements.table(ctrl.model.data, ['', 'Supplier Outlets', 'Regular Operating Hours', 'Weekend Operating Hours', 'PH Operating Hours', 'Ph', 'Email'],\n\t\t\t\t\t\tctrl.model.masterLLIST().map(\n\t\t\t\t\t\t\t(sLocation) => [\n\t\t\t\t\t\t\t\t\tctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t\t\t\t? ctrl.intent.SupplierLocationsButton(sLocation)\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_location()\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_regular_operating_hours()\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_weekend_operating_hours()\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_public_holiday_operating_hours()\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_phone()\n\t\t\t\t\t\t\t\t,sLocation.supplier_locations_email()\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t: ctrl.model.vm().supplier_locations.length == 0\n\t\t\t\t\t? elements.alert('info',`Create Supplier Outlets to track potential pick up locations of required materials`)\n\t\t\t\t\t: null\n\t\t\t,]\n\t\t\t: [\n\t\t\t\tm('br')\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('h4','Supplier items')\n\t\t\t\t\t,ctrl.model.editSupplierPermissions()\n\t\t\t\t\t\t? m(`button`\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\twidth: 5em;\n\t\t\t\t\t\t\t\theight: 2.9em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tdisabled: !!ctrl.model.check_inames(true)\n\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\tlet newI = ctrl.model.resetIForm()\n\t\t\t\t\t\t\t\t\tctrl.model.vm().supplier_items.unshift(newI)\n\t\t\t\t\t\t\t\t\tctrl.model.item_vm({})\n\t\t\t\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\t\t\t\tctrl.model.item_vm(newI)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: \"Create a product of this supplier\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, '+ Item '\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t])\n\t\t\t\t,m('br')\n\n\t\t\t\t,ctrl.model.getfilters(null, \"Supplier Item\")\n\t\t\t\t,ctrl.model.check_inames()\n\t\t\t\t,ctrl.model.masterILIST().length != 0\n\t\t\t\t\t? scrollableTable.advanced({\n\t\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t\t,rows:\n\t\t\t\t\t\t\tctrl.model.masterILIST().map((item) => ({\n\t\t\t\t\t\t\t\tkey: item.key\n\t\t\t\t\t\t\t\t,i: item\n\t\t\t\t\t\t\t\t,selection: ctrl.intent.SupplierItemsButton(item)\n\t\t\t\t\t\t\t\t,data: {\n\t\t\t\t\t\t\t\t\t'Item Name': item.supplier_items_name()\n\t\t\t\t\t\t\t\t\t,'Description': item.supplier_items_description()\n\t\t\t\t\t\t\t\t\t,'Cost Per Unit': item.supplier_items_cost()\n\t\t\t\t\t\t\t\t\t,'Batch Qty': item.supplier_items_batch()\n\t\t\t\t\t\t\t\t\t,'Cost per Batch': item.supplier_items_batch_cost()\n\t\t\t\t\t\t\t\t\t,'Availability': item.supplier_items_available() ? \"Yes\" : \"No\"\n\t\t\t\t\t\t\t\t\t,'Supply Time': item.supplier_items_supply_time()\n\t\t\t\t\t\t\t\t\t,'UoM': item.supplier_items_uom()\n\t\t\t\t\t\t\t\t\t,'Min. Order': item.supplier_items_minimum_order()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t})\n\t\t\t\t\t: ctrl.model.vm().supplier_items.length == 0\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t, `Enter the items this supplier offers to consume and track them against projects and warehouses`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t]\n\t])\n}\n\n\n\nfunction EditDistribution(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('br')\n\t\t,m('h4', ctrl.model.project_vm().project_name() + ' - Material Distribution' )\n\n\t\t,m('hr')\n\t\t,elements.list([\n\t\t\telements.back(\n\t\t\t\t\"Go back to the project list\"\n\t\t\t\t,ctrl.model.resetView\n\t\t\t)\n\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\tdisabled: identical(\n\t\t\t\t\tctrl.model.baseProjectString()\n\t\t\t\t\t,ctrl.model.ProjectItems()\n\t\t\t\t) || !ctrl.model.editMaterialsPermissions()\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\tctrl.model.materials()\n\t\t\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t\t\t.concat(ctrl.model.DeleteDItems())\n\t\t\t\t\t)\n\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\tctrl.model.materials().concat(\n\t\t\t\t\t\t\tctrl.model.copy_items(\n\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqDItem) == uniqItem(y, uniqDItem)\n\t\t\t\t\t\t\t\t\t,ctrl.model.originalMaterials()\n\t\t\t\t\t\t\t\t\t,ctrl.model.materials()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,false\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tctrl.model.DeleteDItems([])\n\t\t\t\t\tctrl.model.selected_pt(ctrl.model.selected_pt())\n\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\tctrl.model.d_item_vm({})\n\t\t\t\t}\n\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t},\"Discard Changes\")\n\t\t\t,ctrl.model.editMaterialsPermissions()\n\t\t\t&& !identical(\n\t\t\t\tctrl.model.baseProjectString()\n\t\t\t\t,ctrl.model.ProjectItems()\n\t\t\t)\n\t\t\t\t? elements.action('Save', ctrl.intent.sendAllDistriution, ctrl.model.savingProp)\n\t\t\t\t: m('button.btn', {disabled: true}, 'Save')\n\t\t])\n\t\t,ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: ctrl.model.editMaterialsPermissions()\n\t\t? [\n\t\t\tctrl.model.check_new_material()\n\t\t\t,elements.list([\n\t\t\t\tctrl.model.addMaterialsButton({\n\t\t\t\t\ttitle: \"Check, set or order project materials\"\n\t\t\t\t\t,disabled: ctrl.model.items().length == 0\n\t\t\t\t})\n\n\t\t\t\t,m('button.btn.btn-secondary',\n\t\t\t\t\t{\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tctrl.intent.applyPreset(ctrl.model.project_vm())\n\t\t\t\t\t\t\tctrl.intent.sendAllDistriution()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled: ctrl.model.presets().length == 0\n\t\t\t\t\t\t\t|| !(\n\t\t\t\t\t\t\t\tctrl.model.selected_pt().disciplines\n\t\t\t\t\t\t\t\t|| [ctrl.model.selected_pt()]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.some((d) => (d.outstandingMaterials || []).length)\n\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t,width: '12em'\n\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: 'Apply automated materials for all disciplines on this project'\n\t\t\t\t\t}\n\t\t\t\t\t, '+ Forecasted Items'\n\t\t\t\t)\n\n\t\t\t\t,ctrl.model.order_vm.order().length\n\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t{\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tctrl.intent.makeOrders()\n\t\t\t\t\t\t\tctrl.intent.sendAllDistriution()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\tctrl.model.order_vm.order().length == 0\n\t\t\t\t\t\t\t|| !ctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t,width: '8em'\n\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: 'Order selected Materials'\n\t\t\t\t\t}\n\t\t\t\t\t, 'Order Items'\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t\t,ctrl.model.order_vm.order().length\n\t\t\t\t\t? ` - All container items are ready to order`\n\t\t\t\t\t: ``\n\t\t\t])\n\t\t\t,ctrl.model.getfilters(null, \"Project Item\")\n\t\t\t,m('br')\n\t\t\t,ctrl.model.ProjectItems().length != 0\n\t\t\t\t\t? scrollableTable.advanced({\n\t\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t\t,rows:\n\t\t\t\t\t\t\tctrl.model.masterILIST()\n\t\t\t\t\t\t\t.map((item) => ({\n\t\t\t\t\t\t\t\tkey: item.key\n\t\t\t\t\t\t\t\t,i: item\n\t\t\t\t\t\t\t\t,selection:\n\t\t\t\t\t\t\t\t\t!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t? ctrl.intent.DistributionItemsButton(item)\n\t\t\t\t\t\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t\t\t\t\t\t,data: {\n\t\t\t\t\t\t\t\t\t'Item Name': item.distribution_material_name()\n\t\t\t\t\t\t\t\t\t,'Supplier': item.supplier_id()\n\t\t\t\t\t\t\t\t\t,'Description': item.distribution_material_description()\n\t\t\t\t\t\t\t\t\t,'Order': !ctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t\t? 'Requires Order Management Permissions'\n\t\t\t\t\t\t\t\t\t\t: !item.distribution_ordered() && item.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t? elements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.materials().forEach((another_container_item) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tanother_container_item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order().push(another_container_item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.check_order_vm(item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,checked: ctrl.model.check_ordered(item)\n\t\t\t\t\t\t\t\t\t\t\t\t,disabled: !!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t,title: \"Order this material and corresponding container\"\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t: !item.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Save prior to Ordering'\n\t\t\t\t\t\t\t\t\t\t\t: m('a'\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.resetView()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.activeMainTab('Manage Orders')\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,item.distribution_ordered() + ' - ' + item.order_received + ' received'\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,'Units': ctrl.model.d_item_vm()[item.key]\n\t\t\t\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Units'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tprop: item.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: item.distribution_amount()\n\t\t\t\t\t\t\t\t\t,'Silo': elements.checkbox({\n\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\titem.distribution_silo(true)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.consolidate()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\titem.distribution_silo(false)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.consolidate()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,checked: item.distribution_silo()\n\t\t\t\t\t\t\t\t\t\t,disabled: !!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t,title: [\n\t\t\t\t\t\t\t\t\t\t\t'Selecting this will segregate this material in to its own container,'\n\t\t\t\t\t\t\t\t\t\t\t,'otherwise Odin will bunch the material to try'\n\t\t\t\t\t\t\t\t\t\t\t,'and make more efficient and cheaper bulk orders'\n\t\t\t\t\t\t\t\t\t\t].join(' ')\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'Stocked Address': ctrl.model.d_item_vm()[item.key]\n\t\t\t\t\t\t\t\t\t\t\t? autocomplete.all(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.availableYardSelections\n\t\t\t\t\t\t\t\t\t\t\t\t,item.distribution_stocked\n\t\t\t\t\t\t\t\t\t\t\t\t,'storage_location'\n\t\t\t\t\t\t\t\t\t\t\t\t, () => ({})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: item.distribution_stocked()\n\n\t\t\t\t\t\t\t\t\t,'Batch Qty': item.distribution_batch()\n\t\t\t\t\t\t\t\t\t,'Container': item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t,'Assigned': item.distribution_entity_name()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t})\n\t\t\t\t\t: ctrl.model.data.readMaterialPermissions()\n\t\t\t\t\t\t? elements.alert(`info`, 'Add materials to this project to track its consumable products')\n\t\t\t\t\t\t: elements.alert(`info`, 'Requires Material Permissions')\n\t\t]\n\t\t: [\n\t\t\tctrl.model.getfilters(null, \"Project Item\")\n\t\t\t,m('br')\n\t\t\t,ctrl.model.ProjectItems().length != 0\n\t\t\t\t? scrollableTable.advanced({\n\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t,rows:\n\t\t\t\t\t\tctrl.model.masterILIST().map((i) => ({\n\t\t\t\t\t\t\tkey: i.key\n\t\t\t\t\t\t\t,i\n\t\t\t\t\t\t\t,data: {\n\t\t\t\t\t\t\t\t'Item Name': i.distribution_material_name()\n\t\t\t\t\t\t\t\t,'Supplier': i.supplier_id()\n\t\t\t\t\t\t\t\t,'Description': i.distribution_material_description()\n\t\t\t\t\t\t\t\t,'Assigned': i.distribution_entity_name()\n\t\t\t\t\t\t\t\t,'Units': i.distribution_amount()\n\t\t\t\t\t\t\t\t,'Stocked Address': i.distribution_stocked()\n\t\t\t\t\t\t\t\t,'Batch Qty': i.distribution_batch()\n\t\t\t\t\t\t\t\t,'Container': i.distribution_container_name()\n\t\t\t\t\t\t\t\t,'Silo': i.distribution_silo() ? 'Yes' : 'No'\n\t\t\t\t\t\t\t\t,'Order': i.distribution_ordered()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t\t: ctrl.model.data.readMaterialPermissions()\n\t\t\t\t\t? elements.alert(`info`, 'Add materials to this project to track its consumable products')\n\t\t\t\t\t: elements.alert(`info`, 'Requires Material Permissions')\n\t\t]\n\t])\n}\n\n\n\nfunction TransferView(ctrl){\n\treturn m('div.harth',[\n\t\tm('br')\n\t\t,ctrl.model.transferCheck()\n\t\t,ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: ctrl.model.transfers().length != 0\n\t\t? [\n\t\t\telements.list([\n\t\t\t\tm('label.control-label', 'Transfer items from '\n\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\tctrl.model.transfersFrom\n\t\t\t\t\t\t,R.when(Boolean, function(v){\n\t\t\t\t\t\t\tctrl.model.transfer_object.from(v)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,'transfer_name'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: ctrl.model.transfersFrom().length == 0\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,m('label.control-label', 'Transfer items to '\n\t\t\t\t\t,autocomplete.strict(\n\t\t\t\t\t\tctrl.model.transfersTo\n\t\t\t\t\t\t,R.when(Boolean, function(v){\n\t\t\t\t\t\t\tctrl.model.transfer_object.to(v)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,'transfer_name'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: ctrl.model.transfersTo().length == 0\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\t\t\t,!ctrl.model.transfer_object.from()\n\t\t\t\t? elements.alert('info',`Select a Warehouses or project to transfer items between them`)\n\t\t\t\t: [\n\t\t\t\t\t\telements.alert('info', ctrl.model.transferItems().length + ` items available. Only orders that have been completely received or items not yet ordered can be transferred. Orders can easily be split under Manage Orders if required`)\n\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t,m('h4','Available stock for transfer')\n\t\t\t\t\t\t,m('br')\n\n\t\t\t\t\t\t,elements.list([\n\n\t\t\t\t\t\t\tm(\"button.btn.btn-warning\", {\n\t\t\t\t\t\t\t\tdisabled: !ctrl.model.transfer_vm().length\n\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\t\t\t\tctrl.model.materials()\n\t\t\t\t\t\t\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\t\t\t\tctrl.model.materials().concat(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.copy_items(\n\t\t\t\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqTItem) == uniqItem(y, uniqTItem)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.originalMaterials()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.materials()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,false\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm([])\n\t\t\t\t\t\t\t\t\tctrl.model.transfer_object.to(ctrl.model.transfer_object.to())\n\t\t\t\t\t\t\t\t\tctrl.model.transfer_object.from(ctrl.model.transfer_object.from())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t\t\t\t\t},\"Discard Changes\")\n\n\t\t\t\t\t\t\t,elements.forward(\"Transfer\")(\n\t\t\t\t\t\t\t\t\"Transfer items from one place to another, maybe a project or warehouse\",\n\t\t\t\t\t\t\t\t() => Promise.all([ ctrl.intent.transferItems({operation: 'transferorders'}) ])\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm().length == 0\n\t\t\t\t\t\t\t\t\t\t|| ctrl.model.transfer_object.to() == ctrl.model.transfer_object.from()\n\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.transfer_object.to()\n\t\t\t\t\t\t\t\t\t\t|| Object.keys(ctrl.model.errors())\n\t\t\t\t\t\t\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.errors()[a]\n\t\t\t\t\t\t\t\t\t\t\t\t\t? a + ' ' + ctrl.model.errors()[a]\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.filter((a) => a)\n\t\t\t\t\t\t\t\t\t\t\t.length > 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t\t\t,ctrl.model.savingProp()\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: scrollableTable.advanced({\n\t\t\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t\t\t,rows:\n\t\t\t\t\t\t\t\tctrl.model.transferItems().map((item, iIndex) => ({\n\t\t\t\t\t\t\t\t\tkey: item.key\n\t\t\t\t\t\t\t\t\t,i: item\n\t\t\t\t\t\t\t\t\t,selection: {\n\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm().push(item)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm().splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\tR.findIndex(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(a) => a.distribution_id() == item.distribution_id(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t\t\t\t\t\t\t,checked: ctrl.model.transfer_vm().find((iT) => iT.distribution_id() == item.distribution_id() )\n\t\t\t\t\t\t\t\t\t\t,disabled: ctrl.model.transfer_object.to() == ctrl.model.transfer_object.from()\n\t\t\t\t\t\t\t\t\t\t,title: \"Transfer this item to a different project or warehouse\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,data: {\n\n\t\t\t\t\t\t\t\t\t\t'': ctrl.model.transfer_vm().find((iT) => iT.distribution_id() == item.distribution_id() )\n\t\t\t\t\t\t\t\t\t\t\t? 'Transferring'\n\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t,'Name': item.distribution_material_name()\n\t\t\t\t\t\t\t\t\t\t,'Description': item.distribution_material_description()\n\t\t\t\t\t\t\t\t\t\t,'Amount': m(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: item.distribution_material_name() + ' at line ' + (iIndex + 1) + ', Transfer Out'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: (value) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(value){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.distribution_amount(value)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.transfer_vm().find((iT) => iT.distribution_id() == item.distribution_id() )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& value != ctrl.model.originalMaterialIndex()[item.distribution_id()].distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.transfer_vm().push(item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse if(value == 0){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet index = R.findIndex(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(a) => a.distribution_id() == item.distribution_id(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.transfer_vm()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindex > -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ctrl.model.transfer_vm().splice(index, 1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn item.distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t,max: ctrl.model.originalMaterialIndex()[item.distribution_id()].distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,'Total': ' of ' + ctrl.model.originalMaterialIndex()[item.distribution_id()].distribution_amount()\n\t\t\t\t\t\t\t\t\t\t,'Dest. Stock': ctrl.model.transfer_object.to()\n\t\t\t\t\t\t\t\t\t\t\t? R.reduce(\n\t\t\t\t\t\t\t\t\t\t\t\t(a, b) => a + b.distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t,0\n\t\t\t\t\t\t\t\t\t\t\t\t,ctrl.model.transferToMaterialIndex()[item.distribution_material_name()]\n\t\t\t\t\t\t\t\t\t\t\t\t|| [{distribution_amount: m.prop(0)}]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t\t\t\t\t,'Stocked Address': item.distribution_stocked()\n\t\t\t\t\t\t\t\t\t\t,'Supplier': item.supplier_id()\n\t\t\t\t\t\t\t\t\t\t,'Order': item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t,Object.keys(ctrl.model.errors())\n\t\t\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\t\t\tctrl.model.errors()[a]\n\t\t\t\t\t\t\t\t\t? a + ' ' + ctrl.model.errors()[a]\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter((a) => a)\n\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\t\t\t]\n\t\t]\n\t\t: [\n\t\t\tctrl.model.editWarehousePermissions()\n\t\t\t\t? elements.alert('warning',`Warehouses or projects need to be available to make transfers`)\n\t\t\t\t: null\n\t\t]\n\t])\n}\n\n\n\nfunction EditPreset(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('h4','Create and Manage Automated Items')\n\t\t,m('hr')\n\t\t,ctrl.model.organizations_disciplines().length == 0\n\t\t? elements.alert('warning',`Disciplines need to be created to assign automated fills`)\n\t\t: ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: elements.list([\n\t\t\tm('label.control-label', 'Discipline ')\n\t\t\t,Pencil(\n\t\t\t\t() => ctrl.model.selected_preset() || ''\n\t\t\t\t,() =>\n\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\tctrl.model.presetOptions\n\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\tif(v){\n\t\t\t\t\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\t\t\t\t\tctrl.model.organizations_disciplines().find(\n\t\t\t\t\t\t\t\t\t\tR.propEq('orgDisciplineNameDescription', v)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tctrl.model.selected_preset(\n\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,null\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: ctrl.model.organizations_disciplines().length == 0\n\t\t\t\t\t\t\t,key: Math.random().toString(15).slice(2, 14)\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\n\t\t\t,!ctrl.model.editMaterialsPermissions()\n\t\t\t? m('button.btn.invisible', {\n\t\t\t\tonclick: () => {}\n\t\t\t\t,disabled: false\n\t\t\t\t,title: ''\n\t\t\t}, 'Invisible space saving button' )\n\t\t\t: elements.list([\n\n\t\t\t\tm('label.control-label', 'Copy from ')\n\n\t\t\t\t,Pencil(\n\t\t\t\t\t() => ctrl.model.preset_vm()\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\tctrl.model.presetCloneOptions\n\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\tif(v){\n\t\t\t\t\t\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\t\t\t\t\t\tctrl.model.organizations_disciplines().find(\n\t\t\t\t\t\t\t\t\t\t\tR.propEq('orgDisciplineNameDescription', v)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tctrl.model.preset_vm(\n\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tctrl.intent.clonePreset()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,null\n\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t\tctrl.model.organizations_disciplines().length == 0\n\t\t\t\t\t\t\t\t\t|| !ctrl.model.selected_preset()\n\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\n\t\t])\n\n\n\t\t,ctrl.model.preset_vm()\n\t\t\t? m(``+css`margin-bottom: 2em`\n\t\t\t\t,`Cloning `\n\t\t\t\t+ ctrl.model.selected_preset()\n\t\t\t\t+ ` to `\n\t\t\t\t+ ctrl.model.preset_vm()\n\t\t\t\t+ `, this will erase all of `\n\t\t\t\t+ ctrl.model.preset_vm()\n\t\t\t\t+ ` existing automated items`\n\t\t\t)\n\t\t\t: null\n\n\t\t,ctrl.model.check_preset()\n\n\t\t,elements.list([\n\t\t\tctrl.model.check_preset(true)\n\t\t\t|| identical(\n\t\t\t\tctrl.model.basePresetString()\n\t\t\t\t,ctrl.model.PresetItems()\n\t\t\t)\n\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t: elements.action('Save', ctrl.intent.sendPreset, ctrl.model.savingProp)\n\n\t\t\t,m(\"button.btn.btn-warning\", {\n\t\t\t\tdisabled:\n\t\t\t\t\t!ctrl.model.editMaterialsPermissions()\n\t\t\t\t\t|| identical(\n\t\t\t\t\t\tctrl.model.basePresetString()\n\t\t\t\t\t\t,ctrl.model.PresetItems()\n\t\t\t\t\t)\n\n\t\t\t\t,onclick: () => {\n\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\tctrl.model.new_material({})\n\t\t\t\t\tctrl.model.presets(\n\t\t\t\t\t\tctrl.model.presets()\n\t\t\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t)\n\n\t\t\t\t\tctrl.model.presets(\n\t\t\t\t\t\tctrl.model.presets()\n\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\tctrl.model.copy_items(\n\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqPItem) == uniqItem(y, uniqPItem)\n\t\t\t\t\t\t\t\t\t,ctrl.model.originalPresets()\n\t\t\t\t\t\t\t\t\t,ctrl.model.presets()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,false\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\tctrl.model.DeletePItems([])\n\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\tctrl.model.d_item_vm({})\n\t\t\t\t\tctrl.model.preset_vm(null)\n\t\t\t\t}\n\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t},\"Discard Changes\")\n\n\n\t\t\t,m('button.btn.btn-warning', {\n\t\t\t\tonclick: () => {\n\t\t\t\t\tctrl.intent.deletePreset(false, ctrl.model.selected_preset())\n\t\t\t\t}\n\t\t\t\t,disabled: ctrl.model.PresetItems().length == 0\n\t\t\t\t,title: 'Delete all items related to this automated items list'\n\t\t\t}, 'Delete' )\n\n\t\t])\n\t\t,m('hr')\n\n\t\t,elements.list([\n\t\t\tm('h4','Materials used in this Discipline')\n\t\t\t,m(`button`\n\t\t\t\t+ css`\n\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\tbackground-color: white;\n\t\t\t\t\tpadding: 0.3em;\n\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\twidth: 8em;\n\t\t\t\t\theight: 2.3em;\n\t\t\t\t`\n\t\t\t\t,{\n\t\t\t\t\tonclick:\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tctrl.model.d_item_vm({})\n\t\t\t\t\t\t\tctrl.model.setnew_material()\n\t\t\t\t\t\t}\n\t\t\t\t\t,disabled: !ctrl.model.selected_preset()\n\t\t\t\t\t\t|| ctrl.model.items().length == 0\n\t\t\t\t\t\t|| !ctrl.model.editMaterialsPermissions()\n\t\t\t\t\t,title: \"Add this item to the automated items list selected\"\n\n\t\t\t\t}\n\t\t\t\t, '+ Materials '\n\t\t\t)\n\t\t])\n\t\t,m('hr')\n\t\t,ctrl.model.PresetItems().length != 0\n\t\t\t? elements.table(ctrl.model.data, ['Action', 'Item Name', 'Description', 'Units/Discipline Rate', 'Applies to', 'Supplier'],\n\t\t\t\tctrl.model.PresetItems()\n\t\t\t\t\t.map((item, /*iIndex*/) => [\n\t\t\t\t\t\tctrl.model.editMaterialsPermissions()\n\t\t\t\t\t\t\t? ctrl.intent.PresetItemsButton(item)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,item.distribution_material_name()\n\t\t\t\t\t\t,item.distribution_material_description()\n\n\t\t\t\t\t\t,ctrl.model.d_item_vm()[item.key]\n\t\t\t\t\t\t&& ctrl.model.editMaterialsPermissions()\n\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_id != null\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.activeMainTab() == 'Warehouses & Stock'\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t|| (\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.selected_pt().project_id\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.activeDTab() == 'Distribution'\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t? 'Units' : 'Units/Per Discipline Rate'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: item.distribution_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t,step: 0.01\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: item.distribution_amount()\n\t\t\t\t\t\t,item.distribution_entity_name()\n\t\t\t\t\t\t,item.supplier_id()\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\t\t\t: ctrl.model.data.readMaterialPermissions()\n\t\t\t\t? !Object.keys(ctrl.model.new_material()).length\n\t\t\t\t\t? elements.alert(`info`, 'Add materials to automate material ordering for project disciplines.')\n\t\t\t\t\t: null\n\t\t\t\t: elements.alert(`info`, 'Requires Material Permissions')\n\t])\n}\n\n\n\nfunction EditWarehouse(ctrl){\n\treturn m('div.harth.mb6',[\n\t\tm('br')\n\t\t,m('h4', ctrl.model.warehouse_vm().warehouse_name() + ' - Material Distribution')\n\n\t\t,m('hr')\n\t\t,elements.list([\n\t\t\tctrl.model.edit() == true\n\t\t\t\t? elements.back(\n\t\t\t\t\t\"Go back to the main view for projects, suppliers and warehouses\"\n\t\t\t\t\t,() => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\tctrl.model.materials()\n\t\t\t\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t\t\t\t.concat(ctrl.model.DeleteDItems())\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\tctrl.model.materials().concat(\n\t\t\t\t\t\t\t\tctrl.model.copy_items(\n\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqDItem) == uniqItem(y, uniqDItem)\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.originalMaterials()\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.materials()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,false\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.new_material({})\n\t\t\t\t\t\tctrl.model.warehouse_vm({})\n\t\t\t\t\t\tctrl.model.viewtype(MainList)\n\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\tctrl.model.DeleteDItems([])\n\t\t\t\t\t}\n\t\t\t\t\t,{disabled: ctrl.model.savingProp()}\n\t\t\t\t)\n\t\t\t\t: m(\"button.btn.\", {\n\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.new_material({})\n\t\t\t\t\t\tctrl.model.warehouse_vm({})\n\t\t\t\t\t\tctrl.model.viewtype(MainList)\n\t\t\t\t\t\tctrl.model.edit(false)\n\t\t\t\t\t\tctrl.model.DeleteDItems([])\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard information and go back to the main view for projects, suppliers and warehouses\"\n\t\t\t\t},\"Discard\")\n\n\t\t\t,!ctrl.model.editWarehousePermissions()\n\t\t\t|| \t\t\t\tidentical(\n\t\t\t\t\tctrl.model.baseWarehouseString()\n\t\t\t\t\t,ctrl.model.WarehouseItems()\n\t\t\t\t)\n\t\t\t\t&& identical(\n\t\t\t\t\tctrl.model.warehouses().find((w) =>\n\t\t\t\t\t\tw.warehouse_id()\n\t\t\t\t\t\t== ctrl.model.warehouse_vm().warehouse_id()\n\t\t\t\t\t)\n\t\t\t\t\t,ctrl.model.warehouse_vm()\n\t\t\t\t)\n\n\t\t\t|| ctrl.model.check_wnames(true)\n\t\t\t\t? m('button.btn', {\n\t\t\t\t\tdisabled: true\n\t\t\t\t\t,title: \"Save Warehouse\"\n\t\t\t\t}, 'Save')\n\t\t\t\t: elements.action('Save', ctrl.intent.sendWarehouse, ctrl.model.savingProp)\n\n\t\t\t,ctrl.model.edit() == true\n\t\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled: ctrl.model.savingProp()\n\t\t\t\t\t\t\t|| !ctrl.model.editWarehousePermissions()\n\t\t\t\t\t\t\t|| \t\t\t\t\t\t\t\tidentical(\n\t\t\t\t\t\t\t\t\tctrl.model.baseWarehouseString()\n\t\t\t\t\t\t\t\t\t,ctrl.model.WarehouseItems()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t&& identical(\n\t\t\t\t\t\t\t\t\tctrl.model.warehouses().find((w) =>\n\t\t\t\t\t\t\t\t\t\tw.warehouse_id()\n\t\t\t\t\t\t\t\t\t\t== ctrl.model.warehouse_vm().warehouse_id()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,ctrl.model.warehouse_vm()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.errors({})\n\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\tctrl.model.materials()\n\t\t\t\t\t\t\t\t.filter((m) => !m.created)\n\t\t\t\t\t\t\t\t.concat(ctrl.model.DeleteDItems())\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.materials(\n\t\t\t\t\t\t\tctrl.model.materials().concat(\n\t\t\t\t\t\t\t\tctrl.model.copy_items(\n\t\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t\t(x, y) => uniqItem(x, uniqDItem) == uniqItem(y, uniqDItem)\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.originalMaterials()\n\t\t\t\t\t\t\t\t\t\t,ctrl.model.materials()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,false\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.DeleteDItems([])\n\t\t\t\t\t\tctrl.model.cloneWarehouse(\n\t\t\t\t\t\t\tctrl.model.warehouses().find((w) =>\n\t\t\t\t\t\t\t\tw.warehouse_id()\n\t\t\t\t\t\t\t\t== ctrl.model.warehouse_vm().warehouse_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tctrl.model.masterILIST(true)\n\t\t\t\t\t\tctrl.model.d_item_vm({})\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Discard all the details that have been changed\"\n\t\t\t\t},\"Discard Changes\")\n\t\t\t\t: null\n\n\t\t])\n\t\t,ctrl.model.check_wnames()\n\n\t\t,!ctrl.model.warehouse_vm().warehouse_id()\n\t\t? [\n\t\t\telements.alert('warning',`This warehouse must be saved before items can be added to it`)\n\t\t\t,elements.tabset(['Warehouse Details'], ctrl.activeWTab)\n\t\t]\n\t\t: elements.tabset(['Warehouse Details', 'Warehouse Items'], ctrl.activeWTab)\n\t\t,m('hr')\n\t\t,ctrl.activeWTab() == 'Warehouse Details'\n\t\t? [\n\t\t\telements.list([\n\t\t\t\tm('label.control-label', 'Warehouse Name'\n\t\t\t\t\t,elements.textInput( ctrl.model.warehouse_vm().warehouse_name, {disabled: ctrl.model.editWarehousePermissions() == false})\n\t\t\t\t)\n\t\t\t\t,elements.labelCheckbox({\n\t\t\t\t\tlabel: 'Delivery'\n\t\t\t\t\t,prop: ctrl.model.warehouse_vm().warehouse_delivery\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tchecked: ctrl.model.warehouse_vm().warehouse_delivery()\n\t\t\t\t\t\t,disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t,title: \"Does this warehouse deliver\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t])\n\t\t\t,elements.list([\n\t\t\t\tm('label.control-label', 'Address',\n\t\t\t\t\telements.textInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_location\n\t\t\t\t\t\t,{ placeholder: \"92 Woodnock Ave, Canterbury\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Phone',\n\t\t\t\t\telements.telephoneInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_phone\n\t\t\t\t\t\t,{ placeholder: \"02 YYYY YYYY\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Email',\n\t\t\t\t\telements.textInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_email\n\t\t\t\t\t\t,{ placeholder: \"jerry@harth.io\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Regular Open Hours',\n\t\t\t\t\telements.textInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_operating_hours_regular\n\t\t\t\t\t\t,{ placeholder: \"Mon-Fri 8am-5pm\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Weekend Open Hours',\n\t\t\t\t\telements.textInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_operating_hours_weekend\n\t\t\t\t\t\t,{ placeholder: \"Sat-Sun 8am-2pm\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('label.control-label', 'Public Holidays',\n\t\t\t\t\telements.textInput(\n\t\t\t\t\t\tctrl.model.warehouse_vm().warehouse_operating_hours_public_holiday\n\t\t\t\t\t\t,{ placeholder: \"PH 9am-4pm\"\n\t\t\t\t\t\t, disabled: ctrl.model.editWarehousePermissions() == false\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\t\t]\n\t\t: ctrl.model.metaDataLoading()\n\t\t? elements.centeredSpinner()\n\t\t: [\n\t\t\tctrl.model.editMaterialsPermissions() && ctrl.model.editWarehousePermissions()\n\t\t\t\t? [\n\t\t\t\t\tctrl.model.check_new_material()\n\t\t\t\t\t,elements.list([\n\n\t\t\t\t\t\tctrl.model.addMaterialsButton({\n\t\t\t\t\t\t\tdisabled: ctrl.model.items().length == 0\n\t\t\t\t\t\t\t,title: 'Add to warehouse materials'\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t,ctrl.model.order_vm.order().length\n\t\t\t\t\t\t\t? m('button.btn.btn-secondary',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tctrl.intent.makeOrders()\n\t\t\t\t\t\t\t\t\t\tctrl.intent.sendWarehouse()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order().length == 0\n\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t,width: '8em'\n\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: 'Order selected Materials'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Order Items'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,ctrl.model.order_vm.order().length\n\t\t\t\t\t\t\t? ` - All container items are ready to order`\n\t\t\t\t\t\t\t: ``\n\t\t\t\t\t])\n\n\t\t\t\t\t,ctrl.model.getfilters(null, \"Warehouse Item\")\n\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,elements.tabset(['Stocked', 'Cancelled'], ctrl.activeMTab)\n\t\t\t\t\t,m('br')\n\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,ctrl.model.WarehouseItems().length != 0\n\t\t\t\t\t\t? scrollableTable.advanced({\n\t\t\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t\t\t,rows:\n\t\t\t\t\t\t\t\tctrl.model.masterILIST()\n\t\t\t\t\t\t\t\t.map((item) => ({\n\t\t\t\t\t\t\t\t\tkey: item.key\n\t\t\t\t\t\t\t\t\t,i: item\n\t\t\t\t\t\t\t\t\t,selection:\n\t\t\t\t\t\t\t\t\t\t!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t? ctrl.intent.WarehouseItemsButton(item)\n\t\t\t\t\t\t\t\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t\t\t\t\t\t\t,data: {\n\t\t\t\t\t\t\t\t\t\t'Item Name': item.distribution_material_name()\n\t\t\t\t\t\t\t\t\t\t,'Description': item.distribution_material_description()\n\t\t\t\t\t\t\t\t\t\t,'Supplier': item.supplier_name || item.supplier_id()\n\t\t\t\t\t\t\t\t\t\t,'Order': !item.distribution_ordered() && item.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t? elements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.materials().forEach((another_container_item) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tanother_container_item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.order_vm.order().push(another_container_item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.check_order_vm(item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,checked: ctrl.model.check_ordered(item)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,disabled: !!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| !ctrl.model.editOrdersPermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t: !item.distribution_id()\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Save prior to Ordering'\n\t\t\t\t\t\t\t\t\t\t\t\t: m('a'\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.resetView()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.activeMainTab('Manage Orders')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,item.distribution_ordered() + ' - ' + (item.order_received || 0 ) + ' received'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t,'Units': ctrl.model.d_item_vm()[item.key]\n\t\t\t\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrors: ctrl.model.errors\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Units'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\tprop: item.distribution_amount\n\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: item.distribution_amount()\n\t\t\t\t\t\t\t\t\t\t,'Silo' : elements.checkbox({\n\t\t\t\t\t\t\t\t\t\t\tonchange(event){\n\t\t\t\t\t\t\t\t\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.distribution_silo(true)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.consolidate()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\telse if (event.currentTarget.checked == false){\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.distribution_silo(false)\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.consolidate()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,checked: item.distribution_silo()\n\t\t\t\t\t\t\t\t\t\t\t,disabled: !!item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t,title: [\n\t\t\t\t\t\t\t\t\t\t\t\t'Selecting this will segregate this material in to its own container,'\n\t\t\t\t\t\t\t\t\t\t\t\t,'otherwise Odin will bunch the material to try'\n\t\t\t\t\t\t\t\t\t\t\t\t,'and make more efficient and cheaper bulk orders'\n\t\t\t\t\t\t\t\t\t\t\t].join(' ')\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,'Stocked Address': ctrl.model.d_item_vm()[item.key]\n\t\t\t\t\t\t\t\t\t\t\t? autocomplete.all(\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.availableYardSelections\n\t\t\t\t\t\t\t\t\t\t\t\t, item.distribution_stocked\n\t\t\t\t\t\t\t\t\t\t\t\t, 'storage_location'\n\t\t\t\t\t\t\t\t\t\t\t\t, () => ({})\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: item.distribution_stocked()\n\t\t\t\t\t\t\t\t\t\t,'': ctrl.model.check_float(item) && !item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t? `Stock is Low. ` + (item.distribution_ordered() ? \"\" : \"Order item\")\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t\t,'Batch Qty': item.distribution_batch()\n\t\t\t\t\t\t\t\t\t\t,'Container': item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t\t,'Float': item.distribution_float()\n\t\t\t\t\t\t\t\t\t\t,' ':\n\t\t\t\t\t\t\t\t\t\t\telements.undoDiscard({\n\t\t\t\t\t\t\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.d_item_vm()[item.key] = item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.intent.deleteDitem()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: ctrl.model.data.readMaterialPermissions()\n\t\t\t\t\t\t\t? elements.alert(`info`, 'Add materials to this warehouse to track stock')\n\t\t\t\t\t\t\t: elements.alert(`info`, 'Requires Material Permissions')\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\tm('br')\n\t\t\t\t,ctrl.model.getfilters(\"button\", \"Warehouse Item\")\n\t\t\t\t,ctrl.model.getfilters(null, \"Warehouse Item\")\n\t\t\t\t,ctrl.model.WarehouseItems().length != 0\n\t\t\t\t\t? scrollableTable.advanced({\n\t\t\t\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t\t\t\t,rows:\n\t\t\t\t\t\t\tctrl.model.masterILIST().map((item) => ({\n\t\t\t\t\t\t\t\tkey: item.key\n\t\t\t\t\t\t\t\t,i: item\n\t\t\t\t\t\t\t\t,data: {\n\t\t\t\t\t\t\t\t\t'Item Name': item.distribution_material_name()\n\t\t\t\t\t\t\t\t\t,'Description': item.distribution_material_description()\n\t\t\t\t\t\t\t\t\t,'Supplier': item.supplier_id()\n\t\t\t\t\t\t\t\t\t,'Units': item.distribution_amount()\n\t\t\t\t\t\t\t\t\t,'': ctrl.model.check_float(item)\n\t\t\t\t\t\t\t\t\t\t? `Stock is Low. `+ (\n\t\t\t\t\t\t\t\t\t\t\titem.distribution_ordered()\n\t\t\t\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"This item isn't ordered yet\"\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t,'Batch Qty': item.distribution_batch()\n\t\t\t\t\t\t\t\t\t,'Container': item.distribution_container_name()\n\t\t\t\t\t\t\t\t\t,'Silo': item.distribution_silo() ? 'Yes' : 'No'\n\t\t\t\t\t\t\t\t\t,'Order': item.distribution_ordered()\n\t\t\t\t\t\t\t\t\t,'Float': item.distribution_float()\n\t\t\t\t\t\t\t\t\t,'Stocked Address': item.distribution_stocked()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t})\n\t\t\t\t\t: ctrl.model.data.readMaterialPermissions()\n\t\t\t\t\t\t? elements.alert(`info`, 'Add materials to this warehouse to track stock')\n\t\t\t\t\t\t: elements.alert(`info`, 'Requires Material Permissions')\n\t\t\t]\n\t\t]\n\n\t])\n}\n\n\n/*\n\tIn order for mithril to mount this component. We have to expose these two properties.\n*/\nexport default Main\n","\n\nimport m from 'bacta'\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport * as elements from '../components/elements'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\nimport humanList from '../utils/human_list'\nimport * as R from 'ramda'\nimport { money as makeMoney } from '../utils/regExes'\nimport Promise from 'bluebird'\nimport { deBounceIdentical as identical } from '../utils/harth-identical'\nimport scrollableTable from '../components/scrollableTable'\nimport Permissions from '../models/permissions'\nimport Pencil from '../components/pencil'\nimport autocomplete from './autocomplete'\nimport byProp from '../utils/byProp'\nimport css from 'bss'\nimport Responsive from '../components/responsive'\nimport HarthUppy from '../components/harth-uppy'\nimport * as uuid from 'uuid'\nimport { prop } from '../../../stream'\n/*\n\tModel, View, Intent\n\n\tModel: Any data storage. Both the current state of the user interface, and\n\t\tdata that will be persisted to a database layer.\n\t\tIt also includes any functions for selecting or manipulating that data.\n\n\tIntent: Any functions that represent the user performing an action. These functions represent\n\t\twhat the user wants to do. Whether it be creating a new invite, logging in.\n\t\tThat's all representing the users intent.\n\n\tView: The view is a representation of the Model and provides affordances for the user\n\t\tto express their intent. These affordances are input elements such as\n\t\tdropdowns, text inputs, checkboxes etc...\n\n\tController: The Controller binds the Model, View and Intent together. It do some\n\t\tsetup code and faciliate communication between the three other layers.\n\n*/\n\n/*\n\tIntent: Functions that help the user do what they want to do...\n*/\nfunction Intent(model, activeTab){\n\n\n\tconst deleteTool = function(makeAPICalls){\n\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tmodel.deleteTools()\n\t\t\t\t\t.filter((t) => t )\n\t\t\t\t\t.map((t) => model.api.tools.remove(t) )\n\t\t\t)\n\t\t\t: model.checkMultiple().map((tO) => {\n\t\t\t\tmodel.deleteTools().push(tO.tools_id())\n\t\t\t\tmodel.toolDetail({})\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t&& model.form(\n\t\t\t\tR.differenceWith(\n\t\t\t\t\t(a, b) => a.tools_id() == b.tools_id()\n\t\t\t\t\t&& a.tools_name() == b.tools_name()\n\t\t\t\t\t,model.form()\n\t\t\t\t\t,model.checkMultiple()\n\t\t\t\t)\n\t\t\t)\n\t\t\t&& model.vm({})\n\t\t\t&& model.checkMultiple([])\n\t\t\t&& model.masterLIST(true)\n\t}\n\n\n function sendTools(){\n\t\tmodel.data.currentRoute('Nothing')\n\t\treturn deleteTool(true)\n\t\t.then(function(){\n\t\t\tmodel.deleteTools([])\n\t\t\treturn model.api.tools.patch.many(model.form().filter(R.prop('created')))\n .then(function(){\n return fetchTools()\n .then(function(){\n\t\t\t\t\tactiveTab('Summary')\n\t\t\t\t\tmodel.checkMultiple([])\n\t\t\t\t\tmodel.vm({})\n\t\t\t\t\treturn true\n })\n })\n\t\t})\n }\n\n function fetchTools(){\n\t\treturn model.data.fetchTools({})\n .then((list) => {\n\t\t\t\tconst ttindex = {}\n\n model.tools([])\n\t\t\t\tmodel.form([])\n\t\t\t\tmodel.deleteTools([])\n\t\t\t\tmodel.tools(list)\n\t\t\t\tmodel.tools().forEach((t) => {\n\t\t\t\t\tmodel.vm(t)\n\t\t\t\t\tmodel.form().push(model.cloningTool(false))\n\t\t\t\t\tif( !ttindex[t.tools_type()] && t.tools_type() ){\n\t\t\t\t\t\tmodel.toolTypeOptions().push({type: t.tools_type()})\n\t\t\t\t\t\tttindex[t.tools_type()]\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tmodel.masterLIST(true)\n\t\t\t\tmodel.vm({})\n\t\t\t\tmodel.loading(false)\n\t\t\t\t// model.data.routeids(model.tools().map(R.prop('contractrecognitionid')))\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.then( fetchWorkList )\n\t\t\t.then(function(){\n\t\t\t\tmodel.loadingMeta(false)\n\t\t\t\tmodel.data.currentRoute('tools')\n\t\t\t\treturn true\n\t\t\t})\n }\n\n function fetchWorkList(){\n\t\tmodel.loadingMeta(true)\n return Promise.all(\n\t\t\tR.uniqBy(\n\t\t\t\tbyProp('crew_id')\n\t\t\t\t,model.tools()\n\t\t\t)\n\t\t\t.filter((a) => a.crew_id() )\n\t\t\t.map((a) =>\n\t\t\t\tmodel.data.api.contractors.fetch.workList({\n\t\t\t\t\tcontractor_id: a.contractor_id\n\t\t\t\t\t,crew_id: a.crew_id\n\t\t\t\t\t,schedule_id: model.data.schedule_id()\n\t\t\t\t\t,schedule_version_id: model.data.schedule_version_id()\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\t\t\t.then(\n\t\t\t\tR.pipe(\n\t\t\t\t\tR.unnest\n\t\t\t\t\t,R.map((a) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tcrew_id: a.crew_id\n\t\t\t\t\t\t\t,contractor_id: a.contractor_id\n\t\t\t\t\t\t\t,totalcount: Number(a.totalcount)\n\t\t\t\t\t\t\t,workList: a.workingarray\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t,R.indexBy( R.prop('crew_id') )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then(model.workList)\n\t\t\t// .then( () => model.loadingMeta(false) )\n\t\t\t// .then( m.redraw )\n }\n\n\tfunction fetchResource(){\n\t\treturn model.data.fetchResource({\n\t\t\tdepth: 2\n\t\t\t, props: {\n\t\t\t\tresources: [\n\t\t\t\t\t'contractor_id'\n\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t,'user_id'\n\t\t\t\t]\n\t\t\t\t,teams: [\n\t\t\t\t\t'crew_id'\n\t\t\t\t\t,'crew_name'\n\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t,'user_id'\n\t\t\t\t]\n\t\t\t}\n\t\t})\n\t\t.then(function(res){\n\t\t\tmodel.resources(res)\n\t\t\tmodel.userResCrew([\n\t\t\t\t{\n\t\t\t\t\tcrew_id: m.prop(null)\n\t\t\t\t\t,teamresourcename: 'Unassigned'\n\t\t\t\t}\n\t\t\t])\n\t\t\tres.forEach((r) => {\n\t\t\t\tmodel.userResCrew(\n\t\t\t\t\tmodel.userResCrew().concat(r.crews)\n\t\t\t\t)\n\t\t\t})\n\t\t\treturn true\n\t\t})\n\t\t.then(m.redraw)\n\t}\n\n\n function editAllButton(){\n\t\tconst refContainter = model.checkMultiple\n\t\tconst errorFunction = R.F\n\t\tconst originalArray = model.form()\n\n const activated =\n\t\t\toriginalArray.length == refContainter().length\n\t\t\t&& originalArray.length\n\t\t\t|| model.filteredToolOptions().length == refContainter().length\n\t\t\t&& model.filteredToolOptions().length\n\n\t\treturn elements.checkbox({\n\t\t\tonchange: () => {\n\t\t\t\tif( activated ){\n\t\t\t\t\trefContainter([])\n\t\t\t\t\tmodel.vm({})\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trefContainter([])\n\t\t\t\t\tmodel.vm({})\n\t\t\t\t\trefContainter(\n\t\t\t\t\t\tmodel.filteredToolOptions().length\n\t\t\t\t\t\t\t? model.filteredToolOptions()\n\t\t\t\t\t\t\t: model.form()\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\t,title: \"Set particular options for all Disciplines\"\n\t\t\t,disabled: errorFunction(true) || originalArray.length == 0\n\t\t})\n }\n\n function getActivateDeleteButton(tool, returnTRUE){\n const name = model.vm().tools_name\n\t\t// const id = model.vm().tools_id\n\n\t\tconst activated =\n\t\t\tmodel.checkMultiple()\n\t\t\t.findIndex( (chr) =>\n\t\t\t\tchr.tools_name() == tool.tools_name()\n\t\t\t\t&& chr.tools_id() == tool.tools_id()\n\t\t\t)\n\n return returnTRUE\n\t\t\t? activated && name\n\t\t\t: {\n\t\t\t\tonclick: (e) => {\n\t\t\t\t\tif(!e.currentTarget.checked){\n\t\t\t\t\t\tmodel.checkMultiple().splice(activated, 1)\n\t\t\t\t\t\tif (model.checkMultiple().length >= 1 ){\n\t\t\t\t\t\t\tmodel.vm(model.checkMultiple()[0])\n\t\t\t\t\t\t} else if (model.checkMultiple().length <= 0){\n\t\t\t\t\t\t\tmodel.vm({})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tmodel.vm(tool)\n\t\t\t\t\t\tmodel.checkMultiple().push(tool)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,type: 'checkbox'\n\t\t\t\t,disabled:\n\t\t\t\t\t!tool.tools_name()\n\t\t\t\t\t|| !model.editToolPermissions()\n\t\t\t\t,checked: activated > -1\n\t\t\t}\n\t}\n\n\tmodel.loading(true)\n\tmodel.data.currentRoute('Nothing')\n\tmodel.data.initiateContractFetch\n\t.map(function(i){\n\t\t// const s = i.schedule_id\n\t\tconst schange = i.schange\n\t\tconst ochange = i.ochange || !model.data.routeInitialized()['tools']\n\t\treturn !ochange && !model.loading()\n\t\t\t? schange\n\t\t\t\t? fetchWorkList()\n\t\t\t\t: Promise.resolve([])\n\t\t\t: fetchTools().then(function(){\n\t\t\t\tmodel.data.currentRoute('tools')\n\t\t\t\tfetchResource()\n\t\t\t\ti.schange = false\n\t\t\t\ti.ochange = false\n\t\t\t\treturn true\n\t\t\t})\n\t})\n\n\n\treturn {\n\t\t sendTools\n\t\t, fetchTools\n\t\t, deleteTool\n\t\t, getActivateDeleteButton\n\t\t, fetchResource\n\t\t, fetchWorkList\n\t\t, editAllButton\n\t}\n}\n\n/*\n\tModel: Data storage and functions that interact with that data.\n\n\tThe vm represents the view model, any thing to do with the state of the UI\n\tthat doesn't map to a database record is stored on the view model.\n\n\tIt could be whether or not a button is disabled due to a background process.\n\tOr it could be storing how many items are selected in order to render a tally.\n\n*/\nfunction Model(data){\n\tconst loading = m.prop(true)\n\tconst loadingMeta = m.prop(true)\n\tconst tools = data.scoped([])\n\tconst resources = m.prop([])\n\tconst deleteTools = m.prop([])\n\tconst workList = data.scoped({})\n\tconst filteredToolOptions = data.scoped([])\n\tconst toolDetail = data.scoped({})\n\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Resource'\n\t\t\t\t\t,'Contract'\n\t\t\t\t\t,'Invoice'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\n\t// const forceRedraw =\n\t\tprop.merge([\n\t\t\tdata.calculated\n\t\t\t,tools\n\t\t])\n\t\t.map(function(){\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tsetTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t\treturn null\n\t\t})\n\n\tconst editToolPermissions = m.prop(false)\n\tconst editAssignedToolPermissions = m.prop(false)\n\n\tconst form = m.prop([])\n\tconst pending = m.prop(false)\n\tconst vm = m.prop({})\n\n\tfunction SaveDisabled(returnBoolean){\n\t\tconst count =\n\t\t\tR.countBy(\n\t\t\t\tchr => chr.tools_name()\n\t\t\t\t,form()\n\t\t\t)\n\t\tconst errorArray = [\n\t\t\t(d, prop='tools_name') => !d[prop]() ? `Tool/Machinery Name must not be empty ` : null\n\t\t\t,(d, prop='tools_name') =>\tcount[d[prop]()] > 1 ? `Tool/Machinery Names must not be duplicated, check ` + d[prop]() : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t,form()\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t)\n\t}\n\n\tconst cloningTool = function(clonemarker){\n\t\tconst clone = resetForm().tool\n\t\tclone.teamresourcename = clonemarker == false ? vm().teamresourcename : null\n\t\tclone.contractrecognitionid = clonemarker == false ? vm().contractrecognitionid : null\n\t\tclone.tools_id( clonemarker == false ? vm().tools_id() : uuid.v4() )\n\t\tclone.crew_id( clonemarker == false ? vm().crew_id() : null)\n\t\tclone.organization_id( vm().organization_id() )\n\t\tclone.tools_description( vm().tools_description() )\n\t\tclone.tools_name( clonemarker == false ? vm().tools_name() : vm().tools_name() + \" (Clone)\" )\n\t\tclone.tools_condition( vm().tools_condition() )\n\t\tclone.tools_location( vm().tools_location() )\n\t\tclone.tools_ownership( vm().tools_ownership() )\n\t\tclone.tools_type( vm().tools_type() )\n\t\tclone.newTool = clonemarker\n\t\tclone.assigneduser = vm().assigneduser\n\n\t\tif (clonemarker){\n\t\t\tcheckMultiple().splice(\n\t\t\t\tcheckMultiple()\n\t\t\t\t.findIndex( (chr) =>\n\t\t\t\t\tchr.tools_name() == vm().tools_name()\n\t\t\t\t\t&& chr.tools_id() == vm().tools_id()\n\t\t\t\t)\n\t\t\t\t, 1\n\t\t\t)\n\t\t\tcheckMultiple().push(clone)\n\t\t}\n\t\tvm(clone)\n\t\treturn clone\n\t}\n\n\tconst resetForm = function(){\n\t\treturn {\n\t\t\ttool: {\n\t\t tools_id: m.prop(uuid.v4())\n\t\t ,crew_id: m.prop(null)\n\t\t\t\t,teamresourcename: 'Unassigned'\n\t\t\t\t,tools_name: m.prop(null)\n\t\t\t\t,tools_condition: m.prop(null)\n\t\t\t\t,tools_location: m.prop(null)\n\t\t ,tools_description: m.prop(null)\n\t\t ,organization_id: m.prop()\n\t\t ,tools_ownership: m.prop(null)\n\t\t\t\t,tools_type: m.prop('')\n\t\t\t\t,created: false\n\t\t\t\t,newTool: true\n\t\t\t}\n\t\t}\n\t}\n\n\tconst userResCrew = data.scoped([])\n\tconst edit = m.prop(false)\n\tconst viewtype = ListTools\n\tconst permissions = data.permissions\n\n\tpermissions.map(function(p){\n\t\teditToolPermissions(Permissions.hasWrite(p, 'tool_management'))\n\t\teditAssignedToolPermissions(Permissions.hasWrite(p, 'assigned_tools'))\n\t\tm.redraw()\n\t\treturn null\n\t})\n\n\tconst filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'tools_'}\n\t\t\t,{ugly_name: 'teamresourcename', better_name: 'Tools Team Name'}\n\t\t]\n\t\t,uniqueArrays: []\n\t\t,template: {\n\t\t\ttools_name: \"\"\n\t\t\t,tools_description: \"\"\n\t\t\t,tools_ownership: \"\"\n\t\t\t,tools_condition: \"\"\n\t\t\t,tools_location: \"\"\n\t\t\t,teamresourcename: \"\"\n\t\t\t,tools_type: \"\"\n\t\t}\n\t}\n\n\tlet getfilters = function(button, marker){\n\t\tlet datainput = filterFunction.ToolsFilters\n\t\tif ( !datainput ){\n\t\t\tfilterFunction.ToolsFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template\n\t\t\t\t,disabled: () => tools().length == 0\n\t\t\t}\n\t\t\tdatainput = filterFunction.ToolsFilters\n\t\t}\n\t\tconst gotfilters =\n\t\t\t!datainput\n\t\t\t\t? null\n\t\t\t\t: datainput.operationalFilters(\n\t\t\t\t\tfilterView(\n\t\t\t\t\t\tdatainput.template\n\t\t\t\t\t\t, datainput.filters()\n\t\t\t\t\t\t, datainput.changeNames\n\t\t\t\t\t\t, datainput.uniqueArrays\n\t\t\t\t\t\t, datainput.disabled\n\t\t\t\t\t\t, marker\n\t\t\t\t\t\t, data.scoped\n\t\t\t\t\t)\n\t\t\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters.generatedElements\n\t}\n\n\tgetfilters(null, \"Tool\")\n\n\tconst setOptions = function(value, prop){\n\n\n\t\tvar nullIdEdit =\n\t\t\t'user_id' == prop\n\t\t\t|| 'crew_id' == prop\n\n\t\tconst dtype = typeof checkMultiple()[0][prop] == 'function'\n\t\tvalue || value == false || value == '' || nullIdEdit\n\t\t\t? checkMultiple().forEach((d) => {\n\t\t\t\td.created = true\n\t\t\t\tdtype\n\t\t\t\t\t? d[prop](value)\n\t\t\t\t\t: d[prop] = value\n\t\t\t})\n\t\t\t: null\n\n\t\tidentical(tools(), form(), [], false, data.toolsIdentical)\n\n\t\treturn dtype\n\t\t\t? checkMultiple()[0][prop]()\n\t\t\t: checkMultiple()[0][prop]\n\t}\n\n\tconst underlinedHeader =\n\t\ta => m('h4.pt3.bw1.bb.pb2.b--black-20', a)\n\n\tconst checkMultiple = data.scoped([])\n\tconst toolTypeOptions = data.scoped([])\n\n\tfunction uploadmetadata({only}){\n\t\treturn R.pickBy(\n\t\t\t(a, k) => a && (!only || !Object.keys(only).length || (only && only[k]) || k == 'user_id' || k == 'organization_id')\n\t\t\t,{\n\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t, tools_id: R.last(checkMultiple() || {}).tools_id()\n\t\t\t}\n\t\t)\n\t}\n\n\tconst detailPaneInputs = function(ctrl){\n\t\tfunction toolView(){\n\t\t\treturn [\n\n\t\t\t\telements.list([\n\t\t\t\t\tunderlinedHeader('Tool Details - ')\n\t\t\t\t\t,m('button.btn.btn-secondary'\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t!!ctrl.model.SaveDisabled(true)\n\t\t\t\t\t\t\t\t|| ctrl.model.checkMultiple().length > 1\n\t\t\t\t\t\t\t\t|| !ctrl.model.vm().tools_name\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tconst newT = ctrl.model.cloningTool(true)\n\t\t\t\t\t\t\t\tnewT.created = true\n\t\t\t\t\t\t\t\tctrl.model.form().unshift(newT)\n\t\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\t\tctrl.model.vm(newT)\n\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t\t\t, height: '2.5em'\n\t\t\t\t\t\t\t\t, width: '5em'\n\t\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,title:\n\t\t\t\t\t\t\t\t`Copy the details of this tool to create a new tool with identical specifications`\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Clone'\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,checkMultiple().length == 1\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', 'General name of this Tool')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultiple()[0].tools_type()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tautocomplete.all(\n\t\t\t\t\t\t\t\ttoolTypeOptions\n\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\tconst ReturnedAutocompleteObj =\n\t\t\t\t\t\t\t\t\t\ttoolTypeOptions()\n\t\t\t\t\t\t\t\t\t\t.find((pc) =>\n\t\t\t\t\t\t\t\t\t\t\tpc['type']\n\t\t\t\t\t\t\t\t\t\t\t== v\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tv || v == ''\n\t\t\t\t\t\t\t\t\t\t? setOptions(\n\t\t\t\t\t\t\t\t\t\t\tReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj['type']\n\t\t\t\t\t\t\t\t\t\t\t\t: R.trim(v.toUpperCase())\n\t\t\t\t\t\t\t\t\t\t\t, 'tools_type'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\treturn ReturnedAutocompleteObj\n\t\t\t\t\t\t\t\t\t\t? ReturnedAutocompleteObj['type']\n\t\t\t\t\t\t\t\t\t\t: checkMultiple()[0].tools_type()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'type'\n\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\ttitle: `Select the general name from existing entries`\n\t\t\t\t\t\t\t\t\t,placeholder: 'Something like, Hammer'\n\t\t\t\t\t\t\t\t\t,key: checkMultiple()[0].key\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t: ''\n\n\t\t\t\t,checkMultiple().length > 1\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Tool Name - Designation')\n\t\t\t\t\t\t,ctrl.model.checkMultiple()\n\t\t\t\t\t\t\t.map( s =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t'p.pv1.ma0'\n\t\t\t\t\t\t\t\t\t, s['tools_type']()\n\t\t\t\t\t\t\t\t\t+' '\n\t\t\t\t\t\t\t\t\t+ s['tools_name']()\n\t\t\t\t\t\t\t\t\t+ ' Assigned to '\n\t\t\t\t\t\t\t\t\t+ \t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.userResCrew().find((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\tc.crew_id() == s.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t) || { teamresourcename:'Busy'}\n\t\t\t\t\t\t\t\t\t\t).teamresourcename\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Tool Name ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple()[0].tools_name()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t(value) => setOptions(value, 'tools_name')\n\t\t\t\t\t\t\t\t\t,{}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Tool Description ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultiple()[0].tools_description()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'tools_description')\n\t\t\t\t\t\t\t\t,{}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Ownership ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultiple()[0].tools_ownership()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'tools_ownership')\n\t\t\t\t\t\t\t\t,{}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Condition ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultiple()[0].tools_condition()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'tools_condition')\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tplaceholder: \"New\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Location ')\n\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t() => checkMultiple()[0].tools_location()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(value) => setOptions(value, 'tools_location')\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tplaceholder: \"WAREHOUSE A - ROW 1A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\n\t\t\t\t, !ctrl.model.data.readResourcePermissions()\n\t\t\t\t&& !editAssignedToolPermissions()\n\t\t\t\t\t? 'Requires Resource Permissions to Assign'\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label', 'Assigned ')\n\t\t\t\t\t\t,Pencil(\n\t\t\t\t\t\t\t() => checkMultiple().length == 1\n\t\t\t\t\t\t\t\t|| checkMultiple().every((a) =>\n\t\t\t\t\t\t\t\t\ta.teamresourcename\n\t\t\t\t\t\t\t\t\t== checkMultiple()[0].teamresourcename\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t? checkMultiple()[0].teamresourcename\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tctrl.model.userResCrew\n\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.crew_id(), 'crew_id')\n\t\t\t\t\t\t\t\t\t\tsetOptions(v.teamresourcename, 'teamresourcename')\n\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.getLocation(checkMultiple(), SaveDisabled)\n\n\t\t\t\t\t\t\t\t\t\treturn checkMultiple()[0].teamresourcename\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'teamresourcename'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\ttitle: 'Assign a tool'\n\t\t\t\t\t\t\t\t\t\t,disabled: !ctrl.model.userResCrew().length\n\t\t\t\t\t\t\t\t\t\t\t|| \t\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.editToolPermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t&& !ctrl.model.editAssignedToolPermissions()\n\n\t\t\t\t\t\t\t\t\t\t\t|| \t\t\t\t\t\t\t\t\t\t\t\t!ctrl.model.editToolPermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.editAssignedToolPermissions()\n\t\t\t\t\t\t\t\t\t\t\t\t&& checkMultiple().some((t) => t.crew_id())\n\t\t\t\t\t\t\t\t\t\t\t\t&& checkMultiple().some((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.userResCrew().find((chr) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchr.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== t.crew_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t).user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t!= ctrl.model.data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Expenditure ')\n\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\tcheckMultiple().map((t) =>\n\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[t.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[t.contractrecognitionid].currentProfits\n\t\t\t\t\t\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[t.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Forecasted Expenditure ')\n\t\t\t\t\t,!ctrl.model.data.calculated()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: makeMoney(\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\tcheckMultiple().map((t) =>\n\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[t.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t? ctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t\t\t\t\t[t.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t\t.forecastedProfits\n\t\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields: () => uploadmetadata({})\n\t\t\t\t\t, data\n\t\t\t\t\t, listOnly: checkMultiple().length > 1\n\t\t\t\t})\n\n\t\t\t\t, m('br')\n\t\t\t]\n\t\t}\n\n\t\treturn [\n\t\t\tcheckMultiple().length\n\t\t\t\t? [\n\t\t\t\t\telements.list(\n\t\t\t\t\t\t [\n\t\t\t\t\t\t\tctrl.model.SaveDisabled(true)\n\t\t\t\t\t\t\t|| ctrl.model.data.toolsIdentical()\n\t\t\t\t\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t\t\t\t\t: elements.action(\n\t\t\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t\t\t, ctrl.intent.sendTools\n\t\t\t\t\t\t\t\t\t, ctrl.model.pending\n\t\t\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t\t\t, R.F\n\t\t\t\t\t\t\t\t\t, ''\n\t\t\t\t\t\t\t\t\t,{style: {\n\t\t\t\t\t\t\t\t\t\topacity:\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.editToolPermissions() ? 1 : 0\n\t\t\t\t\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\telements.undoDiscard({\n\t\t\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t\t\t!ctrl.model.vm().newTool\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tonclick: () => ctrl.intent.deleteTool()\n\t\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm().tools_name == null\n\t\t\t\t\t\t\t\t\t\t\t\t&& ctrl.model.checkMultiple().length == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? R.always(true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.pending()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\t\tctrl.model.data.toolsIdentical()\n\t\t\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.form([])\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.checkMultiple([])\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.tools().forEach((t) => {\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm(t)\n\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.form().push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.cloningTool(false)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\t\t\t\t\t\tctrl.intent.sendTools()\n\t\t\t\t\t\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,title: `Discard all changes made to these tools since last saving them`\n\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\topacity: ctrl.model.editToolPermissions() ? 1 : 0\n\t\t\t\t\t\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,ctrl.model.SaveDisabled()\n\t\t\t\t\t,toolView()\n\t\t\t\t]\n\t\t\t\t: null\n\t\t]\n\t}\n\n\tconst detailsPaneOpen = () => checkMultiple().length >= 1\n\n\tconst CONSTANTtools = m.prop([])\n\tconst masterLIST = function(mcreate){\n\t\tif (mcreate){\n\t\t\tCONSTANTtools(\n\t\t\t\tR.sortBy(\n\t\t\t\t\tR.prop('tools_name')\n\t\t\t\t\t,[].concat(\n\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\tR.partition(\n\t\t\t\t\t\t\t\t(c) => c.created,\n\t\t\t\t\t\t\t\tform()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\n\t\t\tidentical(tools(), form(), [], false, data.toolsIdentical)\n\t\t}\n\t\treturn ListProcessing(\n\t\t\tCONSTANTtools()\n\t\t\t,filterFunction.ToolsFilters.filters()\n\t\t\t,null\n\t\t\t,filteredToolOptions\n\t\t)\n\t}\n\n\tconst createNewTool =\n\t\t() => {\n\t\t\tcheckMultiple([])\n\t\t\tlet newT = resetForm().tool\n\t\t\tnewT.created = true\n\t\t\tcheckMultiple().push(newT)\n\t\t\tform().unshift(newT)\n\t\t\tmasterLIST(true)\n\t\t\tvm(newT)\n\t\t\tm.redraw()\n\t\t}\n\n\tconst discardChangesButton =\n\t\t(ctrl) =>\n\t\t\tctrl.model.data.toolsIdentical()\n\t\t\t? m(\"button.btn\"\n\t\t\t\t,{\n\t\t\t\t\tdisabled: true\n\t\t\t\t\t,onclick: () => {}\n\t\t\t\t\t,title: `Discard all changes made to these tools since last saving them`\n\t\t\t\t\t,style: {\n\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, 'Discard Changes'\n\t\t\t)\n\t\t\t: m(\"button.btn.btn-warning\"\n\t\t\t\t,{\n\t\t\t\t\tdisabled: false\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tctrl.model.form([])\n\t\t\t\t\t\tctrl.model.checkMultiple([])\n\t\t\t\t\t\tctrl.model.tools().forEach((t) => {\n\t\t\t\t\t\t\tctrl.model.vm(t)\n\t\t\t\t\t\t\tctrl.model.form().push(\n\t\t\t\t\t\t\t\tctrl.model.cloningTool(false)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t\t\tctrl.model.vm({})\n\t\t\t\t\t\tctrl.intent.sendTools()\n\t\t\t\t\t\tctrl.model.masterLIST(true)\n\t\t\t\t\t}\n\t\t\t\t\t,title: `Discard all changes made to these tools since last saving them`\n\t\t\t\t\t,style: {\n\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, 'Discard Changes'\n\t\t\t)\n\n\treturn {\n\t\ttools\n\t\t, form\n\t\t, data\n\t\t, vm\n\t\t, cloningTool\n\t\t, edit\n\t\t, resources\n\t\t, resetForm\n\t\t, SaveDisabled\n\t\t, viewtype\n\t\t, request: data.request\n\t\t, editToolPermissions\n\t\t, permissions\n\t\t, filterFunction\n\t\t, getfilters\n\t\t, editAssignedToolPermissions\n\t\t, loading\n\t\t, masterLIST\n\t\t, userResCrew\n\t\t, deleteTools\n\t\t, api: data.api\n\t\t, missingPermissions\n\t\t, workList\n\t\t, detailsPaneOpen\n\t\t, detailPaneInputs\n\t\t, checkMultiple\n\t\t, pending\n\t\t, toolDetail\n\t\t, loadingMeta\n\t\t, filteredToolOptions\n\t\t, createNewTool\n\t\t, discardChangesButton\n\t\t, toolTypeOptions\n\t}\n}\n\n/*\n\tThe controller is the glue that sticks the model and intent together.\n\tIt exposes the model and intent to the view by returning them.\n\n\tThe controller \"controls\" how each layer interacts.\n*/\n\nfunction Main({ attrs: { data} }){\n\n\tlet model = Model(data)\n\tlet activeTab = m.prop('Summary')\n\tlet intent = Intent(model, activeTab)\n\n\treturn {\n\t\tview(){\n\t\t\treturn view({ model, intent, activeTab })\n\t\t}\n\t}\n}\n\n/*\n\tThe view provides the user ways to transfer their intent into really action within the system.\n\tThe view accesses data from the model layer, and binds intent functions to user inputs.\n*/\n\nconst view = function(ctrl){\n\treturn m('div'\n\t\t,ctrl.model.viewtype(ctrl)\n\t\t,DetailsPane(\n\t\t\tctrl.model.detailsPaneOpen\n\t\t\t,ctrl.model.checkMultiple().length > 1\n\t\t\t\t? 'Edit Multiple Tools'\n\t\t\t\t: ctrl.model.vm().tools_name\n\t\t\t\t\t? ctrl.model.vm().tools_name()\n\t\t\t\t\t: ''\n\t\t\t,() => ctrl.model.detailPaneInputs(ctrl)\n\t\t)\n\t)\n}\n\n\nconst ListTools = function(ctrl){\n\n\tconst tooldata =\n\t\t(tool) => ({\n\t\t\t'Tool Name': tool.tools_name()\n\t\t\t,'Description': tool.tools_description()\n\t\t\t,'Ownership': tool.tools_ownership()\n\t\t\t,'Condition': tool.tools_condition()\n\t\t\t,'Location': tool.tools_location()\n\t\t\t,'Assigned':\n\t\t\t\t!ctrl.model.data.readResourcePermissions()\n\t\t\t\t&& !ctrl.model.editAssignedToolPermissions()\n\t\t\t\t? 'Requires Resource Permissions or Tool Assignment Permissions'\n\t\t\t\t: !tool.crew_id()\n\t\t\t\t? 'Unassigned'\n\t\t\t\t: ctrl.model.loadingMeta()\n\t\t\t\t? ' ... '\n\t\t\t\t:(\n\t\t\t\t\tctrl.model.userResCrew().find((c) =>\n\t\t\t\t\t\tc.crew_id() == tool.crew_id()\n\t\t\t\t\t) || { teamresourcename: 'Busy'}\n\t\t\t\t).teamresourcename\n\t\t\t,'Expenditure': !ctrl.model.data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: makeMoney(\n\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[tool.contractrecognitionid]\n\t\t\t\t\t? \t\t\t\t\t\t\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()[tool.contractrecognitionid].currentProfits\n\t\t\t\t\t\t+ ctrl.model.data.coalatedSelectedVersion()[tool.contractrecognitionid].outstandingProfits\n\n\t\t\t\t\t: 0\n\t\t\t\t)\n\t\t\t,'Forecasted Expenditure': !ctrl.model.data.calculated()\n\t\t\t\t? ' ... '\n\t\t\t\t: makeMoney(\n\t\t\t\t\t(\n\t\t\t\t\t\tctrl.model.data.coalatedSelectedVersion()\n\t\t\t\t\t\t\t[tool.contractrecognitionid]\n\t\t\t\t\t\t|| {}\n\t\t\t\t\t)\n\t\t\t\t\t.forecastedProfits\n\t\t\t\t)\n\t\t\t,' ': !ctrl.model.data.readProjectPermissions()\n\t\t\t\t? \"Requires Project Permissions\"\n\t\t\t\t: !tool.crew_id()\n\t\t\t\t\t? 'Assign this tool to a team to track its current works'\n\t\t\t\t\t: ctrl.model.loadingMeta()\n\t\t\t\t\t\t? ' ... '\n\t\t\t\t\t\t: ctrl.model.workList()[tool.crew_id()]\n\t\t\t\t\t\t&& !ctrl.model.workList()[tool.crew_id()].workList.length\n\t\t\t\t\t\t&& ctrl.model.workList()[tool.crew_id()].totalcount\n\t\t\t\t\t\t\t? 'Busy'\n\t\t\t\t\t\t\t: ctrl.model.workList()[tool.crew_id()]\n\t\t\t\t\t\t\t? m(\"button.btn.\"\n\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\tctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t\t\t? '.btn-warning'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\n\t\t\t\t\t\t\t\t\t\tctrl.model.toolDetail()[tool.crew_id()]\n\n\t\t\t\t\t\t\t\t\t\t\t? delete ctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t\t\t\t: ctrl.model.toolDetail(\n\t\t\t\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\tctrl.model.toolDetail()\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[tool.crew_id()]: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprojectList:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.unnest\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.uniqBy(R.prop('discipline_id'))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.groupBy(R.prop('project_id'))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.map((p) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tproject: p[0].project_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disciplines: p\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.toPairs\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.map(R.last)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[tool.crew_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map((c) => ctrl.model.workList()[c].workList)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\ttransition: `0.2s;`\n\t\t\t\t\t\t\t\t\t\t,opacity: `1;`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: ctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t\t\t? \"Hide the next organized work for this tool\"\n\t\t\t\t\t\t\t\t\t\t: \"Show the next organized work for this tool\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,ctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t\t? \"Hide Forecast\"\n\t\t\t\t\t\t\t\t\t: \"Show Forecast\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: 'No Work Allocated'\n\t\t})\n\n\tconst largeToolsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tctrl.model.masterLIST()\n\t\t\t\t.map((tool, tindex) => ({\n\t\t\t\t\tkey: tool.key\n\t\t\t\t\t,selection: ctrl.intent.getActivateDeleteButton(tool)\n\t\t\t\t\t,header:\n\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tonclick: ctrl.model.createNewTool\n\t\t\t\t\t\t\t\t\t\t,disabled: !!ctrl.model.SaveDisabled(true)\n\t\t\t\t\t\t\t\t\t\t,title: \"Create tools to track against teams and project locations\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Create a New Tool'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, tindex == 0 && false\n\t\t\t\t\t\t\t? ctrl.model.discardChangesButton(ctrl)\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 1.15fr 0.75fr 0.65fr 0.65fr 0.65fr 0.9fr 0.9fr 1.15fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('hr')\n\t\t\t\t\t\t\t\t,ctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\t\tproject: 'Project'\n\t\t\t\t\t\t\t\t\t,disciplines:'Disciplines'\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t.concat(ctrl.model.toolDetail()[tool.crew_id()].projectList)\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.36fr 0.64fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['project', 'disciplines']\n\t\t\t\t\t\t\t\t\t\t.map((h) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-top: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,k['project'] == 'Project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m('label.control-label.f4', k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: !h\n\t\t\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t\t\t: h == 'project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m(`li.pa0`, k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: k[h].map((d) => d.discipline_name + ' - ' + d.discipline_description).join(', ')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: tooldata(tool)\n\t\t\t\t}))\n\t\t})\n\n\tconst smallToolsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: ctrl.model.data.scoped\n\t\t\t,resize$: ctrl.model.data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tctrl.model.masterLIST()\n\t\t\t\t.map((tool, tindex) => ({\n\t\t\t\t\tkey: tool.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,ctrl.intent.getActivateDeleteButton(tool)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick: ctrl.model.createNewTool\n\t\t\t\t\t\t\t\t\t,disabled: !!ctrl.model.SaveDisabled(true)\n\t\t\t\t\t\t\t\t\t,title: \"Create tools to track against teams and project locations\"\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Create a New Tool '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, tindex == 0 && false\n\t\t\t\t\t\t\t? ctrl.model.discardChangesButton(ctrl)\n\t\t\t\t\t\t\t: m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Tool Name', 'Description']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == tool.tools_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], tool.tools_name()].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Ownership', 'Condition', 'Location', 'Assigned']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Expenditure', 'Forecasted Expenditure']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[' ']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,ctrl.model.toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\t\tproject: 'Project'\n\t\t\t\t\t\t\t\t\t,disciplines:'Disciplines'\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t.concat(ctrl.model.toolDetail()[tool.crew_id()].projectList)\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.3fr 0.7fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['project', 'disciplines']\n\t\t\t\t\t\t\t\t\t\t.map((h) =>\n\t\t\t\t\t\t\t\t\t\t\tk['project'] == 'Project'\n\t\t\t\t\t\t\t\t\t\t\t? m('label.control-label.f4', k[h])\n\t\t\t\t\t\t\t\t\t\t\t: h == 'project'\n\t\t\t\t\t\t\t\t\t\t\t? m(`li.pa0`, k[h])\n\t\t\t\t\t\t\t\t\t\t\t: k[h].map((d) => d.discipline_name + ' - ' + d.discipline_description).join(', ')\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t\t,data: tooldata(tool)\n\t\t\t\t}))\n\t\t})\n\n\n\tconst toolsTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeToolsTable )\n\t\t\t\t,desktopOnly( largeToolsTable )\n\t\t\t\t,mobileOnly( smallToolsTable )\n\t\t\t\t,tabletOnly( smallToolsTable )\n\t\t\t]\n\t\t)\n\n\n\treturn m('div.harth.mb6',[\n\n\n\t\telements.list([\n\t\t\tctrl.model.getfilters(null, \"Tool\")\n\t\t\t,ctrl.intent.editAllButton()\n\t\t])\n\n\t\t,elements.list([\n\t\t\tctrl.model.SaveDisabled(true)\n\t\t\t|| ctrl.model.data.toolsIdentical()\n\t\t\t\t? m('button.btn'\n\t\t\t\t\t, {\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\theight: '2.5em'\n\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, 'Save'\n\t\t\t\t)\n\t\t\t\t: elements.action(\n\t\t\t\t\t'Save'\n\t\t\t\t\t, ctrl.intent.sendTools\n\t\t\t\t\t, ctrl.model.pending\n\t\t\t\t\t, 'primary'\n\t\t\t\t\t, R.F\n\t\t\t\t\t, ''\n\t\t\t\t\t,{style: {\n\t\t\t\t\t\topacity:\n\t\t\t\t\t\t\tctrl.model.editToolPermissions() ? 1 : 0\n\t\t\t\t\t\t,height: '2.5em'\n\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t,transition: '0.5s'\n\t\t\t\t\t}}\n\t\t\t\t)\n\t\t\t,ctrl.model.discardChangesButton(ctrl)\n\t\t])\n\n\t\t,ctrl.model.masterLIST().length\n\t\t\t? m('div'\n\t\t\t\t, { style:\n\t\t\t\t\t{ transition: 'opacity 1s'\n\t\t\t\t\t, opacity: ctrl.model.loading() ? 0 : 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, ctrl.model.loading() ? null : toolsTable()\n\t\t\t)\n\t\t\t: ctrl.model.loading()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: m('div'\n\t\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\theight: 15vh;\n\t\t\t\talign-content: center;\n\t\t\t\t`\n\t\t\t\t,ctrl.model.editToolPermissions()\n\t\t\t\t? m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\tborder: solid 1px #3380c2;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\twidth: 10em;\n\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\tborder-radius: 0.25em;\n\t\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$active(`\n\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t`)\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick: ctrl.model.createNewTool\n\t\t\t\t\t\t,disabled: !!ctrl.model.SaveDisabled(true)\n\t\t\t\t\t\t,title: \"Create tools to track against teams and project locations\"\n\t\t\t\t\t}\n\t\t\t\t\t,'Create a New Tool '\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t\t,elements.alert('info', `Tools can be tracked financially and secured against teams to promote security and liability`)\n\t\t\t)\n\t])\n}\n\n\n\n\n/*\n\tIn order for mithril to mount this component. We have to expose these two properties.\n*/\nexport default Main","/* globals Promise */\n/* eslint-disable max-len */\n\nimport m from 'bacta'\nimport css from 'bss'\nimport * as H from '../../../how/index.js'\nimport * as elements from '../components/elements'\nimport NumberInput from '../components/number'\nimport Responsive from '../components/responsive'\nimport * as uuid from 'uuid'\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\nimport * as R from 'ramda';\nimport autocomplete from './autocomplete'\nimport scrollableTable from '../components/scrollableTable'\nimport HarthUppy from '../components/harth-uppy'\nimport byProp from '../utils/byProp'\nimport humanList from '../utils/human_list'\nimport { money as makeMoney } from '../utils/regExes'\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport Pencil2 from '../components/pencil'\nimport * as modalStack from '../components/modal-stack'\n\nimport {identical} from '../utils/harth-identical'\n\nconst autouidContracts = Math.random().toString(15).slice(2, 8)\nconst milliperday = 1000*60*60*24\nimport { prop } from '../../../stream/index'\nimport Permissions from '../models/permissions'\nimport ProjectDocument from '../models/project_documents'\nimport NotificationBar from '../components/notification'\nimport moment from 'moment'\n\nconst nullUser = {\n\tuser_id: m.prop(null)\n\t, user_username: m.prop('Unassigned')\n\t, usersFullName: 'Unassigned'\n\t, contractrecognitionname: 'Unassigned'\n\t, contractrecognitionid: null\n}\nconst asyncMergeAll =\n\txs => prop.afterSilence(\n\t\t0\n\t\t, prop.merge(xs)\n\t)\n\nconst exposer = (a) => (typeof a == 'function' ? a() : a) || null\n\n// const dateProjects = [\n// \t{project_name: 'Yesterday', project_id: 'Yesterday'}\n// \t,{project_name: 'Today', project_id: 'Today' }\n// \t,{project_name: 'This Week', project_id: 'This Week'}\n// \t,{project_name: 'Last Week', project_id: 'Last Week'}\n// ]\n\nconst dateProjects = [\n\t{project_name: 'Yesterday'}\n\t,{project_name: 'Today' }\n\t,{project_name: 'This Week'}\n\t,{project_name: 'Next Week'}\n\t,{project_name: 'Last Week'}\n]\n\nconst projectDocumentsView =\n\t({ editProjectPermissions, xs }) =>\n\t\t[xs]\n\t\t.map( R.filter( ProjectDocument.filter({ editProjectPermissions }) ) )\n\t\t.map( R.partition( x => x.project_documents_is_deliverable ))\n\t\t.map(\n\t\t\t([ , documents]) => [\n\t\t\t\tm('label.control-label', 'Project Lnks')\n\t\t\t\t,elements.list(\n\t\t\t\t\tdocuments\n\t\t\t\t\t.map( ProjectDocument.toVTree )\n\t\t\t\t)\n\t\t\t\t// ,m('label.control-label', 'Project Deliverables:')\n\t\t\t\t// ,elements.list(\n\t\t\t\t// \tdeliverables\n\t\t\t\t// \t.map( ProjectDocument.toVTree )\n\t\t\t\t// )\n\t\t\t]\n\t\t)\n\nconst processProjectDisciplineNods = ({\n\tallocations\n}) => today => d => {\n\n\tconst pd_allocation =\n\t\tallocations()\n\t\t.filter((allocation) =>\n\t\t\tallocation.discipline_id()\n\t\t\t== d.discipline_id()\n\t\t)\n\n\tconst current_index = R.findIndex(\n\t\t(a) => a.allocations_allocation_date == today\n\t\t,pd_allocation\n\t)\n\n\tlet previous_index = current_index - 1\n\n\tlet default_nod = []\n\n\tif (previous_index >= 0) {\n\t\twhile (\n\t\t\tdefault_nod.length == 0\n\t\t\t&& previous_index > 0\n\t\t\t&& pd_allocation[previous_index].allocations_eots.length == 0\n\t\t){\n\t\t\tif (\n\t\t\t\tpd_allocation[previous_index].allocations_eots.length == 0\n\t\t\t\t&& pd_allocation[previous_index].allocations_nods.length == 0\n\t\t\t){\n\t\t\t\tprevious_index = previous_index - 1\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tpd_allocation[previous_index].allocations_eots.length == 0\n\t\t\t\t&& pd_allocation[previous_index].allocations_nods.length > 0\n\t\t\t){\n\t\t\t\tdefault_nod = pd_allocation[previous_index].allocations_nods\n\t\t\t}\n\t\t}\n\t\tfor (let i = previous_index + 1; i <= current_index; i++) {\n\t\t\tpd_allocation[i].allocations_nods = default_nod\n\t\t};\n\t}\n}\n\nconst forecastedWorkAmount = ({ contractItem, fAmount }) =>\n\t!contractItem.crew_id && !contractItem.user_id\n\t? contractItem.organizations_disciplines_id\n\t\t? fAmount\n\t\t: fAmount.allocations_contractors_crews_work_forecasted()\n\t\t* fAmount.allocations_contractors_crews_work_application()\n\t: contractItem.contract_items_recorded_reference_standard\n\n\nconst accruedAmount = ({ contractItem, allocatioCrewOldData, timesheets, vm }) =>\n\t!contractItem.crew_id\n\t&& !contractItem.user_id\n\t\t? contractItem.organizations_disciplines_id\n\t\t\t? R.sum(\n\t\t\t\tallocatioCrewOldData()\n\t\t\t\t.map((acc) =>\n\t\t\t\t\tNumber(acc.allocations_contractors_crews_work_completed())\n\t\t\t\t\t|| 0\n\t\t\t\t)\n\t\t\t)\n\t\t\t: Number((\n\t\t\t\tallocatioCrewOldData().find((acc) =>\n\t\t\t\t\tacc.crews_discipline_rates[0].crews_discipline_rates_id\n\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t) || {allocations_contractors_crews_work_completed: m.prop(0)}\n\t\t\t).allocations_contractors_crews_work_completed())\n\n\t\t: contractItem.contract_items_recorded_reference != 'Timesheets'\n\t\t\t? 1\n\t\t\t: R.sum(\n\t\t\t\ttimesheets()\n\t\t\t\t.filter((t) =>\n\t\t\t\t\tt.allocation_id() == vm().selected.allocation.allocation_id()\n\t\t\t\t\t&& ( contractItem.crew_id\n\t\t\t\t\t? t.crew_id() == contractItem.crew_id\n\t\t\t\t\t: t.user_id() == contractItem.user_id)\n\t\t\t\t)\n\t\t\t\t.map((t) => t.crew_hours() )\n\t\t\t)\n\nconst dollarsArrayWhenAllocated =\n\t({\n\t\tuserDayContracts\n\t\t,crewDayContracts\n\t\t,crewWorkContracts\n\t\t,disciplineContract\n\t\t,todaysInvoices\n\t\t,allocatioCrewnData\n\t\t,criteriaBasedCalculation\n\t\t,allocatioCrewOldData\n\t\t,vm\n\t\t,timesheets\n\t}) =>\n\t\t[].concat(\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t)\n\t\t.filter((cItems) => cItems.contract_items_applied != false )\n\t\t.map((contractItem) => {\n\n\t\t\t// when resources are deleted and old versions still\n\t\t\t// have resources the below errors\n\t\t\t// at crews_discipline_rates[0]\n\t\t\tconst fAmount =\n\t\t\t\t!contractItem.crew_id\n\t\t\t\t&& !contractItem.user_id\n\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t? R.sum(\n\t\t\t\t\t\tallocatioCrewnData().map((acc) =>\n\t\t\t\t\t\t\tacc.allocations_contractors_crews_work_forecasted()\n\t\t\t\t\t\t\t* acc.allocations_contractors_crews_work_application()\n\t\t\t\t\t\t\t|| 0\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: allocatioCrewnData().find((acc) =>\n\t\t\t\t\t\tacc.crews_discipline_rates[0]\n\t\t\t\t\t\t&& acc.crews_discipline_rates[0]\n\t\t\t\t\t\t\t.crews_discipline_rates_id\n\t\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t\t) || {\n\t\t\t\t\t\tallocations_contractors_crews_work_forecasted:\n\t\t\t\t\t\t\tm.prop(0)\n\t\t\t\t\t\t,allocations_contractors_crews_work_application:\n\t\t\t\t\t\t\tm.prop(1)\n\t\t\t\t\t}\n\t\t\t\t: contractItem.contract_items_recorded_reference_standard\n\n\t\t\treturn criteriaBasedCalculation(\n\t\t\t\tcontractItem\n\t\t\t\t, contractItem.invoice_id\n\t\t\t\t\t? {\n\t\t\t\t\t\tincriment: 'invoice'\n\t\t\t\t\t\t,forecastedWorkAmount: null\n\t\t\t\t\t\t,forecastedDamagesAmount: null\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tincriment: 'contract'\n\t\t\t\t\t\t,forecastedWorkAmount:\n\t\t\t\t\t\t\tforecastedWorkAmount({\n\t\t\t\t\t\t\t\tcontractItem, fAmount\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t,accruedAmount:\n\t\t\t\t\t\t\taccruedAmount({\n\t\t\t\t\t\t\t\tcontractItem\n\t\t\t\t\t\t\t\t, allocatioCrewOldData\n\t\t\t\t\t\t\t\t, timesheets\n\t\t\t\t\t\t\t\t, vm\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t,forecastedDamagesAmount:\n\t\t\t\t\t\t\tvm().selected.allocation.allocations_allocation_date()\n\t\t\t\t\t\t\t>= new Date(contractItem.contractEnd).getTime()\n\t\t\t\t\t\t\t&& vm().selected.allocation.allocations_allocation_date()\n\t\t\t\t\t\t\t<= new Date(contractItem.damagesEnd).getTime()\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t}\n\t\t\t)\n\t\t})\n\n\n\n// ADD MULTIPLIER HOW\nconst OldDollarsArray =\n\t({\n\t\tuserDayContracts\n\t\t,crewDayContracts\n\t\t,crewWorkContracts\n\t\t,disciplineContract\n\t\t,todaysInvoices\n\t\t,workDifference\n\t\t,allocatioCrewnData\n\t\t,criteriaBasedCalculation\n\t\t,allocatioCrewOldData\n\t\t,vm\n\t\t,timesheets\n\t}) =>\n\t\tasyncMergeAll([\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t\t,workDifference\n\t\t])\n\t\t.map(([\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t]) =>\n\t\t\tvm().selected.allocation.allocations_allocation_date\n\t\t\t\t? R.unnest(\n\t\t\t\t\tdollarsArrayWhenAllocated({\n\t\t\t\t\t\tuserDayContracts\n\t\t\t\t\t\t,crewDayContracts\n\t\t\t\t\t\t,crewWorkContracts\n\t\t\t\t\t\t,disciplineContract\n\t\t\t\t\t\t,todaysInvoices\n\t\t\t\t\t\t,allocatioCrewnData\n\t\t\t\t\t\t,criteriaBasedCalculation\n\t\t\t\t\t\t,allocatioCrewOldData\n\t\t\t\t\t\t,vm\n\t\t\t\t\t\t,timesheets\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: []\n\t\t\t)\n\nfunction deletetInvoices({\n\tmakeAPICalls\n\t, api\n\t, invoice\n\t, deleteInvoiceItems\n\t, todaysInvoices\n\t, errors\n}){\n\n\tif( !makeAPICalls ){\n\t\tdeleteInvoiceItems().push(\n\t\t\tinvoice.invoice_id()\n\t\t)\n\t\ttodaysInvoices().splice(\n\t\t\ttodaysInvoices()\n\t\t\t\t.findIndex((i) =>\n\t\t\t\t\ti.invoice_id()\n\t\t\t\t\t== invoice.invoice_id()\n\t\t\t\t)\n\t\t\t,1\n\t\t)\n\t\tdelete errors()[invoice.invoice_name() + ' Working Amount']\n\t\tdelete errors()[invoice.invoice_name() + ' Depreciation Amount']\n\t\tdelete errors()[invoice.invoice_name() + ' Service Amount']\n\t\tdelete errors()[invoice.invoice_name() + ' Appreciation Amount']\n\t\tdelete errors()[invoice.invoice_name() + ' Damages Amount']\n\t}\n\n\treturn makeAPICalls\n\t\t? Promise.all(\n\t\t\tdeleteInvoiceItems()\n\t\t\t\t.filter((i) => i)\n\t\t\t\t.map(\n\t\t\t\t\t(t) => api.invoices.remove.one(t)\n\t\t\t\t)\n\t\t)\n\t\t: Promise.resolve([])\n}\n\nfunction fetchAllocations({\n\tdata\n\t, allocations\n\t, allocationsHash\n\t, SelectedProject\n\t, SelectedDiscipline\n\t, projectOptions\n\t, loading\n\t, fetchedExtras\n\t, allProjects\n\t, dbp_vm\n\t, disciplineExtraOptions\n\t, disciplineOptions\n\t, allDisciplines\n\t, discipline_box\n\t, activeLandingTab\n\t, retrieveAllocations\n\t, dateframeprojects\n\t, SelectedResource\n\t, selectedProjectExtra\n}){\n\tif (\n\t\tdata.schedule_id()\n\t\t&& (\n\t\t\tallocations().length == 0\n\t\t\t|| SelectedProject().project_id()\n\t\t\t!= allocations().slice(0,1).map( x => x.project_id )[0]\n\t\t)\n\t){\n\n\t\tif(\n\t\t\t!SelectedProject().organization_id\n\t\t\t|| SelectedProject().organization_id() != data.organization_id()\n\t\t\t|| allocations().length && R.last(allocations()).schedule_version_id()\n\t\t\t!= data.selectedVersion().schedule_version_id\n\t\t){projectOptions([])}\n\n\t\tloading(true)\n\t\tconst schedule_index =\n\t\t\tR.findIndex(\n\t\t\t\tR.propEq(\n\t\t\t\t\t'schedule_id'\n\t\t\t\t\t,data.schedule_id()\n\t\t\t\t)\n\t\t\t\t,data.schedules()\n\t\t\t)\n\n\t\tif (schedule_index != -1 ){\n\t\t\tconst most_recent_version =\n\t\t\t\tR.sortBy(\n\t\t\t\t\tR.prop(\"schedule_version_created\"),\n\t\t\t\t\tdata.schedules()[schedule_index]\n\t\t\t\t\t\t.schedule_versions\n\t\t\t\t)\n\n\t\t\tconst LatestVerionIndex = most_recent_version.length - 1\n\t\t\tconst schedule_version_id =\n\t\t\t\tdata.selectedVersion().schedule_version_id\n\t\t\t\t|| most_recent_version[LatestVerionIndex]\n\t\t\t\t\t.schedule_version_id\n\n\t\t\tconst project_id =\n\t\t\t\tSelectedProject().project_id\n\t\t\t\t\t? SelectedProject().project_id()\n\t\t\t\t\t: null\n\n\t\t\tconst schedule_id =\n\t\t\t\tselectedProjectExtra().schedule_id\n\t\t\t\t|| SelectedProject().schedule_id\n\t\t\t\t|| data.schedule_id()\n\n\t\t\tconst initialfetch = !projectOptions().length\n\n\t\t\tallocations([])\n\t\t\tallocationsHash({})\n\t\t\treturn Promise.all(\n\n\t\t\t\t!projectOptions().length\n\t\t\t\t\t? [ activeLandingTab != 'Tasks'\n\t\t\t\t\t\t? data.fetchAllocationsbyScheduleVersionShallow(\n\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\tdateframeprojects\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tschedule_version_id: schedule_version_id\n\t\t\t\t\t\t\t\t\t,uniqBy: 'project_id'\n\t\t\t\t\t\t\t\t\t,pcomplete: `not completed`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: []\n\t\t\t\t\t\t,activeLandingTab == 'Tasks'\n\t\t\t\t\t\t? data.fetchProjectExtras({\n\t\t\t\t\t\t\tproject_id: null\n\t\t\t\t\t\t\t,discipline_id: null\n\t\t\t\t\t\t\t,f: fetchedExtras\n\t\t\t\t\t\t\t,typesObj: {\n\t\t\t\t\t\t\t\tcompleted: 'any'\n\t\t\t\t\t\t\t\t, invalid: 'any'\n\t\t\t\t\t\t\t\t, verified: 'any'\n\t\t\t\t\t\t\t\t, assigned: 'any'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,uniqBy: true\n\t\t\t\t\t\t\t,pcomplete: `not completed`\n\t\t\t\t\t\t\t,shallowQuery: true\n\t\t\t\t\t\t\t,schedule_id: data.schedule_id()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: []\n\t\t\t\t\t\t,data.fetchProjectsBySchedule(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tschedule_id: data.schedule_id()\n\t\t\t\t\t\t\t\t,depth:2\n\t\t\t\t\t\t\t\t,props: {\n\t\t\t\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t\t\t\t'project_name'\n\t\t\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t\t\t\t,'schedule_id'\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t,disciplines: [\n\t\t\t\t\t\t\t\t\t\t'discipline_id'\n\t\t\t\t\t\t\t\t\t\t,'discipline_name'\n\t\t\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,getProjectExtras: true\n\t\t\t\t\t\t\t\t,taskcount: 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t\t: retrieveAllocations() || activeLandingTab == 'Days'\n\t\t\t\t\t? [data.fetchAllocationsbyScheduleVersion(\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\tdateframeprojects\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tproject_id: SelectedProject().project_id && SelectedProject().project_id()\n\t\t\t\t\t\t\t\t,schedule_version_id:\n\t\t\t\t\t\t\t\t\tdata.schedules().find((s) =>\n\t\t\t\t\t\t\t\t\t\ts.schedule_id\n\t\t\t\t\t\t\t\t\t\t== exposer(schedule_id)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.schedule_versions[0].schedule_version_id\n\t\t\t\t\t\t\t\t,contractor_id: SelectedResource().contractor_id && SelectedResource().contractor_id()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t)]\n\t\t\t\t\t: []\n\t\t\t)\n\t\t\t\t.then((totres) => {\n\n\t\t\t\t\tconst res = R.unnest(totres)\n\n\t\t\t\t\tres.forEach((p) => p.project_name = exposer(p.project_name))\n\n\t\t\t\t\tconst tasks =\n\t\t\t\t\t\t!projectOptions().length\n\t\t\t\t\t\t? totres[1]\n\t\t\t\t\t\t: []\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!projectOptions().length\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\tres.length\n\t\t\t\t\t\t\t|| tasks.length\n\t\t\t\t\t\t)\n\t\t\t\t\t){\n\n\t\t\t\t\t\tprojectOptions(\n\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\ttypeof a.project_id == 'function'\n\t\t\t\t\t\t\t\t\t? a.project_id()\n\t\t\t\t\t\t\t\t\t: a.project_id\n\t\t\t\t\t\t\t\t,res.concat(tasks)\n\t\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\t\t!data.readProjectPermissions()\n\t\t\t\t\t\t\t\t\t? R.merge(\n\t\t\t\t\t\t\t\t\t\tallProjects()\n\t\t\t\t\t\t\t\t\t\t,{ organization_id:\n\t\t\t\t\t\t\t\t\t\t\tm.prop(data\n\t\t\t\t\t\t\t\t\t\t\t\t.initiateContractFetch()\n\t\t\t\t\t\t\t\t\t\t\t\t.organization_id)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\tdateProjects.map((dp) =>\n\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\tdp\n\t\t\t\t\t\t\t\t\t\t,{ organization_id:\n\t\t\t\t\t\t\t\t\t\t\tm.prop(\n\t\t\t\t\t\t\t\t\t\t\t\tdata.initiateContractFetch()\n\t\t\t\t\t\t\t\t\t\t\t\t.organization_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tres.length\n\t\t\t\t\t\t? SelectedProject( projectOptions()[0] )\n\t\t\t\t\t\t: SelectedProject( tasks[0] )\n\n\t\t\t\t\t\tres.length\n\t\t\t\t\t\t? dbp_vm(projectOptions()[0].project_name)\n\t\t\t\t\t\t: dbp_vm(tasks[0].project_name)\n\n\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t}\n\t\t\t\t\telse if(\n\t\t\t\t\t\t!projectOptions().length\n\t\t\t\t\t\t&& !res.length\n\t\t\t\t\t\t&& !tasks.length\n\t\t\t\t\t){\n\t\t\t\t\t\tloading(false)\n\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!initialfetch\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\tproject_id\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'All Projects'\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'Yesterday'\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'Today'\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'This Week'\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'Next Week'\n\t\t\t\t\t\t\t|| SelectedProject().project_name == 'Last Week'\n\t\t\t\t\t\t)\n\t\t\t\t\t){\n\n\t\t\t\t\t\tallocations(R.unnest(res))\n\n\t\t\t\t\t\tconst uniqDisciplines =\n\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\ttypeof a.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t== 'function'\n\t\t\t\t\t\t\t\t? a.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t: a.organizations_disciplines_id\n\t\t\t\t\t\t\t\t, allocations()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tR.tap((t) =>\n\t\t\t\t\t\t\t\t\tt.discplineNameDescription =\n\t\t\t\t\t\t\t\t\tt.relatedDiscipline\n\t\t\t\t\t\t\t\t\t|| t.discplineNameDescription\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\tdisciplineExtraOptions( uniqDisciplines )\n\t\t\t\t\t\tdisciplineOptions(\n\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\tallDisciplines\n\t\t\t\t\t\t\t\t,uniqDisciplines\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tSelectedDiscipline().discipline_id\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: discipline_box('All Disciplines')\n\n\t\t\t\t\t\tconst today = new Date().getTime()\n\n\t\t\t\t\t\tdisciplineExtraOptions().forEach(\n\t\t\t\t\t\t\tprocessProjectDisciplineNods({\n\t\t\t\t\t\t\t\tallocations\n\t\t\t\t\t\t\t}) (today)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tallocationsHash(\n\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t(a) => a.project_id()\n\t\t\t\t\t\t\t\t,allocations()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tloading(false)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch(\n\t\t\t\t\te => NotificationBar.Notifications.alertError(e.message)\n\t\t\t\t)\n\t\t}\n\t} else { loading(false) }\n\treturn Promise.resolve([])\n}\n\nfunction Main({ attrs: { data } }){\n\n\tconst activeTab = data.scoped('Timesheets')\n\tconst activeLandingTab = data.scoped('Tasks')\n\tconst retrieveAllocations = data.scoped(false)\n\tconst schedule_id = data.schedule_id\n\tconst loading = data.scoped(true)\n\tconst usersIndex = data.scoped({})\n\tconst tools = m.prop([])\n\tconst modules = m.prop([])\n\tconst allocationsHash = data.scoped({})\n\tconst allocations = data.scoped([])\n\tconst fetchedInv = data.scoped(false)\n\tconst fetchedTime = data.scoped(false)\n\tconst users = data.scoped([])\n\tconst timesheetlist = data.scoped([])\n\tconst eotDeletions = m.prop([])\n\tconst nodDeletions = m.prop([])\n\tconst varDeletions = m.prop([])\n\tconst contractvm = m.prop({})\n\tconst fullView = data.scoped(false)\n\tconst errors = data.scoped({})\n\tconst allocationChange = data.scoped(false)\n\tconst baseProjectDetails = data.scoped([])\n\tconst forecastedWork = data.scoped(0)\n\tconst editProjectPermissions = m.prop(false)\n\tconst editMaterialPermissions = m.prop(false)\n\tconst editContractRecognitions = m.prop(false)\n\tconst editContractPermissions = m.prop(false)\n\tconst editInvoicePermissions = m.prop(false)\n\tconst editTimePermissions = m.prop(false)\n\tconst editUpdatePermissions = m.prop(false)\n\tconst editToolPermissions = m.prop(false)\n\tconst editAssignedTimesheetsPermissions = m.prop(false)\n\tconst editOwnedInvoicesPermissions = m.prop(false)\n\tconst editAssignedToolPermissions = m.prop(false)\n\tconst organizationsDisciplines = data.scoped([])\n\tconst selectedProjectExtra = data.scoped({})\n\tconst metaDataLoading = data.scoped(true)\n\tconst allDisciplines = { discplineNameDescription: 'All Disciplines' }\n\tconst allProjects = data.readProjectPermissions.map((rpp) => rpp ? {} : { project_name:'All Projects' })\n\tconst SelectedProject = data.scoped({})\n\tconst SelectedResource = data.scoped({})\n\tconst resfetch = data.scoped(true)\n\tconst SelectedDiscipline = data.scoped(allDisciplines)\n\tconst projectMetaDataLoading = data.scoped(false)\n\tconst projectMetaData = data.scoped({})\n\tconst baseProjectDetailsHash =\n\t\tbaseProjectDetails.map((tlist) => R.indexBy((t) => t.project_extras_id(), tlist))\n\tlet viewType = null\n\n\t/**\n\t * Prevent API from returning photos for the entire org\n\t * https://github.com/harth-systems/odin/pull/160\n\t */\n\tconst FAKE_ORG_D = uuid.v4()\n\n\tfunction uploadmetadata({only}){\n\t\tconst intasks = activeLandingTab() == 'Tasks'\n\t\tconst photosids =\n\t\t\tR.pickBy(\n\t\t\t\t(a, k) => a && (!only || !Object.keys(only).length || only && only[k] || k == 'user_id' || k == 'organization_id')\n\t\t\t\t,{\n\t\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t\t\t// (SelectedProject().project_id || intasks && exposer(selectedProjectExtra().project_extras_id))\n\t\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t\t\t// (SelectedProject().project_id || intasks && exposer(selectedProjectExtra().project_extras_id))\n\t\t\t\t\t\t// && data.auth.stream().user_id\n\t\t\t\t\t, schedule_id: data.schedule_id()\n\t\t\t\t\t, project_id:\n\t\t\t\t\t\tSelectedProject().project_id\n\t\t\t\t\t\t&& SelectedProject().project_id()\n\t\t\t\t\t, project_extras_id:\n\t\t\t\t\t\tintasks\n\t\t\t\t\t\t? exposer(selectedProjectExtra().project_extras_id)\n\t\t\t\t\t\t: null\n\t\t\t\t\t, allocation_id:\n\t\t\t\t\t\tactiveLandingTab() == 'Days'\n\t\t\t\t\t\t? exposer(\n\t\t\t\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t\t\t\t|| selectedProjectExtra().allocation_id\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t\t, organizations_disciplines_id:\n\t\t\t\t\t\tonly && only.organizations_disciplines_id\n\t\t\t\t\t\t\t? intasks && exposer(selectedProjectExtra().organizations_disciplines_id)\n\t\t\t\t\t\t\t\t? selectedProjectExtra().organizations_disciplines_id\n\t\t\t\t\t\t\t\t&& exposer(selectedProjectExtra().organizations_disciplines_id)\n\t\t\t\t\t\t\t\t: intasks\n\t\t\t\t\t\t\t\t? FAKE_ORG_D\n\t\t\t\t\t\t\t\t: vm().selected.allocation\n\t\t\t\t\t\t\t\t&& exposer(vm().selected.allocation.organizations_disciplines_id) || FAKE_ORG_D\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t)\n\t\treturn photosids\n\t}\n\n\tconst restrictedorganizationsDisciplines =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\torganizationsDisciplines\n\t\t\t\t,selectedProjectExtra\n\t\t\t\t,SelectedProject\n\t\t\t]\n\t\t)\n\t\t.map(([ods, spe, sp]) =>\n\t\t\tods.filter((od) =>\n\t\t\t\t!sp.contract_id\n\t\t\t\t|| !spe.contract_id\n\t\t\t\t|| od.applicablecontracts\n\t\t\t\t.find((c) =>\n\t\t\t\t\tc.contract_id == spe.contract_id\n\t\t\t\t\t|| c.contract_id == sp.contract_id\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst dateframeprojects =\n\t\tSelectedProject.map((p) =>\n\t\t\t({\n\t\t\t\tstartDate:\n\t\t\t\t\tp.project_name == 'Yesterday'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() - 1 * milliperday\n\t\t\t\t\t: p.project_name == 'Today'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime()\n\t\t\t\t\t: p.project_name == 'This Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() - (new Date().getDay() == 0 ? 6 : new Date().getDay() - 1) * milliperday\n\t\t\t\t\t: p.project_name == 'Last Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() - ((new Date().getDay() == 0 ? 6 : new Date().getDay() - 1) + 7) * milliperday\n\t\t\t\t\t: p.project_name == 'Next Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() + (new Date().getDay() == 0 ? 6 : 6 - new Date().getDay() + 1) * milliperday\n\t\t\t\t\t: ''\n\t\t\t\t,endDate:\n\t\t\t\t\tp.project_name == 'Yesterday'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime()\n\t\t\t\t\t: p.project_name == 'Today'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() + 1 * milliperday\n\t\t\t\t\t: p.project_name == 'This Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() + (6 - new Date().getDay()) * milliperday\n\t\t\t\t\t: p.project_name == 'Last Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() - (new Date().getDay() == 0 ? 6 : new Date().getDay() - 1) * milliperday\n\t\t\t\t\t: p.project_name == 'Next Week'\n\t\t\t\t\t? new Date( new Date().setHours(0,0,0,1) ).getTime() + ((new Date().getDay() == 0 ? 6 : 6 - new Date().getDay() + 1) + 7) * milliperday\n\t\t\t\t\t: ''\n\t\t\t})\n\t\t)\n\n\tconst newSelectedValue = [\n\t\t[ selectedProjectExtra\n\t\t, allocationChange\n\t\t]\n\t]\n\t\t.map( xs => asyncMergeAll(xs) )\n\t\t.map(\n\t\t\ts => s.map( ([pe, ac]) => {\n\t\t\t\treturn String(\n\t\t\t\t\t(activeTab() + activeLandingTab()).includes('Task')\n\t\t\t\t\t? pe.key\n\t\t\t\t\t\t|| Object.keys(pe).length\n\t\t\t\t\t\t&& !pe.newtask\n\n\t\t\t\t\t// return a random uuid when ac is true\n\t\t\t\t\t// so dropRepeats can actually notice ac changes\n\t\t\t\t\t: ac && uuid.v4()\n\t\t\t\t)\n\t\t\t})\n\t\t)\n\t\t.map( s => prop.dropRepeats(s) )\n\t\t.shift()\n\n\tconst detailsPaneKey = newSelectedValue.map( () => uuid.v4() )\n\n\tconst nullCrew = {\n\t\tcrew_id: m.prop(null)\n\t\t,teamresourcename: 'Unassigned'\n\t\t,user_id: m.prop(null)\n\t}\n\n\tconst vm = m.prop({\n\t\tpending: m.prop(false)\n\t\t,selected: {allocation: {}}\n\t\t,revert: {}\n\t})\n\n\tconst childResUsers = data.scoped([])\n\tconst resources = data.scoped([])\n\tconst mchildResUsers =\n\t\tchildResUsers\n\t\t.map(\n\t\t\tR.filter((u) =>\n\t\t\t\tu.user_id()\n\t\t\t\t&& (\n\t\t\t\t\t!selectedProjectExtra().users\n\t\t\t\t\t|| !selectedProjectExtra().users()\n\t\t\t\t\t.find((tu) =>\n\t\t\t\t\t\ttu.user_id() == u.user_id()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t// resPrep\n\tallocationChange\n\t\t.map((a) =>{\n\t\t\tresources([])\n\t\t\treturn a\n\t\t\t\t&& vm().selected.allocation.allocation_id\n\t\t\t\t\t? Promise.all(\n\t\t\t\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\t\t\tac.contractor_id()\n\t\t\t\t\t\t\t\t? data.fetchResource({\n\t\t\t\t\t\t\t\t\tcontractor_id: ac.contractor_id()\n\t\t\t\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t,rates: [\n\t\t\t\t\t\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t\t\t\t\t\t,'crews_discipline_rates_id'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.then(function(res){\n\t\t\t\t\t\tconst contractList = R.unnest(res)\n\t\t\t\t\t\tuserResCrew(\n\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\tnullCrew\n\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\tcontractList.map((r) =>\n\t\t\t\t\t\t\t\t\t\teditToolPermissions()\n\t\t\t\t\t\t\t\t\t\t|| r.user_id()\n\t\t\t\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t? r.crews\n\t\t\t\t\t\t\t\t\t\t\t: r.crews.filter((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\tc.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn resources(contractList)\n\t\t\t\t\t})\n\t\t\t\t\t: []\n\t\t})\n\n\n\tconst allResources = { ParentRecognition: 'All Resources' }\n\tconst loadingMeta = data.scoped(true)\n\tconst workList = data.scoped({})\n\tconst toolDetail = data.scoped({})\n\n\tconst fectchedResources = data.scoped([])\n\tconst fectchedTeams = data.scoped([])\n\tconst projectOptions = data.scoped([])\n\tconst disciplineOptions\t= data.scoped([])\n\tconst disciplineExtraOptions = data.scoped([])\n\n\tconst resourceOptions =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tSelectedProject\n\t\t\t\t,fectchedResources\n\t\t\t]\n\t\t)\n\t\t.map(([p, rlist]) =>\n\t\t\tp.project_name != 'All Projects'\n\t\t\t? rlist.concat(allResources)\n\t\t\t: rlist\n\t\t)\n\n\t// const missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Resource'\n\t\t\t\t\t,'Tool'\n\t\t\t\t\t,'Timesheet'\n\t\t\t\t\t,'Contract Obligation'\n\t\t\t\t\t,'Contract'\n\t\t\t\t\t,'Invoice'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p.replace(' ', '')+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\tconst contractOptions = data.scoped(\n\t\t[\n\t\t\t'Variation'\n\t\t\t,'Notice of Delay'\n\t\t\t,'Extension of Time'\n\t\t]\n\t)\n\n\n\tconst setContractOptions =\n\t\t(a) =>\n\t\t\tcontractOptions(\n\n\t\t\t\t\ta.allocations_nods.length > 0\n\t\t\t\t\t&& a.allocations_eots.length < a.allocations_nods.length\n\n\t\t\t\t\t? [\n\t\t\t\t\t\t'Variation'\n\t\t\t\t\t\t,'Notice of Delay'\n\t\t\t\t\t\t,'Extension of Time'\n\t\t\t\t\t]\n\t\t\t\t\t: [\n\t\t\t\t\t\t'Variation'\n\t\t\t\t\t\t,'Notice of Delay'\n\t\t\t\t\t]\n\t\t\t)\n\n\n\tconst contractList = m.prop([])\n\tconst consolidateContractList = (a) =>\n\t\tcontractList(\n\t\t\tR.sortBy(\n\t\t\t\t(i) => i['allocations_' + i.midfix + '_description']()\n\t\t\t\t,R.unnest([\n\t\t\t\t\ta.allocations_vars\n\t\t\t\t\t,a.allocations_nods\n\t\t\t\t\t,a.allocations_eots\n\t\t\t\t])\n\t\t\t)\n\t\t)\n\n\n\tconst tools_vm = m.prop([])\n\n\tconst timesheet_vm = m.prop({\n\t\tpending: m.prop(false)\n\t\t,selected: { timesheet: [] }\n\t\t,revert: []\n\t})\n\n\tconst deleteInvoiceItems = data.scoped([])\n\n\tconst originalInvoices =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tallocationChange\n\t\t\t\t,data.calculatedData\n\t\t\t\t,data.selectedVersion\n\t\t\t]\n\t\t)\n\t\t.map(([aChange, cd, sv]) => {\n\n\t\t\tfetchedInv(false)\n\t\t\tconst invoiceList =\n\t\t\t\t!vm().selected.allocation.allocation_id || !aChange\n\t\t\t\t? []\n\t\t\t\t: (\n\t\t\t\t\tcd[sv.schedule_version_id + '0Infinity']\n\t\t\t\t\t|| {focussedInvoices:[]}\n\t\t\t\t)['focussedInvoices']\n\t\t\t\t// .filter((i) =>\n\t\t\t\t// \ti.allocation_id\n\t\t\t\t// \t== vm().selected.allocation.allocation_id()\n\t\t\t\t// )\n\n\t\t\treturn invoiceList\n\t\t})\n\n\tconst todaysInvoices =\n\t\toriginalInvoices.map((invoiceList) => {\n\t\t\tconst invList = data.cloneInvoice(invoiceList)\n\t\t\tfetchedInv(true)\n\t\t\treturn invList\n\t\t})\n\n\tconst crewsIndexedByAID =\n\t\tallocationChange.map((ac) =>\n\t\t\tac && vm().selected.allocation.allocation_id\n\t\t\t\t? R.indexBy(\n\t\t\t\t\t(a) => a.user_id() || a.crew_id()\n\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t\t.allocations_contractors.map((ac) =>\n\t\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: {}\n\t\t)\n\n\n\tconst crewWorkers =\n\t\tallocationChange.map((ac) =>\n\t\t\tac && vm().selected.allocation.allocation_id\n\t\t\t\t? R.unnest(\n\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t.allocations_contractors.map((ac) =>\n\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst currAllocationDate =\n\t\tallocationChange.map((ac) =>\n\t\t\tac && vm().selected.allocation.allocation_id\n\t\t\t\t? new Date(\n\t\t\t\t\tvm().selected.allocation.allocations_allocation_date()\n\t\t\t\t)\n\t\t\t\t: Infinity\n\t\t)\n\n\tfunction resetVARS(){\n\t\tconst variation = {\n\t\t\tallocations_vars_id: m.prop('')\n\t\t\t,project_extras_id: m.prop(null)\n\t\t\t,allocation_id: m.prop(null)\n\t\t\t,allocations_vars_amount: m.prop(null)\n\t\t\t,allocations_vars_description: m.prop('')\n\t\t\t,allocations_vars_escalated: m.prop(false)\n\t\t\t,allocations_vars_clause: m.prop(null)\n\t\t\t,allocations_vars_approved: m.prop(false)\n\t\t\t,user_id: m.prop(data.auth.stream().user_id)\n\t\t\t,midfix: 'vars'\n\t\t}\n\t\treturn variation\n\t}\n\n\tfunction resetNODS(){\n\t\tconst nod = {\n\t\t\tallocations_nods_id: m.prop('')\n\t\t\t,project_extras_id: m.prop(null)\n\t\t\t,allocation_id: m.prop(null)\n\t\t\t,allocations_nods_description: m.prop('')\n\t\t\t,allocations_nods_escalated: m.prop(false)\n\t\t\t,allocations_nods_clause: m.prop(null)\n\t\t\t,allocations_nods_approved: m.prop(false)\n\t\t\t,user_id: m.prop(data.auth.stream().user_id)\n\t\t\t,midfix: 'nods'\n\t\t}\n\t\treturn nod\n\t}\n\n\tfunction resetEOTS(){\n\t\tconst eot = {\n\t\t\tallocations_eots_id: m.prop('')\n\t\t\t,project_extras_id: m.prop(null)\n\t\t\t,allocation_id: m.prop(null)\n\t\t\t,allocations_eots_description: m.prop('')\n\t\t\t,allocations_eots_escalated: m.prop(false)\n\t\t\t,allocations_eots_clause: m.prop(null)\n\t\t\t,allocations_eots_approved: m.prop(false)\n\t\t\t,user_id: m.prop(data.auth.stream().user_id)\n\t\t\t,midfix: 'eots'\n\t\t}\n\t\treturn eot\n\t}\n\n\tconst userResCrew = data.scoped([nullCrew])\n\tconst dbp_vm = m.prop()\n\n\tfunction working_contractors(allocation){\n\t\tconst contractor_list =\n\t\t\tR.map(\n\t\t\t\tR.invoker(0, 'allocations_contractors_name')\n\t\t\t)(allocation.allocations_contractors)\n\n\t\treturn contractor_list.join(', ')\n\t}\n\n\n\tfunction working_crews(allocation){\n\t\tconst crew_list = []\n\t\tallocation.allocations_contractors.forEach((contractor) => {\n\t\t\tconst c_list =\n\t\t\t\tR.map(R.invoker(0, 'allocations_contractors_crews_name'))\n\t\t\t\t\t(contractor.allocations_contractors_crews)\n\t\t\tcrew_list.push(...c_list)\n\t\t})\n\t\treturn crew_list.join(', ')\n\t}\n\n\tconst project_box = data.scoped('')\n\tconst discipline_box = data.scoped('')\n\tconst viewWindow = data.scoped('All Dates')\n\n\tconst today = new Date( new Date().setHours(0,0,0,1) )\n\tconst localToday = today.setMinutes( - today.getTimezoneOffset() )\n\tconst localTodayStart = new Date(localToday).setHours(0,0,0,1)\n\tconst localTodayEnd = new Date(localToday).setHours(23,59,59,999)\n\n\tconst shortDates = m.prop([\n\t\t{ name:'Today'\n\t\t, dateA: localTodayStart\n\t\t, dateB: localTodayEnd\n\t\t}\n\t\t,{name: 'Tomorrow'\n\t\t, dateA: localTodayStart + milliperday * 1\n\t\t, dateB: localTodayEnd + milliperday * 1\n\t\t}\n\t\t,{name: 'The Week'\n\t\t, dateA: localTodayStart\n\t\t, dateB: localTodayEnd + milliperday * 7\n\t\t}\n\t\t,{name: 'All Dates'\n\t\t, dateA: 0\n\t\t, dateB: Infinity\n\t\t}\n\t])\n\n\tconst CONSTANTProjectExtras = data.scoped([])\n\tconst projectDetails = data.scoped([])\n\n\tSelectedProject.map((p) => {\n\t\tprojectMetaDataLoading(true)\n\n\t\ttimesheet_vm().selected.timesheet = []\n\t\teotDeletions([])\n\t\tnodDeletions([])\n\t\tvarDeletions([])\n\t\tvm().selected.allocation = {}\n\t\tvm().revert = {}\n\t\tallocations([])\n\t\tdeleteInvoiceItems([])\n\t\tprojectDetails([])\n\t\tbaseProjectDetails([])\n\n\t\tdata.currentRoute('Nothing')\n\t\treturn !p.project_id\n\t\t\t? Promise.resolve({}).then(() => projectMetaDataLoading(false))\n\t\t\t: Promise.all([\n\t\t\t\tdata.fetchProjectsByProjectId(\n\t\t\t\t\t{\n\t\t\t\t\t\tproject_id: p.project_id()\n\t\t\t\t\t\t,schedule_id: data.schedule_id()\n\t\t\t\t\t\t,depth:1\n\t\t\t\t\t\t,props: {\n\t\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t\t'project_documents'\n\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t,p.project_id() ? data.fetchProjectContacts({project_id: p.project_id()}) : []\n\t\t\t])\n\t\t\t.then(([md, pc]) => {\n\t\t\t\tif( md && md.project_id ){\n\t\t\t\t\tprojectMetaData(\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\tdata.api.APIProjectToProject(md)\n\t\t\t\t\t\t\t,{project_contacts: pc }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tactiveLandingTab() == 'Tasks' ? retrieveAllocations(false) : null\n\t\t\t\treturn projectMetaDataLoading(false)\n\t\t\t})\n\t\t\t.then(() => {\n\n\t\t\t\tconst uids =\n\t\t\t\t\t!Permissions.hasRead(data.permissions(), 'contract_management')\n\t\t\t\t\t? [data.auth.stream().user_id]\n\t\t\t\t\t: (\n\t\t\t\t\t\tSelectedProject().project_name == 'This Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Last Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Next Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Today'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Yesterday'\n\t\t\t\t\t\t\t? projectDetails.map((p) => p.project_id())\n\t\t\t\t\t\t\t: [SelectedProject().project_id()]\n\t\t\t\t\t)\n\t\t\t\t\t.concat([data.auth.stream().user_id])\n\n\t\t\t\tdata.routeids({\n\t\t\t\t\trouteids: uids.filter(R.identity)\n\t\t\t\t\t, getledgers: true\n\t\t\t\t\t, financialsubsets: []\n\t\t\t\t\t, ledgerdetails:true\n\t\t\t\t\t, getmatdata: false\n\t\t\t\t\t, specificproject:\n\t\t\t\t\t\tSelectedProject().project_name == 'This Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Last Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Next Week'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Today'\n\t\t\t\t\t\t|| SelectedProject().project_name == 'Yesterday'\n\t\t\t\t\t\t\t? projectDetails.map((p) => p.project_id()).filter(R.identity)\n\t\t\t\t\t\t\t: [SelectedProject().project_id()].filter(R.identity)\n\n\t\t\t\t})\n\n\t\t\t\treturn data.currentRoute('updates')\n\t\t\t})\n\t})\n\n\tconst SelectedDate =\n\t\tviewWindow.map((v) =>\n\t\t\tshortDates().find((d) => d.name == v).dateA\n\t\t)\n\n\tconst SelectedSecondDate =\n\t\tviewWindow.map((v) =>\n\t\t\tshortDates().find((d) => d.name == v).dateB\n\t\t)\n\n\tconst sortedAllocations =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tSelectedDate\n\t\t\t\t,SelectedSecondDate\n\t\t\t\t,SelectedProject\n\t\t\t\t,SelectedDiscipline\n\t\t\t\t,allocationsHash\n\t\t\t\t,discipline_box\n\t\t\t\t,project_box\n\t\t\t\t,data.selectedVersion\n\t\t\t]\n\t\t)\n\t\t.map(([\n\t\t\tdateA\n\t\t\t, dateB\n\t\t\t, project\n\t\t\t, discipline\n\t\t\t, curentAllocations\n\t\t\t, allDisciplines\n\t\t]) =>\n\t\t\t(\n\t\t\t\t!project\n\t\t\t\t\t|| !project.project_id\n\t\t\t\t\t|| project.project_name == 'All Projects'\n\t\t\t\t\t? allocations()\n\t\t\t\t\t: curentAllocations[project.project_id()] || []\n\t\t\t)\n\t\t\t.filter((a) => {\n\t\t\t\treturn a.allocations_allocation_date() >= dateA\n\t\t\t\t&& a.allocations_allocation_date() <= dateB\n\t\t\t\t&& (\n\t\t\t\t\t!discipline.allocations_work_name\n\t\t\t\t\t|| a.allocations_work_name()\n\t\t\t\t\t\t== discipline.allocations_work_name()\n\t\t\t\t\t|| allDisciplines\n\t\t\t\t)\n\t\t\t})\n\t\t)\n\n\tconst makeTimesheetCrew = (crew) => {\n\n\t\tconst realContractor =\n\t\t\tresources()\n\t\t\t\t.find((c) => c.contractor_id() == crew.ParentRecognitionID )\n\t\tconst realCrew =\n\t\t\trealContractor.crews.find((c) => c.crew_id() == crew.crew_id() )\n\n\t\tconst subjectContractor =\n\t\t\t!crew.ParentRecognitionID\n\t\t\t\t? null\n\t\t\t\t: vm().selected.allocation.allocations_contractors\n\t\t\t\t.find((chr) => chr.contractor_id() == crew.ParentRecognitionID)\n\n\t\tconst subjectCrew =\n\t\t\t!crew.ParentRecognitionID\n\t\t\t\t? null\n\t\t\t\t: subjectContractor.allocations_contractors_crews\n\t\t\t\t.find((chr) => chr.crew_id() == crew.crew_id())\n\n\t\tsubjectCrew\n\t\t\t? null\n\t\t\t: subjectContractor.allocations_contractors_crews.push(\n\t\t\t\t{\n\t\t\t\t\tcrew_id: m.prop(crew.crew_id())\n\t\t\t\t\t,user_id: m.prop(crew.user_id())\n\t\t\t\t\t,crews_discipline_rates:\n\t\t\t\t\t\trealCrew.crews_discipline_rates.filter((crate) =>\n\t\t\t\t\t\t\tcrate.organizations_disciplines_id()\n\t\t\t\t\t\t\t== vm().selected.allocation\n\t\t\t\t\t\t\t\t.organizations_disciplines_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t,allocations_contractors_crews_crew_rating:\n\t\t\t\t\t\tm.prop(crew.crew_rating())\n\t\t\t\t\t,allocations_contractors_crews_crew_common:\n\t\t\t\t\t\tm.prop(crew.crew_common())\n\t\t\t\t\t,allocations_contractors_crews_excess:\n\t\t\t\t\t\tm.prop(crew.crew_excess())\n\t\t\t\t\t,allocations_contractors_crews_utilized:\n\t\t\t\t\t\tm.prop(crew.crew_utilized())\n\t\t\t\t\t,allocations_contractors_crews_invalid:\n\t\t\t\t\t\tm.prop(crew.crew_invalid())\n\t\t\t\t\t,allocations_contractors_crews_work_completed:\n\t\t\t\t\t\tm.prop(0)\n\t\t\t\t\t,allocations_contractors_crews_work_forecasted:\n\t\t\t\t\t\tm.prop(0)\n\t\t\t\t\t,allocations_contractors_crews_work_application:\n\t\t\t\t\t\tm.prop(0)\n\t\t\t\t\t,allocations_contractors_crews_name:\n\t\t\t\t\t\tm.prop(crew.crew_name())\n\t\t\t\t\t,allocations_contractors_crews_contract_multiplier:\n\t\t\t\t\t\tm.prop(1)\n\t\t\t\t\t,allocations_contractors_crews_id:\n\t\t\t\t\t\tm.prop(null)\n\t\t\t\t\t,allocations_contractors_id:\n\t\t\t\t\t\tm.prop(null)\n\t\t\t\t\t,teamratemultiplier:\n\t\t\t\t\t\t1\n\t\t\t\t}\n\t\t\t)\n\n\t\treturn {\n\t\t\ttimesheets_id: m.prop(null)\n\t\t\t,organization_id: m.prop(null)\n\t\t\t,allocation_id: m.prop( vm().selected.allocation.allocation_id() )\n\t\t\t,user_id: m.prop( realCrew.user_id() )\n\t\t\t,crew_id: m.prop( crew.crew_id() )\n\t\t\t,crew_name: m.prop(\n\t\t\t\tcrew.crew_name\n\t\t\t\t? crew.crew_name()\n\t\t\t\t: crew.allocations_contractors_crews_name()\n\t\t\t)\n\t\t\t,user_name: m.prop( null )\n\t\t\t,crew_hours: m.prop(0)\n\t\t\t,crew_work: m.prop(\n\t\t\t\tsubjectCrew\n\t\t\t\t\t? subjectCrew.allocations_contractors_crews_work_completed()\n\t\t\t\t\t: 0\n\t\t\t)\n\t\t\t,work_conditions: m.prop(null)\n\t\t\t,crew_performance: m.prop(null)\n\t\t}\n\t}\n\n\tfunction make_timesheet(crews){\n\t\tif (crews != null){\n\t\t\tconst uniqueCrews =\n\t\t\t\tcrews.filter((crew) =>\n\t\t\t\t\t!timesheet_vm().selected.timesheet\n\t\t\t\t\t\t.find((t) => t.crew_id() == crew.crew_id())\n\t\t\t\t)\n\n\t\t\ttimesheet_vm().selected.timesheet =\n\t\t\t\ttimesheet_vm().selected.timesheet.concat(\n\t\t\t\t\tuniqueCrews.map(makeTimesheetCrew)\n\t\t\t\t)\n\t\t\tresources(resources())\n\t\t}\n\t}\n\n\n\n\tfunction new_user_timesheet(){\n\t\tconst new_timesheet = {\n\t\t\ttimesheets_id: m.prop(null)\n\t\t\t,organization_id: m.prop(null)\n\t\t\t,allocation_id: m.prop( vm().selected.allocation.allocation_id() )\n\t\t\t,user_id: m.prop( data.auth.stream().user_id )\n\t\t\t,crew_id: m.prop( null )\n\t\t\t,crew_name: m.prop( null )\n\t\t\t,user_name: m.prop( data.auth.stream().user_username )\n\t\t\t,crew_hours: m.prop(0)\n\t\t\t,crew_work: m.prop(0)\n\t\t\t,work_conditions: m.prop(null)\n\t\t\t,crew_performance: m.prop(null)\n\t\t}\n\t\ttimesheet_vm().selected.timesheet.unshift(new_timesheet)\n\t}\n\n\tfunction cloningTimesheet(timesheet){\n\t\tconst t_clone = []\n\n\t\tif ( timesheet.length > 0 ) {\n\t\t\ttimesheet.forEach((t) => {\n\t\t\t\tconst new_timesheet = {\n\t\t\t\t\ttimesheets_id: m.prop( exposer(t.timesheets_id) )\n\t\t\t\t\t,organization_id: m.prop( exposer(t.organization_id) )\n\t\t\t\t\t,allocation_id: m.prop( exposer(t.allocation_id) )\n\t\t\t\t\t,user_id: m.prop( exposer(t.user_id) )\n\t\t\t\t\t,crew_id: m.prop( exposer(t.crew_id) )\n\t\t\t\t\t,crew_name: m.prop( exposer(t.crew_name) )\n\t\t\t\t\t,user_name: m.prop( exposer(t.user_name) )\n\t\t\t\t\t,crew_hours: m.prop( Number( exposer(t.crew_hours)).toFixed(2) )\n\t\t\t\t\t,crew_work: m.prop( Number( exposer(t.crew_work)).toFixed(2) )\n\t\t\t\t\t,work_conditions: m.prop( exposer(t.work_conditions) )\n\t\t\t\t\t,crew_performance: m.prop( exposer(t.crew_performance) || '' )\n\t\t\t\t\t,organizations_disciplines_id: m.prop( exposer(t.organizations_disciplines_id) )\n\t\t\t\t\t,sharedtimesheet: t.sharedtimesheet\n\t\t\t\t}\n\t\t\t\tt_clone.push(new_timesheet)\n\t\t\t})\n\t\t}\n\t\treturn t_clone\n\t}\n\n\tfunction cloningACC(new_ac, acc){\n\n\t\tconst new_acc = {\n\t\t\tcrews_discipline_rates:\n\t\t\t\tacc.crews_discipline_rates\n\t\t\t,allocations_contractors_crews_excess:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_excess() )\n\t\t\t,allocations_contractors_crews_utilized:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_utilized() )\n\t\t\t,allocations_contractors_crews_invalid:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_invalid() )\n\t\t\t,allocations_contractors_crews_id:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_id() )\n\t\t\t,allocations_contractors_id:\n\t\t\t\tm.prop( acc.allocations_contractors_id() )\n\t\t\t,crew_id:\n\t\t\t\tm.prop( acc.crew_id() )\n\t\t\t,allocations_contractors_crews_name:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_name() )\n\t\t\t,allocations_contractors_crews_contract_multiplier:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_contract_multiplier())\n\t\t\t,allocations_contractors_crews_work_completed:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_work_completed() )\n\t\t\t,allocations_contractors_crews_work_forecasted:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_work_forecasted() )\n\t\t\t,allocations_contractors_crews_work_application:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_work_application() )\n\t\t\t,allocations_contractors_crews_crew_rating:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_crew_rating() )\n\t\t\t,allocations_contractors_crews_crew_common:\n\t\t\t\tm.prop( acc.allocations_contractors_crews_crew_common() )\n\t\t\t,teamratemultiplier:\n\t\t\t\tacc.teamratemultiplier\n\t\t\t,user_id:\n\t\t\t\tm.prop(acc.user_id())\n\t\t}\n\n\t\tforecastedWork(\n\t\t\tforecastedWork()\n\t\t\t\t+ acc.allocations_contractors_crews_work_forecasted()\n\t\t\t\t* acc.allocations_contractors_crews_work_application()\n\n\t\t)\n\n\t\tnew_ac.allocations_contractors_crews.push(new_acc)\n\n\t}\n\n\tfunction cloningAllocation(allocation){\n\t\tcontractList([])\n\t\tforecastedWork(0)\n\t\tconst a_clone = {\n\t\t\tschedule_id:\n\t\t\t\tm.prop(allocation.schedule_id())\n\t\t\t,organizations_disciplines_id:\n\t\t\t\tm.prop(allocation.organizations_disciplines_id())\n\t\t\t,allocations_completion_comments:\n\t\t\t\tm.prop( allocation.allocations_completion_comments() )\n\t\t\t,organization_id:\n\t\t\t\tm.prop( allocation.organization_id() )\n\t\t\t,allocation_id:\n\t\t\t\tm.prop( allocation.allocation_id() )\n\t\t\t,project_id:\n\t\t\t\tm.prop( allocation.project_id() )\n\t\t\t,discipline_id:\n\t\t\t\tm.prop( allocation.discipline_id() )\n\t\t\t,project_name:\n\t\t\t\tallocation.project_name\n\t\t\t,allocations_work_name:\n\t\t\t\tm.prop( allocation.allocations_work_name() )\n\t\t\t,allocations_crew_required:\n\t\t\t\tm.prop( allocation.allocations_crew_required() )\n\t\t\t,allocations_project_harshness:\n\t\t\t\tm.prop( allocation.allocations_project_harshness() )\n\t\t\t,allocations_custom_status:\n\t\t\t\tm.prop( allocation.allocations_custom_status() )\n\t\t\t,allocations_allocation_date:\n\t\t\t\tm.prop( allocation.allocations_allocation_date() )\n\t\t\t,allocations_bad_day:\n\t\t\t\tm.prop( allocation.allocations_bad_day() )\n\t\t\t,allocations_day_status:\n\t\t\t\tm.prop( allocation.allocations_day_status() )\n\t\t\t,allocations_weather_status:\n\t\t\t\tm.prop( allocation.allocations_weather_status() )\n\t\t\t,allocations_allocation_complete:\n\t\t\t\tm.prop( allocation.allocations_allocation_complete() )\n\t\t\t,allocations_allocation_forecast:\n\t\t\t\tm.prop( allocation.allocations_allocation_forecast() )\n\t\t\t,allocations_version_key:\n\t\t\t\tm.prop( allocation.allocations_version_key() )\n\t\t\t,schedule_version_id:\n\t\t\t\tm.prop( allocation.schedule_version_id() )\n\t\t\t,discplineNameDescription:\n\t\t\t\tallocation.discplineNameDescription\n\t\t\t,discipline_description:\n\t\t\t\tallocation.discipline_description\n\t\t\t,disciplineratemultiplier:\n\t\t\t\tallocation.disciplineratemultiplier\n\t\t\t,allocations_contractors:\n\t\t\t\t[]\n\t\t\t,allocations_eots:\n\t\t\t\t[]\n\t\t\t,allocations_vars:\n\t\t\t\t[]\n\t\t\t,allocations_nods:\n\t\t\t\t[]\n\t\t\t,allocations_transposes:\n\t\t\t\t[]\n\t\t}\n\t\tallocation.allocations_contractors.forEach((ac) => {\n\t\t\tconst new_ac = {\n\t\t\t\tcontractor_id:\n\t\t\t\t\tm.prop( ac.contractor_id() )\n\t\t\t\t,allocation_id:\n\t\t\t\t\tm.prop( ac.allocation_id() )\n\t\t\t\t,allocations_contractors_id:\n\t\t\t\t\tm.prop( ac.allocations_contractors_id() )\n\t\t\t\t,allocations_contractors_name:\n\t\t\t\t\tm.prop( ac.allocations_contractors_name() )\n\t\t\t\t,allocations_contractors_utilized:\n\t\t\t\t\tm.prop( ac.allocations_contractors_utilized() )\n\t\t\t\t,allocations_contractors_total_rating:\n\t\t\t\t\tm.prop( ac.allocations_contractors_total_rating() )\n\t\t\t\t,allocations_contractors_quality_rating:\n\t\t\t\t\tm.prop( ac.allocations_contractors_quality_rating() )\n\t\t\t\t,allocations_contractors_common:\n\t\t\t\t\tm.prop( ac.allocations_contractors_common() )\n\t\t\t\t,allocations_contractors_mixed_crews:\n\t\t\t\t\tm.prop( ac.allocations_contractors_mixed_crews() )\n\t\t\t\t,allocations_contractors_crews:\n\t\t\t\t\t[]\n\t\t\t\t,user_id:\n\t\t\t\t\tm.prop(ac.user_id())\n\t\t\t}\n\t\t\tac.allocations_contractors_crews.forEach((acc) => {\n\t\t\t\tcloningACC(new_ac, acc)\n\t\t\t})\n\t\t\ta_clone.allocations_contractors.push(new_ac)\n\t\t})\n\t\tallocation.allocations_nods.forEach((contract_item) => {\n\t\t\tconst new_n ={\n\t\t\t\tallocations_nods_id:\n\t\t\t\t\tm.prop( contract_item.allocations_nods_id() )\n\t\t\t\t,project_extras_id:\n\t\t\t\t\tm.prop( contract_item.project_extras_id() )\n\t\t\t\t,allocation_id:\n\t\t\t\t\tm.prop( contract_item.allocation_id() )\n\t\t\t\t,allocations_nods_description:\n\t\t\t\t\tm.prop( contract_item.allocations_nods_description() )\n\t\t\t\t,allocations_nods_escalated:\n\t\t\t\t\tm.prop( contract_item.allocations_nods_escalated() )\n\t\t\t\t,allocations_nods_clause:\n\t\t\t\t\tm.prop( contract_item.allocations_nods_clause() )\n\t\t\t\t,midfix:\n\t\t\t\t\t'nods'\n\t\t\t\t,allocations_nods_approved:\n\t\t\t\t\tm.prop(contract_item.allocations_nods_approved())\n\t\t\t\t,user_id:\n\t\t\t\t\tm.prop(contract_item.user_id())\n\t\t\t}\n\t\t\ta_clone.allocations_nods.push(new_n)\n\t\t\tcontractList().push(new_n)\n\t\t})\n\t\tallocation.allocations_eots.forEach((contract_item) => {\n\t\t\tconst new_e ={\n\t\t\t\tallocations_eots_id:\n\t\t\t\t\tm.prop( contract_item.allocations_eots_id() )\n\t\t\t\t,project_extras_id:\n\t\t\t\t\tm.prop( contract_item.project_extras_id() )\n\t\t\t\t,allocation_id:\n\t\t\t\t\tm.prop( contract_item.allocation_id() )\n\t\t\t\t,allocations_eots_description:\n\t\t\t\t\tm.prop( contract_item.allocations_eots_description() )\n\t\t\t\t,allocations_eots_escalated:\n\t\t\t\t\tm.prop( contract_item.allocations_eots_escalated() )\n\t\t\t\t,allocations_eots_clause:\n\t\t\t\t\tm.prop( contract_item.allocations_eots_clause() )\n\t\t\t\t,midfix:\n\t\t\t\t\t'eots'\n\t\t\t\t,allocations_eots_approved:\n\t\t\t\t\tm.prop(contract_item.allocations_eots_approved())\n\t\t\t\t,user_id:\n\t\t\t\t\tm.prop(contract_item.user_id())\n\t\t\t}\n\t\t\ta_clone.allocations_eots.push(new_e)\n\t\t\tcontractList().push(new_e)\n\t\t})\n\t\tallocation.allocations_vars.forEach((contract_item) => {\n\t\t\tconst new_v ={\n\t\t\t\tallocations_vars_id:\n\t\t\t\t\tm.prop( contract_item.allocations_vars_id() )\n\t\t\t\t,project_extras_id:\n\t\t\t\t\tm.prop( contract_item.project_extras_id() )\n\t\t\t\t,allocation_id:\n\t\t\t\t\tm.prop( contract_item.allocation_id() )\n\t\t\t\t,allocations_vars_description:\n\t\t\t\t\tm.prop( contract_item.allocations_vars_description() )\n\t\t\t\t,allocations_vars_escalated:\n\t\t\t\t\tm.prop( contract_item.allocations_vars_escalated() )\n\t\t\t\t,allocations_vars_clause:\n\t\t\t\t\tm.prop( contract_item.allocations_vars_clause() )\n\t\t\t\t,allocations_vars_amount:\n\t\t\t\t\tm.prop( contract_item.allocations_vars_amount() )\n\t\t\t\t,midfix:\n\t\t\t\t\t'vars'\n\t\t\t\t,allocations_vars_approved:\n\t\t\t\t\tm.prop(contract_item.allocations_vars_approved())\n\t\t\t\t,user_id:\n\t\t\t\t\tm.prop(contract_item.user_id())\n\t\t\t}\n\t\t\ta_clone.allocations_vars.push(new_v)\n\t\t\tcontractList().push(new_v)\n\t\t})\n\n\n\t\tsetContractOptions(a_clone)\n\n\t\treturn a_clone\n\t}\n\n\tconst timesheets = data.scoped([])\n\t// const fetchtimesheets =\n\t\tallocationChange.map((ac) => {\n\t\t\tac ? fetchedTime(false) : null\n\t\t\tconst allocation_id =\n\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t&& vm().selected.allocation.allocation_id()\n\t\t\t\t|| selectedProjectExtra().allocation_id\n\t\t\t\t&& selectedProjectExtra().allocation_id()\n\n\t\t\treturn !ac\n\t\t\t\t? null\n\t\t\t\t: Promise.resolve(\n\t\t\t\t\tallocation_id\n\t\t\t\t\t\t? Promise.all([\n\t\t\t\t\t\t\tdata.fetchTimesheetsByAllocation({\n\t\t\t\t\t\t\t\tallocation_id: allocation_id\n\t\t\t\t\t\t\t\t,sharedtimesheet: 'all'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t])\n\t\t\t\t\t\t: [[]]\n\t\t\t\t)\n\t\t\t\t\t.then(function([result]){\n\t\t\t\t\t\ttimesheets(result)\n\t\t\t\t\t\ttimesheet_vm().selected.timesheet =\n\t\t\t\t\t\t\tcloningTimesheet( result )\n\t\t\t\t\t\tfetchedTime(true)\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t})\n\n\n\t// const sortContractorCrews =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tresources\n\t\t\t]\n\t\t)\n\t\t.map(() => {\n\t\t\tconst allocation = vm().selected.allocation\n\n\t\t\tif (vm().selected.allocation.allocation_id){\n\t\t\t\tcrewsIndexedByAID(\n\t\t\t\t\tR.indexBy(\n\t\t\t\t\t\t(a) => a.user_id() || a.crew_id()\n\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\tallocation.allocations_contractors.map((ac) =>\n\t\t\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\tcrewWorkers(\n\t\t\t\t\tR.unnest(\n\t\t\t\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\tconst crewlist =\n\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t(a,b) => a.crew_id() == b.crew_id()\n\t\t\t\t\t\t,R.chain(\n\t\t\t\t\t\t\t(c) => c.user_id() == data.auth.stream().user_id\n\t\t\t\t\t\t\t\t|| editTimePermissions()\n\t\t\t\t\t\t\t\t? c.crews\n\t\t\t\t\t\t\t\t: c.crews.filter(\n\t\t\t\t\t\t\t\t\t(crew) =>\n\t\t\t\t\t\t\t\t\t\tcrew.user_id()\n\t\t\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,!resources().length\n\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t: allocation.allocations_contractors\n\t\t\t\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\t\t\t\tresources().find((con) =>\n\t\t\t\t\t\t\t\t\t\tcon.contractor_id()\n\t\t\t\t\t\t\t\t\t\t\t== ac.contractor_id()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,timesheet_vm().selected.timesheet\n\t\t\t\t\t)\n\n\t\t\t\ttimesheetlist(crewlist)\n\t\t\t}\n\n\t\t\treturn true\n\t\t})\n\n\n\tfunction DisableEmptySave(returnBoolean){\n\t\tconst allocation = vm().selected.allocation\n\t\tconst counteots = R.countBy( chr =>\n\t\t\tchr.allocations_eots_description()\n\t\t\t, allocation.allocations_eots || []\n\t\t)\n\t\tconst countnods = R.countBy( chr =>\n\t\t\tchr.allocations_nods_description()\n\t\t\t, allocation.allocations_nods || []\n\t\t)\n\t\tconst countvars = R.countBy( chr =>\n\t\t\tchr.allocations_vars_description()\n\t\t\t, allocation.allocations_vars || []\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => !d.allocations_eots_description()\n\t\t\t\t? `Extension of Time Descriptions`\n\t\t\t\t: null\n\t\t\t,(d) => !d.allocations_nods_description()\n\t\t\t\t? `Notification of Delay Descriptions`\n\t\t\t\t: null\n\t\t\t// ,(d) => !d.allocations_vars_description()\n\t\t\t// \t? `Variation Descriptions`\n\t\t\t// \t: null\n\t\t\t,(d, prop='allocations_eots_description') =>\n\t\t\t\td[prop] && counteots[d[prop]()] > 1\n\t\t\t\t\t? `Extension of Time Descriptions are duplicated, check `\n\t\t\t\t\t\t+ d[prop]()\n\t\t\t\t\t: null\n\t\t\t,(d, prop='allocations_nods_description') =>\n\t\t\t\td[prop] && countnods[d[prop]()] > 1\n\t\t\t\t\t? `Notification of Delay Descriptions are duplicated, check `\n\t\t\t\t\t\t+ d[prop]()\n\t\t\t\t\t: null\n\t\t\t,(d, prop='allocations_vars_description') =>\n\t\t\t\td[prop] && countvars[d[prop]()] > 1\n\t\t\t\t\t? `Variation Descriptions are duplicated, check `\n\t\t\t\t\t\t+ d[prop]()\n\t\t\t\t\t: null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save these contract items `\n\t\t\t,` and `\n\t\t\t,` must not be empty`\n\t\t\t,[\n\t\t\t\tallocation.allocations_eots || []\n\t\t\t\t,allocation.allocations_nods || []\n\t\t\t\t,allocation.allocations_vars || []\n\t\t\t\t,allocation.allocations_eots || []\n\t\t\t\t,allocation.allocations_nods || []\n\t\t\t\t,allocation.allocations_vars || []\n\t\t\t]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,true\n\t\t)\n\t}\n\n\tfunction DisableDuplicateSave(returnBoolean){\n\t\tconst allocation = vm().selected.allocation\n\t\tconst uniqAllocation =\n\t\t\t(a) => [\n\t\t\t\ta.project_id && a.project_id()\n\t\t\t\t,a.discipline_id && a.discipline_id()\n\t\t\t\t,a.allocations_allocation_date && a.allocations_allocation_date()\n\t\t\t].join()\n\n\t\tconst allocationIndex =\n\t\t\tR.countBy((chr) =>\n\t\t\t\tuniqAllocation(chr)\n\t\t\t\t, sortedAllocations()\n\t\t\t\t\t.filter((r) =>\n\t\t\t\t\t\tallocation.allocation_id\n\t\t\t\t\t\t&& r.allocation_id()\n\t\t\t\t\t\t!= allocation.allocation_id()\n\t\t\t\t\t)\n\t\t\t\t\t.concat(allocation)\n\t\t\t)\n\n\t\tconst errorArray = [\n\t\t\t(d) =>\n\t\t\t\td.allocations_allocation_date\n\t\t\t\t&& d.allocations_allocation_date() > localTodayEnd\n\t\t\t\t&& currentVersion()\n\t\t\t\t? `update the Completed Work Date to be today or sometime in the past`\n\t\t\t\t: null\n\t\t\t, d => STRING.ERROR.DUPLICATED_COMPLETED_WORK_DATE({\n\t\t\t\td, allocationIndex, uniqAllocation\n\t\t\t})\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save and report this progress, `\n\t\t\t,` and `\n\t\t\t,``\n\t\t\t,[allocation]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,[].concat(\n\t\t\t\tObject.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t\t,!currentVersion()\n\t\t\t\t? [\n\t\t\t\t\t`Change to the latest schedule version to report updates`\n\t\t\t\t]\n\t\t\t\t: []\n\t\t\t)\n\t\t)\n\t}\n\n\tconst currentVersion = data.scoped(false)\n\n\tconst ActiveContractsFeature = function(){\n\t\treturn loading() == null\n\t\t\t? modules().find((module) =>\n\t\t\t\tmodule.modules_name()\n\t\t\t\t== 'Contract Obligation Tools'\n\t\t\t).modules_active()\n\t\t\t: true\n\t}\n\tconst ActiveDetailsFeature = function(){\n\t\treturn loading() == null\n\t\t\t? modules().find((module) =>\n\t\t\t\tmodule.modules_name()\n\t\t\t\t== 'Project Tasks'\n\t\t\t).modules_active()\n\t\t\t: true\n\t}\n\n\n\tcrewWorkers.map((wList) =>\n\t\t!vm().selected.allocation.allocations_allocation_complete\n\t\t? 0\n\t\t: vm().selected.allocation.allocations_allocation_complete(\n\t\t\tR.max(\n\t\t\t\tR.sum(\n\t\t\t\t\twList.map(\n\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\tR.prop('allocations_contractors_crews_work_completed')\n\t\t\t\t\t\t\t,R.call\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,vm().selected.allocation.allocations_allocation_complete()\n\t\t\t)\n\t\t)\n\t)\n\n\tconst completedWork =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.allocations_allocation_complete\n\t\t\t\t? vm().selected.allocation.allocations_allocation_complete()\n\t\t\t\t: 0\n\t\t)\n\n\n\tconst workDifference =\n\t\tcompletedWork.map((cWork) =>\n\t\t\tvm().revert.allocations_allocation_complete\n\t\t\t\t? cWork - Number(vm().revert.allocations_allocation_complete())\n\t\t\t\t: 0\n\t\t)\n\n\tcompletedWork.map((totalValue) => {\n\t\tif (\n\t\t\ttotalValue\n\t\t\t!= R.sum(\n\t\t\t\tcrewWorkers()\n\t\t\t\t\t.map( R.pipe(\n\t\t\t\t\t\tR.prop('allocations_contractors_crews_work_completed')\n\t\t\t\t\t\t, R.call\n\t\t\t\t\t))\n\t\t\t\t)\n\t\t\t&& ( totalValue || totalValue == 0 )\n\t\t\t&& crewWorkers().length\n\t\t){\n\n\t\t\tconst averageWork =\n\t\t\t\ttotalValue == 0\n\t\t\t\t? 0\n\t\t\t\t: Number(totalValue/crewWorkers().length).toFixed(2)\n\n\t\t\tcrewWorkers()\n\t\t\t.forEach((w) => {\n\t\t\t\tw.allocations_contractors_crews_work_completed(averageWork)\n\t\t\t\tconst timeUpdate =\n\t\t\t\t\ttimesheet_vm().selected.timesheet\n\t\t\t\t\t\t.find((t) => t.crew_id() == w.crew_id())\n\t\t\t\ttimeUpdate\n\t\t\t\t\t? timeUpdate\n\t\t\t\t\t\t.crew_work(\n\t\t\t\t\t\t\tw.allocations_contractors_crews_work_completed()\n\t\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t})\n\n\t\t}\n\n\t\tvm().selected.allocation.allocations_allocation_complete\n\t\t? vm().selected.allocation.allocations_allocation_complete(totalValue)\n\t\t: null\n\n\t\treturn true\n\t})\n\n\n\tfunction addSpecificWork(ts, v){\n\n\t\tif ( v != null ){\n\n\t\t\tconst focusCrew = ts.user_id()\n\t\t\t\t? crewsIndexedByAID()[ts.user_id()]\n\t\t\t\t: crewsIndexedByAID()[ts.crew_id()]\n\n\n\t\t\tts.crew_work( v )\n\t\t\tfocusCrew\n\t\t\t\t? focusCrew.allocations_contractors_crews_work_completed( v )\n\t\t\t\t: null\n\n\t\t\tcrewWorkers(crewWorkers())\n\t\t}\n\n\t\treturn ts.crew_work()\n\t}\n\n\tfunction ContractAddButton(contractType){\n\t\tconst a = vm().selected.allocation\n\t\tcontractType == 'Variation'\n\t\t\t? \t\t\t\ta.allocations_vars.unshift(resetVARS())\n\t\t\t \t&& contractvm(a.allocations_vars[0])\n\n\t\t\t: contractType == 'Notice of Delay'\n\t\t\t\t?\t\t\t\t\ta.allocations_nods.unshift(resetNODS())\n\t\t\t\t\t&& contractvm(a.allocations_nods[0])\n\n\t\t\t\t: a.allocations_eots.unshift(resetEOTS())\n\t\t\t\t\t&& contractvm(a.allocations_eots[0])\n\n\t\tcontractIndex(0)\n\t\tsetContractOptions(a)\n\t\tconsolidateContractList(a)\n\t}\n\n function getActivateDeleteButton(contractItem, returnTRUE){\n\t\tconst descriptionprop =\n\t\t\t'allocations_' + contractItem.midfix + '_description'\n\t\tconst idprop =\n\t\t\t'allocations_' + contractItem.midfix + '_id'\n\n const descriptionSelected = contractvm()[descriptionprop]\n\t\tconst idSelected = contractvm()[idprop]\n const activated =\n\t\t\tidSelected\n\t\t\t&& idSelected() + descriptionSelected()\n\t\t\t\t== contractItem[idprop]() + contractItem[descriptionprop]()\n\n return returnTRUE\n\t\t\t? activated\n\t\t\t: activated\n\t\t\t\t? m('button.btn', {\n\t\t\t\t\tonclick: () => { contractvm({}) }\n\t\t\t\t\t,title: \"Confirm Changes\"\n\t\t\t\t}, 'Done')\n\t\t\t\t: m('button.btn', {\n\t\t\t\t\tonclick: () => { contractvm(contractItem) }\n\t\t\t\t\t,title: \"Option to delete this tool\"\n\t\t\t\t}, 'Edit')\n }\n\n\tfunction ContractDeleteButton(){\n\t\treturn currentVersion()\n\t\t\t? m(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled: !contractvm().midfix\n\t\t\t\t\t|| !editUpdatePermissions()\n\t\t\t\t\t|| !currentVersion()\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tconst a = vm().selected.allocation\n\n\n\t\t\t\t\t\tcontractvm().allocations_vars_description\n\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\ta.allocations_vars.splice(\n\t\t\t\t\t\t\t\t\ta.allocations_vars\n\t\t\t\t\t\t\t\t\t\t.findIndex((c) =>\n\t\t\t\t\t\t\t\t\t\t\tc.allocations_vars_description()\n\t\t\t\t\t\t\t\t\t\t\t== contractvm().allocations_vars_description()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t&& contractvm().allocations_vars_id()\n\t\t\t\t\t\t\t\t&& varDeletions().push(contractvm().allocations_vars_id())\n\t\t\t\t\t\t\t\t&& delete errors()\n\t\t\t\t\t\t\t\t\t[contractvm().allocations_vars_description() + ' +/- Work']\n\n\t\t\t\t\t\t\t: contractvm().allocations_nods_description\n\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\ta.allocations_nods.splice(\n\t\t\t\t\t\t\t\t\t\ta.allocations_nods\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\tc.allocations_nods_description()\n\t\t\t\t\t\t\t\t\t\t\t\t== contractvm().allocations_nods_description()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t&& contractvm().allocations_nods_id()\n\t\t\t\t\t\t\t\t\t&& nodDeletions().push(contractvm().allocations_nods_id())\n\n\t\t\t\t\t\t\t\t:\t\t\t\t\t\t\t\t\ta.allocations_eots.splice(\n\t\t\t\t\t\t\t\t\t\ta.allocations_eots\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\tc.allocations_eots_description()\n\t\t\t\t\t\t\t\t\t\t\t\t== contractvm().allocations_eots_description()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t, 1\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t&& contractvm().allocations_eots_id()\n\t\t\t\t\t\t\t\t\t&& eotDeletions().push(contractvm().allocations_eots_id())\n\n\t\t\t\t\t\tsetContractOptions(a)\n\t\t\t\t\t\tcontractvm({})\n\t\t\t\t\t\tconsolidateContractList(a)\n\t\t\t\t\t\tif(!fullView()){\n\t\t\t\t\t\t\tcontractIndex() > contractList().length - 1\n\t\t\t\t\t\t\t\t? contractIndex(contractList().length - 1)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t!contractList()[contractIndex()]\n\t\t\t\t\t\t\t\t? contractvm({})\n\t\t\t\t\t\t\t\t: contractvm(contractList()[contractIndex()])\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,title: 'Delete a Contract item'\n\t\t\t\t}\n\t\t\t\t, \"Discard\"\n\t\t\t)\n\t\t\t: null\n\t}\n\n\n\tconst toolContracts =\n\t\tdata.scoped(data.allContractItems().filter((cItems) => cItems.tools_id))\n\n\tconst disciplineCalculated =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tdata.coalatedSelectedVersion\n\t\t\t\t,allocationChange\n\t\t\t]\n\t\t)\n\t\t.map(([cd]) =>\n\t\t\tvm().selected.allocation.discipline_id\n\t\t\t\t? cd[vm().selected.allocation.discipline_id()]\n\t\t\t\t: null\n\t\t)\n\n\tconst projectCalculated =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tdata.coalatedSelectedVersion\n\t\t\t\t,allocationChange\n\t\t\t]\n\t\t)\n\t\t.map(([cd]) =>\n\t\t\tvm().selected.allocation.project_id\n\t\t\t\t? cd[vm().selected.allocation.project_id()]\n\t\t\t\t: null\n\t\t)\n\n\tconst userDayContracts =\n\t\tdata.auth.stream.map((auth) =>\n\t\t\tdata.readContractPermissions()\n\t\t\t\t? data.allUserContractItems()\n\t\t\t\t: data.allContractItemsIndexByItemID()[\n\t\t\t\t\tauth.user_id\n\t\t\t\t] || []\n\t\t)\n\n\tconst allocatioCrewnData =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t? R.unnest(\n\t\t\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst allocatioCrewOldData =\n\t\tallocationChange.map(() =>\n\t\t\tvm().revert.allocations_contractors\n\t\t\t\t? R.unnest(\n\t\t\t\t\tvm().revert.allocations_contractors\n\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst crewDayContracts =\n\t\tallocatioCrewnData.map((acd) =>\n\t\t\tR.unnest(\n\t\t\t\tacd.map((acc) =>\n\t\t\t\t\tacc.user_id()\n\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t|| data.readContractPermissions()\n\n\t\t\t\t\t? data.allContractItemsIndexByItemID()[acc.crew_id()] || []\n\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst crewWorkContracts =\n\t\tallocatioCrewnData.map((acd) =>\n\t\t\tR.unnest(\n\t\t\t\tacd.map((acc) =>\n\t\t\t\t\t(\n\t\t\t\t\t\tacc.user_id()\n\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t|| data.readContractPermissions()\n\t\t\t\t\t)\n\t\t\t\t\t&& acc.crews_discipline_rates.length\n\t\t\t\t\t\t? data.allContractItemsIndexByItemID()[\n\t\t\t\t\t\t\tacc.crews_discipline_rates[0]\n\t\t\t\t\t\t\t.crews_discipline_rates_id\n\t\t\t\t\t\t] || []\n\t\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst resourceContracts =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t? R.unnest(\n\t\t\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t\t\t.map((ac) =>\n\n\t\t\t\t\t\t\t\tac.user_id()\n\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t|| data.readContractPermissions()\n\n\t\t\t\t\t\t\t\t? data.allContractItemsIndexByItemID()[ac.contractor_id()] || []\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\n\tconst currentProject =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t? vm().selected.allocation\n\t\t\t\t: {}\n\t\t)\n\n\t// const workEvaluation =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tcurrentProject\n\t\t\t\t,allocationChange\n\t\t\t]\n\t\t)\n\t\t.map(() =>\n\t\t\tR.indexBy(\n\t\t\t\t(a) => a.discipline_id()\n\t\t\t\t,disciplineExtraOptions()\n\t\t\t\t\t.map((d) => {\n\n\t\t\t\t\t\td.DisciplineWork =\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t(allocationsHash()[d.project_id()] || [] )\n\t\t\t\t\t\t\t\t.filter((a) =>\n\t\t\t\t\t\t\t\t\td.discipline_id()\n\t\t\t\t\t\t\t\t\t== a.discipline_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map((a) => a.allocations_allocation_forecast() )\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\td.DisciplineCompleted =\n\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t(allocationsHash()[d.project_id()] || [] )\n\t\t\t\t\t\t\t\t.filter((a) =>\n\t\t\t\t\t\t\t\t\td.discipline_id()\n\t\t\t\t\t\t\t\t\t== a.discipline_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map((a) => a.allocations_allocation_complete() )\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\treturn d\n\t\t\t\t\t})\n\t\t\t)\n\t)\n\n\tconst currentDiscipline =\n\t\tcurrentProject.map(() =>\n\t\t\tvm().selected.allocation.allocations_contractors\n\t\t\t\t? vm().selected.allocation\n\t\t\t\t: {}\n\t\t)\n\n\tconst fetchedExtras = data.scoped(false)\n\tconst projectExtrasStat =\n\t\tprop.scan(\n\t\t\tfunction(p, [, f]){\n\t\t\t\t// console.log('resetter', f)\n\t\t\t\treturn !f\n\t\t\t\t\t? {\n\t\t\t\t\t\tproject_extras_date_assigned: 0\n\t\t\t\t\t\t,project_extras_date_completed: 0\n\t\t\t\t\t\t,project_extras_date_verified: 0\n\t\t\t\t\t\t,project_extras_date_invalid: 0\n\t\t\t\t\t}\n\t\t\t\t\t: p\n\t\t\t}\n\t\t\t,{}\n\t\t\t,asyncMergeAll(\n\t\t\t\t[\n\t\t\t\t\tallocationChange\n\t\t\t\t\t,fetchedExtras\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\tfunction projectExtrasSum(pE, onlyprop){\n\t\t[\n\t\t\t'project_extras_date_assigned'\n\t\t\t,'project_extras_date_completed'\n\t\t\t,'project_extras_date_verified'\n\t\t\t,'project_extras_date_invalid'\n\t\t]\n\t\t.filter((theprops) => theprops == onlyprop || !onlyprop)\n\t\t.forEach((prop) => {\n\t\t\tpE[prop]()\n\t\t\t\t? projectExtrasStat()[prop] =\n\t\t\t\t\tprojectExtrasStat()[prop] + 1\n\t\t\t\t: onlyprop\n\t\t\t\t\t? projectExtrasStat()[prop] =\n\t\t\t\t\t\tprojectExtrasStat()[prop] - 1\n\t\t\t\t\t: null\n\t\t})\n\t}\n\n\tconst projectExtrasTypes =\n\t\tdata.scoped(\n\t\t\t{\n\t\t\t\tcompleted: ''\n\t\t\t\t, invalid: ''\n\t\t\t\t, verified: ''\n\t\t\t\t, assigned: 'all'\n\t\t\t}\n\t\t)\n\n\tconst cloningProjectExtra = (pe) => ({\n\t\tproject_id:\n\t\t\tm.prop(pe.project_id())\n\t\t,organizations_disciplines_id:\n\t\t\tpe.organizations_disciplines_id\n\t\t,discipline_id:\n\t\t\tm.prop(pe.discipline_id())\n\t\t,relatedDiscipline:\n\t\t\tpe.relatedDiscipline\n\t\t,parents: m.prop(pe.parents())\n\t\t,users: m.prop([])\n\t\t,project_extras_id:\n\t\t\tm.prop(pe.project_extras_id())\n\t\t,project_extras_planned_amount:\n\t\t\tm.prop(pe.project_extras_planned_amount())\n\t\t,project_extras_actual_amount:\n\t\t\tm.prop(pe.project_extras_actual_amount())\n\t\t,user_id:\n\t\t\tm.prop(pe.user_id())\n\t\t,allocation_id:\n\t\t\tm.prop(pe.allocation_id())\n\t\t,username:\n\t\t\tpe.username\n\t\t,revenueinvoices:\n\t\t\tpe.revenueinvoices\n\t\t,costinvoices:\n\t\t\tpe.costinvoices\n\t\t,invite_email: pe.invite_email\n\t\t,project_extras_type:\n\t\t\tm.prop(pe.project_extras_type())\n\t\t,project_extras_frequency:\n\t\t\tm.prop(pe.project_extras_frequency())\n\t\t,project_extras_custom:\n\t\t\tm.prop(pe.project_extras_custom())\n\t\t,project_extras_description:\n\t\t\tm.prop(pe.project_extras_description())\n\t\t,project_extras_date_assigned:\n\t\t\tm.prop(pe.project_extras_date_assigned())\n\t\t,project_extras_date_completed:\n\t\t\tm.prop(pe.project_extras_date_completed())\n\t\t,project_extras_priority:\n\t\t\tm.prop(pe.project_extras_priority())\n\t\t,project_extras_date_verified:\n\t\t\tm.prop(pe.project_extras_date_verified())\n\t\t,project_extras_date_invalid:\n\t\t\tm.prop(pe.project_extras_date_invalid())\n\t\t,project_extras_notes:\n\t\t\tm.prop(pe.project_extras_notes())\n\t\t,project_extras_address:\n\t\t\tm.prop(pe.project_extras_address())\n\t\t,organization_id:\n\t\t\tm.prop(data.initiateContractFetch().organization_id)\n\t\t,contract_id:\n\t\t\tpe.contract_id\n\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t,filecount: pe.filecount\n\t\t,project_name: pe.project_name\n\t\t,invite_id: pe.invite_id\n\t\t,schedule_id: pe.schedule_id\n\t})\n\n\t// const fetchprojectDetails =\n\t\tprop.scan(\n\t\t\tfunction(previous, [\n\t\t\t\tallocationD\n\t\t\t\t, activeTab\n\t\t\t\t, activeLandingTab\n\t\t\t\t, SelectedDiscipline\n\t\t\t\t, SelectedProject\n\t\t\t\t, peT\n\t\t\t\t// , dbox\n\t\t\t\t, fView\n\t\t\t]){\n\n\t\t\t\tconst gettasks =\n\t\t\t\t\tallocationD.discipline_id\n\t\t\t\t\t&& allocationD.discipline_id()\n\t\t\t\t\t&& !fetchedExtras()\n\t\t\t\t\t&& activeTab == 'Project Tasks'\n\t\t\t\t\t&& fView\n\n\t\t\t\t\t|| activeLandingTab == 'Tasks'\n\t\t\t\t\t&& !fetchedExtras()\n\t\t\t\t\t&& SelectedProject.project_name\n\n\t\t\t\tif( gettasks ){\n\t\t\t\t\tfetchedExtras(true)\n\t\t\t\t\tmaterials({actual: [], suggested: []})\n\t\t\t\t}\n\n\t\t\t\tconst peList =\n\t\t\t\t\tgettasks\n\t\t\t\t\t? Promise.all([\n\t\t\t\t\t\tdata.fetchProjectExtras(\n\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\tdateframeprojects()\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tproject_id:\n\t\t\t\t\t\t\t\t\t\tSelectedProject.project_id\n\t\t\t\t\t\t\t\t\t\t&& SelectedProject.project_id()\n\t\t\t\t\t\t\t\t\t,discipline_id: SelectedDiscipline.discipline_id\n\t\t\t\t\t\t\t\t\t\t? SelectedDiscipline.discipline_id()\n\t\t\t\t\t\t\t\t\t\t: allocationD.discipline_id && fView\n\t\t\t\t\t\t\t\t\t\t? allocationD.discipline_id()\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t,f: fetchedExtras\n\t\t\t\t\t\t\t\t\t,pcomplete: `not completed`\n\t\t\t\t\t\t\t\t\t,typesObj: !fView\n\t\t\t\t\t\t\t\t\t\t? peT\n\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\tcompleted: 'any'\n\t\t\t\t\t\t\t\t\t\t\t, invalid: 'any'\n\t\t\t\t\t\t\t\t\t\t\t, verified: 'any'\n\t\t\t\t\t\t\t\t\t\t\t, assigned: 'any'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,uniqBy: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t\t.then(function([result]){\n\n\t\t\t\t\t\t\tprevtasks([])\n\n\t\t\t\t\t\t\tconst eView =\n\t\t\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t\t\t.filter(R.prop('created'))\n\n\t\t\t\t\t\t\tconst sView =\n\t\t\t\t\t\t\t\tR.differenceWith(\n\t\t\t\t\t\t\t\t\t(a, b) => a.project_extras_id()\n\t\t\t\t\t\t\t\t\t== b.project_extras_id()\n\t\t\t\t\t\t\t\t\t,result\n\t\t\t\t\t\t\t\t\t,eView\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tconst beView =\n\t\t\t\t\t\t\t\tbaseProjectDetails()\n\t\t\t\t\t\t\t\t.filter((t) =>\n\t\t\t\t\t\t\t\t\teView.find((ft) =>\n\t\t\t\t\t\t\t\t\t\tft.project_extras_id\n\t\t\t\t\t\t\t\t\t\t== t.project_extras_id\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\teView.map((t) => projectExtrasSum(t, null))\n\n\t\t\t\t\t\t\tdisciplineOptions(\n\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\tallDisciplines\n\t\t\t\t\t\t\t\t\t,R.uniqBy(\n\t\t\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\t\ttypeof a.organizations_disciplines_id == 'function'\n\t\t\t\t\t\t\t\t\t\t? a.organizations_disciplines_id()\n\t\t\t\t\t\t\t\t\t\t: a.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t,result\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\tR.tap((t) =>\n\t\t\t\t\t\t\t\t\t\t\tt.discplineNameDescription = t.relatedDiscipline\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tbaseProjectDetails(beView.concat(sView))\n\t\t\t\t\t\t\tprojectDetails(\n\t\t\t\t\t\t\t\teView.concat(sView)\n\t\t\t\t\t\t\t\t.map((pe) => {\n\t\t\t\t\t\t\t\t\tprojectExtrasSum(pe, null)\n\t\t\t\t\t\t\t\t\treturn cloningProjectExtra(pe)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\tfetchedExtras(true)\n\t\t\t\t\t\t\tmasterTaskList(true)\n\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t})\n\t\t\t\t\t: previous\n\n\t\t\t\treturn peList\n\t\t\t}\n\t\t\t,[]\n\t\t\t,asyncMergeAll(\n\t\t\t\t[\n\t\t\t\t\tcurrentDiscipline\n\t\t\t\t\t,activeTab\n\t\t\t\t\t,activeLandingTab\n\t\t\t\t\t,SelectedDiscipline\n\t\t\t\t\t,SelectedProject\n\t\t\t\t\t,projectExtrasTypes\n\t\t\t\t\t// ,discipline_box\n\t\t\t\t\t,fullView\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\tconst projectNotes =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tSelectedProject\n\t\t\t\t,SelectedDiscipline\n\t\t\t\t,allocationsHash\n\t\t\t\t,activeLandingTab\n\t\t\t\t,CONSTANTProjectExtras\n\t\t\t]\n\t\t)\n\t\t.map(([p, ,a,l,nt]) =>\n\t\t\t!p.project_id\n\t\t\t? []\n\t\t\t: l == 'Tasks'\n\t\t\t? R.groupWith(\n\t\t\t\t(t, a) => t.project_extras_type() == a.project_extras_type()\n\t\t\t\t,R.sortBy(\n\t\t\t\t\t(t) => t.project_extras_type()\n\t\t\t\t\t,nt.filter((t) =>\n\t\t\t\t\t\tt.project_extras_notes()\n\t\t\t\t\t\t|| t.project_extras_date_completed()\n\t\t\t\t\t\t|| t.project_extras_date_invalid()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map((st) =>\n\t\t\t\t[st[0].project_extras_type() + ' - '\n\t\t\t\t,st.map((t) => [(t.relatedDiscipline || \"\") + ' x ' + t.project_extras_actual_amount() + ' - ', t.project_extras_notes() || \"\"] )]\n\t\t\t)\n\t\t\t: !a[p.project_id()]\n\t\t\t? []\n\t\t\t: R.groupWith(\n\t\t\t\t(t, a) => t.allocations_allocation_date() == a.allocations_allocation_date()\n\t\t\t\t,R.sortBy(\n\t\t\t\t\t(t) => t.allocations_allocation_date()\n\t\t\t\t\t,a[p.project_id()]\n\t\t\t\t\t.filter((a) => a.allocations_completion_comments() || nt.find((t) => t.allocation_id() == a.allocation_id()))\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map((a) => {\n\t\t\t\tconst repDate = new Date( a[0].allocations_allocation_date() )\n\t\t\t\tconst localrepDate = new Date(repDate.setMinutes( + repDate.getTimezoneOffset())).toString(15)\n\t\t\t\treturn [\n\t\t\t\t\tmoment(localrepDate).format(\"ll\") + ' - '\n\t\t\t\t\t,a.map((ac) => ac.allocations_completion_comments())\n\t\t\t\t\t.filter(R.identity)\n\t\t\t\t\t.map((ac) => [ac, ''])\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t(t) => t.project_extras_type() + t.relatedDiscipline\n\t\t\t\t\t\t\t,R.sortBy(\n\t\t\t\t\t\t\t\t(t) => t.project_extras_type()\n\t\t\t\t\t\t\t\t,nt.filter((t) =>\n\t\t\t\t\t\t\t\t\tt.project_extras_date_completed()\n\t\t\t\t\t\t\t\t\t&& a.find((aa) => aa.allocation_id() == t.allocation_id())\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((t) => [t.project_extras_type() + ' - ' + t.relatedDiscipline, t.project_extras_notes()])\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t})\n\t\t)\n\n\tfunction DisableProjectExtraSave(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(d) => d && !d.project_extras_type()\n\t\t\t\t? `Task Name`\n\t\t\t\t: null\n\t\t\t,(d) =>\n\t\t\t\td\n\t\t\t\t&& !d.organizations_disciplines_id\n\t\t\t\t&& d.newtask\n\t\t\t\t? `Related Discipline`\n\t\t\t\t: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t`To save these project tasks `\n\t\t\t,` and `\n\t\t\t,` must not be empty`\n\t\t\t,projectDetails()\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,[].concat(\n\t\t\t\tObject.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t\t)\n\t\t)\n\t}\n\n\tasyncMergeAll(\n\t\t[\n\t\t\tdata.calculated\n\t\t\t,errors\n\t\t\t,baseProjectDetails\n\t\t\t,projectDetails\n\t\t\t,timesheets\n\t\t\t,allocationsHash\n\t\t\t,sortedAllocations\n\t\t\t,resources\n\t\t\t,childResUsers\n\t\t\t,allocations\n\t\t]\n\t)\n\t.map(() => {\n\t\t// eslint-disable-next-line no-undef\n\t\tsetTimeout(function(){\n\t\t\tm.redraw()\n\t\t}, 0)\n\n\t\treturn null\n\t})\n\n\n\tconst projectContracts =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.discipline_id\n\t\t\t\t? data.allContractItemsIndexByItemID()[\n\t\t\t\t\tvm().selected.allocation.project_id()\n\t\t\t\t] || []\n\t\t\t\t: []\n\t\t)\n\n\tconst disciplineContract =\n\t\tallocationChange.map(() =>\n\t\t\tvm().selected.allocation.project_id\n\t\t\t\t? data.allContractItemsIndexByItemID()[\n\t\t\t\t\tvm().selected.allocation.organizations_disciplines_id()\n\t\t\t\t] || []\n\t\t\t\t: []\n\t\t)\n\n\n\n\tconst contractInvoiceables =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\ttoolContracts\n\t\t\t\t,projectContracts\n\t\t\t\t,resourceContracts\n\t\t\t\t,disciplineContract\n\t\t\t\t,crewDayContracts\n\t\t\t\t,userDayContracts\n\t\t\t\t,crewWorkContracts\n\t\t\t]\n\t\t)\n\t\t.map((contractData) =>\n\t\t\tR.unnest(\n\t\t\t\tcontractData\n\t\t\t)\n\t\t)\n\n\t// ADD MULTIPLIER HOW\n\tconst newDollarsArray =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tuserDayContracts\n\t\t\t\t,crewDayContracts\n\t\t\t\t,crewWorkContracts\n\t\t\t\t,disciplineContract\n\t\t\t\t,todaysInvoices\n\t\t\t\t,workDifference\n\t\t\t]\n\t\t).map(([\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t]) =>\n\t\t\tvm().selected.allocation.allocations_allocation_date\n\t\t\t\t? R.unnest(\n\t\t\t\t\t[].concat(\n\t\t\t\t\t\tuserDayContracts\n\t\t\t\t\t\t,crewDayContracts\n\t\t\t\t\t\t,crewWorkContracts\n\t\t\t\t\t\t,disciplineContract\n\t\t\t\t\t\t,todaysInvoices\n\t\t\t\t\t)\n\t\t\t\t\t.filter((cItems) => cItems.contract_items_applied != false )\n\t\t\t\t\t.map((contractItem) => {\n\n\t\t\t\t\t\t// when resources are deleted and old versions still\n\t\t\t\t\t\t// have resources the below errors\n\t\t\t\t\t\t// at crews_discipline_rates[0]\n\t\t\t\t\t\tconst fAmount =\n\t\t\t\t\t\t\t!contractItem.crew_id\n\t\t\t\t\t\t\t&& !contractItem.user_id\n\t\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t? R.sum(\n\t\t\t\t\t\t\t\t\t\tallocatioCrewnData().map((acc) =>\n\t\t\t\t\t\t\t\t\t\t\tacc.allocations_contractors_crews_work_forecasted()\n\t\t\t\t\t\t\t\t\t\t\t* acc.allocations_contractors_crews_work_application()\n\t\t\t\t\t\t\t\t\t\t\t|| 0\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: allocatioCrewnData().find((acc) =>\n\t\t\t\t\t\t\t\t\t\tacc.crews_discipline_rates[0]\n\t\t\t\t\t\t\t\t\t\t&& acc.crews_discipline_rates[0].crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t) || {\n\t\t\t\t\t\t\t\t\t\tallocations_contractors_crews_work_forecasted: m.prop(0)\n\t\t\t\t\t\t\t\t\t\t,allocations_contractors_crews_work_application: m.prop(1)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: contractItem.contract_items_recorded_reference_standard\n\n\t\t\t\t\t\treturn data.criteriaBasedCalculation(\n\t\t\t\t\t\t\tcontractItem\n\t\t\t\t\t\t\t, contractItem.invoice_id\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tincriment: 'invoice'\n\t\t\t\t\t\t\t\t\t,forecastedWorkAmount: null\n\t\t\t\t\t\t\t\t\t,forecastedDamagesAmount: null\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tincriment: 'contract'\n\t\t\t\t\t\t\t\t\t,forecastedWorkAmount:\n\t\t\t\t\t\t\t\t\t\t!contractItem.crew_id && !contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t\t? fAmount\n\t\t\t\t\t\t\t\t\t\t\t\t: fAmount\n\t\t\t\t\t\t\t\t\t\t\t\t\t.allocations_contractors_crews_work_forecasted()\n\t\t\t\t\t\t\t\t\t\t\t\t* fAmount\n\t\t\t\t\t\t\t\t\t\t\t\t\t.allocations_contractors_crews_work_application()\n\t\t\t\t\t\t\t\t\t\t\t: contractItem.contract_items_recorded_reference_standard\n\n\t\t\t\t\t\t\t\t\t,accruedAmount:\n\t\t\t\t\t\t\t\t\t\t!contractItem.crew_id\n\t\t\t\t\t\t\t\t\t\t&& !contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t\t? R.sum(\n\t\t\t\t\t\t\t\t\t\t\t\t\tallocatioCrewnData()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.map((acc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tacc.allocations_contractors_crews_work_completed()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((\n\t\t\t\t\t\t\t\t\t\t\t\t\tallocatioCrewnData().find((acc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tacc.crews_discipline_rates[0]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tallocations_contractors_crews_work_completed:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm.prop(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t).allocations_contractors_crews_work_completed())\n\n\t\t\t\t\t\t\t\t\t\t\t: contractItem.contract_items_recorded_reference\n\t\t\t\t\t\t\t\t\t\t\t\t!= 'Timesheets'\n\t\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t\t: R.sum(\n\t\t\t\t\t\t\t\t\t\t\t\t\ttimesheet_vm().selected.timesheet\n\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontractItem.crew_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t.crew_id() == contractItem.crew_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: t.user_id() == contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.map((t) => t.crew_hours() )\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,forecastedDamagesAmount:\n\t\t\t\t\t\t\t\t\t\tvm().selected.allocation.allocations_allocation_date()\n\t\t\t\t\t\t\t\t\t\t>= new Date(contractItem.contractEnd).getTime()\n\t\t\t\t\t\t\t\t\t\t&& vm().selected.allocation.allocations_allocation_date()\n\t\t\t\t\t\t\t\t\t\t<= new Date(contractItem.damagesEnd).getTime()\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst oldDollarsArray =\n\t\tOldDollarsArray({\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t\t,workDifference\n\t\t\t,allocatioCrewnData\n\t\t\t,criteriaBasedCalculation: data.criteriaBasedCalculation\n\t\t\t,allocatioCrewOldData\n\t\t\t,vm\n\t\t\t,timesheets\n\t\t})\n\n\tconst oldDollars =\n\t\toldDollarsArray.map((iArray) =>\n\t\t\tR.reduce(\n\t\t\t\tdata.accumulator\n\t\t\t\t,{\n\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t,budget: 0\n\t\t\t\t}\n\t\t\t\t,R.unnest(iArray)\n\t\t\t)\n\t\t)\n\n\tconst newDollars =\n\t\tnewDollarsArray.map((iArray) =>\n\t\t\tR.reduce(\n\t\t\t\tdata.accumulator\n\t\t\t\t,{\n\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t,budget: 0\n\t\t\t\t}\n\t\t\t\t,R.unnest(iArray)\n\t\t\t)\n\t\t)\n\n\tconst differenceDollars = asyncMergeAll(\n\t\t[\n\t\t\tnewDollars\n\t\t\t,oldDollars\n\t\t]\n\t).map(([oldDollars, newDollars]) => {\n\t\treturn {\n\t\t\tcurrentRevenue:\n\t\t\t\tnewDollars.currentRevenue\n\t\t\t\t- oldDollars.currentRevenue\n\t\t\t,forecastedRevenue:\n\t\t\t\tnewDollars.forecastedRevenue\n\t\t\t\t- oldDollars.forecastedRevenue\n\t\t\t,forecastedExpenditures:\n\t\t\t\tnewDollars.forecastedExpenditures\n\t\t\t\t- oldDollars.forecastedExpenditures\n\t\t\t,currentExpenditures:\n\t\t\t\tnewDollars.currentExpenditures\n\t\t\t\t- oldDollars.currentExpenditures\n\t\t\t,currentProfits:\n\t\t\t\tnewDollars.currentProfits\n\t\t\t\t- oldDollars.currentProfits\n\t\t\t,forecastedProfits:\n\t\t\t\tnewDollars.forecastedProfits\n\t\t\t\t- oldDollars.forecastedProfits\n\t\t\t,outstandingRevenue:\n\t\t\t\tnewDollars.outstandingRevenue\n\t\t\t\t- oldDollars.outstandingRevenue\n\t\t\t,outstandingExpenditures:\n\t\t\t\tnewDollars.outstandingExpenditures\n\t\t\t\t- oldDollars.outstandingExpenditures\n\t\t\t,outstandingProfits:\n\t\t\t\tnewDollars.outstandingProfits\n\t\t\t\t- oldDollars.outstandingProfits\n\t\t\t,accruedExpenditures:\n\t\t\t\tnewDollars.accruedExpenditures\n\t\t\t\t- oldDollars.accruedExpenditures\n\t\t\t,accruedRevenue:\n\t\t\t\tnewDollars.accruedRevenue\n\t\t\t\t- oldDollars.accruedRevenue\n\t\t\t,accruedProfits:\n\t\t\t\tnewDollars.accruedProfits\n\t\t\t\t- oldDollars.accruedProfits\n\t\t\t,budget:\n\t\t\t\tnewDollars.budget\n\t\t\t\t- oldDollars.budget\n\t\t}\n\t})\n\n\t// const projectDollars =\n\tasyncMergeAll(\n\t\t[\n\t\t\tprojectCalculated\n\t\t\t,differenceDollars\n\t\t]\n\t).map(([pDollars, difference]) => {\n\t\treturn pDollars\n\t\t\t? {\n\t\t\t\tcurrentRevenue:\n\t\t\t\t\tpDollars.currentRevenue\n\t\t\t\t\t + difference.currentRevenue\n\t\t\t\t,forecastedRevenue:\n\t\t\t\t\tpDollars.forecastedRevenue\n\t\t\t\t\t + difference.forecastedRevenue\n\t\t\t\t,forecastedExpenditures:\n\t\t\t\t\tpDollars.forecastedExpenditures\n\t\t\t\t\t + difference.forecastedExpenditures\n\t\t\t\t,currentExpenditures:\n\t\t\t\t\tpDollars.currentExpenditures\n\t\t\t\t\t + difference.currentExpenditures\n\t\t\t\t,currentProfits:\n\t\t\t\t\tpDollars.currentProfits\n\t\t\t\t\t + difference.currentProfits\n\t\t\t\t,forecastedProfits:\n\t\t\t\t\tpDollars.forecastedProfits\n\t\t\t\t\t + difference.forecastedProfits\n\t\t\t\t,outstandingRevenue:\n\t\t\t\t\tpDollars.outstandingRevenue\n\t\t\t\t\t + difference.outstandingRevenue\n\t\t\t\t,outstandingExpenditures:\n\t\t\t\t\tpDollars.outstandingExpenditures\n\t\t\t\t\t + difference.outstandingExpenditures\n\t\t\t\t,outstandingProfits:\n\t\t\t\t\tpDollars.outstandingProfits\n\t\t\t\t\t + difference.outstandingProfits\n\t\t\t\t,accruedExpenditures:\n\t\t\t\t\tpDollars.accruedExpenditures\n\t\t\t\t\t + difference.accruedExpenditures\n\t\t\t\t,accruedRevenue:\n\t\t\t\t\tpDollars.accruedRevenue\n\t\t\t\t\t + difference.accruedRevenue\n\t\t\t\t,accruedProfits:\n\t\t\t\t\tpDollars.accruedProfits\n\t\t\t\t\t + difference.accruedProfits\n\t\t\t\t,accruedDailyRevenue:\n\t\t\t\t\tpDollars.accruedDailyRevenue\n\t\t\t\t,outstandingDailyRevenue:\n\t\t\t\t\tpDollars.outstandingDailyRevenue\n\t\t\t\t,currentDailyRevenue:\n\t\t\t\t\tpDollars.currentDailyRevenue\n\t\t\t\t,forecastedDailyRevenue:\n\t\t\t\t\tpDollars.forecastedDailyRevenue\n\t\t\t\t,accruedDailyProfits:\n\t\t\t\t\tpDollars.accruedDailyProfits\n\t\t\t\t,outstandingDailyProfits:\n\t\t\t\t\tpDollars.outstandingDailyProfits\n\t\t\t\t,currentDailyProfits:\n\t\t\t\t\tpDollars.currentDailyProfits\n\t\t\t\t,forecastedDailyProfits:\n\t\t\t\t\tpDollars.forecastedDailyProfits\n\t\t\t\t,budget:\n\t\t\t\t\tpDollars.budget - pDollars.budget\n\t\t\t}\n\t\t: false\n\t})\n\n\t// const disciplineDollars =\n\tasyncMergeAll(\n\t\t[\n\t\t\tdisciplineCalculated\n\t\t\t,differenceDollars\n\t\t]\n\t).map(([dDollars, difference]) => {\n\t\treturn dDollars\n\t\t\t? {\n\t\t\t\tcurrentRevenue:\n\t\t\t\t\tdDollars.currentRevenue\n\t\t\t\t\t + difference.currentRevenue\n\t\t\t\t,forecastedRevenue:\n\t\t\t\t\tdDollars.forecastedRevenue\n\t\t\t\t\t + difference.forecastedRevenue\n\t\t\t\t,forecastedExpenditures:\n\t\t\t\t\tdDollars.forecastedExpenditures\n\t\t\t\t\t + difference.forecastedExpenditures\n\t\t\t\t,currentExpenditures:\n\t\t\t\t\tdDollars.currentExpenditures\n\t\t\t\t\t + difference.currentExpenditures\n\t\t\t\t,currentProfits:\n\t\t\t\t\tdDollars.currentProfits\n\t\t\t\t\t + difference.currentProfits\n\t\t\t\t,forecastedProfits:\n\t\t\t\t\tdDollars.forecastedProfits\n\t\t\t\t\t + difference.forecastedProfits\n\t\t\t\t,outstandingRevenue:\n\t\t\t\t\tdDollars.outstandingRevenue\n\t\t\t\t\t + difference.outstandingRevenue\n\t\t\t\t,outstandingExpenditures:\n\t\t\t\t\tdDollars.outstandingExpenditures\n\t\t\t\t\t + difference.outstandingExpenditures\n\t\t\t\t,outstandingProfits:\n\t\t\t\t\tdDollars.outstandingProfits\n\t\t\t\t\t + difference.outstandingProfits\n\t\t\t\t,accruedExpenditures:\n\t\t\t\t\tdDollars.accruedExpenditures\n\t\t\t\t\t + difference.accruedExpenditures\n\t\t\t\t,accruedRevenue:\n\t\t\t\t\tdDollars.accruedRevenue\n\t\t\t\t\t + difference.accruedRevenue\n\t\t\t\t,accruedProfits:\n\t\t\t\t\tdDollars.accruedProfits\n\t\t\t\t\t + difference.accruedProfits\n\t\t\t\t,accruedDailyRevenue:\n\t\t\t\t\tdDollars.accruedDailyRevenue\n\t\t\t\t,outstandingDailyRevenue:\n\t\t\t\t\tdDollars.outstandingDailyRevenue\n\t\t\t\t,currentDailyRevenue:\n\t\t\t\t\tdDollars.currentDailyRevenue\n\t\t\t\t,forecastedDailyRevenue:\n\t\t\t\t\tdDollars.forecastedDailyRevenue\n\t\t\t\t,accruedDailyProfits:\n\t\t\t\t\tdDollars.accruedDailyProfits\n\t\t\t\t,outstandingDailyProfits:\n\t\t\t\t\tdDollars.outstandingDailyProfits\n\t\t\t\t,currentDailyProfits:\n\t\t\t\t\tdDollars.currentDailyProfits\n\t\t\t\t,forecastedDailyProfits:\n\t\t\t\t\tdDollars.forecastedDailyProfits\n\t\t\t\t,budget: dDollars.budget - dDollars.budget\n\t\t\t}\n\t\t\t: false\n\t})\n\n\n\tconst filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ ugly_name: 'tools_'}\n\t\t\t,{ ugly_name: 'teamresourcename', better_name: 'Assigned'}\n\t\t\t,{ ugly_name: 'allocations_'}\n\t\t\t,{ ugly_name: 'allocations_contractors_'}\n\t\t\t,{ ugly_name: \"allocations_eots_description\"\n\t\t\t, better_name: \"Extension of Time Description\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_eots_clause\"\n\t\t\t, better_name: \"Extension of Time Clause\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_eots_escalated\"\n\t\t\t, better_name: \"Escalated Extension of Time\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_eots_approved\"\n\t\t\t, better_name: \"Approved Extension of Time\"\n\t\t\t}\n\n\t\t\t,{ ugly_name: \"allocations_vars_description\"\n\t\t\t, better_name: \"Variation Description\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_vars_clause\"\n\t\t\t, better_name: \"Variation Clause\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_vars_amount\"\n\t\t\t, better_name: \"Variation Amount\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_vars_escalated\"\n\t\t\t, better_name: \"Escalated Variation\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_vars_approved\"\n\t\t\t, better_name: \"Approved Variation\"\n\t\t\t}\n\n\t\t\t,{ ugly_name: \"allocations_nods_description\"\n\t\t\t, better_name: \"Notice of Delay Description\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_nods_escalated\"\n\t\t\t, better_name: \"Escalated Notice of Delay\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_nods_clause\"\n\t\t\t, better_name: \"Notice of Delay Clause\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_nods_approved\"\n\t\t\t, better_name: \"Approved Notice of Delay\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_work_name\"\n\t\t\t, better_name: \"Discipline Name\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_project_harshness\"\n\t\t\t, better_name: \"Discipline Harshness\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_allocation_date\"\n\t\t\t, better_name: \"Work Date\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_bad_day\"\n\t\t\t, better_name: \"Work Days unable to Resource\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_weather_status\"\n\t\t\t, better_name: \"Weather interrupted Days\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_day_status\"\n\t\t\t, better_name: \"Event interrupted Days\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_allocation_complete\"\n\t\t\t, better_name: \"Work Complete\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_allocation_forecast\"\n\t\t\t, better_name: \"Forecasted Work\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_completion_comments\"\n\t\t\t, better_name: \"Work Notes\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_project_name\"\n\t\t\t, better_name: \"Project Name\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_name\"\n\t\t\t, better_name: \"Resource Name\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_quality_rating\"\n\t\t\t, better_name: \"Resource Quality Rating\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors\"\n\t\t\t, better_name: \"Amount of Resources\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_crews\"\n\t\t\t, better_name: \"Amount of Teams\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_crews_name\"\n\t\t\t, better_name: \"Team Name\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_crews_contract_multiplier\"\n\t\t\t, better_name: \"Team Contract Rate Multiplier\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_crews_work_completed\"\n\t\t\t, better_name: \"Teams Completed Work\"\n\t\t\t}\n\t\t\t,{ ugly_name: \"allocations_contractors_crews_work_forecasted\"\n\t\t\t, better_name: \"Teams Forecasted Work\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'relatedDiscipline'\n\t\t\t, better_name: \"Related Discipline\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_type'\n\t\t\t, better_name: \"Task Name\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_frequency'\n\t\t\t, better_name: 'Task Frequency'\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_custom'\n\t\t\t, better_name: \"Task Manually Allocated\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_priority'\n\t\t\t, better_name: \"Task Prioriy\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_description'\n\t\t\t, better_name: \"Task Description\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_date_assigned'\n\t\t\t, better_name: \"Task Date Assigned\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_date_completed'\n\t\t\t, better_name: \"Task Date Completed\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_date_verified'\n\t\t\t, better_name: \"Task Date Verified\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_date_invalid'\n\t\t\t, better_name: \"Task Date Invalid\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_notes'\n\t\t\t, better_name: \"Work Notes\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_address'\n\t\t\t, better_name: \"Task Address\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_planned_amount'\n\t\t\t, better_name: \"Task Amount\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'project_extras_actual_amount'\n\t\t\t, better_name: \"Task Actual Amount\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'username'\n\t\t\t, better_name: \"Task Assignee\"\n\t\t\t}\n\t\t\t,{ ugly_name: 'filecount'\n\t\t\t, better_name: 'File Count'\n\t\t\t}\n\t\t]\n\t\t,uniqueArrays: []\n\t\t,template: {\n\t\t\tallocations_completion_comments: \"\"\n\t\t\t,project_name: \"\"\n\t\t\t,allocations_work_name: \"\"\n\t\t\t,allocations_project_harshness: 0\n\t\t\t,allocations_allocation_date: \"date\"\n\t\t\t,allocations_bad_day: \"\"\n\t\t\t,allocations_day_status: \"\"\n\t\t\t,allocations_weather_status: \"\"\n\t\t\t,allocations_allocation_complete: 0\n\t\t\t,allocations_allocation_forecast: 0\n\t\t\t,allocations_contractors: [{\n\t\t\t\tallocations_contractors_name: \"\"\n\t\t\t\t,allocations_contractors_quality_rating: 0\n\t\t\t\t,allocations_contractors_crews: [{\n\t\t\t\t\tallocations_contractors_crews_name: \"\"\n\t\t\t\t\t,allocations_contractors_crews_work_completed: 0\n\t\t\t\t\t,allocations_contractors_crews_work_forecasted: 0\n\t\t\t\t\t,allocations_contractors_crews_contract_multiplier: 0\n\t\t\t\t}],\n\t\t\t}]\n\t\t\t,allocations_eots: [{\n\t\t\t\tallocations_eots_description: \"\"\n\t\t\t\t,allocations_eots_clause: \"\"\n\t\t\t\t,allocations_eots_escalated: true\n\t\t\t\t,allocations_eots_approved: true\n\t\t\t}]\n\t\t\t,allocations_vars: [{\n\t\t\t\tallocations_vars_description: \"\"\n\t\t\t\t,allocations_vars_clause: \"\"\n\t\t\t\t,allocations_vars_amount: 0\n\t\t\t\t,allocations_vars_escalated: true\n\t\t\t\t,allocations_vars_approved: true\n\t\t\t}]\n\t\t\t,allocations_nods: [{\n\t\t\t\tallocations_nods_description: \"\"\n\t\t\t\t,allocations_nods_clause: \"\"\n\t\t\t\t,allocations_nods_escalated: true\n\t\t\t\t,allocations_nods_approved: true\n\t\t\t}],\n\t\t}\n\t\t,Ttemplate: {\n\t\t\tteamresourcename: \"\"\n\t\t\t,tools_name: \"\"\n\t\t\t,tools_description: \"\"\n\t\t\t,tools_condition: \"\"\n\t\t\t,tools_location: \"\"\n\t\t\t,tools_ownership: \"\"\n\t\t\t,tools_type: \"\"\n\t\t}\n\t\t,project_extras:[{\n\t\t\trelatedDiscipline: \"\"\n\t\t\t,project_extras_planned_amount: 0\n\t\t\t,project_extras_actual_amount: 0\n\t\t\t,project_extras_type: \"\"\n\t\t\t,project_extras_frequency: 0\n\t\t\t,project_extras_custom: true\n\t\t\t,project_extras_description: \"\"\n\t\t\t,project_extras_priority: 0\n\t\t\t,project_extras_date_assigned: \"date\"\n\t\t\t,project_extras_date_completed: \"date\"\n\t\t\t,project_extras_date_verified: \"date\"\n\t\t\t,project_extras_date_invalid: \"date\"\n\t\t\t,project_extras_notes: \"\"\n\t\t\t,project_extras_address: \"\"\n\t\t\t,username: \"\"\n\t\t\t,invite_email: \"\"\n\t\t\t,filecount: 0\n\t\t}]\n\t}\n\n\tfunction getfilters(button, marker){\n\t\tlet datainput = marker == \"Update\"\n\t\t\t? filterFunction.updateFilters\n\t\t\t: marker == \"Tasks\"\n\t\t\t\t? filterFunction.projectExtrasFilters\n\t\t\t\t: filterFunction.ToolsFilters\n\n\t\tif (datainput == null){\n\t\t\tfilterFunction.updateFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template\n\t\t\t\t,disabled: () => !allocations() || allocations().length == 0\n\t\t\t}\n\t\t\tfilterFunction.ToolsFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.Ttemplate\n\t\t\t\t,disabled: () => tools().length == 0\n\t\t\t}\n\t\t\tfilterFunction.projectExtrasFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.project_extras[0]\n\t\t\t\t,disabled: () => projectDetails().length == 0\n\t\t\t}\n\t\t\tdatainput = marker == \"Update\"\n\t\t\t\t? filterFunction.updateFilters\n\t\t\t\t: marker == \"Tasks\"\n\t\t\t\t\t? filterFunction.projectExtrasFilters\n\t\t\t\t\t: filterFunction.ToolsFilters\n\t\t}\n\n\t\tconst gotfilters =\n\t\t\tdatainput == null\n\t\t\t\t? null\n\t\t\t\t: datainput.operationalFilters(\n\t\t\t\t\tfilterView(\n\t\t\t\t\t\tdatainput.template\n\t\t\t\t\t\t, datainput.filters()\n\t\t\t\t\t\t, datainput.changeNames\n\t\t\t\t\t\t, datainput.uniqueArrays\n\t\t\t\t\t\t, datainput.disabled\n\t\t\t\t\t\t, marker\n\t\t\t\t\t\t, data.scoped\n\t\t\t\t\t)\n\t\t\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\n\t\treturn gotfilters.generatedElements\n\t}\n\n\tfunction cloningTool(){\n\t\tconst newtools = tools().map((t) => {\n\t\t\tconst newtool = {\n\t\t\t\ttools_id: m.prop( t.tools_id() )\n\t\t\t\t,crew_id: m.prop( t.crew_id() )\n\t\t\t\t,teamresourcename: m.prop( t.teamresourcename )\n\t\t\t\t,organization_id: m.prop( t.organization_id())\n\t\t\t\t,tools_description: m.prop( t.tools_description() )\n\t\t\t\t,tools_name: m.prop(t.tools_name())\n\t\t\t\t,tools_condition: m.prop(t.tools_condition())\n\t\t\t\t,tools_location: m.prop(t.tools_location())\n\t\t\t\t,tools_ownership: m.prop(t.tools_ownership())\n\t\t\t\t,tools_type: m.prop(t.tools_type())\n\t\t\t\t,assigneduser: t.assigneduser\n\t\t\t}\n\t\t\treturn newtool\n\t\t})\n\t\treturn newtools\n\t}\n\n\t// eslint-disable-next-line complexity\n\tfunction createTask(task, cloning){\n\n\t\tconst disciplineId =\n\t\t\tSelectedDiscipline().discipline_id\n\t\t\t\t? SelectedDiscipline().discipline_id()\n\t\t\t\t: currentDiscipline().discipline_id\n\t\t\t\t? currentDiscipline().discipline_id()\n\t\t\t\t: null\n\n\t\tconst organizationDisciplineId =\n\t\t\tSelectedDiscipline().organizations_disciplines_id\n\t\t\t\t? SelectedDiscipline().organizations_disciplines_id\n\t\t\t\t: currentDiscipline().organizations_disciplines_id\n\t\t\t\t? currentDiscipline().organizations_disciplines_id\n\t\t\t\t: null\n\n\t\tconst dName =\n\t\t\tSelectedDiscipline().discplineNameDescription\n\t\t\t|| currentDiscipline().discplineNameDescription\n\t\t\t|| ''\n\n\t\tconst p = SelectedProject()\n\n\t\tconst newTask = {\n\t\t\tproject_id: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_id()\n\t\t\t\t\t: p.project_id()\n\t\t\t)\n\t\t\t,project_name:\n\t\t\t\ttask\n\t\t\t\t\t? task.project_name\n\t\t\t\t\t: p.project_name\n\t\t\t,discipline_id: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.discipline_id()\n\t\t\t\t\t: disciplineId\n\t\t\t)\n\t\t\t,relatedDiscipline:\n\t\t\t\ttask\n\t\t\t\t\t? task.relatedDiscipline\n\t\t\t\t\t: dName\n\t\t\t,newtask: true\n\t\t\t,invite_id: m.prop(null)\n\t\t\t,invite_email: ''\n\t\t\t,project_extras_id: m.prop(uuid.v4())\n\t\t\t,parents: m.prop([])\n\t\t\t,users: m.prop([])\n\t\t\t,project_extras_planned_amount: m.prop( 0 )\n\t\t\t,project_extras_actual_amount: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_actual_amount()\n\t\t\t\t\t: 0\n\t\t\t)\n\t\t\t,user_id: task\n\t\t\t\t? m.prop(task.user_id())\n\t\t\t\t: m.prop(data.auth.stream().user_id)\n\t\t\t,allocation_id: m.prop(null)\n\t\t\t,revenueinvoices: []\n\t\t\t,costinvoices: []\n\t\t\t,contract_id:\n\t\t\t\ttask\n\t\t\t\t\t? task.contract_id\n\t\t\t\t\t: p.contract_id\n\t\t\t,username: data.auth.stream().user_username\n\t\t\t,project_extras_custom: m.prop(false)\n\t\t\t,project_extras_type: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_type()\n\t\t\t\t\t: ''\n\t\t\t)\n\t\t\t,project_extras_frequency: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_frequency()\n\t\t\t\t\t: 0\n\t\t\t)\n\t\t\t,project_extras_description: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_description()\n\t\t\t\t\t: ''\n\t\t\t)\n\t\t\t,project_extras_priority: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_priority()\n\t\t\t\t\t: 0\n\t\t\t)\n\t\t\t,project_extras_date_assigned: m.prop(new Date())\n\t\t\t,project_extras_date_completed:\n\t\t\t\ttask\n\t\t\t\t\t? m.prop(task.project_extras_date_completed())\n\t\t\t\t\t: m.prop(null)\n\t\t\t,project_extras_date_verified:\n\t\t\t\ttask && !cloning\n\t\t\t\t\t? m.prop(task.project_extras_date_verified())\n\t\t\t\t\t: m.prop(null)\n\t\t\t,project_extras_date_invalid:\n\t\t\t\ttask\n\t\t\t\t\t? m.prop(task.project_extras_date_invalid())\n\t\t\t\t\t: m.prop(null)\n\t\t\t,project_extras_notes: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_notes()\n\t\t\t\t\t: ''\n\t\t\t)\n\t\t\t,project_extras_address: m.prop(\n\t\t\t\ttask\n\t\t\t\t\t? task.project_extras_address()\n\t\t\t\t\t: ''\n\t\t\t)\n\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t,organizations_disciplines_id:\n\t\t\t\ttask\n\t\t\t\t\t? task.organizations_disciplines_id\n\t\t\t\t\t: organizationDisciplineId\n\t\t\t,created: true\n\t\t}\n\n\t\tprojectDetails(\n\t\t\t[].concat(\n\t\t\t\tprojectDetails()\n\t\t\t\t,[newTask]\n\t\t\t)\n\t\t)\n\t\tselectedProjectExtra(newTask)\n\t\tmasterTaskList(true)\n\t}\n\n\tconst discardButtonAc = () =>\n\t\tvm().selected.allocation.allocations_contractors.forEach((ac) => {\n\t\t\tconst contractorObj = R.find(\n\t\t\t\tfunction(chr) {\n\t\t\t\t\treturn chr.allocations_contractors_id()\n\t\t\t\t\t\t== ac.allocations_contractors_id()\n\t\t\t\t},\n\t\t\t\tvm().revert.allocations_contractors\n\t\t\t)\n\t\t\tconst removals = []\n\n\t\t\tac.allocations_contractors_crews.forEach((acc) => {\n\t\t\t\tconst crewObjindex = R.findIndex(\n\t\t\t\t\tfunction(chr) { return chr.crew_id() == acc.crew_id()},\n\t\t\t\t\tcontractorObj.allocations_contractors_crews\n\t\t\t\t)\n\t\t\t\tif (crewObjindex >= 0){\n\t\t\t\t\tacc.allocations_contractors_crews_work_completed(\n\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\tcontractorObj\n\t\t\t\t\t\t\t\t.allocations_contractors_crews[crewObjindex]\n\t\t\t\t\t\t\t\t.allocations_contractors_crews_work_completed()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tremovals.push(acc)\n\t\t\t\t}\n\t\t\t})\n\t\t\tremovals.forEach((cre) => {\n\t\t\t\tconst remindex = R.findIndex(\n\t\t\t\t\t(chr) => chr.crew_id() == cre.crew_id(),\n\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t)\n\t\t\t\tac.allocations_contractors_crews.splice(remindex, 1)\n\t\t\t})\n\t\t})\n\n\tconst saveButton = () =>\n\t\tDisableProjectExtraSave(true)\n\t\t|| DisableEmptySave(true)\n\t\t|| vm().selected.allocation.allocation_id && DisableDuplicateSave(true)\n\t\t|| identical(\n\t\t\tvm().revert\n\t\t\t, vm().selected.allocation\n\t\t)\n\t\t&& identical(\n\t\t\ttimesheets()\n\t\t\t, timesheet_vm().selected.timesheet\n\t\t)\n\t\t&& identical(\n\t\t\ttodaysInvoices()\n\t\t\t, originalInvoices()\n\t\t)\n\t\t&& identical(\n\t\t\ttools()\n\t\t\t, tools_vm()\n\t\t)\n\t\t&& identical(\n\t\t\tprojectDetails()\n\t\t\t, baseProjectDetails()\n\t\t)\n\n\t\t|| !currentVersion()\n\t\t|| vm().pending()\n\t\t\t? m('button.btn'\n\t\t\t\t, {\n\t\t\t\t\tdisabled: true\n\t\t\t\t}\n\t\t\t\t, 'Save'\n\t\t\t)\n\t\t\t: elements.action(\n\t\t\t\t'Save'\n\t\t\t\t, sendAllocations\n\t\t\t\t, vm().pending\n\t\t\t)\n\n\tconst discardButton = () =>\n\t\telements.undoDiscard({\n\t\t\tdiscard: null\n\t\t\t,doneUndo: {\n\t\t\t\tlabel:\n\t\t\t\t\tvm().pending()\n\t\t\t\t\t|| identical(vm().revert, vm().selected.allocation)\n\t\t\t\t\t&& identical(todaysInvoices(), originalInvoices())\n\t\t\t\t\t&& identical(timesheets(), timesheet_vm().selected.timesheet)\n\t\t\t\t\t&& identical(projectDetails(), baseProjectDetails())\n\t\t\t\t\t&& (\n\t\t\t\t\t\tactiveLandingTab() == 'Tools'\n\t\t\t\t\t\t? identical(tools(), tools_vm())\n\t\t\t\t\t\t: true\n\t\t\t\t\t)\n\t\t\t\t\t? 'Done'\n\t\t\t\t\t: ''\n\t\t\t\t,attrs: {\n\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\tif( vm().selected.allocation.allocation_id ){\n\n\t\t\t\t\t\t\tvm().selected.allocation = cloningAllocation(vm().revert)\n\t\t\t\t\t\t\tconsolidateContractList(vm().selected.allocation)\n\t\t\t\t\t\t\tsetContractOptions(vm().selected.allocation)\n\t\t\t\t\t\t\tcontractvm({})\n\t\t\t\t\t\t\tcontractList().length > 0\n\t\t\t\t\t\t\t\t? contractIndex(0)\n\t\t\t\t\t\t\t\t: contractIndex(-1)\n\t\t\t\t\t\t\t// Discard Timesheets\n\t\t\t\t\t\t\tdiscardButtonAc()\n\t\t\t\t\t\t\ttimesheet_vm().selected.timesheet = []\n\t\t\t\t\t\t\tvm().selected.allocation.allocations_allocation_complete(\n\t\t\t\t\t\t\t\tNumber(vm().revert.allocations_allocation_complete())\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\ttimesheets([])\n\t\t\t\t\t\t\ttimesheet_vm().selected.timesheet.length > 0\n\t\t\t\t\t\t\t\t? timesheetIndex(0)\n\t\t\t\t\t\t\t\t: timesheetIndex(-1)\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvm().revert =\n\t\t\t\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t\t\t\t\t? vm().revert\n\t\t\t\t\t\t\t\t: {}\n\n\t\t\t\t\t\tvm().selected.allocation =\n\t\t\t\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t\t\t\t\t? vm().selected.allocation\n\t\t\t\t\t\t\t\t: {}\n\n\t\t\t\t\t\t// Discard Invoice Updates\n\t\t\t\t\t\t// data.calculatedData(data.calculatedData())\n\t\t\t\t\t\ttools_vm(cloningTool())\n\t\t\t\t\t\tprojectDetails([])\n\t\t\t\t\t\tbaseProjectDetails([])\n\t\t\t\t\t\t// todo-james replace filter with actual predicate\n\n\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t// Discard Project and Discipline Details, and reinitiate streams\n\t\t\t\t\t\tallocationChange(true)\n\t\t\t\t\t\t// Discard Work Updates and Contract Info\n\t\t\t\t\t\terrors({})\n\t\t\t\t\t\tselectedProjectExtra({})\n\t\t\t\t\t}\n\t\t\t\t\t,title: STRING.TITLE.DISCARD_DATES()\n\t\t\t\t\t,style: {\n\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\tconst timesheetAddView = function(){\n\n\t\tconst autocompleteBox =\n\t\t\tautocomplete.strict(\n\t\t\t\ttimesheetlist\n\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\tmake_timesheet([v])\n\t\t\t\t\ttimesheetIndex(0)\n\t\t\t\t\treturn v.ParentRecognition\n\t\t\t\t})\n\t\t\t\t,'ParentRecognition'\n\t\t\t\t,() => ({\n\t\t\t\t\ttitle: \"Add a Timesheet for a Team\"\n\t\t\t\t\t,disabled: !timesheetlist().length\n\t\t\t\t})\n\t\t\t\t,(value, element) => {\n\t\t\t\t\telement.value = \"\"\n\t\t\t\t}\n\t\t\t)\n\n\t\tconst AddMineButton = [\n\t\t\t!timesheet_vm().selected.timesheet\n\t\t\t.find((t) =>\n\t\t\t\tt.user_id()\n\t\t\t\t== data.auth.stream().user_id\n\t\t\t)\n\t\t\t&& (\n\t\t\t\teditAssignedTimesheetsPermissions()\n\t\t\t\t|| editTimePermissions()\n\t\t\t)\n\t\t\t\t? m(\"button.btn.\", {\n\t\t\t\t\tdisabled: !editAssignedTimesheetsPermissions()\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tnew_user_timesheet()\n\t\t\t\t\t\ttimesheetIndex(0)\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Add a timesheet for yourself on this day\"\n\t\t\t\t}, \"Add mine\" )\n\t\t\t\t: null\n\t\t]\n\n\t\treturn currentVersion()\n\t\t\t? [\n\t\t\t\teditTimePermissions()\n\t\t\t\t|| timesheetlist().length > 1\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', `Add a Timesheet`)\n\t\t\t\t\t,Pencil2(\n\t\t\t\t\t\t() => ''\n\t\t\t\t\t\t,() => autocompleteBox\n\t\t\t\t\t)\n\t\t\t\t\t,AddMineButton\n\t\t\t\t])\n\t\t\t\t: AddMineButton\n\t\t\t]\n\t\t\t: null\n\t}\n\n\tconst contractAddView = function(){\n\n\t\tconst autocompleteBox =\n\t\t\tautocomplete.strict(\n\t\t\t\tcontractOptions\n\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\tContractAddButton(v)\n\t\t\t\t\treturn v\n\t\t\t\t})\n\t\t\t\t,null\n\t\t\t\t,() => ({\n\t\t\t\t\ttitle: \"Add a contract item to todays work\"\n\t\t\t\t\t,disabled: !!DisableEmptySave(true)\n\t\t\t\t\t\t|| !editUpdatePermissions()\n\t\t\t\t\t,key: autouidContracts\n\t\t\t\t})\n\t\t\t\t,(value, element) => {\n\t\t\t\t\telement.value = \"\"\n\t\t\t\t}\n\t\t\t)\n\n\t\treturn currentVersion()\n\t\t\t? elements.list([\n\t\t\t\tm('label.control-label', 'Add a Contract item')\n\t\t\t\t,null\n\t\t\t\t,Pencil2(\n\t\t\t\t\t() => ''\n\t\t\t\t\t,() => autocompleteBox\n\t\t\t\t)\n\t\t\t])\n\t\t\t: null\n\t}\n\n\tconst timesheetIndex = m.prop(-1)\n\tconst contractIndex = m.prop(-1)\n\tconst underlinedHeader = a => m('h5.pt3.bw1.bb.pb2.b--black-20', a)\n\n\tfunction linkCompeltion(v, o){\n\t\tif(v || v == 0){\n\n\t\t\tconst diffState =\n\t\t\t\t!!o.project_extras_date_invalid()\n\t\t\t\t|| v == 0\n\n\t\t\tif (diffState){\n\t\t\t\to.project_extras_date_invalid(null)\n\t\t\t\tprojectExtrasSum(\n\t\t\t\t\to\n\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t)\n\t\t\t}\n\n\t\t\to.project_extras_actual_amount(v)\n\n\t\t\tif ( v == 0 ){\n\t\t\t\to.project_extras_date_completed(null)\n\t\t\t\tprojectExtrasSum(\n\t\t\t\t\to\n\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif( !o.project_extras_date_completed() && v ){\n\t\t\t\tif(!o.newtask){o.project_extras_date_completed(Date.now())}\n\t\t\t\tprojectExtrasSum(\n\t\t\t\t\to\n\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t)\n\t\t\t}\n\n\t\t\to.created = true\n\t\t}\n\t\treturn o.project_extras_actual_amount()\n\t}\n\n\tconst taskSaveDiscardButton = function(){\n\t\treturn [\n\t\t\telements.action(\n\t\t\t\t'Save'\n\t\t\t\t, sendAllocations\n\t\t\t\t, vm().pending\n\t\t\t\t, 'primary'\n\t\t\t\t,() =>\n\t\t\t\t\tDisableProjectExtraSave(true)\n\t\t\t\t\t|| DisableEmptySave(true)\n\t\t\t\t\t|| (\n\t\t\t\t\t\tvm()\n\t\t\t\t\t\t\t.selected.allocation.allocation_id\n\t\t\t\t\t\t\t? DisableDuplicateSave(true)\n\t\t\t\t\t\t\t: false\n\t\t\t\t\t)\n\t\t\t\t\t|| !currentVersion()\n\t\t\t\t\t|| identical(\n\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t, baseProjectDetails()\n\t\t\t\t\t)\n\t\t\t)\n\n\t\t\t,selectedProjectExtra().newtask\n\t\t\t\t? discardTaskButton(selectedProjectExtra())\n\t\t\t\t: discardButton()\n\t\t]\n\t}\n\n\tconst detailPaneInputs = function(d){\n\n\t\tfunction workUpdates(){\n\t\t\treturn [\n\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t,'Work Date '\n\t\t\t\t\t\t, editUpdatePermissions()\n\t\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t\t\t() => moment( d.allocations_allocation_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\t(aDate) => {\n\t\t\t\t\t\t\t\t\t\t\tif(aDate){\n\t\t\t\t\t\t\t\t\t\t\t\td.allocations_allocation_date(aDate)\n\t\t\t\t\t\t\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((pe) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpe.allocation_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== d.allocation_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach((pe) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpe.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpe.project_extras_date_invalid()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? pe.project_extras_date_invalid( aDate )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: pe.project_extras_date_completed()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? pe.project_extras_date_completed( aDate )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn d.allocations_allocation_date()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\ttitle: STRING.TITLE.WORK_COMPLETE_DATE()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: moment( d.allocations_allocation_date() ).format(\"ll\")\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,workCompletedOfForecasted()\n\t\t\t\t,importantNotes()\n\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields: () => uploadmetadata({})\n\t\t\t\t\t, data\n\t\t\t\t})\n\t\t\t]\n\t\t}\n\n\t\tfunction addRemoveWork(c){\n\t\t\treturn m('label.control-label.mb1'\n\t\t\t\t,'+/- Work'\n\t\t\t\t,editUpdatePermissions()\n\t\t\t\t&& currentVersion()\n\t\t\t\t&& !c.project_extras_id()\n\t\t\t\t\t? m(\n\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_description']() + ' +/- Work'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_amount'] || m.prop()\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t, title: \"plus or minus required works\"\n\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t|| !c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t\t\t\t|| c.project_extras_id()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t? c['allocations_' + c.midfix + '_amount']()\n\t\t\t\t\t\t: null\n\t\t\t)\n\t\t}\n\n\t\tfunction allocationsContractDescription(c){\n\t\t\treturn (\n\t\t\t\t!editUpdatePermissions()\n\t\t\t\t&& currentVersion()\n\t\t\t\t\t? c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t,'Description'\n\t\t\t\t\t\t\t,elements.textInput(\n\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_description'], {\n\t\t\t\t\t\t\t\ttitle: STRING.TITLE.CONTRACT_DESCRIPTION()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t)\n\t\t}\n\n\t\tfunction contractClause(c){\n\t\t\treturn !editUpdatePermissions()\n\t\t\t&& currentVersion()\n\t\t\t\t? c['allocations_' + c.midfix + '_clause']()\n\t\t\t\t: elements.list([\n\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t,'Contract Clause'\n\t\t\t\t\t\t,elements.textInput( c['allocations_' + c.midfix + '_clause'], {\n\t\t\t\t\t\t\ttitle: \"The Formal contract clause that forces this to apply\"\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t}\n\n\t\tfunction contractUpdates(){\n\t\t\tconst c = contractList()[contractIndex()]\n\t\t\treturn [\n\n\t\t\t\t\tcontractAddView()\n\t\t\t\t\t,contractList().length\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t'label.control-label.mb1'\n\t\t\t\t\t\t\t\t\t,contractIndex() == -1\n\t\t\t\t\t\t\t\t\t\t? contractList().length + ` Contract Items`\n\t\t\t\t\t\t\t\t\t\t: contractIndex()\n\t\t\t\t\t\t\t\t\t\t\t+ 1 + ` of ` + contractList().length + ` Contract Items`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,elements.go(\n\t\t\t\t\t\t\t\t\t\"Next contract Item\",\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\tcontractIndex() == contractList().length - 1\n\t\t\t\t\t\t\t\t\t\t\t? contractIndex(0)\n\t\t\t\t\t\t\t\t\t\t\t: contractIndex(contractIndex() + 1)\n\t\t\t\t\t\t\t\t\t\tcontractvm(contractList()[contractIndex()])\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{disabled: contractList().length < 1}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m(\"button.btn.\", {\n\t\t\t\t\t\t\t\t\tdisabled: contractIndex() == -1\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\tcontractIndex(-1)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Hide the contracts\"\n\t\t\t\t\t\t\t\t},\"Hide\")\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t,contractIndex() > - 1\n\t\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\t\tm('div.form-group', {style: {'height': '300px'}}, [\n\t\t\t\t\t\t\t\t\t\tcontractList().length == 0 || !c\n\t\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.mb1' ,'Type')\n\t\t\t\t\t\t\t\t\t\t\t\t\t,c.midfix == 'vars'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Variation'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: c.midfix == 'nods'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Notice of Delay'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'Extension of Time'\n\t\t\t\t\t\t\t\t\t\t\t\t\t,ContractDeleteButton()\n\t\t\t\t\t\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\t\taddRemoveWork(c)\n\t\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t,allocationsContractDescription(c)\n\t\t\t\t\t\t\t\t\t\t\t\t,contractClause(c)\n\t\t\t\t\t\t\t\t\t\t\t\t,DisableEmptySave()\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t\t,`Contract Obligations haven't been recorded`\n\t\t\t\t\t\t]\n\t\t\t]\n\n\t\t}\n\n\t\tfunction workCompletedByTeam(t){\n\t\t\treturn (\n\t\t\t\t!crewsIndexedByAID()[t.user_id()]\n\t\t\t\t&& !crewsIndexedByAID()[t.crew_id()]\n\t\t\t\t? STRING.WARNING.TEAM_CONNECTION()\n\t\t\t\t: m('label.control-label.mb1'\n\t\t\t\t\t,'Completed'\n\t\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t? t.crew_work()\n\t\t\t\t\t\t: m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t(t.crew_name() || t.user_name()) + 'Completed'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: (v) => addSpecificWork(t, v)\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t, title: \"Work Completed by this team\"\n\t\t\t\t\t\t\t\t\t, disabled: t.work_conditions() == 'Auto Created Timesheet'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tfunction hoursWorked(t){\n\t\t\treturn (\n\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t,'Hours Worked'\n\t\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t? t.crew_hours()\n\t\t\t\t\t\t: m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t(t.crew_name() || t.user_name()) + ' Hours Worked'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: t.crew_hours\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t, title: \"Hours worked by this team\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tfunction projectNotes(t){\n\t\t\treturn (\n\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t,'Project Notes'\n\t\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t? t.work_conditions()\n\t\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\t\tt.work_conditions\n\t\t\t\t\t\t\t,{ title: \"Impairing Work Conditions\"\n\t\t\t\t\t\t\t, disabled: t.work_conditions() == 'Auto Created Timesheet'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tfunction performanceNotes(t){\n\t\t\treturn (\n\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t,'Performance Notes'\n\t\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t? t.crew_performance()\n\t\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\t\tt.crew_performance,\n\t\t\t\t\t\t\t{title: \"Teams Performance\"}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tfunction timesheetUpdates(){\n\t\t\tconst tArray = timesheet_vm().selected.timesheet\n\t\t\tconst t = timesheet_vm().selected.timesheet[timesheetIndex()]\n\t\t\tconst sharedtimesheets =\n\t\t\t\t!t || !t.sharedtimesheet\n\t\t\t\t? []\n\t\t\t\t: t.sharedtimesheet.filter((st) =>\n\t\t\t\t\tst.crew_id == t.crew_id()\n\t\t\t\t\t&& st.user_id == t.user_id()\n\t\t\t\t)\n\t\t\treturn [\n\n\t\t\t\t\ttimesheetAddView()\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,tArray.length\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t'label.control-label.mb1'\n\t\t\t\t\t\t\t\t\t, timesheetIndex() == -1\n\t\t\t\t\t\t\t\t\t\t? tArray.length + ` Timesheets`\n\t\t\t\t\t\t\t\t\t\t: timesheetIndex()\n\t\t\t\t\t\t\t\t\t\t\t+ 1 + ` of ` + tArray.length + ` Timesheets`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,elements.go(\n\t\t\t\t\t\t\t\t\t\"Next Timesheet\",\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\ttimesheetIndex() == tArray.length - 1\n\t\t\t\t\t\t\t\t\t\t\t? timesheetIndex(0)\n\t\t\t\t\t\t\t\t\t\t\t: timesheetIndex(timesheetIndex() + 1)\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{disabled: tArray.length < 1}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m(\"button.btn.\", {\n\t\t\t\t\t\t\t\t\tdisabled: timesheetIndex() == -1\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\ttimesheetIndex(-1)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Hide these timesheets\"\n\t\t\t\t\t\t\t\t},\"Hide\")\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t,timesheetIndex() > -1\n\t\t\t\t\t\t\t\t? m('div.form-group', {style: {'height': '350px'}}, [\n\t\t\t\t\t\t\t\t\ttArray.length == 0 || !t\n\t\t\t\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.mb1', 'Team Name')\n\t\t\t\t\t\t\t\t\t\t\t\t,t.crew_name() ? t.crew_name() : t.user_name()\n\t\t\t\t\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tworkCompletedByTeam(t)\n\t\t\t\t\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\thoursWorked(t)\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tprojectNotes(t)\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tperformanceNotes(t)\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t,sharedtimesheets.length\n\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t'label.control-label.mb1'\n\t\t\t\t\t\t\t\t\t,'Time Shared with'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t,sharedtimesheets.length\n\t\t\t\t\t\t\t\t? elements.list(\n\t\t\t\t\t\t\t\t\tsharedtimesheets\n\t\t\t\t\t\t\t\t\t.map((st) =>\n\t\t\t\t\t\t\t\t\t\tm('a' + (st.timesheets_id == t.timesheets_id() ? '.fw6' : '')\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tst.sharedtimesheet = sharedtimesheets\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst editT = cloningTimesheet([st])\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst tindex = timesheet_vm().selected.timesheet\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((t) => t.timesheets_id() == st.timesheets_id)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif( tindex == -1 ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimesheet_vm().selected.timesheet =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.insert(timesheetIndex(), R.last(editT), timesheet_vm().selected.timesheet)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ timesheetIndex(tindex) }\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t,disabled: st.timesheets_id == t.timesheets_id() || loading()\n\t\t\t\t\t\t\t\t\t\t\t\t,title: \"Load shared timesheet\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, st.project_name\n\t\t\t\t\t\t\t\t\t\t\t+ ' x ' + st.crew_hours + ' hours'\n\t\t\t\t\t\t\t\t\t\t\t+ ' and ' + st.discipline_name\n\t\t\t\t\t\t\t\t\t\t\t+ ' x ' + st.crew_work\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t\t,`Timesheets haven't been gathered`\n\t\t\t\t\t\t]\n\t\t\t]\n\t\t}\n\n\n\t\tfunction financials(){\n\t\t\treturn [\n\t\t\t\tm('a'\n\t\t\t\t\t,{\n\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\tactiveTab(`Create Ledgers`)\n\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t\t&& !editOwnedInvoicesPermissions()\n\t\t\t\t\t\t\t|| !contractInvoiceables().length && !todaysInvoices().length\n\t\t\t\t\t\t, title: \"Create a Ledger\",\n\t\t\t\t\t}\n\t\t\t\t\t, 'Ledgers'\n\t\t\t\t)\n\t\t\t]\n\t\t}\n\n\t\tfunction tasks(){\n\n\t\t\tconst assignSomeone =\n\t\t\t\tPencil2(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tselectedProjectExtra().musers\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: (\n\t\t\t\t\t\t\tusers().find((u) =>\n\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t== selectedProjectExtra().user_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t|| nullUser\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.user_username()\n\t\t\t\t\t,() =>\n\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\tselectedProjectExtra().musers ? mchildResUsers : childResUsers\n\t\t\t\t\t\t\t,(v, model) => {\n\t\t\t\t\t\t\t\tif( v ) {\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().created = true\n\n\t\t\t\t\t\t\t\t\tif( selectedProjectExtra().musers ){\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().users().unshift(v)\n\t\t\t\t\t\t\t\t\t\tchildResUsers(childResUsers())\n\t\t\t\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\t\t\t\tmodel.chosen(null)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().user_id(v.user_id())\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tv.user_id()\n\t\t\t\t\t\t\t\t\t\t? selectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.project_extras_custom(true)\n\t\t\t\t\t\t\t\t\t\t: selectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.project_extras_custom(false)\n\n\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t.project_extras_custom(true)\n\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().invite_id = null\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().invite_email = ''\n\n\t\t\t\t\t\t\t\t\t// editing(false)\n\t\t\t\t\t\t\t\t\t// model.input('')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'usersFullName'\n\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t\t\t\t\t,disabled: !childResUsers().length\n\t\t\t\t\t\t\t\t,title: \"Assigned to task\"\n\t\t\t\t\t\t\t\t,key: selectedProjectExtra().musers\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t, { toggleable: true }\n\t\t\t\t)\n\n\t\t\tconst assigners =\n\t\t\t\tm('.assigners'\n\t\t\t\t\t+ H.css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 0.5em;\n\n\t\t\t\t\t\t& .pencil {\n\t\t\t\t\t\t\tpadding: 1em 0em;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t& .control-label {\n\t\t\t\t\t\t\tmargin-bottom: 0px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t& ul {\n\t\t\t\t\t\t\tmargin-bottom: 0em;\n\t\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t, m('label.control-label', 'Assigned ')\n\t\t\t\t\t, m('.assign-content'\n\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\tbackground-color: white;\n\t\t\t\t\t\t\tborder: 1px solid #eaeaea;\n\t\t\t\t\t\t\tborder-radius: 0.25em;\n\t\t\t\t\t\t\tpadding: 1em;\n\n\t\t\t\t\t\t\t& .pencil.measure > p {\n\t\t\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\t\t\tborder-radius: 0.25em;\n\t\t\t\t\t\t\t\tbackground-color: #f9f9f9;\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, m('.btns'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, m(\n\t\t\t\t\t\t\t\t'button.btn.btn-secondary'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent';\n\t\t\t\t\t\t\t\t\tborder: 'solid 1px #3380c2';\n\t\t\t\t\t\t\t\t\tposition: 'relative';\n\t\t\t\t\t\t\t\t\ttop: '-0.1em';\n\t\t\t\t\t\t\t\t\theight: '2.9em';\n\t\t\t\t\t\t\t\t\twidth: '5em';\n\t\t\t\t\t\t\t\t\tcolor: '#434aa3';\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\t\t\t\t\tif( selectedProjectExtra().musers ){\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().users().unshift(\n\t\t\t\t\t\t\t\t\t\t\t\tusers()\n\t\t\t\t\t\t\t\t\t\t\t\t.find((ds) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tds.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().created = true\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().user_id(\n\t\t\t\t\t\t\t\t\t\t\t\tdata.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Assign yourself to this Task\"\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().user_id()\n\t\t\t\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t|| selectedProjectExtra().users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\tu.user_id() == data.auth.stream().user_id)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Me'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t'button.btn.btn-secondary'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\tborder: solid 0.1px rgba(0,0,0,0.4);\n\t\t\t\t\t\t\t\t\tbackground-color: ` + (selectedProjectExtra().musers ? `grey;` : `white;`) + `\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().musers =\n\t\t\t\t\t\t\t\t\t\t\t!selectedProjectExtra().musers\n\t\t\t\t\t\t\t\t\t\t\t? uuid.v4()\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t\t\t\t\tif( selectedProjectExtra().musers ){\n\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().oldusers\n\t\t\t\t\t\t\t\t\t\t\t\t? selectedProjectExtra().users(selectedProjectExtra().oldusers)\n\t\t\t\t\t\t\t\t\t\t\t\t: selectedProjectExtra().user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t? selectedProjectExtra().users().push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tusers()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.find((ds) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tds.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t== selectedProjectExtra().user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\t\t;childResUsers(childResUsers())\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().oldusers = selectedProjectExtra().users()\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().users([])\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: \"Assign many users to this Task\"\n\t\t\t\t\t\t\t\t\t,disabled: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, selectedProjectExtra().musers ? 'Single' : '+ More'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, assignSomeone\n\t\t\t\t\t\t, selectedProjectExtra().users().length > 0 && elements.strikeList(\n\t\t\t\t\t\t\tselectedProjectExtra().users()\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tod => ({\n\t\t\t\t\t\t\t\t\tlabel: od.user_username()\n\t\t\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().users()\n\t\t\t\t\t\t\t\t\t\t.splice(\n\t\t\t\t\t\t\t\t\t\t\tselectedProjectExtra().users()\n\t\t\t\t\t\t\t\t\t\t\t.findIndex((ds) =>\n\t\t\t\t\t\t\t\t\t\t\t\tds.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t== od.user_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\n\t\t\treturn [\n\n\t\t\t\tm(HarthUppy, {\n\t\t\t\t\tgetFields:\n\t\t\t\t\t\t() => uploadmetadata({\n\t\t\t\t\t\t\tonly: { organizations_disciplines_id: 'organizations_disciplines_id' }\n\t\t\t\t\t\t})\n\t\t\t\t\t, data\n\t\t\t\t\t, listOnly: true\n\t\t\t\t\t, readOnly: true\n\t\t\t\t\t, embedded: true\n\t\t\t\t})\n\n\t\t\t\t,DisableProjectExtraSave()\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Discipline ')\n\t\t\t\t\t, !selectedProjectExtra().newtask\n\t\t\t\t\t&& selectedProjectExtra().discipline_id()\n\t\t\t\t\t\t? selectedProjectExtra().relatedDiscipline\n\t\t\t\t\t\t: Pencil2(\n\t\t\t\t\t\t\t() => selectedProjectExtra().relatedDiscipline\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\t\t\tlist: restrictedorganizationsDisciplines\n\t\t\t\t\t\t\t\t\t,onselect: R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\tconst discipline =\n\t\t\t\t\t\t\t\t\t\t\tdisciplineExtraOptions()\n\t\t\t\t\t\t\t\t\t\t\t.find((d) =>\n\t\t\t\t\t\t\t\t\t\t\t\texposer(d.organizations_disciplines_id)\n\t\t\t\t\t\t\t\t\t\t\t\t== v.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.created = true\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.relatedDiscipline =\n\t\t\t\t\t\t\t\t\t\t\tv.orgDisciplineNameDescription\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.organizations_disciplines_id =\n\t\t\t\t\t\t\t\t\t\t\tv.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.project_extras_description(v.orgDisciplineNameDescription)\n\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.discipline_id(\n\t\t\t\t\t\t\t\t\t\t\t\tdiscipline ? v.discipline_id() : null\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,field: 'orgDisciplineNameDescription'\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t\t\t\t\t\t\t,disabled: !restrictedorganizationsDisciplines().length\n\t\t\t\t\t\t\t\t\t\t,title: \"Related discipline\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,sort: R.prop('completedcount')\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m('label.control-label.db.pv2'\n\t\t\t\t\t, 'Task Name '\n\t\t\t\t\t, !selectedProjectExtra().newtask\n\t\t\t\t\t\t? elements.plainTxt(\n\t\t\t\t\t\t\tselectedProjectExtra().project_extras_type()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: Pencil2(\n\t\t\t\t\t\t\t() => selectedProjectExtra().project_extras_type()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().project_extras_type\n\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\tdisabled: !editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,m('label.control-label.db.pv2'\n\t\t\t\t\t, 'Task Notes '\n\t\t\t\t\t, Pencil2(\n\t\t\t\t\t\t() => selectedProjectExtra().project_extras_notes()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\tselectedProjectExtra().project_extras_notes\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tplaceholder: \"Task notes\"\n\t\t\t\t\t\t\t\t\t,disabled: !editUpdatePermissions()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\n\t\t\t\t,m('label.control-label.db.pv2'\n\t\t\t\t\t, 'Address '\n\t\t\t\t\t, Pencil2(\n\t\t\t\t\t\t() => selectedProjectExtra().project_extras_address()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(autocomplete.Main, {\n\t\t\t\t\t\t\t\tfield: 'title'\n\t\t\t\t\t\t\t\t,throttleSearch: 500\n\t\t\t\t\t\t\t\t,inputClassName: 'form-control'\n\t\t\t\t\t\t\t\t,initialValue: selectedProjectExtra().project_extras_address()\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tplaceholder: '14 Lonsdale St, Melbourne, Victoria'\n\t\t\t\t\t\t\t\t\t,name: 'project_extras_address'\n\t\t\t\t\t\t\t\t\t,required: true\n\t\t\t\t\t\t\t\t\t,disabled: !editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t,value: selectedProjectExtra().project_extras_address()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,oninput: selectedProjectExtra().project_extras_address\n\t\t\t\t\t\t\t\t,manuelConfig: {\n\t\t\t\t\t\t\t\t\tfilter: () => true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,search(value){\n\t\t\t\t\t\t\t\t\tif(value){\n\t\t\t\t\t\t\t\t\t\treturn data.api.suburbs.search(value)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,onselect(value){\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().project_extras_address(value.title)\n\n\t\t\t\t\t\t\t\t\t// collect data as we use it for later features\n\t\t\t\t\t\t\t\t\tdata.api.suburbs.here.patch(value)\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\t\t\t\t.catch( e => console.error('Could not save here data ', e))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,m('label.control-label'\n\t\t\t\t\t, 'Amount'\n\t\t\t\t\t, Pencil2(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t.project_extras_actual_amount()\n\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t+ selectedProjectExtra()\n\t\t\t\t\t\t\t\t.project_extras_planned_amount()\n\t\t\t\t\t\t\t+ ' Completed'\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Actual Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: (v) => linkCompeltion(\n\t\t\t\t\t\t\t\t\t\tv, selectedProjectExtra()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t\t\t|| selectedProjectExtra().project_extras_date_verified()\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Actual Amount\"\n\t\t\t\t\t\t\t\t\t\t, className: 'pv2'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,editProjectPermissions()\n\t\t\t\t? elements.list([\n\t\t\t\t\tm('label.control-label', 'Repeat Every ')\n\t\t\t\t\t,Pencil2(\n\t\t\t\t\t\t() => selectedProjectExtra().project_extras_frequency()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Task Frequency'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: selectedProjectExtra().project_extras_frequency\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, title: \"Task Frequency\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,m('label.control-label', ' Days')\n\t\t\t\t])\n\t\t\t\t: null\n\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Assigned Date: ')\n\t\t\t\t\t,selectedProjectExtra().project_extras_date_assigned()\n\t\t\t\t\t\t? moment(\n\t\t\t\t\t\t\tselectedProjectExtra().project_extras_date_assigned()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.format(\"ll\")\n\t\t\t\t\t\t: ''\n\t\t\t\t])\n\n\t\t\t\t,changeCompletedDate('Completed Date')(selectedProjectExtra())\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Verified Date: ')\n\t\t\t\t\t,selectedProjectExtra().project_extras_date_verified()\n\t\t\t\t\t\t? moment(\n\t\t\t\t\t\t\tselectedProjectExtra().project_extras_date_verified()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.format(\"ll\")\n\t\t\t\t\t\t: ''\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label', 'Invalid Date: ')\n\t\t\t\t\t,selectedProjectExtra().project_extras_date_invalid()\n\t\t\t\t\t\t? moment(\n\t\t\t\t\t\t\tselectedProjectExtra().project_extras_date_invalid()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.format(\"ll\")\n\t\t\t\t\t\t: ''\n\t\t\t\t])\n\n\t\t\t\t,m('label.control-label.db.pv2'\n\t\t\t\t\t, 'Task Description '\n\t\t\t\t\t, !selectedProjectExtra().newtask\n\t\t\t\t\t\t? elements.plainTxt(\n\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_description()\n\t\t\t\t\t\t\t? selectedProjectExtra().relatedDiscipline\n\t\t\t\t\t\t\t: selectedProjectExtra().project_extras_description()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: Pencil2(\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_description()\n\t\t\t\t\t\t\t\t? selectedProjectExtra().relatedDiscipline\n\t\t\t\t\t\t\t\t: selectedProjectExtra().project_extras_description()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t.project_extras_description\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Description of the task\"\n\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,assigners\n\n\t\t\t\t,m('br')\n\n\t\t\t\t, m(HarthUppy, {\n\t\t\t\t\tgetFields: () => uploadmetadata({})\n\t\t\t\t\t, data\n\t\t\t\t})\n\n\t\t\t\t,m('br')\n\n\t\t\t\t,!retrieveAllocations()\n\t\t\t\t&& !allocations().length\n\t\t\t\t? m('a.p.pv1.ma0'\n\t\t\t\t\t,{\n\t\t\t\t\t\ttitle: \"View Variations, Timesheets and Financial Data\"\n\t\t\t\t\t\t, onclick: () => {retrieveAllocations(true)}\n\t\t\t\t\t}\n\t\t\t\t\t, `Variations, Timesheets and Financial Data`\n\t\t\t\t)\n\t\t\t\t: [\n\n\t\t\t\t\tm('hr')\n\t\t\t\t\t,m('label.control-label.span', 'Expenditure Ledgers ')\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,R.intersperse(\n\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t,selectedProjectExtra()\n\t\t\t\t\t\t.costinvoices\n\t\t\t\t\t\t.map(s =>\n\t\t\t\t\t\t\tm('a.p.pv1.ma0'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t, onclick: () =>{\n\t\t\t\t\t\t\t\t\t\tactiveTab(`Create Ledgers`)\n\t\t\t\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled: !selectedProjectExtra().allocation_id() || loading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, s\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t\t,m('label.control-label.span', 'Revenue Ledgers ' )\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,R.intersperse(\n\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t,selectedProjectExtra().revenueinvoices\n\t\t\t\t\t\t.map(s =>\n\t\t\t\t\t\t\tm('a.p.pv1.ma0'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t, onclick: () =>{\n\t\t\t\t\t\t\t\t\t\tactiveTab(`Create Ledgers`)\n\t\t\t\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled: !selectedProjectExtra().allocation_id() || loading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, s\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t\t,m('label.control-label', 'Timesheets ')\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,fetchedTime()\n\t\t\t\t\t\t? R.intersperse(\n\t\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t\t,timesheet_vm().selected.timesheet\n\t\t\t\t\t\t\t.filter((t) =>\n\t\t\t\t\t\t\t\tactiveLandingTab() == 'Days'\n\t\t\t\t\t\t\t\t? vm().selected.allocation.allocation_id\n\t\t\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t\t\tselectedProjectExtra().user_id()\n\t\t\t\t\t\t\t\t\t&& (t.user_id() == selectedProjectExtra().user_id()\n\t\t\t\t\t\t\t\t\t|| connectedTeams().find((c) =>t.crew_id() == c.crew_id()))\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t&& selectedProjectExtra().allocation_id()\n\t\t\t\t\t\t\t\t== vm().selected.allocation.allocation_id()\n\t\t\t\t\t\t\t\t: t.allocation_id() == selectedProjectExtra().allocation_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(t =>\n\t\t\t\t\t\t\t\tm('a.p.pv1.ma0'\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"View Timesheets\"\n\t\t\t\t\t\t\t\t\t\t, onclick: () =>{\n\t\t\t\t\t\t\t\t\t\t\tactiveTab(`Timesheets`)\n\t\t\t\t\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\t!selectedProjectExtra().allocation_id() || loading()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, (t.crew_name() || '')\n\t\t\t\t\t\t\t\t\t+ (t.user_name() ? ' - ' : '' )\n\t\t\t\t\t\t\t\t\t+ (t.user_name() || '')\n\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t+ t.crew_hours()\n\t\t\t\t\t\t\t\t\t+ ' hours'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: ' ... '\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t\t,m('label.control-label', 'Variations ')\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,R.intersperse(\n\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t,contractList()\n\t\t\t\t\t\t.filter((c) =>\n\t\t\t\t\t\t\tc.project_extras_id()\n\t\t\t\t\t\t\t== selectedProjectExtra().project_extras_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\tm('a.p.pv1.ma0'\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"View Contract Obligations\"\n\t\t\t\t\t\t\t\t\t, onclick: () =>{\n\t\t\t\t\t\t\t\t\t\tactiveTab(`Update Contractual Information`)\n\t\t\t\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t!selectedProjectExtra().allocation_id() || loading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,c.midfix == 'vars'\n\t\t\t\t\t\t\t\t? 'Variation - ' + c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t\t\t\t: c.midfix == 'nods'\n\t\t\t\t\t\t\t\t\t? 'Notice of Delay - '\n\t\t\t\t\t\t\t\t\t\t+ c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t\t\t\t\t: 'Extension of Time - '\n\t\t\t\t\t\t\t\t\t\t+ c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t]\n\t\t}\n\n\n\t\treturn d.allocations_allocation_date\n\t\t\t&& activeLandingTab() == 'Days'\n\t\t\t&& !fullView()\n\t\t\t? [\n\t\t\t\telements.list([\n\t\t\t\t\tDisableEmptySave(true)\n\t\t\t\t\t|| DisableDuplicateSave(true)\n\t\t\t\t\t|| identical(vm().revert, d)\n\t\t\t\t\t&& identical(timesheets(), timesheet_vm().selected.timesheet)\n\t\t\t\t\t|| !currentVersion()\n\t\t\t\t\t|| vm().pending()\n\t\t\t\t\t\t? m('button.btn', {disabled: true}, 'Save')\n\t\t\t\t\t\t: elements.action('Save', sendAllocations, vm().pending)\n\n\t\t\t\t\t,discardButton()\n\t\t\t\t])\n\n\t\t\t\t,DisableDuplicateSave(true)\n\t\t\t\t\t? DisableDuplicateSave()\n\t\t\t\t\t: elements.alert(`info`, `Please be concise with the Important Notes`)\n\n\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields:\n\t\t\t\t\t\t() => uploadmetadata({\n\t\t\t\t\t\t\tonly: { organizations_disciplines_id: 'organizations_disciplines_id' }\n\t\t\t\t\t\t})\n\t\t\t\t\t, data\n\t\t\t\t\t, listOnly: true\n\t\t\t\t})\n\n\t\t\t\t,underlinedHeader('Updates')\n\t\t\t\t, workUpdates()\n\t\t\t\t// ,underlinedHeader('Financials')\n\t\t\t\t, financials()\n\t\t\t\t,underlinedHeader('Contracts')\n\t\t\t\t, contractUpdates()\n\t\t\t\t,underlinedHeader('Timesheets')\n\t\t\t\t, timesheetUpdates()\n\t\t\t]\n\t\t\t: Object.keys(selectedProjectExtra()).length\n\t\t\t&& (\n\t\t\t\tactiveLandingTab() == 'Tasks'\n\t\t\t\t|| activeTab() == 'Project Tasks'\n\t\t\t)\n\t\t\t\t? [\n\n\t\t\t\t\t!selectedProjectExtra().newtask\n\t\t\t\t\t\t? underlinedHeader('Existing Task - ' + selectedProjectExtra().project_extras_type())\n\t\t\t\t\t\t: underlinedHeader('New Task - ' + selectedProjectExtra().project_extras_type())\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\ttaskSaveDiscardButton()\n\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\tm(\"button.btn\",{\n\t\t\t\t\t\t\t\tonclick: () => { createTask(selectedProjectExtra(), 'cloning') }\n\t\t\t\t\t\t\t\t,title: 'Clone this Task'\n\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t}, \"Clone\")\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t,tasks()\n\t\t\t\t]\n\t\t\t\t: []\n\t}\n\n\tfunction discardTaskButton(t){\n\t\treturn m(\"button.btn.btn-warning\"\n\t\t\t,{\n\t\t\t\tonclick: () => {\n\t\t\t\t\tprojectDetails(\n\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t.filter((e) =>\n\t\t\t\t\t\t\tt.key != e.key\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tselectedProjectExtra({})\n\t\t\t\t\tmasterTaskList(true)\n\t\t\t\t}\n\t\t\t\t,title: 'Remove a Task'\n\t\t\t}\n\t\t\t, 'Discard'\n\t\t)\n\t}\n\n\tconst detailsPaneOpen =\n\t\t() => {\n\t\t\tconst answer =\n\t\t\t\tvm().selected.allocation.allocations_completion_comments\n\t\t\t\t&& !fullView()\n\t\t\t\t&& activeLandingTab() == 'Days'\n\n\t\t\t|| \t\t\t\tObject.keys(selectedProjectExtra()).length\n\t\t\t\t&& activeLandingTab() == 'Tasks'\n\n\t\t\t|| \t\t\t\tfullView()\n\t\t\t\t&& activeTab() == 'Project Tasks'\n\t\t\t\t&& Object.keys(selectedProjectExtra()).length\n\n\n\t\t\treturn answer\n\t\t}\n\n\t// function selectedItemIsNew(){\n\t// \treturn selectedItemType() == 'Task'\n\t// \t\t? Object.keys(selectedProjectExtra()).length\n\t// \t\t\t? selectedProjectExtra().project_extras_id() == null\n\t// \t\t\t: true // shouldn't happen, but it certainly isn't saved if {}\n\t// \t\t: false\n\t// }\n\n\tconst connectedAllocation =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tselectedProjectExtra\n\t\t\t\t,allocations\n\t\t\t]\n\t\t)\n\t\t.map(([s]) => {\n\n\t\t\tconst refAllocation =\n\t\t\t\ts.allocation_id\n\t\t\t\t&& s.allocation_id()\n\t\t\t\t? allocations().find((a) =>\n\t\t\t\t\ta.allocation_id()\n\t\t\t\t\t== s.allocation_id()\n\t\t\t\t)\n\t\t\t\t: null\n\n\t\t\tif( refAllocation && !fullView() ){\n\t\t\t\tcontractIndex(-1)\n\t\t\t\ttimesheetIndex(-1)\n\t\t\t\tvm().revert = refAllocation\n\t\t\t\tvm().selected.allocation = cloningAllocation(refAllocation)\n\t\t\t\tallocationChange(true)\n\t\t\t} else if ( !fullView() ){\n\t\t\t\tcontractIndex(-1)\n\t\t\t\ttimesheetIndex(-1)\n\t\t\t\tvm().revert = {}\n\t\t\t\tvm().selected.allocation = {}\n\t\t\t\tallocationChange(true)\n\t\t\t}\n\n\t\t\treturn refAllocation\n\t\t})\n\n\tconst connectedTeams =\n\t\tconnectedAllocation.map((s) =>\n\t\t\t!s\n\t\t\t? []\n\t\t\t: R.unnest(\n\t\t\t\ts.allocations_contractors\n\t\t\t\t.filter((r) => r.user_id() == selectedProjectExtra().user_id() )\n\t\t\t\t.map((r) => R.prop('allocations_contractors_crews', r))\n\t\t\t)\n\t\t)\n\n\tgetfilters(null, \"Tasks\")\n\tconst masterTaskList = function(mcreate){\n\n\t\tif (mcreate){\n\t\t\tCONSTANTProjectExtras( projectDetails() )\n\t\t}\n\t\treturn ListProcessing(\n\t\t\tCONSTANTProjectExtras()\n\t\t\t,filterFunction.projectExtrasFilters.filters()\n\t\t\t,'project_extras_priority'\n\t\t\t,filteredTaskOptions\n\t\t)\n\t}\n\n\tconst addLedger = () =>\n\t\telements.list([\n\t\t\tm('label.control-label.mb1', 'Add Ledger')\n\t\t\t,autocomplete.strict(\n\t\t\t\tcontractInvoiceables\n\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\tconst contract =\n\t\t\t\t\t\tdata.contracts().find((c) =>\n\t\t\t\t\t\t\tc.contract_id\n\t\t\t\t\t\t\t== v.contract_id()\n\t\t\t\t\t\t)\n\n\t\t\t\t\tconst raeteMultiplier =\n\t\t\t\t\t\tv.organizations_disciplines_id\n\t\t\t\t\t\t\t? vm()\n\t\t\t\t\t\t\t\t.selected\n\t\t\t\t\t\t\t\t.allocation.disciplineratemultiplier\n\t\t\t\t\t\t\t\t: v.crews_discipline_rates_id\n\t\t\t\t\t\t\t? crewWorkers()\n\t\t\t\t\t\t\t\t.find((ac) =>\n\t\t\t\t\t\t\t\t\tac.crews_discipline_rates\n\t\t\t\t\t\t\t\t\t.find((acr) =>\n\t\t\t\t\t\t\t\t\t\tacr.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t== v.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.teamratemultiplier\n\t\t\t\t\t\t\t\t|| 1\n\t\t\t\t\t\t\t: 1\n\n\t\t\t\t\ttodaysInvoices(\n\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\ttodaysInvoices()\n\t\t\t\t\t\t\t,data.cloneInvoice(\n\t\t\t\t\t\t\t\t[v]\n\t\t\t\t\t\t\t\t,data.auth.stream()\n\t\t\t\t\t\t\t\t\t.user_id\n\t\t\t\t\t\t\t\t,contract\n\t\t\t\t\t\t\t\t,vm().selected.allocation\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tpreFillAmount: 0\n\t\t\t\t\t\t\t\t\t,rateMultiplier: raeteMultiplier\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t,'contractrecognitionname'\n\t\t\t\t,() => ({\n\t\t\t\t\ttitle: \"Select a contract item to base the invoice on\"\n\t\t\t\t\t,disabled: contractInvoiceables().length == 0\n\t\t\t\t})\n\t\t\t\t,(value, element) => {\n\t\t\t\t\telement.value = \"\"\n\t\t\t\t}\n\t\t\t)\n\t\t])\n\n\tconst invoiceTable = () =>\n\t\telements.table(data,\n\t\t\t[\n\t\t\t\t''\n\t\t\t\t, 'No.'\n\t\t\t\t, 'Received'\n\t\t\t\t, 'Name'\n\t\t\t\t, 'Description'\n\t\t\t\t, 'Working Amount'\n\t\t\t\t, 'Service Amount'\n\t\t\t\t, 'Depreciation Amount'\n\t\t\t\t, 'Appreciation Amount'\n\t\t\t\t, 'Damages Amount'\n\t\t\t\t, 'Total Amount'\n\t\t\t\t, 'Approver'\n\t\t\t]\n\t\t\t,todaysInvoices().map((i) => [\n\n\t\t\t\tm(\"button.btn.btn-warning\", {\n\t\t\t\t\tdisabled:\n\t\t\t\t\t\t!editOwnedInvoicesPermissions()\n\t\t\t\t\t\t&& !editInvoicePermissions()\n\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\tdeletetInvoices({\n\t\t\t\t\t\t\tmakeAPICalls: null\n\t\t\t\t\t\t\t, api: data.api\n\t\t\t\t\t\t\t, invoice: i\n\t\t\t\t\t\t\t, deleteInvoiceItems\n\t\t\t\t\t\t\t, todaysInvoices\n\t\t\t\t\t\t\t, errors\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t,title: \"Delete a Ledger\"\n\t\t\t\t},'Delete')\n\n\t\t\t\t,[i.invoice_inv_id(), i.invoice_no() ].filter(Boolean).join('|')\n\n\n\t\t\t\t,i.invoice_id()\n\t\t\t\t&& i.invoice_approval()\n\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t , (e) => {\n\t\t\t\t\t\t\t\t\t\ti.invoice_received(e)\n\n\t\t\t\t\t\t\t\t\t\tif(e){\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_items.forEach((ii) =>\n\t\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_received_amount = ii.invoice_items_amount\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_received_date(new Date().getTime())\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_items.forEach((ii) =>\n\t\t\t\t\t\t\t\t\t\t\t\tii.invoice_items_received_amount = 0\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_received_date(null)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn i.invoice_received()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked: i.invoice_received()\n\t\t\t\t\t\t\t,title: `Set ledger to be recieved`\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t!editOwnedInvoicesPermissions()\n\t\t\t\t\t\t\t\t&& !editInvoicePermissions()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: 'Not Approved'\n\n\t\t\t\t,i.invoice_name()\n\n\t\t\t\t,editOwnedInvoicesPermissions()\n\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_description()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\ti.invoice_description\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_description()\n\n\t\t\t\t,(\n\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t)\n\t\t\t\t&& !i.invoice_items.length\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_amount()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_name() + ' Working Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: i.invoice_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_approval()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_amount()\n\n\t\t\t\t,(\n\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t)\n\t\t\t\t&& !i.invoice_items.length\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_service_amount()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_name() + ' Service Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: i.invoice_service_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_approval()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_service_amount()\n\n\t\t\t\t,(\n\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t)\n\t\t\t\t&& !i.invoice_items.length\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_depreciation_amount()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_name()\n\t\t\t\t\t\t\t\t\t\t\t\t+ ' Depreciation Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: i.invoice_depreciation_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_approval()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_depreciation_amount()\n\n\t\t\t\t,(\n\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t)\n\t\t\t\t&& !i.invoice_items.length\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_appreciation_amount()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_name()\n\t\t\t\t\t\t\t\t\t\t\t\t+ ' Appreciation Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: i.invoice_appreciation_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_approval()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_appreciation_amount()\n\n\t\t\t\t,(\n\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t)\n\t\t\t\t&& !i.invoice_items.length\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => i.invoice_damages_amount()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_name() + ' Damages Amount'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: i.invoice_damages_amount\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_approval()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: i.invoice_damages_amount()\n\n\t\t\t\t,editInvoicePermissions()\n\t\t\t\t|| editOwnedInvoicesPermissions()\n\t\t\t\t\t? makeMoney(\n\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\ti.invoice_amount()\n\t\t\t\t\t\t\t\t* i.invoice_rate()\n\t\t\t\t\t\t\t+ i.invoice_service_amount()\n\t\t\t\t\t\t\t\t* i.invoice_service_rate()\n\t\t\t\t\t\t\t+ i.invoice_depreciation_amount()\n\t\t\t\t\t\t\t\t* i.invoice_depreciation_rate()\n\t\t\t\t\t\t\t+ i.invoice_appreciation_amount()\n\t\t\t\t\t\t\t\t* i.invoice_appreciation_rate()\n\t\t\t\t\t\t\t+ i.invoice_damages_amount()\n\t\t\t\t\t\t\t\t* i.invoice_damages_rate()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\t,!i.invoice_approval()\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tconst iapprover =\n\t\t\t\t\t\t\t\tusers().find((u) =>\n\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t== i.invoice_approver()\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\treturn iapprover\n\t\t\t\t\t\t\t\t? iapprover.usersFullName\n\t\t\t\t\t\t\t\t: 'Unassigned'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\tusers\n\t\t\t\t\t\t\t\t, (v) => {\n\n\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t\t\t? i.invoice_approver(v.user_id())\n\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\tconst assignedUser =\n\t\t\t\t\t\t\t\t\t\tusers().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t== i.invoice_approver()\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\treturn assignedUser\n\t\t\t\t\t\t\t\t\t\t? assignedUser.usersFullName\n\t\t\t\t\t\t\t\t\t\t: 'Unassigned'\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'usersFullName'\n\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,disabled: !editOwnedInvoicesPermissions()\n\t\t\t\t\t\t\t\t\t\t&& !editInvoicePermissions()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: !i.user_id()\n\t\t\t\t\t? 'Unassigned'\n\t\t\t\t\t: users().find((u) =>\n\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t== i.invoice_approver()\n\t\t\t\t\t).usersFullName\n\n\t\t\t\t]\n\t\t\t)\n\t\t)\n\n\tfunction CreatInvoicePO(){\n\t\treturn [\n\t\t\tm('br')\n\t\t\t,elements.alert(`info`,\n\t\t\t\t'Rate polarity determines how Odin interprets your input. '\n\t\t\t\t+ 'Negative rates are treated as expenditures and '\n\t\t\t\t+ 'positive rates are interpreted as revenue.'\n\t\t\t)\n\n\t\t\t,!data.calculated()\n\t\t\t|| vm().pending()\n\t\t\t|| !fetchedInv()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: [\n\t\t\t\t\t(\n\t\t\t\t\t\teditOwnedInvoicesPermissions()\n\t\t\t\t\t\t|| editInvoicePermissions()\n\t\t\t\t\t)\n\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t? addLedger()\n\t\t\t\t\t: null\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,todaysInvoices().length\n\t\t\t\t\t? invoiceTable()\n\t\t\t\t\t: null\n\t\t]\n\t\t]\n\t}\n\n\tconst resourcing = () =>\n\t\telements.list([\n\t\t\tm('label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\tmin-height: 1.6em;\n\t\t\t\t`\n\t\t\t\t,'Resource'\n\t\t\t)\n\t\t\t,Pencil2(\n\t\t\t\t() => SelectedResource().ParentRecognition\n\t\t\t\t,() =>\n\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\tresourceOptions\n\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\tif(v != SelectedResource()){\n\t\t\t\t\t\t\t\tSelectedResource(v)\n\t\t\t\t\t\t\t\tvm().selected.allocation = {}\n\t\t\t\t\t\t\t\tvm().revert = {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t, 'ParentRecognition'\n\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\tplaceholder: 'Select a resource'\n\t\t\t\t\t\t\t,title: 'Resources registered to works'\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t])\n\n\tconst projectNameUnlabelled = () =>\n\t\tPencil2(\n\t\t\t() => SelectedProject().project_name\n\t\t\t,() => autocomplete.strict(\n\t\t\t\tprojectOptions\n\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\tif ( v != SelectedProject() ){\n\t\t\t\t\t\tSelectedProject(v)\n\t\t\t\t\t\tvm().selected.allocation = {}\n\t\t\t\t\t\tvm().revert = {}\n\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t}\n\n\t\t\t\t})\n\t\t\t\t, 'project_name'\n\t\t\t\t, () => ({\n\t\t\t\t\tplaceholder: 'Select a project'\n\t\t\t\t\t,disabled:\n\t\t\t\t\t\t!vm().selected.allocation.allocation_id\n\t\t\t\t\t\t&& !identical(\n\t\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t\t, baseProjectDetails()\n\t\t\t\t\t\t)\n\t\t\t\t\t,title: 'Project Works'\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\n\tconst disciplineNameUnlabelled = () =>\n\t\t!disciplineOptions().length\n\t\t|| !data.advancedView()\n\t\t? null\n\t\t: Pencil2(\n\t\t\t\t() =>\n\t\t\t\t\t' - '\n\t\t\t\t\t+ (\n\t\t\t\t\t\tdiscipline_box()\n\t\t\t\t\t\t|| SelectedDiscipline().discplineNameDescription\n\t\t\t\t\t)\n\n\t\t\t\t,() =>\n\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\tdisciplineOptions\n\t\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\t\tif ( v != allDisciplines ){\n\t\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\t\tSelectedDiscipline(v)\n\t\t\t\t\t\t\t\tvm().selected.allocation = {}\n\t\t\t\t\t\t\t\tvm().revert = {}\n\t\t\t\t\t\t\t\tdiscipline_box('')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdiscipline_box('All Disciplines')\n\t\t\t\t\t\t\t\tSelectedDiscipline({})\n\t\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t, 'discplineNameDescription'\n\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\tplaceholder: 'Select a discipline'\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t!identical(\n\t\t\t\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t\t\t\t, baseProjectDetails()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,title: 'Discipline Works'\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\n\tconst daySelectButtons = () =>\n\t\telements.selectbuttons(\n\t\t\tshortDates().map((d) => d.name)\n\t\t\t,(a) => {\n\t\t\t\tif(a){ viewWindow(a) }\n\t\t\t}\n\t\t\t,{ title: `Show representative items`}\n\t\t\t,(notReq, a) =>\n\t\t\t\tshortDates().find((d) =>\n\t\t\t\t\td.name == a\n\t\t\t\t\t&& d.dateA == SelectedDate()\n\t\t\t\t\t&& d.dateB == SelectedSecondDate()\n\t\t\t\t)\n\t\t\t,() => activeLandingTab() == 'Tasks'\n\t\t)\n\n\tconst taskSelectButtons = () =>\n\t\telements.selectbuttons(\n\t\t\t[\n\t\t\t\t'Assigned'\n\t\t\t\t,'Completed'\n\t\t\t\t,'Verified'\n\t\t\t\t,'Invalid'\n\t\t\t].map((prop) =>\n\t\t\t\tprop\n\t\t\t\t+ ' '\n\t\t\t\t+ (projectExtrasStat()['project_extras_date_' + prop.toLowerCase()] || 0)\n\t\t\t)\n\t\t\t.concat('All Tasks ')\n\t\t\t,(t) => {\n\t\t\t\tif(t){\n\n\t\t\t\t\t// !projectExtrasTypes()['completed']\n\t\t\t\t\t// \t? projectExtrasTypes()['completed'] = 'any'\n\t\t\t\t\t// \t: ''\n\t\t\t\t\t// !projectExtrasTypes()['invalid']\n\t\t\t\t\t// \t? projectExtrasTypes()['invalid'] = 'any'\n\t\t\t\t\t// \t: ''\n\t\t\t\t\t// !projectExtrasTypes()['assigned']\n\t\t\t\t\t// \t? projectExtrasTypes()['assigned'] = 'any'\n\t\t\t\t\t// \t: ''\n\t\t\t\t\t// !projectExtrasTypes()['verified']\n\t\t\t\t\t// \t? projectExtrasTypes()['verified'] = 'any'\n\t\t\t\t\t// \t: ''\n\n\t\t\t\t\tfetchedExtras(false)\n\n\t\t\t\t\tselectedProjectExtra({})\n\t\t\t\t\tconst type = t.toLowerCase().split(' ')[0]\n\n\t\t\t\t\tconst newtypes =\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcompleted: 'any'\n\t\t\t\t\t\t\t\t, invalid: 'any'\n\t\t\t\t\t\t\t\t, verified: 'any'\n\t\t\t\t\t\t\t\t, assigned: 'any'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,t.indexOf('All Tasks') > -1\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t[type]:\n\t\t\t\t\t\t\t\t\tprojectExtrasTypes()[type] == 'all'\n\t\t\t\t\t\t\t\t\t? projectExtrasTypes()[type] = 'any'\n\t\t\t\t\t\t\t\t\t: projectExtrasTypes()[type] = 'all'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\n\t\t\t\t\tif(\n\t\t\t\t\t\tprojectExtrasTypes()['completed'] == 'any'\n\t\t\t\t\t\t&& projectExtrasTypes()['invalid'] == 'any'\n\t\t\t\t\t\t&& projectExtrasTypes()['assigned'] == 'any'\n\t\t\t\t\t\t&& projectExtrasTypes()['verified'] == 'any'\n\t\t\t\t\t\t&& t.indexOf('All Tasks') == -1\n\t\t\t\t\t){\n\t\t\t\t\t\tprojectExtrasTypes()['completed'] = ''\n\t\t\t\t\t\tprojectExtrasTypes()['invalid'] = ''\n\t\t\t\t\t\tprojectExtrasTypes()['assigned'] = ''\n\t\t\t\t\t\tprojectExtrasTypes()['verified'] = ''\n\t\t\t\t\t}\n\n\t\t\t\t\tprojectExtrasTypes( newtypes )\n\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t,{\n\t\t\t\tdisabled:\n\t\t\t\t\tprojectDetails().some((p) => !p.project_id() )\n\t\t\t\t,title: `Task selection`\n\t\t\t}\n\t\t\t,(notReq, t) =>\n\t\t\t\tprojectExtrasTypes()[ t.toLowerCase().split(' ')[0] ] == 'all' || t.indexOf('All Tasks') > -1\n\t\t\t\t&& projectExtrasTypes()['completed'] == 'any'\n\t\t\t\t&& projectExtrasTypes()['invalid'] == 'any'\n\t\t\t\t&& projectExtrasTypes()['assigned'] == 'any'\n\t\t\t\t&& projectExtrasTypes()['verified'] == 'any'\n\t\t)\n\n\tconst between = () =>\n\t\tactiveLandingTab() == 'Days'\n\t\t? [\n\t\t\telements.list([\n\t\t\t\tm('label.control-label', 'Between')\n\t\t\t\t,Pencil2(\n\t\t\t\t\t() =>\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSelectedDate()\n\t\t\t\t\t\t\t? moment( SelectedDate()).format(\"ll\")\n\t\t\t\t\t\t\t: 'Project Start'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\tSelectedSecondDate() != Infinity\n\t\t\t\t\t\t\t? moment( SelectedSecondDate()).format(\"ll\")\n\t\t\t\t\t\t\t: 'Project End'\n\t\t\t\t\t\t)\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\tSelectedDate\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: activeLandingTab() == 'Tasks'\n\t\t\t\t\t\t\t\t\t,title: 'Edit the date range'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,elements.dateInput(\n\t\t\t\t\t\t\t\tSelectedSecondDate\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: activeLandingTab() == 'Tasks'\n\t\t\t\t\t\t\t\t\t,title: 'Edit the date range'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t])\n\t\t]\n\t\t: null\n\n\tconst taskReports = () =>\n\t\tactiveLandingTab() == 'Days'\n\t\t? [\n\t\t\t!data.advancedView() && elements.alert(\n\t\t\t\t`info`, `Odin summarises events and related efforts in an allocated day for each discipline`\n\t\t\t\t+ `The Search + Filter inputs can sort this data in many inclusion and exclusion search combinations, but to sort through the work promptly Odin also provides the day select buttons`\n\t\t\t)\n\t\t\t,daySelectButtons()\n\t\t]\n\t\t: activeLandingTab() == 'Tasks'\n\t\t? [\n\t\t\telements.alert('info',\n\t\t\t\t`Tasks are small unscheduled activites that are useful for record keeping. Tasks can be related to disciplines and account for working quantities. `\n\t\t\t\t+ `The Search + Filter inputs can sort this data in many inclusion and exclusion search combinations, but to sort through the work promptly Odin also provides the task select buttons`\n\t\t\t)\n\t\t\t, taskSelectButtons()\n\t\t]\n\t\t: null\n\n\t// todo-james files list\n\tconst readOnlyFiles = ({only}) =>\n\t\tm('.read-only-files'\n\t\t\t, m('h4', 'Documents')\n\t\t\t, [\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tmargin-bottom: 1em;\n\t\t\t\t\t\tmargin-top: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t,\n\t\t\t\t\t{\n\t\t\t\t\t\t// onclick: () => readOnlyFiles.open = !readOnlyFiles.open\n\t\t\t\t\t\t// , open: !!readOnlyFiles.open\n\t\t\t\t\t\tkey: JSON.stringify(uploadmetadata({}))\n\t\t\t\t\t}\n\t\t\t\t\t,m('.event-breaker'\n\t\t\t\t\t\t,\n\t\t\t\t\t\t{ onclick: e => e.stopPropagation() }\n\t\t\t\t\t\t,\n\t\t\t\t\t\t\tm(HarthUppy, {\n\t\t\t\t\t\t\t\tgetFields: () => uploadmetadata(only || {})\n\t\t\t\t\t\t\t\t, data\n\t\t\t\t\t\t\t\t, listOnly: true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t]\n\t\t)\n\n\tconst notes = () =>\n\t\tdata.advancedView()\n\t\t? m(''+css`padding-top: 0.75em`\n\t\t\t,elements.details(\n\t\t\t\t'Notes'\n\t\t\t\t,m(''\n\t\t\t\t\t,[\n\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t,projectNotes().map((s) => [\n\t\t\t\t\t\t\telements.list([m('p.pv1.underline.fw5', s[0])])\n\t\t\t\t\t\t\t, s[1].map((ss) => m('.pa0.relative.left-1.top--1', elements.list([m('.fw5', ss[0]), m('.fw6.gold', ss[1])], '.pa0')))\n\t\t\t\t\t\t])\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t,projectNotes().length ? {} : { disabled: true }\n\t\t\t)\n\t\t)\n\t\t: null\n\n\n\tconst filteredTaskOptions = data.scoped([])\n\tconst filteredAllocationOptions = data.scoped([])\n\n\tconst materialloading = data.scoped(false)\n\tconst toolloading = data.scoped(false)\n\tconst materials = data.scoped({actual: [], suggested: []})\n\n\tconst transfers = data.scoped([])\n\tconst forceMaterialFetch = data.scoped(false)\n\tconst forceToolfetch = data.scoped(false)\n\tfunction fetchWarehouses(){\n\t\treturn data.fetchWarehouses({})\n\t\t\t.then(function(res){\n\t\t\t\treturn transfers(\n\t\t\t\t\tres.map((w) =>\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: w.warehouse_id()\n\t\t\t\t\t\t\t\t,name: w.warehouse_name()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,w\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\tfunction transferItems(item, ti){\n\n\t\tconst items = item.returnquantity ? [item] : materials().suggested[ti.id].fmgroupedbyitem\n\n\t\titem.combine = true\n\n\t\titem.transfers =\n\t\t\titems.map((i) => {\n\n\t\t\t\tconst tranferqty = i.returnquantity && i.returnquantity() || item.takequantity()\n\t\t\t\tconst newid = i.returnWarehouse && i.returnWarehouse().id || i.discipline_id\n\t\t\t\tconst newname = i.returnWarehouse && i.returnWarehouse().name || i.discipline_name\n\n\t\t\t\treturn {\n\t\t\t\t\ttransferqty: tranferqty\n\t\t\t\t\t,transferid: newid\n\t\t\t\t\t,transfername: newname\n\t\t\t\t\t,transfernotes:\n\t\t\t\t\t\t( i.returnquantity ? ' returned from ' : tranferqty + ' taken from ')\n\t\t\t\t\t\t+ ( i.returnquantity ? i.distribution_entity_name() : item.distribution_entity_name )\n\t\t\t\t}\n\t\t\t})\n\n\t\treturn [item]\n\t}\n\tconst requiredTools = data.scoped({actual: [], suggested: []})\n\tconst prevtasks = data.scoped([])\n\n\tprop.merge(\n\t\t[\n\t\t\tfilteredTaskOptions\n\t\t\t,forceMaterialFetch\n\t\t\t,forceToolfetch\n\t\t\t// ,filteredAllocationOptions\n\t\t]\n\t)\n\t.map(([tasks, ff, fft]) => {\n\n\t\tconst tassksid =\n\t\t\tprevtasks().map((t) => exposer(t.project_extras_id)).join('')\n\t\t\t== tasks.map((t) => exposer(t.project_extras_id)).join('')\n\n\t\treturn (\n\t\t\t(!materialloading() || !toolloading())\n\t\t\t&& tasks.length\n\t\t\t&& (ff || fft || !tassksid)\n\t\t\t&& (\n\t\t\t\t!materialloading() && !toolloading()\n\t\t\t\t? toolloading(true) && materialloading(true)\n\t\t\t\t: !materialloading()\n\t\t\t\t? materialloading(true)\n\t\t\t\t: toolloading(true)\n\t\t\t)\n\t\t\t? Promise.all([\n\t\t\t\tdata.fetchSuggestedMaterials({\n\t\t\t\t\tprojects: []\n\t\t\t\t\t,warehouse_id: null\n\t\t\t\t\t,completedProjects: null\n\t\t\t\t\t,tasks: tasks.map((t) => t.project_extras_id())\n\t\t\t\t})\n\t\t\t\t, data.fetchMaterials({\n\t\t\t\t\tprojects: tasks.map((t) => t.project_id())\n\t\t\t\t\t,warehouse_id: null\n\t\t\t\t\t,completedProjects: null\n\t\t\t\t\t,tasks: tasks.map((t) => t.project_extras_id())\n\t\t\t\t})\n\t\t\t\t, data.readToolPermissions()\n\t\t\t\t? data.api.tools.presets.fetch({\n\t\t\t\t\tperorganizatond:\n\t\t\t\t\t\ttasks.map((d) => exposer(d.organizations_disciplines_id) ).filter(R.identity)\n\t\t\t\t\t,suggested: true\n\t\t\t\t\t,users:\n\t\t\t\t\t\ttasks.map((d) => exposer(d.user_id)).filter(R.identity)\n\t\t\t\t})\n\t\t\t\t: []\n\t\t\t])\n\t\t\t.then(([suggested, actual, rt]) => {\n\t\t\t\tprevtasks(tasks)\n\n\t\t\t\tconst itemsindex =\n\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\tR.pipe(R.prop('supplier_items_id'), R.call)\n\t\t\t\t\t\t,actual\n\t\t\t\t\t)\n\n\t\t\t\tconst ditemsindex =\n\t\t\t\t\tR.mapObjIndexed(\n\t\t\t\t\t\tR.groupBy((o) => R.prop('discipline_id', o) || o.project_id)\n\t\t\t\t\t\t,itemsindex\n\t\t\t\t\t)\n\n\n\t\t\t\tif( fft || !ff){\n\t\t\t\t\trequiredTools(\n\t\t\t\t\t\trt.map((t) => {\n\t\t\t\t\t\t\tt.itemdetailarray = data.scoped(t.actual)\n\t\t\t\t\t\t\tt.dispersion = R.indexBy(R.prop('organizations_disciplines_id'), t.actual)\n\t\t\t\t\t\t\treturn t\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\n\t\t\t\t\tconst atools = rt.filter((r) => r.actual.length)\n\t\t\t\t\tconst stools = rt.filter((r) => r.suggested.length)\n\n\t\t\t\t\trequiredTools({\n\t\t\t\t\t\tactual:\n\t\t\t\t\t\t\tatools\n\t\t\t\t\t\t\t.concat(stools.filter((s) => !atools.find((a) => a.tools_type == s.tools_type)))\n\t\t\t\t\t\t\t.map((s) => R.merge(\n\t\t\t\t\t\t\t\ts,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: s.tools_type || 'General Tools'\n\t\t\t\t\t\t\t\t\t,total: Math.max(s.required, s.assigned)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,suggested: rt.filter((r) => r.suggested.length)\n\t\t\t\t\t})\n\n\t\t\t\t\tforceToolfetch(false)\n\t\t\t\t\ttoolloading(false)\n\t\t\t\t}\n\n\t\t\t\tif( ff || !fft){\n\t\t\t\t\tmaterials({\n\t\t\t\t\t\tactual:\n\t\t\t\t\t\t\tR.uniqBy(R.pipe(R.prop('supplier_items_id'), R.call), actual)\n\t\t\t\t\t\t\t.map((i) => {\n\t\t\t\t\t\t\t\tconst suggestedmaterial =\n\t\t\t\t\t\t\t\t\tsuggested.find((s) => s.supplier_items_id == i.supplier_items_id()) || {requiredqty: 0, currentqty: 0}\n\t\t\t\t\t\t\t\tconst totalqty = (suggestedmaterial['taskrequiredqty'] || suggestedmaterial['requiredqty']) - suggestedmaterial['currentqty']\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tname: i.distribution_material_name()\n\t\t\t\t\t\t\t\t\t,id: i.supplier_items_id()\n\t\t\t\t\t\t\t\t\t,dispersion:\n\t\t\t\t\t\t\t\t\t\tR.mapObjIndexed(\n\t\t\t\t\t\t\t\t\t\t\t(di) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn di.map((m) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tm.returnWarehouse = data.scoped({})\n\t\t\t\t\t\t\t\t\t\t\t\t\tm.returnquantity = data.scoped(0)\n\t\t\t\t\t\t\t\t\t\t\t\t\tm.returnable = true\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn m\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,ditemsindex[i.supplier_items_id()]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,received:\n\t\t\t\t\t\t\t\t\t\tR.sum(R.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['order_received']))))\n\t\t\t\t\t\t\t\t\t,allocated:\n\t\t\t\t\t\t\t\t\t\tR.sum(R.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['distribution_amount']()))))\n\t\t\t\t\t\t\t\t\t,orders:\n\t\t\t\t\t\t\t\t\t\tR.uniq(\n\t\t\t\t\t\t\t\t\t\t\tR.unnest(Object.keys(ditemsindex[i.supplier_items_id()])\n\t\t\t\t\t\t\t\t\t\t\t.map((k) => ditemsindex[i.supplier_items_id()][k].map((si) => si['order_name'])))\n\t\t\t\t\t\t\t\t\t\t\t.filter(R.identity)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.join()\n\t\t\t\t\t\t\t\t\t,frequired: suggestedmaterial['taskrequiredqty'] || suggestedmaterial['requiredqty']\n\t\t\t\t\t\t\t\t\t,required: (suggestedmaterial['taskrequiredqty'] || suggestedmaterial['requiredqty']) - suggestedmaterial['currentqty']\n\t\t\t\t\t\t\t\t\t,supplier_items_id: i.supplier_items_id()\n\t\t\t\t\t\t\t\t\t,value: i.order_items_cost || i.supplier_items_cost * totalqty\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\t\tsuggested.filter((s) => !itemsindex[s.supplier_items_id])\n\t\t\t\t\t\t\t\t.map((s) => ({\n\t\t\t\t\t\t\t\t\tname: R.last(s.fmgroupedbyitem)['distribution_material_name']\n\t\t\t\t\t\t\t\t\t,id: s.supplier_items_id\n\t\t\t\t\t\t\t\t\t,dispersion: {}\n\t\t\t\t\t\t\t\t\t,received: ''\n\t\t\t\t\t\t\t\t\t,allocated: ''\n\t\t\t\t\t\t\t\t\t,orders: ''\n\t\t\t\t\t\t\t\t\t,required: s.taskrequiredqty || s.requiredqty\n\t\t\t\t\t\t\t\t\t,supplier_items_id: s.supplier_items_id\n\t\t\t\t\t\t\t\t\t,value: s.supplier_items_cost* (s.taskrequiredqty || s.requiredqty)\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,suggested:\n\t\t\t\t\t\t\tR.indexBy(\n\t\t\t\t\t\t\t\tR.prop('supplier_items_id')\n\t\t\t\t\t\t\t\t,suggested.map((s) => {\n\t\t\t\t\t\t\t\t\tconst requiredqty = Number(Number(s['requiredqty']-s['currentqty']).toFixed(3))\n\n\t\t\t\t\t\t\t\t\ts.mogroupedbyitem\n\t\t\t\t\t\t\t\t\t&& s.mogroupedbyitem.forEach((i) =>\n\t\t\t\t\t\t\t\t\t\ti.takequantity = data.scoped(Math.min(i.distribution_amount, requiredqty))\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\treturn R.merge(\n\t\t\t\t\t\t\t\t\t\t{ditemsindex: R.indexBy(R.prop('discipline_id'), s.fmgroupedbyitem)\n\t\t\t\t\t\t\t\t\t\t, editquantity: m.prop(requiredqty)}\n\t\t\t\t\t\t\t\t\t\t, s\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t})\n\n\t\t\t\t\tforceMaterialFetch(false)\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t: Promise.resolve( !tasks.length && materials({actual: [], suggested: []}) && requiredTools({actual: [], suggested: []}) && [[], []] )\n\t\t)\n\t})\n\n\tmaterials\n\t.map((materialist) =>\n\t\tmaterialist.actual.map((item) => {\n\t\t\titem.itemdetailarray =\n\t\t\t\tdata.scoped(\n\t\t\t\t\tR.uniqBy((d) => d.discipline_id(), filteredTaskOptions())\n\t\t\t\t\t.map((pd) => ({\n\t\t\t\t\t\tid: pd.discipline_id ? pd.discipline_id() : pd.project_id()\n\t\t\t\t\t\t,name: pd.discipline_name ? pd.relatedDiscipline : pd.project_name\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((pd) =>\n\t\t\t\t\t\titem.dispersion[pd.id]\n\t\t\t\t\t\t|| materials().suggested[item.supplier_items_id]\n\t\t\t\t\t\t&& materials().suggested[item.supplier_items_id]['ditemsindex'][pd.id]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\treturn item\n\t\t})\n\t\t&& materialloading(false)\n\t)\n\n\n\tconst takeItemButton = (i, item) => {\n\t\tconst onclick = () => {\n\t\t\tmaterialloading(true)\n\t\t\treturn data.api.materials.patch.many(\n\t\t\t\ti.newOrder\n\t\t\t\t? materials().suggested[item.id]['fmgroupedbyitem']\n\t\t\t\t.map((objtref) => {\n\t\t\t\t\t// const actuals =\n\t\t\t\t\t// \tmaterials().actual.find((a) => a.supplier_items_id == item.id)\n\n\t\t\t\t\tconst required = objtref.requiredqty\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\torganization_id: m.prop(objtref.organization_id)\n\t\t\t\t\t\t,distribution_id: m.prop(uuid.v4())\n\t\t\t\t\t\t,distribution_entity_name: m.prop(objtref.distribution_entity_name)\n\t\t\t\t\t\t,distribution_entity_id: m.prop(objtref.distribution_entity_id)\n\t\t\t\t\t\t,supplier_id: m.prop(objtref.supplier_id)\n\t\t\t\t\t\t,supplier_items_id: m.prop(objtref.supplier_items_id)\n\t\t\t\t\t\t,distribution_material_name: m.prop(objtref.distribution_material_name)\n\t\t\t\t\t\t,distribution_material_description: m.prop(objtref.distribution_material_description)\n\t\t\t\t\t\t,distribution_amount: m.prop(required)\n\t\t\t\t\t\t,distribution_batch: m.prop(objtref.distribution_batch)\n\t\t\t\t\t\t,distribution_container_name: m.prop(objtref.distribution_container_name)\n\t\t\t\t\t\t,distribution_container_id: m.prop(objtref.distribution_container_id)\n\t\t\t\t\t\t,distribution_silo: m.prop(objtref.distribution_silo)\n\t\t\t\t\t\t,distribution_ordered: m.prop(objtref.distribution_ordered)\n\t\t\t\t\t\t,distribution_float: m.prop(objtref.distribution_float)\n\t\t\t\t\t\t,distribution_stocked: m.prop(objtref.project_name + \" - \" + objtref.project_material_suburb)\n\t\t\t\t\t\t,supplier_name: m.prop(objtref.supplier_name)\n\t\t\t\t\t\t,supplier_items_cost: m.prop(objtref.supplier_items_cost)\n\t\t\t\t\t\t,supplier_items_batch_cost: m.prop(objtref.supplier_items_batch_cost)\n\t\t\t\t\t\t,autoorder: i.newOrder\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t: transferItems(i, item)\n\t\t\t)\n\t\t\t.then(function(){\n\t\t\t\tmaterialloading(false)\n\t\t\t\treturn forceMaterialFetch(true)\n\t\t\t})\n\t\t}\n\n\n\t\treturn fancyButton({\n\t\t\tonclick\n\t\t\t, disabled: !i.newOrder && i.takequantity() > i.distribution_amount\n\t\t}, i.newOrder ? `New Order` : `Take Items`)\n\t}\n\n\n\tconst suggestedMaterialItems = (item, suggestedActions) => {\n\t\tlet i = suggestedActions[0]\n\n\t\tlet headerContent =\n\t\t\ti\n\t\t\t&& [\n\t\t\t\tmaterials().suggested[item.id]['editquantity']()\n\t\t\t\t,'required' + ( !i.suggestions ? ' ( not yet ordered ) ' : ' ( not yet allocated ) ' )\n\t\t\t]\n\t\t\t.join(' ')\n\n\t\tconst numberInput = (i) =>\n\t\t\tm(\n\t\t\t\tNumberInput\n\t\t\t\t,R.merge(\n\t\t\t\t\tdata\n\t\t\t\t\t,{\n\t\t\t\t\t\terrors\n\t\t\t\t\t\t,errorLabel: 'Material Qty'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t,{\n\t\t\t\t\tprop:\n\t\t\t\t\t\ti.returnable\n\t\t\t\t\t\t? i.returnquantity\n\t\t\t\t\t\t: i.takequantity\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t,max: i.distribution_amount\n\t\t\t\t\t\t,step: 0.001\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\n\t\tconst complexSummary = (i) =>\n\t\t\tm('.complex-summary'+css`margin-bottom: 2em;`\n\t\t\t\t, elements.infoPills({\n\t\t\t\t\t[i.newOrder ? 'Supplementing' : 'Warehouse' ]: i.distribution_entity_name\n\t\t\t\t\t,[i.newOrder ? 'Amount' : 'Available']: [i.distribution_amount * 4 ]\n\t\t\t\t\t,'Received': i.newOrder ? '' : [i.order_received , ' / ', i.distribution_amount * 4]\n\t\t\t\t\t,'Order': i.order_name\n\t\t\t\t\t,'ETA on Remaining': i.order_eta || 'Not Confirmed'\n\t\t\t\t})\n\t\t\t\t, elements.infoPill('Notes', i.order_notes)\n\t\t\t)\n\n\t\treturn m('.suggested-items'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t, elements.infoPill('Required', i && headerContent)\n\t\t\t, m('.items'\n\t\t\t\t,suggestedActions\n\t\t\t\t.map((i) =>\n\t\t\t\t\tm(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\tmargin-bottom: 1em;\n\t\t\t\t\t\t\tgap: 0.5em\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, m('.take-items'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tjustify-self: start;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\ttakeItemButton(i, item)\n\t\t\t\t\t\t\t\t\t,i.newOrder\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: numberInput(i)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, complexSummary(i)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\n\tconst materialItemSuggestions = (item, suggestedActions) => {\n\t\treturn editMaterialPermissions()\n\t\t\t? suggestedMaterialItems(item, suggestedActions)\n\t\t\t: []\n\t}\n\n\tconst toolItemSuggestions = (item, suggestedActions) => {\n\t\treturn editToolPermissions() || editAssignedToolPermissions()\n\t\t\t? suggestedToolItems(item, suggestedActions)\n\t\t\t: []\n\t}\n\n\n\tconst suggestedToolItems = (item, suggestedActions) => {\n\t\tlet i = suggestedActions[0]\n\n\t\tlet headerContent =\n\t\t\ti\n\t\t\t&& [\n\t\t\t\titem.required\n\t\t\t\t, 'required'\n\t\t\t\t, '('\n\t\t\t\t, item.assigned\n\t\t\t\t, 'assigned'\n\t\t\t\t, ')'\n\t\t\t]\n\t\t\t.join(' ')\n\n\t\tconst complexSummary = (i) =>\n\t\t\tm('.complex-summary'+css`margin-bottom: 2em;`\n\t\t\t\t, elements.infoPills({\n\t\t\t\t\t'Tool': i.tools_name || ''\n\t\t\t\t\t,'Take Tool': assignAToolPencil()(i)\n\t\t\t\t\t,'Description': i.tools_description || ''\n\t\t\t\t\t,'Location': i.tools_location || ''\n\t\t\t\t\t,'Ownership': i.tools_ownership || ''\n\t\t\t\t\t,'Condition': i.tools_condition || ''\n\t\t\t\t})\n\t\t\t)\n\n\t\treturn m('.suggested-items'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t, elements.infoPill('Required', i && headerContent)\n\t\t\t, m('.items'\n\t\t\t\t,suggestedActions\n\t\t\t\t.map((i, iindex) =>\n\t\t\t\t\tm(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\tmargin-bottom: 1em;\n\t\t\t\t\t\t\tgap: 0.5em\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, m('.take-items'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tjustify-self: start;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t!iindex\n\t\t\t\t\t\t\t\t\t? `Users connected to teams may take tools`\n\t\t\t\t\t\t\t\t\t: ``\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, complexSummary(i)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\n\n\tconst fancyButton = (attrs, text) =>\n\t\tm(\n\t\t\t'button.btn.btn-secondary'\n\t\t\t+ css`\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tborder: solid 1px #3380c2;\n\t\t\t\tmin-width: 7em;\n\t\t\t\tmin-height: 1.8em;\n\t\t\t\tcolor: #434aa3;\n\t\t\t\tpadding: 0.2em;\n\t\t\t\theight: 2.5em;\n\t\t\t`\n\t\t\t.$nest(':hover', `\n\t\t\t\topacity: 0.8;\n\t\t\t\theight: 2.5em;\n\t\t\t`)\n\t\t\t, attrs\n\t\t\t, text\n\t\t)\n\n\tconst transferItemsButton =\n\t\t(i, { stateChanger, attrs={} }={}) => fancyButton(\n\t\t\t{\n\t\t\t\t ...attrs\n\t\t\t\t, onclick:\n\t\t\t\t\t() => {\n\t\t\t\t\t\treturn !i.returnactive || stateChanger\n\t\t\t\t\t\t? i.returnactive = !i.returnactive\n\t\t\t\t\t\t: materialloading(true)\n\t\t\t\t\t\t&& data.api.materials.patch.many(transferItems(i))\n\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\tmaterialloading(false)\n\t\t\t\t\t\t\t\treturn forceMaterialFetch(true)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t,disabled: attrs.disabled || i.returnquantity() > i.distribution_amount()\n\t\t\t\t,title: ''\n\t\t\t}\n\t\t\t, i.returnactive && stateChanger ? `Keep Items` : 'Return Items'\n\t\t)\n\n\tconst returnForm = i =>\n\t\t[\n\n\t\t\tm('', 'Return Quantity')\n\n\t\t\t,m(\n\t\t\t\tNumberInput\n\t\t\t\t,R.merge(\n\t\t\t\t\tdata\n\t\t\t\t\t,{\n\t\t\t\t\t\terrors\n\t\t\t\t\t\t,errorLabel: 'Material Qty'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t,{\n\t\t\t\t\tprop: i.returnquantity\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t,max: i.distribution_amount()\n\t\t\t\t\t\t,step: 0.001\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\n\t\t\t,m('', 'to')\n\n\t\t\t,autocomplete.strict(\n\t\t\t\ttransfers\n\t\t\t\t,R.when(Boolean, function(v){\n\t\t\t\t\ti.returnWarehouse(v)\n\t\t\t\t})\n\t\t\t\t,'name'\n\t\t\t\t,() => ({})\n\t\t\t)\n\n\t\t\t, transferItemsButton(i, {\n\t\t\t\tstatechanger: false\n\t\t\t\t,attrs: {\n\t\t\t\t\tdisabled: !(\n\t\t\t\t\t\ti.returnWarehouse().id\n\t\t\t\t\t\t&& i.returnquantity() > 0\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\t\t]\n\n\tconst toolItemDetails =\n\t\t(item, config) => {\n\t\t\tconst suggestedActions = config.suggestedActions(item)\n\t\t\tconst items =\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 3em;\n\t\t\t\t\t`\n\t\t\t\t\t, item.itemdetailarray().length > 0\n\t\t\t\t\t&& m('.detail-items'\n\t\t\t\t\t\t,item.itemdetailarray()\n\t\t\t\t\t\t.map((i) => {\n\t\t\t\t\t\t\tconst colourstate = config.colorfun(i)\n\t\t\t\t\t\t\treturn m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t// all this padding bs is just to have a\n\t\t\t\t\t\t\t\t// border separator between items\n\t\t\t\t\t\t\t\t// I wish there was a border-spacing property\n\t\t\t\t\t\t\t\t// or something...\n\t\t\t\t\t\t\t\t.$nest(':not(:first-child)',`\n\t\t\t\t\t\t\t\t\tpadding-top: 18px;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$nest(':not(:last-child)',`\n\t\t\t\t\t\t\t\t\tborder-bottom: solid 1px rgba(0,0,0,0.05);\n\t\t\t\t\t\t\t\t\tpadding-bottom: 18px;\n\t\t\t\t\t\t\t\t`)\n\n\t\t\t\t\t\t\t\t,m('.details'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\tmin-height: 8em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,elements.infoPills({\n\t\t\t\t\t\t\t\t\t\tTool: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.tool()\n\t\t\t\t\t\t\t\t\t\t\t,value: i.tools_name\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Release: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.user()\n\t\t\t\t\t\t\t\t\t\t\t, value: m(`` + colourstate, assignAToolPencil()(i) )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Description: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.hash()\n\t\t\t\t\t\t\t\t\t\t\t, value: i.tools_description\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Location: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.mapPin()\n\t\t\t\t\t\t\t\t\t\t\t,value: i.tools_location\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Ownership: {\n\t\t\t\t\t\t\t\t\t\t\ticon: ''\n\t\t\t\t\t\t\t\t\t\t\t,value: i.tools_ownership\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Condition: {\n\t\t\t\t\t\t\t\t\t\t\ticon: ''\n\t\t\t\t\t\t\t\t\t\t\t,value: i.tools_condition\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t, toolItemSuggestions(item, suggestedActions)\n\t\t\t\t)\n\n\t\t\treturn items\n\t\t}\n\n\tconst materialItemDetails =\n\t\t(item, config) => {\n\t\t\tconst suggestedActions = config.suggestedActions(item)\n\t\t\tconst items =\n\t\t\t\tm(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 3em;\n\t\t\t\t\t`\n\t\t\t\t\t, item.itemdetailarray().flatMap(\n\t\t\t\t\t\tpd => item.dispersion[pd.id] || []\n\t\t\t\t\t)\n\t\t\t\t\t.length > 0\n\t\t\t\t\t&& m('.detail-items', item.itemdetailarray()\n\t\t\t\t\t.map((pd) =>\n\t\t\t\t\t\t(item.dispersion[pd.id] || [])\n\t\t\t\t\t\t.map((i) => {\n\n\t\t\t\t\t\t\tconst colourstate = config.colorfun(i)\n\n\t\t\t\t\t\t\treturn m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t// all this padding bs is just to have a\n\t\t\t\t\t\t\t\t// border separator between items\n\t\t\t\t\t\t\t\t// I wish there was a border-spacing property\n\t\t\t\t\t\t\t\t// or something...\n\t\t\t\t\t\t\t\t.$nest(':not(:first-child)',`\n\t\t\t\t\t\t\t\t\tpadding-top: 18px;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$nest(':not(:last-child)',`\n\t\t\t\t\t\t\t\t\tborder-bottom: solid 1px rgba(0,0,0,0.05);\n\t\t\t\t\t\t\t\t\tpadding-bottom: 18px;\n\t\t\t\t\t\t\t\t`)\n\n\t\t\t\t\t\t\t\t,m('.details'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\tmin-height: 8em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,elements.infoPills({\n\t\t\t\t\t\t\t\t\t\tOrder: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.truck()\n\t\t\t\t\t\t\t\t\t\t\t,value: [ i.order_name, ' | ', i.distribution_container_name() ]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Stocked: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.mapPin()\n\t\t\t\t\t\t\t\t\t\t\t,value: i.distribution_stocked()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,Received: {\n\t\t\t\t\t\t\t\t\t\t\ticon: elements.icons.hash()\n\t\t\t\t\t\t\t\t\t\t\t, value: m(''+ colourstate, [\n\t\t\t\t\t\t\t\t\t\t\t\ti.suggestion == 'requires' ? i.requiredqty : i.order_received || 0\n\t\t\t\t\t\t\t\t\t\t\t\t,i.suggestion == 'requires'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'required' + ( !i.suggestions ? ' ( not yet ordered ) ' : ' ( not yet allocated ) ' )\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '/ ' + i.distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t,i.distribution_amount() - i.order_received > 0\n\t\t\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t\t\t'receive date '\n\t\t\t\t\t\t\t\t\t\t\t\t\t, i.order_eta\n\t\t\t\t\t\t\t\t\t\t\t\t\t? new Date(i.order_eta).toLocaleDateString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'to be confirmed'\n\t\t\t\t\t\t\t\t\t\t\t\t].join(' ')\n\t\t\t\t\t\t\t\t\t\t\t\t: i.distribution_amount() && i.order_received >= i.distribution_amount()\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Received'\n\t\t\t\t\t\t\t\t\t\t\t\t: i.suggestion == 'requires'\n\t\t\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t].join(' '))\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t,i.suggestion != 'requires'\n\t\t\t\t\t\t\t\t\t&& editMaterialPermissions()\n\t\t\t\t\t\t\t\t\t? m(''+css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1.5em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$nest('.form-control', `\n\t\t\t\t\t\t\t\t\t\t\tpadding: 0em;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t.$nest('input', `\n\t\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\t\tborder-top: none;\n\t\t\t\t\t\t\t\t\t\t\tborder-left: none;\n\t\t\t\t\t\t\t\t\t\t\tborder-right: none;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t.$nest('.manuel-complete', `\n\t\t\t\t\t\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, !i.returnactive\n\t\t\t\t\t\t\t\t\t\t? [ transferItemsButton(i, { stateChanger: true }), ]\n\t\t\t\t\t\t\t\t\t\t: returnForm(i)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t\t))\n\t\t\t\t\t, materialItemSuggestions(item, suggestedActions)\n\t\t\t\t)\n\n\t\t\treturn items\n\t\t}\n\n\n\tfunction saidItem(i, config){\n\n\t\tlet statuses = { OK: 3, WARN: 2, ERR: 1 }\n\n\t\tlet worstStatus = config.warnings(i, statuses)\n\n\t\treturn m('.material-item-content'\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t\tbackground-color: white;\n\t\t\t\tpadding: 1em;\n\t\t\t\tborder-radius: 0em 0.25em 0.25em 0em;\n\t\t\t\tbox-shadow: 0px 2.8px 11px -5px rgb(0 0 0 / 30%)\n\n\t\t\t\tborder-left: solid 0.2em #00b8ff;\n\t\t\t`\n\t\t\t.$nest('&.status-ok', `\n\t\t\t\tborder-color: #00b8ff;\n\t\t\t`)\n\t\t\t.$nest('&.status-warn', `\n\t\t\t\tborder-color: #ffe000;\n\t\t\t`)\n\t\t\t.$nest('&.status-err', `\n\t\t\t\tborder-color: #ff0000;\n\t\t\t`)\n\t\t\t+ (\n\t\t\t\tworstStatus == statuses.ERR\n\t\t\t\t? '.status-err'\n\t\t\t\t: worstStatus == statuses.WARN\n\t\t\t\t? '.status-warn'\n\t\t\t\t: '.status-ok'\n\t\t\t)\n\t\t\t,m('h5'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\tgap: 0.4em;\n\t\t\t\t\tfont-size: 1.15em;\n\t\t\t\t\tcolor: #4e4e4e;\n\t\t\t\t`\n\t\t\t\t, config.icon()\n\t\t\t\t, i.name + ' x ' + config.qtyfun(i)\n\t\t\t)\n\t\t\t, i.itemdetailarray().concat(config.suggestedActions(i)).length > 0\n\t\t\t&& m('.item-details', config.itemDetails(i, config))\n\t\t)\n\t}\n\n\tfunction openModal(config={}){\n\n\t\tconst {\n\t\t\tselected = null\n\t\t\t,title\n\t\t\t,data\n\t\t\t,selectedId\n\t\t\t,loaders\n\t\t} = config\n\n\t\tmodalStack.add({\n\t\t\ttitle\n\t\t\t, view: () =>\n\t\t\t\telements.loadingRetain(\n\t\t\t\t\tloaders()\n\t\t\t\t\t,m('.materials'\n\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\tmargin-top: 2em;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t& h1,& h2,& h3,& h4,& h5,& h6 {\n\t\t\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, selected\n\t\t\t\t\t\t&& m('.selected'\n\t\t\t\t\t\t\t, saidItem(\n\t\t\t\t\t\t\t\tdata().actual.find(\n\t\t\t\t\t\t\t\t\tx => x[selectedId] == selected[selectedId]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,config\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, data().actual.length == 1 && !data().suggested.length\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: selected && data().actual.length > 1\n\t\t\t\t\t\t? elements.centerdHorizontalRule('Other ' + title)\n\t\t\t\t\t\t: data().suggested.length == 1\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: m('h4', 'All ' + title)\n\t\t\t\t\t\t, m('.items'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,data().actual.map((i) =>\n\t\t\t\t\t\t\t\tselected && i[selectedId] == selected[selectedId]\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: saidItem(i, config)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t, type: 'example'\n\t\t\t, dismissable: true\n\t\t})\n\t}\n\n\tconst suggestedActionsView = (config) => {\n\n\t\tlet showModal =\n\t\t\tconfig.data().actual.length > 0\n\t\t\t|| Object.keys(config.data().suggested).length > 0\n\n\t\tlet list = config.data().actual\n\n\t\treturn showModal && m('.materials-read-only-summary'\n\t\t\t, m('h4', config.title)\n\n\t\t\t, elements.mobileButtonStack(\n\t\t\t\t{\n\t\t\t\t\tcontainer: {\n\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\tonclick: () =>\n\t\t\t\t\t\t\t\topenModal(R.merge({selected: null}, config))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlist.map(\n\t\t\t\t\ti => elements.mobileButtonStack.item({\n\t\t\t\t\t\tlabel: [\n\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.tablet`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\t\t\tfont-size: 1.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, config.icon()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, m('span', i.name + ' x ' + config.qtyfun(i))\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,onclick(){\n\t\t\t\t\t\t\topenModal(R.merge({selected: i}, config))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\t}\n\n\tconst contacts = () =>\n\t\tdata.advancedView()\n\t\t? [\n\t\t\tm('label.dib.control-label', 'Contacts')\n\t\t\t,(projectMetaData() ? projectMetaData().project_contacts : [])\n\t\t\t\t.map((pd) =>\n\t\t\t\t\telements.list(\n\t\t\t\t\t\t['type'\n\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t,'phone'\n\t\t\t\t\t\t,'email'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map((ex) =>\n\t\t\t\t\t\t\tex != 'user_id'\n\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t'p.w5'\n\t\t\t\t\t\t\t\t,pd['project_contacts_' +ex]()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: m('p.w5',\n\t\t\t\t\t\t\t\t(users().find((u) =>\n\t\t\t\t\t\t\t\tu.user_id() == pd[ex]())\n\t\t\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t\t\t.usersFullName\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t]\n\t\t: []\n\n\tconst documents = () =>\n\t\tdata.advancedView()\n\t\t? projectDocumentsView({\n\t\t\teditProjectPermissions:\n\t\t\t\teditProjectPermissions()\n\t\t\t,xs: projectMetaData().project_documents()\n\t\t})\n\t\t: null\n\n\tconst scheduleWarnings = () =>\n\t\telements.alert(\n\t\t\t`warning` + (\n\t\t\t\t!currentVersion()\n\t\t\t\t&& data.selectedVersion()\n\t\t\t\t&& !loading()\n\t\t\t\t|| !vm().selected.allocation.allocation_id\n\t\t\t\t&& !identical(\n\t\t\t\t\tprojectDetails()\n\t\t\t\t\t, baseProjectDetails()\n\t\t\t\t)\n\t\t\t\t? ''\n\t\t\t\t: '-invisible'\n\t\t\t)\n\t\t\t,!currentVersion()\n\t\t\t&& data.selectedVersion()\n\t\t\t&& !loading()\n\t\t\t\t? `An outdated schedule version has been selected.\n\t\t\t\tWork cannot be updated on this version, but any previous\n\t\t\t\twork can be found on the latest version with all remaining\n\t\t\t\tworks. Make amendments in the new version if required`\n\t\t\t\t: !vm().selected.allocation.allocation_id\n\t\t\t\t&& !identical(\n\t\t\t\t\tprojectDetails()\n\t\t\t\t\t, baseProjectDetails()\n\t\t\t\t)\n\t\t\t\t\t? STRING.INFO.SAVE_OR_DISCARD_TO_UPDATE_OTHERS()\n\t\t\t\t\t: ''\n\t\t)\n\n\tconst contextSelection = () =>\n\t\tm(''\n\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-auto-flow: column;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5em;\n\t\t\t\tfont-size: 1.5em;\n\t\t\t\tmin-height: 1.6em;\n\t\t\t\tpadding-bottom: 2em;\n\t\t\t`\n\t\t\t.desktop(`\n\t\t\t\tjustify-content: start;\n\t\t\t`)\n\t\t\t.$nest('.manuel-complete', `\n\t\t\t\tfont-size: 0.7em;\n\t\t\t`)\n\t\t\t,m('label'+css`margin: 0px;`, 'Project ')\n\t\t\t,projectNameUnlabelled()\n\t\t\t,disciplineNameUnlabelled()\n\t\t)\n\n\n\tconst topSection = () => [\n\t\tm('.no-splitpane',\n\t\t\tdata.advancedView()\n\t\t\t? [\n\t\t\t\tcontextSelection()\n\t\t\t\t,resourcing()\n\t\t\t\t,between()\n\t\t\t\t,taskReports()\n\t\t\t\t,m('br')\n\t\t\t\t,scheduleWarnings()\n\t\t\t]\n\t\t\t: [\n\t\t\t\tcontextSelection()\n\t\t\t\t,taskReports()\n\t\t\t]\n\t\t\t, projectMetaDataLoading()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: [\n\t\t\t\tm('br')\n\t\t\t\t,documents()\n\t\t\t\t,...contacts()\n\t\t\t\t,notes()\n\t\t\t\t,suggestedActionsView({\n\t\t\t\t\ttitle: 'Materials'\n\t\t\t\t\t,data: materials\n\t\t\t\t\t,selectedId: 'supplier_items_id'\n\t\t\t\t\t,loaders: () => materialloading() || !fetchedExtras() || forceMaterialFetch()\n\t\t\t\t\t,icon: elements.icons.box\n\t\t\t\t\t,qtyfun: (i) => i.frequired || i.allocated + i.required\n\t\t\t\t\t,suggestedActions: item =>\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmaterials().suggested[item.id]\n\t\t\t\t\t\t\t&& materials().suggested[item.id]['mogroupedbyitem'] || []\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.concat(\n\t\t\t\t\t\t\tmaterials().suggested[item.id]\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\torder_name: ''\n\t\t\t\t\t\t\t\t,distribution_amount:\n\t\t\t\t\t\t\t\t\tmaterials().suggested[item.id]['requiredqty']\n\t\t\t\t\t\t\t\t,order_received: 0\n\t\t\t\t\t\t\t\t,newOrder: true\n\t\t\t\t\t\t\t\t,distribution_entity_name:\n\t\t\t\t\t\t\t\t\telements.nonStrikeList(\n\t\t\t\t\t\t\t\t\t\tR.uniqBy(\n\t\t\t\t\t\t\t\t\t\t\tR.prop('project_name')\n\t\t\t\t\t\t\t\t\t\t\t,materials().suggested[item.id]['fmgroupedbyitem']\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map((m) => ({label: m.project_name}))\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t)\n\t\t\t\t\t,warnings:\n\t\t\t\t\t\t(i, statuses) => {\n\t\t\t\t\t\t\ti.itemdetailarray()\n\t\t\t\t\t\t\t.flatMap((pd) => i.dispersion[pd.id] || [])\n\t\t\t\t\t\t\t.map((x) => {\n\t\t\t\t\t\t\t\tif ( x.distribution_ordered ) {\n\t\t\t\t\t\t\t\t\tif ( x.order_received == 0 && x.distribution_amount() > 0 ) {\n\t\t\t\t\t\t\t\t\t\treturn statuses.ERR\n\t\t\t\t\t\t\t\t\t} else if ( x.order_received < x.distribution_amount() ) {\n\t\t\t\t\t\t\t\t\t\treturn statuses.WARN\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn statuses.OK\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if ( x.newOrder ) {\n\t\t\t\t\t\t\t\t\treturn statuses.WARN\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn statuses.OK\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.sort((a,b) => a - b )\n\t\t\t\t\t\t\t[0]\n\t\t\t\t\t\t}\n\t\t\t\t\t,colorfun:\n\t\t\t\t\t\t(i) =>\n\t\t\t\t\t\t\ti.distribution_ordered\n\t\t\t\t\t\t\t&& i.order_received < i.distribution_amount()\n\t\t\t\t\t\t\t|| i.newOrder\n\t\t\t\t\t\t\t? '.red' : ''\n\t\t\t\t\t,itemDetails: materialItemDetails\n\t\t\t\t})\n\t\t\t\t,suggestedActionsView({\n\t\t\t\t\ttitle: 'Tools'\n\t\t\t\t\t,data: requiredTools\n\t\t\t\t\t,selectedId: 'tools_id'\n\t\t\t\t\t,loaders: () => toolloading() || !fetchedExtras() || forceToolfetch()\n\t\t\t\t\t,icon: elements.icons.tool\n\t\t\t\t\t,qtyfun: (i) => i.total\n\t\t\t\t\t,suggestedActions: (i) => i.suggested\n\t\t\t\t\t,warnings:\n\t\t\t\t\t\t(i, statuses) => {\n\t\t\t\t\t\t\tif ( i.required && i.assigned < i.required && !i.suggested.length ) {\n\t\t\t\t\t\t\t\treturn statuses.ERR\n\t\t\t\t\t\t\t} else if ( i.assigned < i.required ) {\n\t\t\t\t\t\t\t\treturn statuses.WARN\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn statuses.OK\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t,colorfun: R.F\n\t\t\t\t\t,itemDetails: toolItemDetails\n\t\t\t\t})\n\t\t\t]\n\t\t)\n\t\t, readOnlyFiles({})\n\t]\n\n\tconst dayTaskPicker = () => [\n\t\telements.tabset(['Days', 'Tasks', 'Tools'], activeLandingTab)\n\t\t,loading()\n\t\t|| vm().pending()\n\t\t\t? elements.centeredSpinner()\n\t\t\t: activeLandingTab() == 'Days'\n\t\t\t\t? disciplineListView()\n\t\t\t\t: activeLandingTab() == 'Tools'\n\t\t\t\t? ToolsTab()\n\t\t\t\t: ExtraDetailTab()\n\t]\n\n\tconst scheduleWarnings2 = () =>\n\t\tschedule_id()\n\t\t&& projectOptions().length\n\t\t? null\n\t\t: [\n\n\t\t\tloading()\n\t\t\t|| vm().pending()\n\t\t\t\t? null\n\t\t\t\t: data.readSchedulePermissions()\n\t\t\t\t\t&& (\n\t\t\t\t\t\t!projectOptions()\n\t\t\t\t\t\t|| !projectOptions().length\n\t\t\t\t\t)\n\t\t\t\t\t&& schedule_id()\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t'warn',`Work has not been allocated in this schedule`\n\t\t\t\t\t\t)\n\t\t\t: data.readSchedulePermissions()\n\t\t\t\t&& !schedule_id()\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t'warn'\n\t\t\t\t\t\t,`Select a schedule to see all works assoicated with it`\n\t\t\t\t\t)\n\t\t\t\t: elements.alert(\n\t\t\t\t\t'warn'\n\t\t\t\t\t,`Requires Schedule Permissions`\n\t\t\t\t)\n\t\t]\n\n\tconst topSectionAndPickers = () =>\n\t\tschedule_id()\n\t\t&& projectOptions().length > 0\n\t\t&& [\n\t\t\t...topSection()\n\t\t\t,m('br')\n\t\t\t,dayTaskPicker()\n\t\t]\n\n\tconst allocationdata =\n\t\t(a) => ({\n\t\t\tProject: a.project_name\n\t\t\t,Date: moment( a.allocations_allocation_date())\n\t\t\t\t.format(\"ll\")\n\t\t\t,Discipline: a.discplineNameDescription\n\n\t\t\t,Completed:\n\t\t\t\ta.allocations_allocation_complete()\n\t\t\t\t+ (\n\t\t\t\t\ta.allocations_allocation_forecast()\n\t\t\t\t\t? ' of ' + a.allocations_allocation_forecast()\n\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t,Resources:\n\t\t\t\tdata.readResourcePermissions()\n\t\t\t\t\t|| !data.readProjectPermissions()\n\t\t\t\t\t? working_contractors(a)\n\t\t\t\t\t\t|| a.allocations_bad_day()\n\t\t\t\t\t\t|| a.allocations_day_status()\n\t\t\t\t\t\t|| a.allocations_weather_status()\n\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t\t,Teams:\n\t\t\t\tdata.readResourcePermissions()\n\t\t\t\t|| !data.readProjectPermissions()\n\t\t\t\t\t? working_crews(a)\n\t\t\t\t\t: 'Requires Resource Permissions'\n\t\t})\n\n\tconst largeAllocationsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\tsortedAllocations()\n\t\t\t\t\t, filterFunction.updateFilters.filters()\n\t\t\t\t\t, null\n\t\t\t\t\t, filteredAllocationOptions\n\t\t\t\t)\n\t\t\t\t.map((t, tindex) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,selection: completedCheckboxAttrs(t)\n\t\t\t\t\t,header:\n\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 0.75fr 1.5fr 1.25fr 0.75fr 1.5fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: allocationdata(t)\n\t\t\t\t}))\n\t\t})\n\n\tconst smallAllocationsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\tsortedAllocations()\n\t\t\t\t\t, filterFunction.updateFilters.filters()\n\t\t\t\t\t, null\n\t\t\t\t\t, filteredTaskOptions\n\t\t\t\t)\n\t\t\t\t.map((t) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,completedCheckboxAttrs(t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\t\tt.allocations_allocation_complete()\n\t\t\t\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t\t\t\t+ t.allocations_allocation_forecast()\n\n\t\t\t\t\t\t\t\t\t,moment(t.allocations_allocation_date()).format(\"ll\")\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tpadding-right: 1em\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,k\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.5fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Project', 'Discipline', 'Completed']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Resources', 'Teams']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: allocationdata(t)\n\t\t\t\t}))\n\t\t})\n\n\n\tconst allocationsTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeAllocationsTable )\n\t\t\t\t,desktopOnly( largeAllocationsTable )\n\t\t\t\t,mobileOnly( smallAllocationsTable )\n\t\t\t\t,tabletOnly( smallAllocationsTable )\n\t\t\t]\n\t\t)\n\n\tfunction layout(...children){\n\t\treturn m('div.harth'\n\t\t\t+ css\n\t\t\t\t.desktop`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: max(90vw);\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tpadding-top: 2em;\n\t\t\t\t`\n\t\t\t, ...children\n\t\t)\n\t}\n\n\tfunction ListAllocations(){\n\t\treturn layout(\n\t\t\ttopSectionAndPickers()\n\t\t\t, scheduleWarnings2()\n\t\t)\n\t}\n\n\tconst completedCheckboxAttrs = (a) =>\n\t\t({\n\t\t\tonchange(event){\n\t\t\t\tif(event.currentTarget.checked == true){\n\t\t\t\t\tcontractIndex(-1)\n\t\t\t\t\ttimesheetIndex(-1)\n\t\t\t\t\tvm().revert = cloningAllocation(a)\n\t\t\t\t\tvm().selected.allocation = a\n\n\t\t\t\t\tallocationChange(true)\n\n\t\t\t\t\ttools_vm(cloningTool())\n\t\t\t\t\tdata.calculatedData(\n\t\t\t\t\t\tdata.calculatedData()\n\t\t\t\t\t)\n\t\t\t\t\tactiveTab('Timesheets')\n\n\n\t\t\t\t} else if (event.currentTarget.checked == false) {\n\t\t\t\t\ttimesheet_vm().selected.timesheet = []\n\t\t\t\t\teotDeletions([])\n\t\t\t\t\tnodDeletions([])\n\t\t\t\t\tvarDeletions([])\n\t\t\t\t\tvm().selected.allocation = {}\n\t\t\t\t\tvm().revert = {}\n\t\t\t\t\tallocationChange(false)\n\t\t\t\t}\n\n\t\t\t\t// stop row from opening from\n\t\t\t\t// clicking the checkbox\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t\t,type: 'checkbox'\n\t\t\t,checked: vm().revert.allocation_id\n\t\t\t\t? vm().revert.allocation_id() == a.allocation_id()\n\t\t\t\t: false\n\t\t\t,disabled: false,\n\t\t})\n\n\tfunction disciplineListView(){\n\t\treturn [\n\t\t\tm('br')\n\t\t\t,getfilters(null, \"Update\")\n\t\t\t,m('br')\n\t\t\t,loading()\n\t\t\t|| vm().pending()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t: !allocations()\n\t\t\t\t\t\t|| !allocations().length\n\t\t\t\t? data.readProjectPermissions()\n\t\t\t\t\t&& data.selectedVersion()\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t'warning'\n\t\t\t\t\t\t,`I don't have scheduled work on this date and project`\n\t\t\t\t\t)\n\t\t\t\t: data.readProjectPermissions()\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t'warning'\n\t\t\t\t\t\t,`Select a schedule version`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t: allocationsTable()\n\t\t]\n\t}\n\n\tconst STRING = {\n\t\tWARNING: {\n\t\t\tTEAM_CONNECTION: () =>\n\t\t\t\t'Connection to a team is required to update completed quantities for this team on this day'\n\n\t\t\t,NO_RECORDED_TIMESHEETS: () =>\n\t\t\t\t`I don't have any recorded timesheets for this work`\n\t\t}\n\t\t,INFO: {\n\t\t\tNOTICE_OF_DELAY: () =>\n\t\t\t\t`A Notice of Delay is a potential delay to today's work that releases liability to the current time frames. This notice is applied to every\n\t\t\t\tfuture day of work until an Extension of Time is created to flag that the delay has ended and works can resume. An Extension of Time as mentioned,\n\t\t\t\tindicates a previous Notification of Delay has been resolved and works can continue from this date with contractual liability to time`\n\n\t\t\t,NO_CONTRACT_OBLIGATIONS: () =>\n\t\t\t\t`I have no contract obligations recorded for reference`\n\t\t\t,WORKS_MODULE_ACTIVATION: () =>\n\t\t\t\t`Activate the module for Recording EOTs, Variations and Delays Tools to use this tracking`\n\t\t\t,CHANGE_COMPLETED_WORK_DATE: () =>\n\t\t\t\t`Change the Completed Work Date to today or sometime in the past to report progress`\n\n\t\t\t,NO_TOOLS_AGAINST_SCHEDULES_AND_TEAMS: () =>\n\t\t\t\t'Tools have not been created for tracking against work schedules and Teams'\n\t\t\t,ALLOCATION_COMPLETION_COMMENTS: () =>\n\t\t\t\t\"This important Information is fed back to the project screens for use as a summary to upper level management\"\n\t\t\t,SAVE_OR_DISCARD_TO_UPDATE_OTHERS: () =>\n\t\t\t\t'Save or Discard these items to continue updating other projects or disciplines'\n\t\t}\n\t\t,TITLE: {\n\t\t\tCONTRACT_DESCRIPTION: () =>\n\t\t\t\t\"A Description of why this contract occurred for formal documentation\"\n\t\t\t,CONTRACT_CLAUSE: () =>\n\t\t\t\t\"The Formal contract clause that forces this to apply\"\n\t\t\t,ALLOCATION_DATE: () =>\n\t\t\t\t\"Date this work is complete. Can be altered but won't be counted if placed in the future\"\n\t\t\t,TOTAL_WORK_COMPLETED: () =>\n\t\t\t\t\"Total work completed by all teams, filling this in will distribute the work evenly between the working teams\"\n\t\t\t,DISCARD_DATES: () =>\n\t\t\t\t\"Discard date and completion updates since last saved, this does not include tools or timesheets. Seperate buttons conduct this action in their representative view\"\n\t\t\t,WORK_COMPLETE_DATE: () =>\n\t\t\t\t\"Date this work is complete. Can be altered but won't be counted if placed in the future\"\n\t\t}\n\t\t,ERROR: {\n\t\t\tDUPLICATED_COMPLETED_WORK_DATE: ({\n\t\t\t\td, allocationIndex, uniqAllocation\n\t\t\t}) =>\n\t\t\t\tallocationIndex[uniqAllocation(d)] > 1 && currentVersion()\n\t\t\t\t\t? `change the Completed Work Date to a day that is not duplicated with other pieces of work under the same project and discipline`\n\t\t\t\t\t: null\n\t\t}\n\t}\n\n\tconst TimesheetsTable = () =>\n\t\telements.table(data,\n\t\t\t[''\n\t\t\t, 'Completed Work'\n\t\t\t, 'Hours Worked'\n\t\t\t, 'Project Notes'\n\t\t\t, 'Performance Notes'\n\t\t\t],\n\t\t\ttimesheet_vm().selected.timesheet.map((t) => [\n\n\t\t\t\tt.crew_name() ? t.crew_name() : t.user_name()\n\n\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t? t.crew_work()\n\t\t\t\t\t: !crewsIndexedByAID()[t.user_id()]\n\t\t\t\t\t&& !crewsIndexedByAID()[t.crew_id()]\n\t\t\t\t\t\t? STRING.WARNING.TEAM_CONNECTION()\n\t\t\t\t\t\t: m(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t\t(t.crew_name() || t.user_name())\n\t\t\t\t\t\t\t\t\t\t+ ' Completed Work'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop: (v) => addSpecificWork(t, v)\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t, title: \"Completed Work by this team\"\n\t\t\t\t\t\t\t\t\t, disabled: t.work_conditions() == 'Auto Created Timesheet'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\n\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t? t.crew_hours()\n\t\t\t\t\t: m(\n\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\t(t.crew_name() || t.user_name())\n\t\t\t\t\t\t\t\t\t\t+ ' Hours Worked'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tprop: t.crew_hours\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t, title: \"Hours worked by this team\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t? t.work_conditions()\n\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\tt.work_conditions\n\t\t\t\t\t\t,{title: \"Impairing Work Conditions\"\n\t\t\t\t\t\t, disabled: t.work_conditions() == 'Auto Created Timesheet'\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t,!editAssignedTimesheetsPermissions()\n\t\t\t\t\t&& !editTimePermissions()\n\t\t\t\t\t? t.crew_performance()\n\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\tt.crew_performance\n\t\t\t\t\t\t,{ title: \"Teams Performance\"\n\t\t\t\t\t\t})\n\t\t\t])\n\t\t)\n\n\tfunction TimesheetsTab(){\n\t\treturn [\n\t\t\tm('hr')\n\n\t\t\t,vm().pending()\n\t\t\t|| !fetchedTime()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\teditTimePermissions()\n\t\t\t\t\t\t|| editAssignedTimesheetsPermissions()\n\t\t\t\t\t\t\t? timesheetAddView()\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t])\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,timesheet_vm().selected.timesheet.length != 0\n\t\t\t\t\t\t? TimesheetsTable()\n\t\t\t\t\t\t: data.readTimesheetPermissions()\n\t\t\t\t\t\t|| data.readAssignedTimesheetsPermissions()\n\t\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t\t,STRING.WARNING.NO_RECORDED_TIMESHEETS()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: elements.alert(\n\t\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t\t,`Requires Timesheet Permissions`\n\t\t\t\t\t\t\t)\n\t\t\t\t]\n\t\t]\n\t}\n\n\tconst contractTable = () =>\n\t\telements.table(data,\n\t\t\t[\n\t\t\t''\n\t\t\t, 'Type'\n\t\t\t, '+/- Work'\n\t\t\t, 'Description'\n\t\t\t, 'Contract Clause'\n\t\t\t, 'Escalated'\n\t\t\t, 'Approval'\n\t\t\t, 'Created By'\n\t\t\t],\n\t\t\tcontractList().map((c) => [\n\t\t\t\teditUpdatePermissions()\n\t\t\t\t&& c.newtask\n\t\t\t\t\t? getActivateDeleteButton(c)\n\t\t\t\t\t: !c.newtask\n\t\t\t\t\t\t? 'Linked to Task'\n\t\t\t\t\t\t: null\n\n\t\t\t\t,c.midfix == 'vars'\n\t\t\t\t\t? 'Variation'\n\t\t\t\t\t: c.midfix == 'nods'\n\t\t\t\t\t\t? 'Notice of Delay'\n\t\t\t\t\t\t: 'Extension of Time'\n\n\t\t\t\t,!editUpdatePermissions()\n\t\t\t\t\t|| !getActivateDeleteButton(c, true)\n\t\t\t\t\t? c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t? c['allocations_' + c.midfix + '_amount']()\n\t\t\t\t\t\t: null\n\t\t\t\t\t: c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t? m(\n\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t\tc['allocations_'\n\t\t\t\t\t\t\t\t\t\t+ c.midfix\n\t\t\t\t\t\t\t\t\t\t+ '_description'\n\t\t\t\t\t\t\t\t\t]() + ' +/- Work'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tprop: c['allocations_' + c.midfix + '_amount']\n\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t,title: \"plus or minus required works\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t\t,!editUpdatePermissions()\n\t\t\t\t\t|| !getActivateDeleteButton(c, true)\n\t\t\t\t\t? c['allocations_' + c.midfix + '_description']()\n\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\tc['allocations_' + c.midfix + '_description']\n\t\t\t\t\t\t,{ title: STRING.TITLE.CONTRACT_DESCRIPTION()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t,!editUpdatePermissions()\n\t\t\t\t\t|| !getActivateDeleteButton(c, true)\n\t\t\t\t\t? c['allocations_' + c.midfix + '_clause']()\n\t\t\t\t\t: elements.textInput(\n\t\t\t\t\t\tc['allocations_' + c.midfix + '_clause']\n\t\t\t\t\t\t,{ title: STRING.TITLE.CONTRACT_DESCRIPTION()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t,editContractRecognitions()\n\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, c['allocations_' + c.midfix + '_escalated']\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_escalated']()\n\t\t\t\t\t\t\t,title: `Set to be escalated`\n\t\t\t\t\t\t\t,disabled: !editContractRecognitions()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: c['allocations_' + c.midfix + '_escalated']()\n\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t: 'No'\n\n\t\t\t\t,editContractRecognitions()\n\t\t\t\t\t? elements.checkbox(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t, c['allocations_' + c.midfix + '_approved']\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\tc['allocations_' + c.midfix + '_approved']()\n\t\t\t\t\t\t\t,title: `Set to be approved`\n\t\t\t\t\t\t\t,disabled: !editContractRecognitions()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: c['allocations_' + c.midfix + '_approved']()\n\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t: 'No'\n\n\t\t\t\t,usersIndex()[c.user_id()].usersFullName\n\n\t\t\t])\n\t\t)\n\n\tfunction WorksTab(){\n\t\treturn [\n\t\t\tm('hr')\n\t\t\t,ActiveContractsFeature()\n\t\t\t? [\n\n\t\t\t\t!vm().pending()\n\t\t\t\t&& editUpdatePermissions()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tcontractAddView()\n\t\t\t\t\t\t,ContractDeleteButton()\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t,elements.alert(`info`,\n\t\t\t\t\tSTRING.INFO.NOTICE_OF_DELAY()\n\t\t\t\t)\n\n\t\t\t\t,vm().pending()\n\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t: [\n\n\t\t\t\t\t\tcontractList().length > 0\n\t\t\t\t\t\t\t? m('label.control-label', 'Contract Items')\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,contractList().length > 0\n\t\t\t\t\t\t\t? contractTable()\n\t\t\t\t\t\t\t: elements.alert(\n\t\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t\t,STRING.INFO.NO_CONTRACT_OBLIGATIONS()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t]\n\n\t\t\t]\n\t\t\t: elements.alert(\n\t\t\t\t'info'\n\t\t\t\t,STRING.INFO.WORKS_MODULE_ACTIVATION()\n\t\t\t)\n\t\t]\n\t}\n\n\tconst projectExtrasPencil = () => t =>\n\t\tPencil2(\n\t\t\t() =>\n\t\t\t\tt.project_extras_actual_amount()\n\t\t\t\t+ ' of '\n\t\t\t\t+ t.project_extras_planned_amount()\n\t\t\t,() =>\n\t\t\t\tm(\n\t\t\t\t\tNumberInput\n\t\t\t\t\t,R.merge(\n\t\t\t\t\t\tdata\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t,errorLabel:\n\t\t\t\t\t\t\t\t'Task Actual Amount'\n\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t+ t.project_extras_description()\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t,{\n\t\t\t\t\t\tprop: (v) => linkCompeltion(v, t)\n\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t, title: \"Task Actual Amount\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t)\n\n\tconst markCompletedDate = () => t =>\n\t\telements.checkbox({\n\t\t\ttitle: 'Mark Completed Date'\n\t\t\t,onchange:\n\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\tconst v = e ? Date.now() : false\n\t\t\t\t\tmarkTaskCompleted(t, v, v)\n\t\t\t\t})\n\t\t\t,disabled: !editUpdatePermissions()\n\t\t\t,checked: t.project_extras_date_completed()\n\t\t})\n\n\tconst markTaskCompleted =\n\t\t(t, e, v) => {\n\t\t\tif( e != null){\n\t\t\t\tconst value = !e\n\t\t\t\t\t? null\n\t\t\t\t\t: e && fullView()\n\t\t\t\t\t&& currAllocationDate() < Date.now()\n\t\t\t\t\t\t? currAllocationDate()\n\t\t\t\t\t\t: v || Date.now()\n\n\t\t\t\tt.project_extras_date_completed(value)\n\n\t\t\t\te && !t.project_extras_actual_amount()\n\t\t\t\t\t? t.project_extras_actual_amount(\n\t\t\t\t\t\tt.project_extras_planned_amount()\n\t\t\t\t\t)\n\t\t\t\t\t: !e\n\t\t\t\t\t? t.project_extras_actual_amount(0)\n\t\t\t\t\t: null\n\n\t\t\t\tprojectExtrasSum(\n\t\t\t\t\tt\n\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t)\n\n\t\t\t\tconst diffState =\n\t\t\t\t\t!!t.project_extras_date_invalid()\n\n\t\t\t\t!e ? t.project_extras_date_verified(null) : null\n\n\t\t\t\tt.created = true\n\n\t\t\t\tif (diffState){\n\t\t\t\t\tt.project_extras_date_invalid(null)\n\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\tt\n\t\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn t.project_extras_date_completed && t.project_extras_date_completed()\n\t\t}\n\n\tconst changeCompletedDate =\n\t\t(label) => t =>\n\t\t\telements.dateCheckboxLabel({\n\t\t\t\tlabel: label\n\t\t\t\t,date: {\n\t\t\t\t\ttitle: 'Record Completed Date'\n\t\t\t\t\t, prop: (v) => markTaskCompleted(t, v, v)\n\t\t\t\t\t, attrs: {\n\t\t\t\t\t\tdisabled: !editUpdatePermissions()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,checkbox: {\n\t\t\t\t\ttitle: 'Mark Completed Date'\n\t\t\t\t\t,prop: (v) => markTaskCompleted(t, v)\n\t\t\t\t\t,disabled: !editUpdatePermissions()\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\tconst v = e ? Date.now() : false\n\t\t\t\t\t\t\t\tmarkTaskCompleted(t, v, v)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\tconst markTestDate = () => t =>\n\t\t!editProjectPermissions() && !t.project_extras_date_verified()\n\t\t? ''\n\t\t: !editProjectPermissions()\n\t\t? moment(t.project_extras_date_verified()).format(\"ll\")\n\t\t: elements.checkbox({\n\t\t\ttitle: 'Mark Verified Date'\n\t\t\t,onchange:\n\t\t\t\tm.withAttr('checked', function(e){\n\n\t\t\t\t\tconst value = !e\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: e && fullView()\n\t\t\t\t\t\t&& currAllocationDate() < Date.now()\n\t\t\t\t\t\t\t? currAllocationDate()\n\t\t\t\t\t\t\t: Date.now()\n\n\t\t\t\t\tt.project_extras_date_verified(value)\n\n\t\t\t\t\tt.created = true\n\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\tt\n\t\t\t\t\t\t,'project_extras_date_verified'\n\t\t\t\t\t)\n\n\t\t\t\t})\n\t\t\t,disabled: !editProjectPermissions() || !t.project_extras_date_completed() && !t.project_extras_date_invalid()\n\t\t\t,checked: t.project_extras_date_verified()\n\t\t})\n\n\tconst markInvalidDate = () => t =>\n\t\telements.checkbox({\n\t\t\ttitle: 'Mark the date this task turned invalid '\n\t\t\t,onchange:\n\t\t\t\tm.withAttr('checked', function(e){\n\n\t\t\t\t\tconst value = !e\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: e && fullView()\n\t\t\t\t\t\t&& currAllocationDate() < Date.now()\n\t\t\t\t\t\t\t? currAllocationDate()\n\t\t\t\t\t\t\t: Date.now()\n\n\t\t\t\t\tt.project_extras_date_invalid(value)\n\t\t\t\t\t!e ? t.project_extras_date_verified(null) : null\n\t\t\t\t\t// t.project_extras_actual_amount(0)\n\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\tt\n\t\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t\t)\n\n\t\t\t\t\tt.created = true\n\t\t\t\t\tconst diffState = !!t.project_extras_date_completed()\n\n\t\t\t\t\tif (diffState){\n\t\t\t\t\t\tt.project_extras_date_completed(null)\n\t\t\t\t\t\tprojectExtrasSum(\n\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t,disabled: !editUpdatePermissions()\n\t\t\t,checked: t.project_extras_date_invalid()\n\t\t})\n\n\tconst taskdata =\n\t(t, tableSize) =>\n\t\t({\n\n\t\t\t'Name': t.project_extras_type()\n\t\t\t,'Description':\n\t\t\t\tt.project_extras_description()\n\t\t\t\t|| t.relatedDiscipline\n\t\t\t,'Address': t.project_extras_address()\n\t\t\t,'Assigned':\n\t\t\t\tt.project_extras_date_assigned()\n\t\t\t\t\t? moment( t.project_extras_date_assigned())\n\t\t\t\t\t\t.format(\"ddd Do MMM\")\n\t\t\t\t\t: ''\n\t\t\t,'Completed':\n\t\t\t\tfullView() && DisableDuplicateSave(true)\n\t\t\t\t? t.project_extras_date_completed()\n\t\t\t\t\t? moment( t.project_extras_date_completed())\n\t\t\t\t\t\t.format(\"ddd Do MMM\")\n\t\t\t\t\t: ''\n\t\t\t\t: tableSize\n\t\t\t\t? changeCompletedDate()(t)\n\t\t\t\t: markCompletedDate()(t)\n\t\t\t,'Invalid':\n\t\t\t\tfullView() && DisableDuplicateSave(true)\n\t\t\t\t? t.project_extras_date_invalid()\n\t\t\t\t\t? moment( t.project_extras_date_invalid())\n\t\t\t\t\t.format(\"ddd Do MMM\")\n\t\t\t\t\t: ''\n\t\t\t\t: markInvalidDate()(t)\n\t\t\t,'Verified':\n\t\t\t\tfullView() && DisableDuplicateSave(true)\n\t\t\t\t? t.project_extras_date_verified()\n\t\t\t\t\t? moment( t.project_extras_date_verified())\n\t\t\t\t\t\t.format(\"ddd Do MMM\")\n\t\t\t\t\t: ''\n\t\t\t\t: markTestDate()(t)\n\n\t\t\t,'Amount':\n\t\t\t\tfullView() && DisableDuplicateSave(true)\n\t\t\t\t? t.project_extras_actual_amount() + ' of ' + t.project_extras_planned_amount()\n\t\t\t\t: !t.newtask\n\t\t\t\t&& !t.project_extras_date_verified()\n\t\t\t\t? projectExtrasPencil () (t)\n\t\t\t\t: t.newtask\n\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t: t.project_extras_actual_amount()\n\t\t\t\t\t+ ' of '\n\t\t\t\t\t+ t.project_extras_planned_amount()\n\t\t\t,'Files': t.filecount\n\t\t\t,'Invoice No': [].concat(\n\t\t\t\tt.revenueinvoices\n\t\t\t\t,t.costinvoices\n\t\t\t)\n\t\t\t.join(', ')\n\n\t\t\t,'Tasked': t.username || t.invite_email\n\t\t\t,'Project': t.project_name\n\t\t\t,'Notes': t.project_extras_notes()\n\t\t})\n\n\n\tconst largeProjectDetailsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tmasterTaskList()\n\t\t\t\t.map((t, tindex) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t&& SelectedProject().project_name != 'Yesterday'\n\t\t\t\t\t\t&& SelectedProject().project_name != 'Today'\n\t\t\t\t\t\t&& SelectedProject().project_name != 'This Week'\n\t\t\t\t\t\t&& SelectedProject().project_name != 'Next Week'\n\t\t\t\t\t\t&& SelectedProject().project_name != 'Last Week'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,t.project_extras_priority()\n\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t+ t.project_extras_type()\n\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t,!t.newtask\n\t\t\t\t\t\t\t\t\t? t.project_name\n\t\t\t\t\t\t\t\t\t: discardTaskButton(t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick: () => createTask()\n\t\t\t\t\t\t\t\t\t,title: 'Create a Task'\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t\t|| !SelectedProject().project_id\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Create a New Task '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,selection: {\n\t\t\t\t\t\tchecked: selectedProjectExtra() == t\n\t\t\t\t\t\t,onclick(e){\n\t\t\t\t\t\t\tselectedProjectExtra() == t\n\t\t\t\t\t\t\t\t? selectedProjectExtra({})\n\t\t\t\t\t\t\t\t: selectedProjectExtra(t)\n\n\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t.project_extras_id\n\t\t\t\t\t\t\t? selectedProjectExtra()\n\t\t\t\t\t\t\t\t.created = true\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t// stop row from opening from\n\t\t\t\t\t\t\t// clicking the checkbox\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t\t\t,title: selectedProjectExtra() == t\n\t\t\t\t\t\t\t? 'Done editing'\n\t\t\t\t\t\t\t: 'Edit the type of this task'\n\t\t\t\t\t}\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 7.5fr 15fr 10fr 6em 6em 4em 4.5em 5fr 4fr 6fr 6fr 6fr 10fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: taskdata(t)\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tclassName: t.project_extras_date_completed()\n\t\t\t\t\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t\t\t\t\t\t? 'highlight-ok'\n\t\t\t\t\t\t\t\t\t: 'highlight-error'\n\t\t\t\t\t\t\t\t: 'highlight-default'\n\t\t\t\t\t}\n\t\t\t}))\n\t\t})\n\n\tconst smallProjectDetailsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tmasterTaskList()\n\t\t\t\t.map((t) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tchecked: selectedProjectExtra() == t\n\t\t\t\t\t\t\t\t\t,onclick(e){\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra() == t\n\t\t\t\t\t\t\t\t\t\t\t? selectedProjectExtra({})\n\t\t\t\t\t\t\t\t\t\t\t: selectedProjectExtra(t)\n\n\t\t\t\t\t\t\t\t\t\tselectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.project_extras_id\n\t\t\t\t\t\t\t\t\t\t? selectedProjectExtra()\n\t\t\t\t\t\t\t\t\t\t\t.created = true\n\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t// stop row from opening from\n\t\t\t\t\t\t\t\t\t\t// clicking the checkbox\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t\t\t\t\t\t,title: selectedProjectExtra() == t\n\t\t\t\t\t\t\t\t\t\t? 'Done editing'\n\t\t\t\t\t\t\t\t\t\t: 'Edit the type of this task'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`button.pl2`\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tonclick: () => createTask()\n\t\t\t\t\t\t\t\t\t,title: 'Create a Task'\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t\t|| !SelectedProject().project_id\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Create a New Task '\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.45fr 0.3fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\tgap: 0.25em\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Name', 'Description', 'Project']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == t.relatedDiscipline\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], t.relatedDiscipline].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.2fr 0.3fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[ 'Verified', 'Invalid', '', 'Completed']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, m(''+css`align-items: center`, x[k])\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.2fr 0.3fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 0.25em;\n\t\t\t\t\t\t\t\t\t\tgap: 0.25em\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Address', 'Tasked', 'Amount']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.2fr 0.3fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Invoice No', 'Files', 'Assigned']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Notes']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t\t,data: taskdata(t, 'smallTable')\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tclassName: t.project_extras_date_completed()\n\t\t\t\t\t\t\t? t.project_extras_actual_amount()\n\t\t\t\t\t\t\t\t? 'highlight-ok'\n\t\t\t\t\t\t\t\t: 'highlight-error'\n\t\t\t\t\t\t\t: 'highlight-default'\n\t\t\t\t\t}\n\t\t\t}))\n\t\t})\n\n\n\tconst projectDetailsTable = () =>\n\t\tmasterTaskList().length\n\t\t? m(Responsive\n\t\t\t,({ desktop, mobileOnly, tabletOnly }) => [\n\t\t\t\tdesktop( largeProjectDetailsTable )\n\t\t\t\t,mobileOnly( smallProjectDetailsTable )\n\t\t\t\t,tabletOnly( smallProjectDetailsTable )\n\t\t\t]\n\t\t)\n\t\t: [\n\t\t\tm('br')\n\t\t\t, m('div'\n\t\t\t\t+ css`\n\t\t\t\tdisplay: grid;\n\t\t\t\theight: 15vh;\n\t\t\t\talign-content: center;\n\t\t\t\t`\n\t\t\t\t,m(`button`\n\t\t\t\t\t+ css`\n\t\t\t\t\theight: 15vh;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\t`\n\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\tborder: solid 1px #3380c2;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\theight: 2.5em;\n\t\t\t\t\t\t\twidth: 10em;\n\t\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\t\tborder-radius: 0.25em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\tonclick: () => createTask()\n\t\t\t\t\t\t\t,title: 'Create a Task'\n\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t|| !SelectedProject().project_id\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'Create a New Task '\n\t\t\t\t\t)\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,m('div'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\tpadding: 10px;\n\t\t\t\t\t\tbackground-color: #fcf8e3;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,`We have zero planned tasks to be Updated.\n\t\t\t\t\t\tTo review or clone previous tasks use the Quick Filters and switch to their category\n\t\t\t\t\t\tor Create new Tasks with the Create a new Task button`\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t]\n\n\tfunction ExtraDetailTab(){\n\t\treturn [\n\t\t\tm('br')\n\t\t\t,!ActiveDetailsFeature()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t'info'\n\t\t\t\t\t,`Activate the project tasks module to use this tracking`\n\t\t\t\t)\n\t\t\t\t: !fetchedExtras()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: currentVersion()\n\t\t\t\t? [\n\n\t\t\t\t\tfullView()\n\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\tm(\"button.btn\",{\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tcreateTask()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,title: 'Create a Task'\n\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t|| !SelectedProject().project_id\n\t\t\t\t\t\t\t}, \"Create a new Task\")\n\t\t\t\t\t\t])\n\t\t\t\t\t\t: ''\n\n\t\t\t\t\t,getfilters(null, \"Tasks\")\n\n\t\t\t\t\t,fullView()\n\t\t\t\t\t&& DisableDuplicateSave(true)\n\t\t\t\t\t&& editUpdatePermissions()\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t, STRING.INFO.CHANGE_COMPLETED_WORK_DATE()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,!projectDetails().length && fetchedExtras() || fullView()\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list( taskSaveDiscardButton() )\n\n\t\t\t\t\t,projectDetailsTable()\n\t\t\t\t]\n\t\t\t\t: elements.alert(\n\t\t\t\t\t'info'\n\t\t\t\t\t, `Work cannot be updated in an outdated schedule version.\n\t\t\t\t\tAmendments or new updates can be made in the newest version`\n\t\t\t\t)\n\t\t]\n\t}\n\n\tconst assignATool = () => tool =>\n\t\telements.checkbox({\n\t\t\tonchange: m.withAttr(\n\t\t\t\t'checked'\n\t\t\t\t, (e) => {\n\t\t\t\t\te\n\t\t\t\t\t\t? tool.crew_id =\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\teditToolPermissions()\n\t\t\t\t\t\t\t\t? fectchedTeams()\n\t\t\t\t\t\t\t\t: userResCrew()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.find((c) =>\n\t\t\t\t\t\t\t\tc.user_id()\n\t\t\t\t\t\t\t\t== data.auth.stream().user_id\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.crew_id()\n\n\t\t\t\t\t\t: tool.crew_id = null\n\n\t\t\t\t\t// tools_vm([tool])\n\t\t\t\t\t// data.getLocation([tool], loading, sendTools)\n\t\t\t\t\tdata.getLocation([tool], loading)\n\t\t\t\t}\n\t\t\t)\n\t\t\t,checked: exposer(tool.crew_id)\n\t\t\t,title: `Assign a tool`\n\t\t\t,disabled:\n\n\t\t\t\t!editToolPermissions()\n\t\t\t\t&& !editAssignedToolPermissions()\n\t\t\t\t|| !editToolPermissions()\n\t\t\t\t&& editAssignedToolPermissions()\n\t\t\t\t&& !!exposer(tool.crew_id)\n\t\t\t\t&& userResCrew().find((chr) =>\n\t\t\t\t\tchr.crew_id()\n\t\t\t\t\t== exposer(tool.crew_id)\n\t\t\t\t).user_id()\n\t\t\t\t!= data.auth.stream().user_id\n\n\t\t})\n\n\tconst assignAToolPencil = () => tool => {\n\n\t\tconst reflist =\n\t\t\teditToolPermissions()\n\t\t\t? fectchedTeams\n\t\t\t: userResCrew\n\n\t\treturn reflist().length == 1\n\t\t? userResCrew().find((c) => c.crew_id() == tool.crew_id()).teamresourcename\n\t\t: Pencil2(\n\t\t\t() =>\n\t\t\t\t(reflist().find((c) => c.crew_id() == exposer(tool.crew_id)) || {teamresourcename: 'Busy'})\n\t\t\t\t.teamresourcename\n\t\t\t,() =>\n\t\t\t\tautocomplete.strict(\n\t\t\t\t\treflist\n\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\ttool.crew_id = v.crew_id()\n\t\t\t\t\t\ttools_vm([tool])\n\n\t\t\t\t\t\tdata.getLocation([tool], loading, sendTools)\n\n\t\t\t\t\t\treturn v.teamresourcename\n\t\t\t\t\t})\n\t\t\t\t\t,'teamresourcename'\n\t\t\t\t\t,() => ({\n\t\t\t\t\t\ttitle: 'Assign a tool'\n\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t!userResCrew().length\n\t\t\t\t\t\t\t|| !editToolPermissions()\n\t\t\t\t\t\t\t&& !editAssignedToolPermissions()\n\t\t\t\t\t\t\t|| !editToolPermissions()\n\t\t\t\t\t\t\t&& editAssignedToolPermissions()\n\t\t\t\t\t\t\t&& !!tool.crew_id()\n\t\t\t\t\t\t\t&& userResCrew().find((chr) =>\n\t\t\t\t\t\t\t\tchr.crew_id()\n\t\t\t\t\t\t\t\t== tool.crew_id()\n\t\t\t\t\t\t\t).user_id()\n\t\t\t\t\t\t\t!= data.auth.stream().user_id\n\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t)\n\t}\n\n\tconst toggleWorkDetail = () => tool =>\n\t\t!tool.crew_id()\n\t\t\t? 'Assign to a team to show work forecasts'\n\t\t: loadingMeta()\n\t\t\t? ' ... '\n\t\t: !workList()[tool.crew_id()]\n\t\t\t? 'Save these tools to re-evaluate'\n\t\t: !workList()[tool.crew_id()].workList.length\n\t\t\t&& workList()[tool.crew_id()].totalcount\n\t\t\t\t? 'Busy'\n\t\t\t\t: m(\"button.btn.\"\n\t\t\t\t\t+ (\n\t\t\t\t\t\ttoolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t? '.btn-warning'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t, {\n\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\ttoolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t\t? delete toolDetail()\n\t\t\t\t\t\t\t\t\t[tool.crew_id()]\n\t\t\t\t\t\t\t\t: toolDetail(\n\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\ttoolDetail()\n\t\t\t\t\t\t\t\t\t\t,{[tool.crew_id()]: tool.crew_id()}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,title: toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t\t? \"Hide the next organized work for this tool\"\n\t\t\t\t\t\t\t: \"Show the next organized work for this tool\"\n\t\t\t\t\t}\n\t\t\t\t\t,toolDetail()[tool.crew_id()]\n\t\t\t\t\t\t? \"Hide Detail\"\n\t\t\t\t\t\t: \"Show Works\"\n\t\t\t\t)\n\n\tconst tooldata =\n\t\t(t) => ({\n\t\t\t'Self Assign':\n\t\t\t\tuserResCrew().length >= 2\n\t\t\t\t? assignATool()(t)\n\t\t\t\t: `Users connected to teams may take tools`\n\t\t\t,'Assign or Release': assignAToolPencil()(t)\n\t\t\t,'Tool': exposer( t.tools_name )\n\t\t\t,'Description': exposer( t.tools_description )\n\t\t\t,'Ownership': exposer( t.tools_ownership )\n\t\t\t,'Condition': exposer( t.tools_condition )\n\t\t\t,'Location': exposer( t.tools_location )\n\t\t\t,' ':\n\t\t\t\t!data.readProjectPermissions()\n\t\t\t\t? \"Requires Project Permissions\"\n\t\t\t\t: toggleWorkDetail()(t)\n\t\t})\n\n\tconst largeToolsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\ttools_vm()\n\t\t\t\t\t,filterFunction.ToolsFilters.filters()\n\t\t\t\t\t,'tools_name'\n\t\t\t\t)\n\t\t\t\t.map((t, tindex) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\ttindex != 0\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 1.15fr 0.75fr 1.25fr 0.65fr 0.65fr 0.9fr 1.15fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\theight: 10em;\n\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('hr')\n\t\t\t\t\t\t\t\t,toolDetail()[t.crew_id()]\n\t\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\t\tproject: 'Project'\n\t\t\t\t\t\t\t\t\t,disciplines:'Disciplines'\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t.concat(workList()[t.crew_id()].workList)\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.36fr 0.64fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['project', 'disciplines']\n\t\t\t\t\t\t\t\t\t\t.map((h) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-top: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,k['project'] == 'Project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m('label.control-label.f4', k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: !h\n\t\t\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t\t\t: h == 'project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m(`li.pa0`, k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: k[h].map((d) => d.discipline_name + ' - ' + d.discipline_description).join(', ')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t,data: tooldata(t)\n\t\t\t\t}))\n\t\t})\n\n\tconst smallToolsTable = () =>\n\t\tscrollableTable.advanced({\n\t\t\tscoped: data.scoped\n\t\t\t,resize$: data.resize$\n\t\t\t,alwaysopen: true\n\t\t\t,rows:\n\t\t\t\tListProcessing(\n\t\t\t\t\ttools_vm()\n\t\t\t\t\t,filterFunction.ToolsFilters.filters()\n\t\t\t\t\t,'tools_name'\n\t\t\t\t)\n\t\t\t\t.map((t) => ({\n\t\t\t\t\tkey: t.key\n\t\t\t\t\t,header:\n\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t)\n\t\t\t\t\t,layouts: {\n\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.5fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Tool', 'Description', 'Assign or Release']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,['Self Assign', 'Ownership', 'Condition', 'Location']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[' ']\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,toolDetail()[t.crew_id()]\n\t\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\t\tproject: 'Project'\n\t\t\t\t\t\t\t\t\t,disciplines: 'Disciplines'\n\t\t\t\t\t\t\t\t\t,'': ''\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t.concat(workList()[t.crew_id()].workList)\n\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.05fr 0.35fr 0.6fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['', 'project', 'disciplines'].map((h) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-top: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.75em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,k['project'] == 'Project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m('label.control-label.f4', k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: !h\n\t\t\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t\t\t: h == 'project'\n\t\t\t\t\t\t\t\t\t\t\t\t? m(`li.pa0`, k[h])\n\t\t\t\t\t\t\t\t\t\t\t\t: k[h].map((d) => d.discipline_name + ' - ' + d.discipline_description).join(', ')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t\t,data: tooldata(t)\n\t\t\t\t}))\n\t\t})\n\n\n\tconst toolsTable = () =>\n\t\tm(Responsive\n\t\t\t,\n\t\t\t{\n\t\t\t\tbreakpoints: {\n\t\t\t\t\tmobile:0\n\t\t\t\t\t,desktop:900\n\t\t\t\t\t,tablet:700\n\t\t\t\t\t,hd:1800\n\t\t\t\t}\n\t\t\t}\n\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\thd( largeToolsTable )\n\t\t\t\t,desktopOnly( largeToolsTable )\n\t\t\t\t,mobileOnly( smallToolsTable )\n\t\t\t\t,tabletOnly( smallToolsTable )\n\t\t\t]\n\t\t)\n\n\tfunction ToolsTab(){\n\t\treturn [\n\t\t\tm('hr')\n\t\t\t,toolloading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: [\n\t\t\t\t\tgetfilters(null, \"Tool\")\n\t\t\t\t\t,!fullView()\n\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\tsaveButton()\n\t\t\t\t\t\t\t,identical(tools(), tools_vm())\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: discardButton()\n\t\t\t\t\t\t])\n\t\t\t\t\t\t: null\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,tools_vm().length != 0\n\t\t\t\t\t? toolsTable()\n\t\t\t\t\t: data.readToolPermissions()\n\t\t\t\t\t|| editAssignedToolPermissions()\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t,STRING.INFO.NO_TOOLS_AGAINST_SCHEDULES_AND_TEAMS()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t,'Requires Tool Permissions'\n\t\t\t\t\t\t)\n\t\t\t\t]\n\t\t]\n\t}\n\n\tconst allocationCompletionCommentsPencil = () =>\n\t\tPencil2(\n\t\t\t() =>\n\t\t\t\tvm().selected.allocation.allocations_completion_comments\n\t\t\t\t&& vm().selected.allocation.allocations_completion_comments()\n\t\t\t,() => elements.textInput(\n\t\t\t\tvm()\n\t\t\t\t\t.selected.allocation.allocations_completion_comments\n\t\t\t\t\t,{ disabled: !editUpdatePermissions()\n\t\t\t\t\t, title: STRING.INFO.ALLOCATION_COMPLETION_COMMENTS()\n\t\t\t\t\t}\n\t\t\t)\n\t\t)\n\n\tconst allocationCompletionCommentStrikeList = () =>\n\t\telements.details(\n\t\t\t'Notes'\n\t\t\t,m(''\n\t\t\t\t,[\n\t\t\t\t\tm('br')\n\t\t\t\t\t,projectNotes().map((s) => [\n\t\t\t\t\t\telements.list([m('p.pv1.underline.fw5', s[0])])\n\t\t\t\t\t\t, s[1].map((ss) => m('.pa0.relative.left-1.top--1', elements.list([m('.fw5', ss[0]), m('.fw6.gold', ss[1])], '.pa0')))\n\t\t\t\t\t])\n\t\t\t\t]\n\t\t\t)\n\t\t\t,projectNotes().length ? {} : { disabled: true }\n\t\t)\n\n\tconst allocationDate = () =>\n\t\tPencil2(\n\t\t\t() =>\n\t\t\t\tmoment(\n\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t\t.allocations_allocation_date()\n\t\t\t\t)\n\t\t\t\t.format(\"ll\")\n\t\t\t,() => elements.dateInput(\n\t\t\t\t(aDate) => {\n\t\t\t\t\tconst allocationDate = vm().selected.allocation\n\t\t\t\t\tif(aDate){\n\t\t\t\t\t\tallocationDate.allocations_allocation_date(aDate)\n\t\t\t\t\t\tprojectDetails()\n\t\t\t\t\t\t\t.filter((pe) =>\n\t\t\t\t\t\t\t\tpe.allocation_id()\n\t\t\t\t\t\t\t\t== allocationDate.allocation_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.forEach((pe) => {\n\t\t\t\t\t\t\t\tpe.created = true\n\t\t\t\t\t\t\t\tpe.project_extras_date_invalid()\n\t\t\t\t\t\t\t\t\t? pe.project_extras_date_invalid( aDate )\n\t\t\t\t\t\t\t\t: pe.project_extras_date_completed()\n\t\t\t\t\t\t\t\t\t? pe.project_extras_date_completed( aDate )\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn allocationDate.allocations_allocation_date()\n\t\t\t\t}\n\t\t\t\t, {\n\t\t\t\t\ttitle: STRING.TITLE.ALLOCATION_DATE()\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\n\tconst workCompletedOfForecasted = () =>\n\t\tm('label.control-label'\n\t\t\t,'Completed of Forecasted' // Full view\n\t\t\t,vm().pending()\n\t\t\t\t? ' ... '\n\t\t\t\t: editUpdatePermissions()\n\t\t\t\t&& currentVersion()\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => (\n\t\t\t\t\t\t\tcompletedWork()\n\t\t\t\t\t\t\t|| vm().selected.allocation\n\t\t\t\t\t\t\t\t.allocations_allocation_complete()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t+ forecastedWork()\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors: errors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Total Work Completed'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: completedWork\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tmin: 0\n\t\t\t\t\t\t\t\t\t\t, step: 0.01\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\t!editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t\t, title:\n\t\t\t\t\t\t\t\t\t\t\tSTRING.TITLE.TOTAL_WORK_COMPLETED()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: completedWork()\n\t\t)\n\n\tconst importantNotes = () =>\n\t\telements.list([\n\t\t\tm('label.control-label.mb1'\n\t\t\t\t,'Important Notes'\n\t\t\t\t,editUpdatePermissions()\n\t\t\t\t&& currentVersion()\n\t\t\t\t\t? Pencil2(\n\t\t\t\t\t\t() => vm()\n\t\t\t\t\t\t\t.selected.allocation\n\t\t\t\t\t\t\t.allocations_completion_comments()\n\t\t\t\t\t\t\t|| ' Report important information'\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textArea(\n\t\t\t\t\t\t\t\tvm()\n\t\t\t\t\t\t\t\t.selected\n\t\t\t\t\t\t\t\t.allocation.allocations_completion_comments\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tdisabled: !editUpdatePermissions()\n\t\t\t\t\t\t\t\t\t,title:\n\t\t\t\t\t\t\t\t\t\tSTRING.INFO\n\t\t\t\t\t\t\t\t\t\t\t.ALLOCATION_COMPLETION_COMMENTS()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: vm()\n\t\t\t\t\t\t.selected.allocation.allocations_completion_comments()\n\t\t\t\t\t|| ' Report important information'\n\t\t\t)\n\t\t])\n\n\tfunction EditAllocations(){\n\t\treturn layout(\n\n\t\t\telements.list([\n\t\t\t\tm('h4','Field Updates')\n\t\t\t\t,vm().selected.allocation.discplineNameDescription\n\t\t\t])\n\n\t\t\t,m('hr')\n\n\t\t\t,m('.no-split-pane',\n\n\t\t\t\tm('h4','Project History')\n\t\t\t\t,m('br')\n\n\t\t\t\t,m('label.control-label', 'Important Notes '\n\t\t\t\t\t,vm().pending()\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\teditUpdatePermissions()\n\t\t\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t\t\t? allocationCompletionCommentsPencil()\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t, allocationCompletionCommentStrikeList()\n\t\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t, projectMetaDataLoading()\n\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t: [\n\n\t\t\t\t\t\tprojectDocumentsView({\n\t\t\t\t\t\t\teditProjectPermissions:\n\t\t\t\t\t\t\t\teditProjectPermissions()\n\t\t\t\t\t\t\t,xs: projectMetaData().project_documents\n\t\t\t\t\t\t\t\t? projectMetaData().project_documents()\n\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,m('label.dib.control-label', 'Contacts')\n\t\t\t\t\t\t\t,(projectMetaData() ? projectMetaData().project_contacts : [])\n\t\t\t\t\t\t\t.map((pd) =>\n\t\t\t\t\t\t\t\telements.list(\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\teditProjectPermissions()\n\t\t\t\t\t\t\t\t\t\t? ['type'\n\t\t\t\t\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t\t\t\t\t,'phone'\n\t\t\t\t\t\t\t\t\t\t,'email'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t: ['type'\n\t\t\t\t\t\t\t\t\t\t,'name'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map((ex) =>\n\t\t\t\t\t\t\t\t\t\tex != 'user_id'\n\t\t\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t\t\t'p.w5'\n\t\t\t\t\t\t\t\t\t\t\t,pd['project_contacts_' +ex]()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: m('p.w5',\n\t\t\t\t\t\t\t\t\t\t\t(users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\tu.user_id() == pd[ex]())\n\t\t\t\t\t\t\t\t\t\t\t|| nullUser)\n\t\t\t\t\t\t\t\t\t\t\t.usersFullName\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t)\n\n\t\t\t,m('br')\n\t\t\t,m('br')\n\t\t\t,elements.list([\n\t\t\t\tm('label.control-label', 'Date '\n\t\t\t\t\t, editUpdatePermissions()\n\t\t\t\t\t\t&& currentVersion()\n\t\t\t\t\t\t? allocationDate()\n\t\t\t\t\t\t: moment(\n\t\t\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t\t\t\t.allocations_allocation_date()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.format(\"ll\")\n\t\t\t\t)\n\t\t\t])\n\t\t\t,elements.list([\n\t\t\t\tworkCompletedOfForecasted()\n\t\t\t])\n\t\t\t,activeTab() == 'Project Tasks'\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('label.control-label', 'Task Summary')\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t'assigned'\n\t\t\t\t\t\t\t,'completed'\n\t\t\t\t\t\t\t,'verified'\n\t\t\t\t\t\t\t,'invalid'\n\t\t\t\t\t\t].map((prop) =>\n\t\t\t\t\t\t\tprop.charAt(0).toUpperCase() + prop.slice(1)\n\t\t\t\t\t\t\t+ ': '\n\t\t\t\t\t\t\t+ projectExtrasStat()\n\t\t\t\t\t\t\t\t['project_extras_date_' + prop]\n\t\t\t\t\t\t\t+ ' '\n\t\t\t\t\t\t).concat('Total: ' + projectDetails().length)\n\t\t\t\t\t])\n\t\t\t\t]\n\t\t\t\t: elements.list([\n\t\t\t\t\tm('label.control-label', 'Contract Obligations ')\n\t\t\t\t\t,[\n\t\t\t\t\t\t'Variations'\n\t\t\t\t\t\t,'Notice of Delays'\n\t\t\t\t\t\t,'Extensions of Time'\n\t\t\t\t\t].map((prop) =>\n\t\t\t\t\t\tprop\n\t\t\t\t\t\t+ ': '\n\t\t\t\t\t\t+ (\n\n\t\t\t\t\t\t\t\tprop == 'Variations'\n\t\t\t\t\t\t\t\t\t? (vm().selected.allocation.allocations_vars || []).length\n\t\t\t\t\t\t\t\t\t: prop == 'Notice of Delays'\n\t\t\t\t\t\t\t\t\t\t? (vm().selected.allocation.allocations_nods || []).length\n\t\t\t\t\t\t\t\t\t\t: (vm().selected.allocation.allocations_eots || []).length\n\n\t\t\t\t\t\t)\n\t\t\t\t\t\t+ ' '\n\t\t\t\t\t).concat('Total: ' + contractList().length)\n\t\t\t\t])\n\n\t\t\t,editUpdatePermissions()\n\t\t\t\t? [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\telements.back(\n\t\t\t\t\t\t\t\"Go Back to the allocations list without saving\"\n\t\t\t\t\t\t\t,() => {\n\n\t\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t\t? vm().selected.allocation = {}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t\t? vm().revert = {}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t\t? currentDiscipline({})\n\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\tfullView(false)\n\t\t\t\t\t\t\t\teotDeletions([])\n\t\t\t\t\t\t\t\tnodDeletions([])\n\t\t\t\t\t\t\t\tvarDeletions([])\n\t\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\t\tviewType = ListAllocations\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,saveButton()\n\t\t\t\t\t\t,discardButton()\n\t\t\t\t\t])\n\t\t\t\t]\n\t\t\t\t: elements.list([\n\t\t\t\t\telements.back(\n\t\t\t\t\t\t\"Go Back to the allocations list without saving\"\n\t\t\t\t\t\t,() => {\n\n\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t? vm().selected.allocation = {}\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t? vm().revert = {}\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t!selectedProjectExtra().project_extras_id\n\t\t\t\t\t\t\t\t? currentDiscipline({})\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\tfullView(false)\n\t\t\t\t\t\t\teotDeletions([])\n\t\t\t\t\t\t\tnodDeletions([])\n\t\t\t\t\t\t\tvarDeletions([])\n\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\tviewType = ListAllocations\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t,m('br')\n\t\t\t,DisableEmptySave()\n\t\t\t,DisableDuplicateSave()\n\t\t\t,elements.tabset(\n\t\t\t\t['Timesheets'\n\t\t\t\t, 'Update Contractual Information'\n\t\t\t\t, 'Retrieve or Release Tools'\n\t\t\t\t, `Create Ledgers`\n\t\t\t\t, `Project Tasks`\n\t\t\t\t]\n\t\t\t\t, activeTab\n\t\t\t)\n\t\t\t,activeTab() == 'Timesheets'\n\t\t\t\t? TimesheetsTab()\n\t\t\t: activeTab() == 'Retrieve or Release Tools'\n\t\t\t\t? ToolsTab()\n\t\t\t: activeTab() == `Create Ledgers`\n\t\t\t\t? CreatInvoicePO()\n\t\t\t: activeTab() == 'Project Tasks'\n\t\t\t\t? ExtraDetailTab()\n\t\t\t\t: WorksTab()\n\t\t)\n\t}\n\n\tconst view = function(){\n\n\t\treturn m('div'\n\t\t\t// todo-james this should be closer to the scollable table\n\t\t\t// callsite, but I'll leave that to @eja as he knows\n\t\t\t// this route better than me\n\t\t\t+ H.css`\n\t\t\t\t& .scrollable-table-3 .highlight-ok {\n\t\t\t\t\t--border-color: #6b5b95;\n\t\t\t\t\t--shadow-color: hsl(257deg 24% 47% / 47%);\n\t\t\t\t\tbox-shadow: -1px 3px 5px 0px var(--shadow-color);\n\t\t\t\t\tborder-left-color: var(--border-color);\n\t\t\t\t}\n\n\t\t\t\t& .scrollable-table-3 .highlight-error {\n\t\t\t\t\t--border-color: #d64141;\n\t\t\t\t\t--shadow-color: hsl(0deg 100% 95%);\n\t\t\t\t\tbox-shadow: -1px 3px 5px 0px var(--shadow-color);\n\t\t\t\t\tborder-left-color: var(--border-color);\n\t\t\t\t}\n\t\t\t`\n\t\t\t,viewType()\n\t\t\t,DetailsPane(\n\t\t\t\t() => detailsPaneOpen()\n\t\t\t\t,vm().selected.allocation.discplineNameDescription\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('a'\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tfetchedExtras(false)\n\t\t\t\t\t\t\t\t\tfullView(true)\n\t\t\t\t\t\t\t\t\tviewType = EditAllocations\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, title: \"Full View of todays work\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Full View'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, ' - '\n\t\t\t\t\t\t,vm().selected.allocation.discplineNameDescription\n\t\t\t\t\t])\n\t\t\t\t\t: selectedProjectExtra().project_name\n\t\t\t\t,() => detailPaneInputs(\n\t\t\t\t\tvm().selected.allocation\n\t\t\t\t)\n\t\t\t\t, { key: detailsPaneKey() }\n\n\t\t\t)\n\t\t)\n\t}\n\n\tconst deleteEOTS = () =>\n\t\tPromise.all(eotDeletions().map((e) =>\n\t\t\tdata.api.allocations_eots.remove.one(e)\n\t\t))\n\n\tconst deleteNODS = () =>\n\t\tPromise.all(nodDeletions().map((n) =>\n\t\t\tdata.api.allocations_nods.remove.one(n)\n\t\t))\n\n\tconst deleteVARS = () =>\n\t\tPromise.all(varDeletions().map((v) =>\n\t\t\tdata.api.allocations_vars.remove.one(v)\n\t\t))\n\n\tfunction sendInvoices(){\n\t\tconst payload = todaysInvoices()\n\t\tpayload.forEach((i) => {\n\t\t\ti.project_name(\n\t\t\t\tvm().selected.allocation.project_name\n\t\t\t\t\t? vm().selected.allocation.project_name\n\t\t\t\t\t: SelectedProject().project_name\n\t\t\t)\n\t\t\ti.project_id(\n\t\t\t\tvm().selected.allocation.project_name\n\t\t\t\t\t? vm().selected.allocation.project_id()\n\t\t\t\t\t: SelectedProject().project_id()\n\t\t\t)\n\t\t\ti.invoice_type(\n\t\t\t\tNumber(\n\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t+ i.invoice_damages_rate() * i.invoice_damages_amount()\n\t\t\t\t) > 0\n\t\t\t\t\t? i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Revenue'\n\t\t\t\t\t\t: 'Accrued Revenue'\n\t\t\t\t\t: i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Expenditure'\n\t\t\t\t\t\t: 'Accrued Expenditure'\n\t\t\t)\n\t\t})\n\t\treturn data.api.invoices.patch.many(payload, 'disableList')\n\t\t\t.then(function(res){\n\t\t\t\tdeleteInvoiceItems([])\n\t\t\t\tdata.originalInvoices(\n\t\t\t\t\teditInvoicePermissions()\n\t\t\t\t\t\t? res\n\t\t\t\t\t\t: res.filter((i) =>\n\t\t\t\t\t\t\ti.user_id() == data.auth.stream().user_id\n\t\t\t\t\t\t\t|| i.invoice_approver() == data.auth.stream().user_id\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\treturn true\n\t\t\t})\n\t}\n\n\n\tfunction sendTools(){\n\t\ttoolloading(true)\n\t\tm.redraw()\n\t\treturn Promise.resolve(\n\t\t\teditToolPermissions()\n\t\t\t|| editAssignedToolPermissions()\n\t\t\t? data.api.tools.patch.many(tools_vm())\n\t\t\t: []\n\t\t)\n\t\t\t.then(() => {\n\t\t\t\tif( activeLandingTab() == 'Tools'){\n\t\t\t\t\tforceToolfetch(true)\n\t\t\t\t\treturn fetchTools()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttoolloading(false)\n\t\t\t\t\tforceToolfetch(true)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\tfunction fetchTools(){\n\t\ttoolloading(true)\n\t\treturn data.fetchTools({})\n\t\t\t.then( tools )\n\t\t\t.then( fetchWorkList )\n\t\t\t.then( function(){\n\t\t\t\ttools_vm(cloningTool())\n\t\t\t\ttoolloading(false)\n\t\t\t\treturn true\n\t\t\t})\n\t}\n\n\tconst sendTimesheets = function(){\n\t\tconst timesheet_list =\n\t\t\ttimesheet_vm().selected.timesheet.map((t) =>\n\t\t\t\tidentical(t, timesheets().find((st) => st.timesheets_id() == t.timesheets_id()))\n\t\t\t\t? null\n\t\t\t\t: t\n\t\t\t)\n\t\t\t.filter(R.identity)\n\n\t\tfetchedTime(false)\n\t\treturn timesheet_list.length ? data.api.timesheets.patch.many(timesheet_list, 'disableList', 'aligntimesheets') : []\n\t}\n\n\tfunction fetchOrganizationsDisciplines(){\n\t\treturn data.fetchOrganizationsDisciplines({})\n\t\t\t.then(organizationsDisciplines)\n\t\t\t.then(m.redraw)\n\t}\n\n\tfunction fetchWorkList(){\n\t\tloadingMeta(true)\n\t\treturn Promise.all(\n\t\t\tR.uniqBy(\n\t\t\t\tbyProp('crew_id')\n\t\t\t\t,tools()\n\t\t\t)\n\t\t\t.filter((a) => a.crew_id() )\n\t\t\t.map((a) =>\n\t\t\t\tdata.fetchResourceWork(\n\t\t\t\t\tR.merge(\n\t\t\t\t\t\ta\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tschedule_id: data.selectedVersion().schedule_id\n\t\t\t\t\t\t\t, schedule_versions_id: data.selectedVersion().schedule_versions_id\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t\t\t.then(\n\t\t\t\tR.pipe(\n\t\t\t\t\tR.unnest\n\t\t\t\t\t,R.map((a) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tcrew_id: a.crew_id\n\t\t\t\t\t\t\t,contractor_id: a.contractor_id\n\t\t\t\t\t\t\t,totalcount: Number(a.totalcount)\n\t\t\t\t\t\t\t,workList: R.pipe(\n\t\t\t\t\t\t\t\tR.filter(\n\t\t\t\t\t\t\t\t\t(p) => p.schedule_id\n\t\t\t\t\t\t\t\t\t== data.schedule_id()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,R.groupBy(R.prop('project_id'))\n\t\t\t\t\t\t\t\t,R.map((p) => ({\n\t\t\t\t\t\t\t\t\tproject: p[0].project_name\n\t\t\t\t\t\t\t\t\t,disciplines: p\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t,R.toPairs\n\t\t\t\t\t\t\t\t,R.map(R.last)\n\t\t\t\t\t\t\t\t,R.unnest\n\t\t\t\t\t\t\t)(a.workingarray)\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t,R.indexBy( R.prop('crew_id') )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then( workList )\n\t\t\t.catch(\n\t\t\t\te => NotificationBar.Notifications.alertError(e.message)\n\t\t\t)\n\t\t\t.then( () => loadingMeta(false) )\n\t\t\t.then( m.redraw )\n\t}\n\n\tconst sendAllocations = function(){\n\n\t\tloading(true)\n\t\tallocations([])\n\t\tdata.currentRoute('Nothing')\n\t\tallocationChange(false)\n\n\t\tconst updateAllocations =\n\t\t\tvm().selected.allocation.allocation_id\n\t\t\t&& !identical(vm().revert, vm().selected.allocation)\n\t\t\t? [vm().selected.allocation]\n\t\t\t: []\n\n\t\tcontractList([])\n\n\t\tconst schedule_index =\n\t\t\tR.findIndex(\n\t\t\t\tR.propEq('schedule_id', data.schedule_id())\n\t\t\t\t, data.schedules()\n\t\t\t)\n\n\t\tconst most_recent_version =\n\t\t\tR.sortBy(\n\t\t\t\tR.prop(\"schedule_version_created\")\n\t\t\t\t,data.schedules()[schedule_index].schedule_versions\n\t\t\t)\n\n\t\tconst LatestVerionIndex =\n\t\t\tmost_recent_version.length - 1\n\t\tconst schedule_version_id =\n\t\t\tmost_recent_version[LatestVerionIndex].schedule_version_id\n\n\t\tconst project_id =\n\t\t\t!SelectedProject().project_id\n\t\t\t\t? vm().selected.allocation.project_id\n\t\t\t\t: SelectedProject().project_id\n\t\t\t\t? SelectedProject().project_id()\n\t\t\t\t: null\n\n\t\tconst patchTasks = projectDetails().filter(R.prop('created'))\n\t\tconst splitTasks =\n\t\t\tR.unnest(\n\t\t\t\tpatchTasks.filter((t) => t.users().length > 1)\n\t\t\t\t.map((t) => {\n\t\t\t\t\tlet i = 0\n\t\t\t\t\tt.project_extras_actual_amount(\n\t\t\t\t\t\tNumber(Number(t.project_extras_actual_amount()/t.users().length).toFixed(3)))\n\t\t\t\t\tt.project_extras_planned_amount(\n\t\t\t\t\t\tNumber(Number(t.project_extras_planned_amount()/t.users().length).toFixed(3)))\n\t\t\t\t\treturn R.unfold(\n\t\t\t\t\t\t(n) => {\n\t\t\t\t\t\t\tconst tuser = n.users()[i]\n\t\t\t\t\t\t\tconst vadd =\n\t\t\t\t\t\t\t\tcloningProjectExtra(t)\n\n\t\t\t\t\t\t\t!vadd.parents() ? vadd.parents([]) : null\n\n\t\t\t\t\t\t\t;vadd.user_id(tuser.user_id())\n\n\t\t\t\t\t\t\t!t.newtask\n\t\t\t\t\t\t\t\t? vadd.parents().push(t.project_extras_id())\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\tvadd.project_extras_id(uuid.v4())\n\t\t\t\t\t\t\tvadd.allocation_id(null)\n\t\t\t\t\t\t\tvadd.invite_id = null\n\t\t\t\t\t\t\tvadd.invite_email = null\n\n\t\t\t\t\t\t\ti = i + 1\n\n\t\t\t\t\t\t\treturn i == n.users().length\n\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t: [ vadd, n ]\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, t\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t)\n\n\t\tconst projectExtraArray =\n\t\t\tR.splitEvery(\n\t\t\t\t100\n\t\t\t\t,patchTasks\n\t\t\t\t.concat(splitTasks)\n\t\t\t\t.map((t) => {\n\t\t\t\t\tconst dprops =\n\t\t\t\t\t\t!t.newtask\n\t\t\t\t\t\t? identical(\n\t\t\t\t\t\t\tt\n\t\t\t\t\t\t\t,baseProjectDetailsHash()[t.project_extras_id()]\n\t\t\t\t\t\t\t,[]\n\t\t\t\t\t\t\t,'returnKeys'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: []\n\n\t\t\t\t\treturn t.newtask || true\n\t\t\t\t\t\t? t\n\t\t\t\t\t\t: R.pick(\n\t\t\t\t\t\t\tR.concat(\n\t\t\t\t\t\t\t\t['project_extras_id'\n\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t\t,'orphanedFiles'\n\t\t\t\t\t\t\t\t,'invite_id'\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t,dprops\n\t\t\t\t\t\t\t\t.some((a) =>\n\t\t\t\t\t\t\t\t\ta == 'user_id'\n\t\t\t\t\t\t\t\t\t|| a == 'discipline_id'\n\t\t\t\t\t\t\t\t\t|| a == 'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t|| a == 'project_extras_planned_amount'\n\t\t\t\t\t\t\t\t\t|| a == 'project_extras_actual_amount'\n\t\t\t\t\t\t\t\t\t|| a == 'project_extras_date_completed'\n\t\t\t\t\t\t\t\t\t|| a == 'project_extras_date_invalid'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t'user_id'\n\t\t\t\t\t\t\t\t\t,'discipline_id'\n\t\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t\t,'project_extras_planned_amount'\n\t\t\t\t\t\t\t\t\t,'project_extras_actual_amount'\n\t\t\t\t\t\t\t\t\t,'project_extras_date_completed'\n\t\t\t\t\t\t\t\t\t,'project_extras_date_invalid'\n\t\t\t\t\t\t\t\t\t,'allocation_id'\n\t\t\t\t\t\t\t\t].concat(dprops)\n\t\t\t\t\t\t\t\t: dprops\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,t\n\t\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.map(R.omit(['newtask', 'users', 'oldusers', 'musers']))\n\t\t\t)\n\n\t\tconst aclanding = activeLandingTab()\n\n\t\treturn Promise.all([\n\t\t\tdeleteEOTS()\n\t\t\t,deleteNODS()\n\t\t\t,deleteVARS()\n\t\t\t,deletetInvoices({\n\t\t\t\tmakeAPICalls: true\n\t\t\t\t, api: data.api\n\t\t\t\t, invoice: null\n\t\t\t\t, deleteInvoiceItems\n\t\t\t\t, todaysInvoices\n\t\t\t\t, errors\n\t\t\t})\n\t\t])\n\t\t.then(function(){\n\t\t\treturn Promise.all(\n\t\t\t\tprojectExtraArray.map((sendArray) => {\n\t\t\t\t\treturn Promise.resolve(\n\t\t\t\t\t\tdata.api.project_extras.patch.many(sendArray)\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t)\n\t\t\t// ALWAYS PATCH UPDATES FIRST SO OUR AUTOINVOICING WORKS FIRST\n\t\t\t// AND USER UPDATES AFTER OVERRIDE US\n\t\t\t.then(function(){\n\t\t\t\treturn Promise.all(\n\t\t\t\t\t[\n\t\t\t\t\t\tsendInvoices()\n\t\t\t\t\t\t,sendTools()\n\t\t\t\t\t\t,sendTimesheets()\n\t\t\t\t\t]\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tupdateAllocations.map((a) =>\n\t\t\t\t\t\t\tproject_id\n\t\t\t\t\t\t\t\t? data.api.allocations.patch(\n\t\t\t\t\t\t\t\t\t[a]\n\t\t\t\t\t\t\t\t\t, schedule_version_id\n\t\t\t\t\t\t\t\t\t, project_id\n\t\t\t\t\t\t\t\t\t, 'disableList'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: data.api.allocations.patch(\n\t\t\t\t\t\t\t\t\t[a]\n\t\t\t\t\t\t\t\t\t, schedule_version_id\n\t\t\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t\t\t, 'disableList'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t})\n\t\t\t.then( () => fetchAllocations({\n\t\t\t\tdata\n\t\t\t\t, allocations\n\t\t\t\t, allocationsHash\n\t\t\t\t, SelectedProject\n\t\t\t\t, SelectedDiscipline\n\t\t\t\t, projectOptions\n\t\t\t\t, loading\n\t\t\t\t, fetchedExtras\n\t\t\t\t, allProjects\n\t\t\t\t, dbp_vm\n\t\t\t\t, disciplineExtraOptions\n\t\t\t\t, disciplineOptions\n\t\t\t\t, allDisciplines\n\t\t\t\t, discipline_box\n\t\t\t\t, activeLandingTab: aclanding\n\t\t\t\t, retrieveAllocations\n\t\t\t\t, dateframeprojects: dateframeprojects()\n\t\t\t\t, SelectedResource\n\t\t\t\t, selectedProjectExtra\n\t\t\t}) )\n\t\t\t.then(function(){\n\t\t\t\tdata.currentRoute('updates')\n\t\t\t\teotDeletions([])\n\t\t\t\tnodDeletions([])\n\t\t\t\tvarDeletions([])\n\n\t\t\t\tprojectDetails([])\n\t\t\t\tbaseProjectDetails([])\n\n\t\t\t\tvm().revert =\n\t\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t\t\t? allocations().find((a) =>\n\t\t\t\t\t\t\ta.allocation_id()\n\t\t\t\t\t\t\t== vm()\n\t\t\t\t\t\t\t\t.selected.allocation.allocation_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: {}\n\n\t\t\t\tvm().selected.allocation =\n\t\t\t\t\tvm().selected.allocation.allocation_id\n\t\t\t\t\t\t? cloningAllocation(vm().revert)\n\t\t\t\t\t\t: {}\n\n\t\t\t\tif( vm().selected.allocation.allocation_id ){\n\t\t\t\t\tconsolidateContractList(\n\t\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t)\n\t\t\t\t\tsetContractOptions(\n\t\t\t\t\t\tvm().selected.allocation\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tselectedProjectExtra({})\n\t\t\t\tallocationChange(true)\n\t\t\t\t// used to bump the project extras fetch\n\t\t\t\t// and update the new saved and returned object\n\t\t\t\t// IF we are on the project extras tab\n\t\t\t\tfetchedExtras(false)\n\t\t\t\tactiveTab(activeTab())\n\n\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch( e =>\n\t\t\t\tNotificationBar.Notifications.alertError(e.message)\n\t\t\t)\n\t\t\t.then( () => loading(false) )\n\t\t})\n\t}\n\n\tfunction fetchUsers(){\n\t\treturn data.fetchUsers()\n\t\t.then((res) => {\n\t\t\tres.forEach((u) => {\n\t\t\t\tif (data.auth.stream().user_id == u.user_id()){\n\t\t\t\t\tvm().current_user = u\n\t\t\t\t}\n\t\t\t})\n\t\t\tusers(\n\t\t\t\tR.concat(\n\t\t\t\t\t[nullUser]\n\t\t\t\t\t,res\n\t\t\t\t)\n\t\t\t)\n\t\t\tusersIndex(\n\t\t\t\tR.indexBy(\n\t\t\t\t\t(u) => u.user_id()\n\t\t\t\t\t,users()\n\t\t\t\t)\n\t\t\t)\n\t\t\tm.redraw()\n\t\t\treturn true\n\t\t})\n\t\t.then( getChildusers )\n\t}\n\n\n\tfunction getChildusers(){\n\t\treturn data.fetchResource({\n\t\t\tprops: {\n\t\t\t\tresources: [\n\t\t\t\t\t'contractor_id'\n\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t,'user_id'\n\t\t\t\t]\n\t\t\t\t,teams: [\n\t\t\t\t\t'contractor_id'\n\t\t\t\t\t,'crew_id'\n\t\t\t\t\t,'crew_name'\n\t\t\t\t\t,'user_id'\n\t\t\t\t]\n\t\t\t}\n\t\t\t, depth: 2\n\t\t})\n\t\t.then(function(res){\n\n\t\t\tconst applicableUsers =\n\t\t\t\t[].concat(\n\t\t\t\t\tres\n\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\tres.map((r) =>\n\t\t\t\t\t\t\tr.crews\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tfectchedResources(res)\n\t\t\t\tfectchedTeams(R.unnest(res.map(R.prop('crews'))).concat(nullCrew))\n\n\t\t\t\tchildResUsers(\n\t\t\t\t\teditProjectPermissions()\n\t\t\t\t\t\t? users()\n\t\t\t\t\t\t: users().filter((u) =>\n\t\t\t\t\t\t\tapplicableUsers.find((au) =>\n\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t== au.user_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t})\n\t}\n\n\tasyncMergeAll(\n\t\t[\n\t\t\tSelectedProject\n\t\t\t,data.selectedVersion\n\t\t\t,activeLandingTab\n\t\t\t,retrieveAllocations\n\t\t\t,SelectedResource\n\t\t]\n\t)\n\t.map(function([sp , sv, ac, ra, sr]){\n\n\t\tif ( sv.schedule_version_id && data.schedules().length ){\n\t\t\tconst scheduleVersions =\n\t\t\t\tR.sortBy(\n\t\t\t\t\tR.prop(\"schedule_version_created\")\n\t\t\t\t\t,data.schedules()[\n\t\t\t\t\t\tR.findIndex(\n\t\t\t\t\t\t\tR.propEq('schedule_id', data.schedule_id())\n\t\t\t\t\t\t\t, data.schedules()\n\t\t\t\t\t\t)\n\t\t\t\t\t].schedule_versions\n\t\t\t\t)\n\n\t\t\tcurrentVersion(\n\t\t\t\tsv.schedule_version_id\n\t\t\t\t== scheduleVersions[scheduleVersions.length-1].schedule_version_id\n\t\t\t)\n\t\t} else {\n\t\t\tprojectOptions([])\n\t\t}\n\n\t\tif(\n\t\t\tsp.project_name == 'All Projects'\n\t\t\t&& sr.ParentRecognition == 'All Resources'\n\t\t){ sr = R.head(fectchedResources()) || {} }\n\n\t\tallocations([])\n\t\tsortedAllocations([])\n\n\t\treturn ac != 'Tasks' || !projectOptions().length && loading()|| ac == 'Tasks' && ra\n\t\t\t? Promise.all([\n\t\t\t\tfetchAllocations({\n\t\t\t\t\tdata\n\t\t\t\t\t, allocations\n\t\t\t\t\t, allocationsHash\n\t\t\t\t\t, SelectedProject\n\t\t\t\t\t, SelectedDiscipline\n\t\t\t\t\t, projectOptions\n\t\t\t\t\t, loading\n\t\t\t\t\t, fetchedExtras\n\t\t\t\t\t, allProjects\n\t\t\t\t\t, dbp_vm\n\t\t\t\t\t, disciplineExtraOptions\n\t\t\t\t\t, disciplineOptions\n\t\t\t\t\t, allDisciplines\n\t\t\t\t\t, discipline_box\n\t\t\t\t\t, activeLandingTab: ac\n\t\t\t\t\t, retrieveAllocations\n\t\t\t\t\t, dateframeprojects: dateframeprojects()\n\t\t\t\t\t, SelectedResource\n\t\t\t\t\t, selectedProjectExtra\n\t\t\t\t})\n\t\t\t\t,ac == 'Days' && resfetch()\n\t\t\t\t? data.fetchResource({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\t,depth: 1\n\t\t\t\t})\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tfectchedResources(res)\n\t\t\t\t\t\treturn resfetch(false)\n\t\t\t\t\t})\n\t\t\t\t: []\n\t\t\t])\n\t\t\t: Promise.resolve(null)\n\t})\n\n\tdata.currentRoute('Nothing')\n\tasyncMergeAll(\n\t\t[\n\t\t\tdata.initiateContractFetch\n\t\t]\n\t)\n\t.map(function([i]){\n\t\tconst ochange = i.ochange\n\t\t\t|| !data.routeInitialized()['updates']\n\n\t\tloading(true)\n\n\t\tconst checkFunction =\n\t\t\ti.organization_id\n\t\t\t? k => Permissions.hasWrite(data.permissions(), k)\n\t\t\t: R.F\n\n\t\teditUpdatePermissions(\n\t\t\t['updates_management'].some(checkFunction)\n\t\t)\n\t\teditTimePermissions(\n\t\t\t['timesheet_management'].some(checkFunction)\n\t\t)\n\t\teditToolPermissions(\n\t\t\t['tool_management'].some(checkFunction)\n\t\t)\n\t\teditContractPermissions(\n\t\t\t['contract_management'].some(checkFunction)\n\t\t)\n\t\teditInvoicePermissions(\n\t\t\t['invoice_management'].some(checkFunction)\n\t\t)\n\t\teditContractRecognitions(\n\t\t\t['contract_recognition'].some(checkFunction)\n\t\t)\n\t\teditAssignedTimesheetsPermissions(\n\t\t\t['assigned_timesheets'].some(checkFunction)\n\t\t)\n\t\teditProjectPermissions(\n\t\t\t['project_management'].some(checkFunction)\n\t\t)\n\t\teditOwnedInvoicesPermissions(\n\t\t\t['owned_invoices'].some(checkFunction)\n\t\t)\n\t\teditAssignedToolPermissions(\n\t\t\t['assigned_tools'].some(checkFunction)\n\t\t)\n\t\teditMaterialPermissions(\n\t\t\t['material_management'].some(checkFunction)\n\t\t)\n\n\t\tochange\n\t\t\t? viewType = ListAllocations\n\t\t\t: null\n\n\t\ttimesheet_vm().selected.timesheet = []\n\t\teotDeletions([])\n\t\tnodDeletions([])\n\t\tvarDeletions([])\n\t\tSelectedProject({})\n\t\tvm().selected.allocation = {}\n\t\tvm().revert = {}\n\t\tprojectOptions([])\n\n\t\tSelectedResource(allResources)\n\t\treturn !ochange\n\t\t\t? Promise.resolve([])\n\t\t\t: Promise.all([\n\t\t\t\t[]\n\t\t\t\t,fetchUsers()\n\t\t\t\t,fetchOrganizationsDisciplines()\n\t\t\t\t,fetchWarehouses()\n\t\t\t\t,metaDataLoading(false)\n\t\t\t])\n\t})\n\n\tasyncMergeAll(\n\t\t[\n\t\t\tloading\n\t\t\t,activeLandingTab\n\t\t]\n\t)\n\t.map(([o]) => {\n\n\t\treturn (\n\t\t\t!o && !metaDataLoading() && activeLandingTab() == 'Tools'\n\t\t\t? Promise.all([\n\t\t\t\tfetchTools()\n\t\t\t\t// ,data.currentRoute('updates')\n\t\t\t\t,metaDataLoading(true)\n\t\t\t])\n\t\t\t: Promise.resolve([])\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\tif( data.initiateContractFetch() ){\n\t\t\t\t\tdata.initiateContractFetch().schange = false\n\t\t\t\t\tdata.initiateContractFetch().ochange = false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t})\n\n\tviewType = ListAllocations\n\n\treturn { view }\n}\n\nexport default Main","\nimport css from 'bss'\nimport m from 'bacta'\nimport * as elements from '../components/elements'\nconst heading = [\n\tm('h2', 'Exports'), m('hr')\n\t,m('h4', 'Export Odin data as an Excel Workbook')\n]\n\n\nconst organization_tables = [\n\t'contractors'\n\t,'timesheets'\n\t,'tools'\n\t,'containers'\n\t,'suppliers'\n\t,'orders'\n\t,'warehouses'\n\t,'materials'\n\t,'interruptions'\n\t,'invoices'\n\t,'contracts'\n\t,'organizations_disciplines'\n\t,'crews'\n\t,'crews_discipline_rates'\n\t,'supplier_locations'\n\t,'supplier_items'\n\t,'interruptions_affected'\n\t,'invoice_items'\n\t,'contract_items'\n]\n\nconst schedule_tables = [\n\t'projects'\n\t,'project_extras'\n\t,'project_contacts'\n\t,'project_documents'\n\t,'schedules'\n\t,'flows'\n\t,'allocations'\n\t,'schedule_versions'\n\t,'disciplines'\n\t,'flows_dependent_activities'\n\t,'flows_primary_activities'\n\t,'allocations_contractors'\n\t,'allocations_contractors_crews'\n\t,'allocations_eots'\n\t,'allocations_nods'\n\t,'allocations_vars'\n]\n\n\nfunction Main({ attrs: {data} }){\n\tfunction getExportHref(sheets){\n\t\treturn data.api.buildRequest(\n\t\t\t'GET'\n\t\t\t, '/exports/workbook/'\n\t\t\t,{ sheets: sheets.join(',')\n\t\t\t, organization_id: data.organization_id()\n\t\t\t, schedule_id: data.schedule_id()\n\t\t\t, schedule_version_id: data.schedule_version_id()\n\t\t\t}\n\t\t)\n\t\t.url\n\t}\n\n\tdata.routeInitialized('exports')\n\n\tfunction view(){\n\t\treturn m('div.exports' + css`\n\t\t\tmin-height: 600px;\n\t\t`\n\t\t\t, heading\n\t\t\t,elements.list([\n\t\t\t\tm('a.btn.btn-primary', {\n\t\t\t\t\thref: getExportHref(schedule_tables)\n\t\t\t\t\t,disabled: !getExportHref(schedule_tables)\n\t\t\t\t\t// ,download: \"export.xlsx\"\n\t\t\t\t}, 'Download Schedule data')\n\t\t\t\t,m('a.btn.btn-primary', {\n\t\t\t\t\thref: getExportHref(organization_tables)\n\t\t\t\t\t,disabled: !getExportHref(organization_tables)\n\t\t\t\t\t// ,download: \"export.xlsx\"\n\t\t\t\t}, 'Download Organization data')\n\t\t\t])\n\t\t)\n\t}\n\n\treturn { view }\n}\n\n\nexport default Main\n","/* globals document, URLSearchParams, window, setTimeout */\n\nimport * as R from 'ramda'\nimport m from 'bacta'\nimport css from 'bss'\nimport { prop as stream } from '../../../stream'\nimport Autocomplete from './autocomplete'\nimport * as elements from '../components/elements'\nimport Responsive from '../components/responsive'\nimport Form from '../components/form'\n\nconst icon = {\n\tcc: m.trust(`\n\t\t\n\t`)\n\t,spinner: m.trust(`\n\t\t\n\t`)\n\t,user: m.trust(`\n\t\t\n\t`)\n\t,tick: m.trust(`\n\t\t\n\t`)\n\t,cross: m.trust(`\n\t\t\n\t`)\n\t,octagonAlert: m.trust(`\n\t\t\n\t`)\n\t,visa: m.trust(`\n\t\t\n\t`)\n\t,mastercard: m.trust(`\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t`)\n\t,amex: m.trust(`\n\t\t\n\t\t\t\n\t\t\tamex\n\t\t\tCreated with Sketch.\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t`)\n}\n\nconst spinner = (prop) =>\n\tm('.icon-spinner-rotate'\n\t\t+ css`\n\t\t\twidth: 1.5em;\n\t\t\tdisplay: grid;\n\t\t\talign-items: center;\n\t\t\topacity: ${ prop() ? 1 : 0 }\n\t\t`\n\t\t.$animate('2s linear infinite', {\n\t\t\tfrom: `\n\t\t\t\ttransform: rotate(0deg);\n\t\t\t`\n\t\t\t,to: `\n\t\t\t\ttransform: rotate(360deg);\n\t\t\t`\n\t\t})\n\t\t, icon.spinner\n\t)\n\nconst propAdapter = elements.propAdapter\n\nfunction validate(card, validations=['card', 'email', 'address']){\n\n\tconst errors = {}\n\n\tfor( let error of validations) {\n\n\t\tswitch (error) {\n\t\t\tcase 'card': {\n\t\t\t\tconst VISA = /^4[0-9]{12}(?:[0-9]{3})?$/\n\t\t\t\tconst MASTERCARD = /^5[1-5][0-9]{14}$/\n\t\t\t\tconst AMEX = /^3[47][0-9]{13}$/\n\n\t\t\t\tlet value, ok;\n\n\t\t\t\tvalue = card.card_number || ''\n\n\t\t\t\tvalue= value.replace(/\\s/g, '')\n\n\t\t\t\tok =\n\t\t\t\t\tVISA.test(value)\n\t\t\t\t\t|| MASTERCARD.test(value)\n\t\t\t\t\t|| AMEX.test(value)\n\n\n\t\t\t\tif( !ok ) {\n\t\t\t\t\terrors.card_number =\n\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\"Must be a valid VISA, Mastercard or AMEX number\"\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst yyyy = new Date().getFullYear()\n\t\t\t\tconst input = card.card_expiry_year\n\t\t\t\tconst max_expiry = 15\n\t\t\t\tconst centuryPrev = Math.floor((yyyy - 100) / 100)\n\t\t\t\tconst centuryNow = Math.floor(yyyy / 100)\n\t\t\t\tconst centuryNext = Math.floor((yyyy + 100) / 100)\n\n\t\t\t\tconst validYear =\n\t\t\t\t\t[centuryPrev, centuryNow, centuryNext]\n\t\t\t\t\t.map( x => x*100 + input*1 )\n\t\t\t\t\t.flatMap( x => Math.abs(yyyy - x) < max_expiry ? [x] : [] )\n\t\t\t\t\t[0]\n\n\t\t\t\tif( !validYear ) {\n\t\t\t\t\terrors.card_expiry_year =\n\t\t\t\t\terrors.card_expiry =\n\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\"Card Expiry must be within 15 years from now.\"\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if( !card.card_expiry_month || !card.card_expiry_year ) {\n\t\t\t\t\terrors.card_expiry_year =\n\t\t\t\t\terrors.card_expiry =\n\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\"Card Expiry month and year are required fields\"\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tlet d = new Date()\n\t\t\t\t\t\t//force NaN for null values\n\t\t\t\t\t\td.setFullYear( validYear )\n\t\t\t\t\t\td.setMonth( card.card_expiry_month -1 )\n\t\t\t\t\t\td.setDate(1)\n\n\t\t\t\t\tlet now = new Date().getTime()\n\n\t\t\t\t\tif ( isNaN(d.getTime()) ) {\n\t\t\t\t\t\terrors.card_expiry_year =\n\t\t\t\t\t\terrors.card_expiry =\n\t\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\t\"Card Expiry is not a valid date\"\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (d.getTime() <= now) {\n\t\t\t\t\t\terrors.card_expiry_year =\n\t\t\t\t\t\terrors.card_expiry =\n\t\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\t\"Card has Expired\"\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif( !errors.card_number ) {\n\t\t\t\t\tconst isAMEX = AMEX.test(value)\n\n\t\t\t\t\tconst length = isAMEX ? 4 : 3\n\t\t\t\t\tif( String(card.card_cvc).length != length ) {\n\t\t\t\t\t\terrors.card =\n\t\t\t\t\t\t\t`${isAMEX ? 'AMEX ' : ''}CVC number must be exactly ${length} digits`\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'email': {\n\t\t\t\tconst EMAIL = /.*@.*\\..*/\n\n\t\t\t\terrors.card_email =\n\t\t\t\t!(card.card_email || \"\").match(EMAIL)\n\t\t\t\t&& \"Email is invalid.\"\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase 'address': {\n\t\t\t\tif(\n\t\t\t\t\tcard.card_address\n\t\t\t\t\t&& !(\n\t\t\t\t\t\tcard.card_address_city\n\t\t\t\t\t\t&& card.card_address_country\n\t\t\t\t\t\t&& card.card_address_line1\n\t\t\t\t\t\t&& card.card_address_postcode\n\t\t\t\t\t\t&& card.card_address_state\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\terrors.card_address =\n\t\t\t\t\t\t\"Please search for and select an address.\"\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn errors\n}\n\nfunction Main({ attrs: { data } }){\n\n\tlet setState = stream()\n\tlet getState =\n\t\tstream.scan(\n\t\t\t(p, f) => Object.freeze(f(p))\n\t\t\t, Object.freeze({\n\t\t\t\tprimary_card_id: null\n\t\t\t\t, tab: new URLSearchParams(window.location.search).get('tab') || 'cards'\n\t\t\t\t, mode: new URLSearchParams(window.location.search).get('mode') || null\n\t\t\t\t, errors: { card: {} }\n\t\t\t\t, cards: null\n\t\t\t\t, charges: null\n\t\t\t\t, activities: null\n\t\t\t\t, credit: null\n\t\t\t\t, next_payment_due: null\n\t\t\t})\n\t\t\t, setState\n\t\t)\n\n\tgetState.map( () => m.redraw() )\n\n\tconst tab$ = stream.dropRepeats( getState.map( x => x.tab ) )\n\tconst mode$ = stream.dropRepeats( getState.map( x => x.mode ) )\n\n\tconst pathCache = {}\n\n\tconst pathField = (path) =>\n\t\tpath.join('.') in pathCache\n\t\t? pathCache[path.join('.')]\n\t\t: pathCache[path.join('.')] =\n\t\t\tpropAdapter({\n\t\t\t\tget: () => R.path(path, getState())\n\t\t\t\t, set: f => {\n\t\t\t\t\tconst x = R.path(path, getState())\n\t\t\t\t\treturn setState(R.assocPath(path, f(x)))\n\t\t\t\t}\n\t\t\t})\n\n\t// update query params when particular streams emit\n\t;\n\t[\n\t\t{ tab: tab$\n\t\t, mode: mode$\n\t\t}\n\t]\n\t.flatMap( Object.entries )\n\t.map(\n\t\t([k,v]) => v.map( x => {\n\t\t\tif( !x ) return null;\n\n\t\t\tlet $ = new URLSearchParams(window.location.search)\n\t\t\t$.set(k, x)\n\t\t\t$= $.toString()\n\t\t\t$= $ ? '?'+$ : ''\n\t\t\t$= `${window.location.pathname}${$}`\n\n\t\t\twindow.history.replaceState('', {}, $)\n\n\t\t\treturn null\n\t\t})\n\t)\n\n\t// fetch data when the tab changes\n\ttab$.map(\n\t\ttab => {\n\t\t\tif (tab == 'cards') {\n\t\t\t\tdata.api.cards.fetch.all()\n\t\t\t\t.then( pathField(['cards']) )\n\t\t\t} else if (tab == 'charges') {\n\t\t\t\tdata.api.charges.fetch.all()\n\t\t\t\t.then( pathField(['charges']) )\n\t\t\t} else if (tab == 'activity') {\n\t\t\t\tdata.api.payment.activities.fetch.all()\n\t\t\t\t.then( pathField(['activities']) )\n\t\t\t} else if (tab == 'plans') {\n\t\t\t\tdata.api.plans.fetch.all()\n\t\t\t\t.then( pathField(['plans']) )\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\t)\n\n\n\t// function sendCards(){\n\t// \tconst card = getState().form.card\n\t// \treturn data.api.cards.create.one(card)\n // .then(function(){\n // return fetchCards()\n // })\n // }\n\n // function updatePrimaryCard(){\n\t// \treturn data.api.cards.patch.primaryCard(getState().primary_card_id)\n\t// \t\t.then(function(){\n\t// \t\t\treturn fetchCards()\n\t// \t\t})\n // }\n\n\n // function deleteCard(card) {\n\t// \treturn data.api.cards.remove.one(card.card_id)\n // .then(function(){\n // return fetchCards()\n // })\n // }\n\n\t// function fetchCards(){\n\t// \treturn data.api.cards.fetch.all()\n\t// \t\t.then(function(res){\n\t// \t\t\tpathField(['primary_card_id'], res.primary_card_id)\n\t// \t\t\tmodel.primary_card_persisted(true)\n\t// \t\t\tmodel.cards(res)\n\t// \t\t})\n\t// \t\t.then(m.redraw)\n\t// }\n\n\tfunction CardForm({ attrs: { display } }){\n\t\tconst mode = pathField(['mode'])\n\n\t\tconst model = Form.Model({\n\t\t\tkey: 'create-card'\n\t\t\t,validate\n\t\t\t,onsubmit(){\n\t\t\t\treturn data.api.cards.create.one(model.values())\n\t\t\t\t// return new Promise( (Y, N) => {\n\t\t\t\t// \tsetTimeout(N, 2000)\n\t\t\t\t// })\n\t\t\t\t.then( () => pathField(['mode']) ('') )\n\t\t\t\t.catch( e => {\n\t\t\t\t\tmodel.setError(['api_error'],\n\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t, m('span', 'We apologise, there was a problem saving the card. ')\n\t\t\t\t\t\t\t, m('span', 'Please try again and if problems persist contact ')\n\t\t\t\t\t\t\t, m('a', { href: 'mailto:support@harth.io?subject=Card%20Submission%20Error' }, 'support@harth.io')\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\n\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\tmodel.setError(['api_error'])\n\t\t\t\t\t}, 10000)\n\t\t\t\t\tthrow e\n\t\t\t\t})\n\n\t\t\t}\n\t\t\t,initialValues: stream({\n\t\t\t\tcard_email: \"\"\n\t\t\t\t,card_id: \"\"\n\t\t\t\t,card_number: \"\"\n\t\t\t\t,card_expiry_month: \"\"\n\t\t\t\t,card_expiry_year: \"\"\n\t\t\t\t,card_cvc: \"\"\n\t\t\t\t,card_name: \"\"\n\t\t\t\t,card_address_line1: \"\"\n\t\t\t\t,card_address_line2: \"\"\n\t\t\t\t,card_address_city: null\n\t\t\t\t,card_address_unit: \"\"\n\t\t\t\t,card_address_postcode: null\n\t\t\t\t,card_address_state: null\n\t\t\t\t,card_address_country: null\n\t\t\t\t,card_token: null\n\t\t\t})\n\t\t})\n\n\t\t// card_address_sync_service\n\t\tstream.merge([\n\t\t\tstream.dropRepeats(model.values.map( x => x.addressSearchChosen ))\n\t\t\t, stream.dropRepeats(model.values.map( x => x.card_address_unit ))\n\t\t])\n\t\t.map( ([value, card_address_unit]) => {\n\n\t\t\tconst card = model.values()\n\n\t\t\tif( card.addressSearchChosen ) {\n\t\t\t\tconst card_address_line1 =\n\t\t\t\t\t[ card_address_unit ? card_address_unit + '/' : ''\n\t\t\t\t\t, value.address.houseNumber +' '\n\t\t\t\t\t, value.address.street\n\t\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('')\n\n\t\t\t\tconst card_address_line2 = ''\n\n\t\t\t\tconst card_address_city =\n\t\t\t\t\tvalue.address.city\n\n\t\t\t\tconst card_address_postcode =\n\t\t\t\t\tvalue.address.postalCode\n\n\t\t\t\tconst card_address_state =\n\t\t\t\t\tvalue.address.state\n\n\t\t\t\tconst card_address_country =\n\t\t\t\t\tvalue.address.countryName\n\n\t\t\t\tmodel.values(\n\t\t\t\t\tR.merge(card, {\n\t\t\t\t\t\tcard_address_line1\n\t\t\t\t\t\t,card_address_line2\n\t\t\t\t\t\t,card_address_city\n\t\t\t\t\t\t,card_address_postcode\n\t\t\t\t\t\t,card_address_state\n\t\t\t\t\t\t,card_address_country\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tmodel.values(\n\t\t\t\t\tR.merge(card, {\n\t\t\t\t\t\tcard_address_line1: ''\n\t\t\t\t\t\t,card_address_line2: ''\n\t\t\t\t\t\t,card_address_city: ''\n\t\t\t\t\t\t,card_address_postcode: ''\n\t\t\t\t\t\t,card_address_state: ''\n\t\t\t\t\t\t,card_address_country: ''\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn null\n\t\t})\n\n\t\tconst creditCardInput = (prop, attrs={}) =>\n\t\t\telements.textInput(\n\t\t\t\tpropAdapter({\n\t\t\t\t\tget: () => prop()\n\t\t\t\t\t,set(f){\n\t\t\t\t\t\tconst old = prop()\n\n\t\t\t\t\t\tconst naive = f()\n\n\t\t\t\t\t\tlet x = (naive.match(/(\\d|\\s)+/g)||[])\n\t\t\t\t\t\t\t.join('').replace(/\\s+/g, ' ')\n\n\t\t\t\t\t\tif( old.length > naive.length ) {\n\n\t\t\t\t\t\t\tif( old.trim() == naive ) {\n\t\t\t\t\t\t\t\tx=old.substring(0,old.length-2)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tx=naive.trim()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tx = (\n\t\t\t\t\t\t\t\tx\n\t\t\t\t\t\t\t\t.replace(/\\s/g, '')\n\t\t\t\t\t\t\t\t.match(/.{1,4}/g) || []\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(' ')\n\n\t\t\t\t\t\t\tif( x.length % 5 == 4 ) {\n\t\t\t\t\t\t\t\tx += ' '\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// CC's can have 19 digits now 🤯\n\t\t\t\t\t\t\tx = x.substring(0, '0000 0000 0000 0000 000'.length)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprop(x)\n\n\t\t\t\t\t\tmodel.nextInput(\n\t\t\t\t\t\t\t() => !model.mergedErrors().card_number\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t{ delay:\n\t\t\t\t\t\t\t\t// a shorter number might be valid but is rare\n\t\t\t\t\t\t\t\tx.length < '4111 1111 1111 1111'.length\n\t\t\t\t\t\t\t\t? 4000\n\t\t\t\t\t\t\t\t: 1500\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t,\n\t\t\t\tR.merge(\n\t\t\t\t\t{ type: 'text'\n\t\t\t\t\t, inputmode: 'numeric'\n\t\t\t\t\t, onfocusout(){\n\t\t\t\t\t\tprop( prop().trim() )\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, attrs\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst creditCardNumber = () =>\n\t\t\tm('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input',\n\t\t\t\t\tcss`\n\t\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\t\tword-spacing: 0em;\n\t\t\t\t\t\tfont-family: monospace;\n\t\t\t\t\t`\n\t\t\t\t\t.desktop(`\n\t\t\t\t\t\tword-spacing: 0.5em;\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t, '💳 Card Number'\n\t\t\t\t, creditCardInput(\n\t\t\t\t\tmodel.pathField(['card_number'])\n\t\t\t\t\t,\n\t\t\t\t\t{ placeholder:\n\t\t\t\t\t\t`4444 5555 6666 7777`\n\t\t\t\t\t, name: 'card_number'\n\t\t\t\t\t}\n\n\t\t\t\t)\n\t\t\t\t, model.nextInputProgress('card_number')\n\t\t\t)\n\n\t\tconst cvc = () =>\n\t\t\tm('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input', `\n\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\tletter-spacing: 4px;\n\t\t\t\t\tfont-family: monospace;\n\t\t\t\t`)\n\t\t\t\t, '🔢 CVC'\n\t\t\t\t, elements.textInput(\n\t\t\t\t\tpropAdapter({\n\t\t\t\t\t\tget(){\n\t\t\t\t\t\t\treturn model.pathField(['card_cvc']).get()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,set(x){\n\t\t\t\t\t\t\tmodel.pathField(['card_cvc']).set(x)\n\t\t\t\t\t\t\tmodel.nextInput( () => !model.errors().card_cvc )\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\t,\n\t\t\t\t\t{ autofocus: true\n\t\t\t\t\t, max: 4\n\t\t\t\t\t, min: 3\n\t\t\t\t\t, type: 'text'\n\t\t\t\t\t, inputmode: 'numeric'\n\t\t\t\t\t, placeholder: '123'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, name: 'card_cvc'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst cardholderName = () =>\n\t\t\tm('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input', `\n\t\t\t\t\tfont-family: monospace;\n\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t`)\n\t\t\t\t, '⚡ Cardholder Name'\n\t\t\t\t, elements.textInput(\n\t\t\t\t\tpropAdapter({\n\t\t\t\t\t\tget: model.pathField(['card_name'])\n\t\t\t\t\t\t,set(f){\n\t\t\t\t\t\t\tconst $ = model.pathField(['card_name'])\n\n\t\t\t\t\t\t\t$.set(f)\n\n\t\t\t\t\t\t\tmodel.nextInput(\n\t\t\t\t\t\t\t\t() => !model.errors().card_name\n\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t{ delay: 5000 }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t,\n\t\t\t\t\t{ autofocus: true\n\t\t\t\t\t, placeholder: 'Ms Grace Hopper'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, name: 'card_name'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t, model.nextInputProgress('card_name')\n\t\t\t)\n\n\t\tconst cardExpiry = () => {\n\t\t\tconst $month = model.pathField(['card_expiry_month'])\n\t\t\tconst $year = model.pathField(['card_expiry_year'])\n\n\t\t\tconst monthInput = elements.textInput(\n\t\t\t\tpropAdapter({\n\t\t\t\t\toncreate: () => $month.set(1)\n\t\t\t\t\t, get: $month\n\t\t\t\t\t, set(f){\n\t\t\t\t\t\tconst $ = $month\n\t\t\t\t\t\tlet original = f()\n\t\t\t\t\t\tlet x=original\n\t\t\t\t\t\tlet hadSlash = x.includes('/')\n\n\t\t\t\t\t\tx = (x.match(/\\d/g) || []).join('')\n\n\t\t\t\t\t\tx = Math.max(1, Math.min(12, Number(x)))+''\n\n\t\t\t\t\t\tif( x.length > $().length ) {\n\t\t\t\t\t\t\tif ( x.length == 1 && x != '0' && x != '1' ) {\n\t\t\t\t\t\t\t\tx='0'+x\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( original.length == 2 && hadSlash ) {\n\t\t\t\t\t\t\t\tx=$()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tx= x.substring(0,2)\n\n\t\t\t\t\t\tif(original=='') {\n\t\t\t\t\t\t\tx=''\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$.set(() => x)\n\n\t\t\t\t\t\tmodel.nextInput(\n\t\t\t\t\t\t\t() => hadSlash || x.length == 2\n\t\t\t\t\t\t\t, { delay: 500 }\n\t\t\t\t\t\t)\n\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t,\n\t\t\t\t{ inputmode: 'numeric'\n\t\t\t\t, type: 'text'\n\t\t\t\t, name: 'card_expiry_month'\n\t\t\t\t, required: true\n\t\t\t\t, placeholder: '04'\n\t\t\t\t, className: 'card-month'\n\t\t\t\t, onfocusout(e){\n\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\tconst x = e.target.value\n\t\t\t\t\t\t// in case they tabbed out, instead of slashing out\n\t\t\t\t\t\tif( x.length == 1 ) {\n\t\t\t\t\t\t\t$month.set(() => '0'+x)\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 0)\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst yearInput = elements.textInput(\n\t\t\t\tpropAdapter({\n\t\t\t\t\toncreate: () => $year.set(\n\t\t\t\t\t\tnew Date().getFullYear() + 1\n\t\t\t\t\t)\n\t\t\t\t\t, get: $year\n\t\t\t\t\t, set(f){\n\t\t\t\t\t\tconst $ = $year\n\t\t\t\t\t\tlet x = f()\n\n\t\t\t\t\t\tif( x.length > $().length ) {\n\t\t\t\t\t\t\tx= (x.match(/\\d/g) || []).join('')\n\t\t\t\t\t\t\tx= x.substring(0,2)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$year.set(() => x)\n\n\t\t\t\t\t\tmodel.nextInput(\n\t\t\t\t\t\t\t() => !model.mergedErrors().card_expiry\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t,\n\t\t\t\t{ inputmode: 'numeric'\n\t\t\t\t, type: 'text'\n\t\t\t\t, name: 'card_expiry_year'\n\t\t\t\t, required: true\n\t\t\t\t, placeholder: String(new Date().getFullYear()).slice(-2)\n\t\t\t\t, className: 'card-year'\n\t\t\t\t}\n\t\t\t)\n\n\t\t\treturn m('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input', `\n\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\tfont-family: monospace;\n\t\t\t\t`)\n\t\t\t\t, '📅 Card Expiry'\n\t\t\t\t, m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\tgrid-template-columns: 2.4em auto 2.4em;\n\t\t\t\t\t`\n\t\t\t\t\t, monthInput\n\t\t\t\t\t, m('span', '/')\n\t\t\t\t\t, yearInput\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\twindow.model = model\n\n\t\tconst addressSearch = () =>\n\t\t\tm('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input',\n\t\t\t\t\tcss`\n\t\t\t\t\t\tfont-size: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t.desktop(`\n\t\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\t`)\n\t\t\t\t)\n\t\t\t\t, m('span.cc-label'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr min-content;\n\t\t\t\t\t`\n\t\t\t\t\t, '🏠 Address'\n\t\t\t\t\t// , m(''\n\t\t\t\t\t// \t+ css`\n\t\t\t\t\t// \t\twidth: 1.5em;\n\t\t\t\t\t// \t\tdisplay: grid;\n\t\t\t\t\t// \t\talign-items: center;\n\t\t\t\t\t// \t\tcolor: green;\n\t\t\t\t\t// \t`\n\t\t\t\t\t// \t, icon.tick\n\t\t\t\t\t// )\n\t\t\t\t\t, m('.icon-spinner-hide'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\ttransition: 1s;\n\t\t\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\t\t\theight: 1.5em;\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$nest('&.icon-show', `\n\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t+ ( model.pathField(['addressSearchLoading']).get()\n\t\t\t\t\t\t\t|| model.touched().card_address\n\t\t\t\t\t\t\t? '.icon-show'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, m('.icon-spinner-rotate'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\tmodel.pathField(['addressSearchLoading']).get()\n\t\t\t\t\t\t\t\t? css\n\t\t\t\t\t\t\t\t.$animate('2s linear infinite', {\n\t\t\t\t\t\t\t\t\tfrom: `\n\t\t\t\t\t\t\t\t\t\ttransform: rotate(0deg);\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,to: `\n\t\t\t\t\t\t\t\t\t\ttransform: rotate(360deg);\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, model.pathField(['addressSearchLoading']).get()\n\t\t\t\t\t\t\t\t? icon.spinner\n\t\t\t\t\t\t\t: !model.touched().card_address\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: model.mergedErrors().card_address\n\t\t\t\t\t\t\t\t? [document.activeElement]\n\t\t\t\t\t\t\t\t\t.flatMap( x => x && x.parentElement ? [x.parentElement] : [] )\n\t\t\t\t\t\t\t\t\t.find( x => x.classList.contains('manuel-complete') )\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: icon.cross\n\t\t\t\t\t\t\t\t: icon.tick\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, m(Autocomplete.Main, {\n\t\t\t\t\tfield: 'title'\n\t\t\t\t\t,throttleSearch: 500\n\t\t\t\t\t,inputClassName: 'form-control'\n\t\t\t\t\t,initialValue: model.pathField(['card_address']).get()\n\t\t\t\t\t,attrs: {\n\t\t\t\t\t\tplaceholder: '14 Lonsdale St, Melbourne, Victoria'\n\t\t\t\t\t\t,name: 'card_address'\n\t\t\t\t\t\t,required: true\n\t\t\t\t\t\t,value: model.pathField(['card_address']).get()\n\t\t\t\t\t}\n\t\t\t\t\t, oninput: x =>\n\t\t\t\t\t\tmodel.pathField(['card_address']) (x)\n\t\t\t\t\t,loading: model.pathField(['addressSearchLoading'])\n\t\t\t\t\t,manuelConfig: {\n\t\t\t\t\t\tfilter: () => true\n\t\t\t\t\t}\n\t\t\t\t\t,search(value){\n\t\t\t\t\t\tmodel.values(\n\t\t\t\t\t\t\tR.merge(model.values(), {\n\t\t\t\t\t\t\t\taddressSearchChosen: false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif(value){\n\t\t\t\t\t\t\treturn data.api.suburbs.search(value)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,onselect(value){\n\t\t\t\t\t\tmodel.values(\n\t\t\t\t\t\t\tR.merge(model.values(), {\n\t\t\t\t\t\t\t\taddressSearchChosen: value\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\tmodel.nextInput()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t, model.nextInputProgress('card_address')\n\t\t\t)\n\n\t\tconst addressUnit = () => {\n\t\t\tconst $ = model.pathField(['card_address_unit'])\n\t\t\tconst delay = 5000\n\n\t\t\treturn m('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input', `\n\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t`)\n\t\t\t\t, '🏢 Unit'\n\t\t\t\t, elements.textInput(\n\t\t\t\t\tpropAdapter({\n\t\t\t\t\t\tget: $\n\t\t\t\t\t\t,set(f){\n\t\t\t\t\t\t\tconst x = f()\n\n\t\t\t\t\t\t\tmodel.nextInput( () =>\n\t\t\t\t\t\t\t\t!model.mergedErrors().card_address_unit\n\t\t\t\t\t\t\t\t, { delay }\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t$.set( () => x )\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t,\n\t\t\t\t\t{ autofocus: true\n\t\t\t\t\t, name: 'card_address_unit'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t,\n\t\t\t\tmodel.nextInputProgress('card_address_unit')\n\t\t\t)\n\t\t}\n\n\t\tconst address = () =>\n\t\t\tm(''\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 5em 1fr;\n\t\t\t\t\tgap: 2em;\n\t\t\t\t`\n\t\t\t\t, addressUnit()\n\t\t\t\t, addressSearch()\n\t\t\t)\n\n\t\tconst email = () =>\n\t\t\tm('label.cc-label'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t.$nest('input', `\n\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t`)\n\t\t\t\t, '📧 Cardholder Email'\n\t\t\t\t, elements.textInput(\n\t\t\t\t\tmodel.pathField(['card_email'])\n\t\t\t\t\t,\n\t\t\t\t\t{ autofocus: true\n\t\t\t\t\t, placeholder: 'cardholder@example.com'\n\t\t\t\t\t, name: 'card_email'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, type: 'email'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\n\t\tconst ctas = () =>\n\t\t\tm('.ctas'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`\n\t\t\t\t.desktop(`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: repeat(2, 10em);\n\t\t\t\t\tgap: 2em;\n\t\t\t\t\tjustify-content: end;\n\t\t\t\t\tfont-size: 0.8em;\n\t\t\t\t\tpadding: 0em;\n\t\t\t\t`)\n\t\t\t\t, m('a'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t\tborder: solid 1.5px currentcolor;\n\t\t\t\t\t\tpadding: 0.5em 0em;\n\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\talign-items: center;\n\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: auto auto;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tjustify-content: space-around;\n\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\tfont-size: 1.4em;\n\t\t\t\t\t`\n\t\t\t\t\t.$media('(any-pointer)',\n\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\ttransform: scale(0.99);\n\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t`)\n\t\t\t\t\t)\n\n\t\t\t\t\t,\n\t\t\t\t\t{ href: '/payments?tab=cards'\n\t\t\t\t\t, onclick: e =>{\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tmode('create-card')\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t, 'Cancel'\n\t\t\t\t\t, m('span', '❌')\n\t\t\t\t)\n\t\t\t\t, m('button'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\ttext-align: center;\n\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\tbackground-color: hsl(245 60% 37% / 1);\n\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\tfont-size: var(--larger-font);\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\ttransition: 0.5s;\n\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: auto auto;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tjustify-content: space-around;\n\t\t\t\t\t\tpadding: 0.5em;\n\t\t\t\t\t\tfont-size: 1.4em;\n\t\t\t\t\t`\n\t\t\t\t\t.$hover(`\n\t\t\t\t\t\tbackground-color: hsl(245 60% 17% / 1);\n\t\t\t\t\t`)\n\t\t\t\t\t,\n\t\t\t\t\t{\n\t\t\t\t\t\tdisabled: model.isSaveDisabled()\n\t\t\t\t\t\t,type: 'submit'\n\t\t\t\t\t}\n\t\t\t\t\t, 'Save'\n\t\t\t\t\t, model.saving() ? spinner( () => true ) : m('span', '💾')\n\t\t\t\t)\n\t\t\t)\n\n\n\t\tconst view = () =>\n\t\t\tm(Form, model, () =>\n\t\t\t\tm('.form'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t--larger-font: 1.2em;\n\t\t\t\t\t`\n\t\t\t\t\t.$nest('.manuel-complete ul', `\n\t\t\t\t\t\tcolor: black;\n\t\t\t\t\t`)\n\t\t\t\t\t.$nest('.manuel-complete .highlight', `\n\t\t\t\t\t\tbackground-color: #f8f8f8;\n\t\t\t\t\t`)\n\t\t\t\t\t.$nest('.manuel-complete mark', `\n\t\t\t\t\t\tbackground-color: #cbeaff;\n\t\t\t\t\t`)\n\t\t\t\t\t.$nest('.cc-label', `\n\t\t\t\t\t\tcolor: darkgray;\n\t\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\t\tfont-family: monospace;\n\t\t\t\t\t\tletter-spacing: 1px;\n\t\t\t\t\t`)\n\t\t\t\t\t.desktop(\n\t\t\t\t\t\t// note this is a substitute for grid gap\n\t\t\t\t\t\t// but it allows us to control height of invisible items\n\t\t\t\t\t\tcss.$nest('>*', `\n\t\t\t\t\t\t\tmargin-top: 1em;\n\t\t\t\t\t\t`)\n\t\t\t\t\t)\n\t\t\t\t\t// was gonna set a margin\n\t\t\t\t\t// but the default heights seem to be margin enough\n\t\t\t\t\t.$nest('.cc-label input', `\n\t\t\t\t\t\tmargin-top: 0em;\n\t\t\t\t\t`)\n\t\t\t\t\t.$nest('input', `\n\t\t\t\t\t\tfont-family: monospace;\n\t\t\t\t\t`)\n\t\t\t\t\t,\n\t\t\t\t\t{ oncreate: ({ dom }) =>\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tArray.from(dom.querySelectorAll('input')).forEach(\n\t\t\t\t\t\t\t\tel => el.setAttribute('spellcheck', 'false')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}, 500)\n\t\t\t\t\t}\n\t\t\t\t\t, cardholderName()\n\t\t\t\t\t, model.errorInfo('card_name')\n\t\t\t\t\t, display.desktop( () =>\n\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 19em 4em 11em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, creditCardNumber()\n\t\t\t\t\t\t\t\t, cvc()\n\t\t\t\t\t\t\t\t, cardExpiry()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, display.lt_desktop( () =>\n\t\t\t\t\t\tcreditCardNumber()\n\t\t\t\t\t)\n\t\t\t\t\t, display.lt_desktop( () =>\n\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-columns: 6em 4em;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\tgap: 6em;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, cardExpiry()\n\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t+ css\n\t\t\t\t\t\t\t\t.$nest('*', `\n\t\t\t\t\t\t\t\t\ttext-align: end;\n\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t, cvc()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,model.errorInfo(\n\t\t\t\t\t\t[ 'card_number'\n\t\t\t\t\t\t, 'card_cvc'\n\t\t\t\t\t\t, 'card_expiry'\n\t\t\t\t\t\t, 'card_expiry_year'\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t\t,address()\n\t\t\t\t\t,model.errorInfo('card_address')\n\t\t\t\t\t,email()\n\t\t\t\t\t,model.errorInfo('card_email')\n\t\t\t\t\t,model.errorInfo('api_error', { checkTouched: false })\n\t\t\t\t\t// , errorInfo('card_expiry')\n\t\t\t\t\t, ctas(display)\n\n\t\t\t\t)\n\t\t\t)\n\n\n\t\treturn { view }\n\t}\n\n\tfunction CardList({ attrs: { display }}){\n\t\tconst cards = pathField(['cards'])\n\t\tconst mode = pathField(['mode'])\n\n\t\tconst view = () =>\n\t\t\tm('.card-list'\n\t\t\t\t+ css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`\n\t\t\t\t, mode() != 'create-card'\n\t\t\t\t&& m('.top'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tjustify-content: end;\n\t\t\t\t\t`\n\t\t\t\t\t, m('a'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t,\n\t\t\t\t\t\t{ href: '/payments?tab=cards&mode=create-card'\n\t\t\t\t\t\t, onclick: e =>{\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\tmode('create-card')\n\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\twidth: 1.5em;\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, icon.cc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, 'Add New Card'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, mode() == 'create-card'\n\t\t\t\t\t? m(''\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tpadding: 1em;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t.desktop(`\n\t\t\t\t\t\t\tgrid-template-columns: 43em;\n\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t`)\n\t\t\t\t\t\t, m(CardForm, { display })\n\t\t\t\t\t)\n\t\t\t\t: !cards()\n\t\t\t\t\t? m('p', 'You do not have any cards associated with your account.')\n\t\t\t\t\t: cards().map( x =>\n\t\t\t\t\t\tm('pre', JSON.stringify(x))\n\t\t\t\t\t)\n\t\t\t)\n\n\t\treturn { view }\n\t}\n\n\treturn {\n\t\tview(){\n\t\t\treturn m(Responsive, { useDisplayNone: true }, display =>\n\t\t\t\tm('.main'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t, display.tablet( () =>\n\t\t\t\t\t\tm('.top'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\tgrid-template-columns: max-content max-content;\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, m('h4'\n\t\t\t\t\t\t\t\t, m('p', 'Payments')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, m('.money-display'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, m('p', 'Next Bill Due in 3 days')\n\t\t\t\t\t\t\t\t, m('p', 'Tuesday 26th of March')\n\t\t\t\t\t\t\t\t, m('p', '$50.00')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, elements.tabset(\n\t\t\t\t\t\t['cards', 'charges', 'plans', 'activity']\n\t\t\t\t\t\t, pathField(['tab'])\n\t\t\t\t\t)\n\t\t\t\t\t, pathField(['tab']).get() == 'cards'\n\t\t\t\t\t\t? m(CardList, { display })\n\t\t\t\t\t\t: null\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n\nexport default Main","/* global window */\n/* eslint-disable no-unused-vars */ // temporary\nimport h, * as H from '../../../how/index'\nimport { Stream as stream } from 'bacta'\nimport * as E from '../components/elements'\nimport * as D from '../components/detailspane2'\nimport Form from '../components/form'\nimport DropdownButton from '../components/buttonDropdown'\nimport NotificationBar from '../components/notification'\nimport Autocomplete from '../modules/autocomplete'\n\nimport permissions from '../../../api/permissions.json'\n\nfunction ConfirmDeleteOrg({\n\tattrs: { organization, $, Route, data, form }\n }) {\n\n\tlet confirmed = false\n\n\tconst view = () =>\n\t\tconfirmed\n\t\t? E.actionEvent('Confirm Delete', async e => {\n\t\t\te.preventDefault()\n\t\t\tconst org = organization()\n\n\t\t\t// We need to change org context before we delete\n\t\t\t// So queries don't become invalid in a no-org context\n\t\t\tconst diffOrg =\n\t\t\t\t$.organizations()\n\t\t\t\t\t.find( x => x.organization_id != org.organization_id )\n\n\t\t\t// To prevent duplicates in the stack we go back to (presumably) the list\n\t\t\t// or it may be editing a different org\n\n\t\t\tawait Route.back()\n\n\t\t\t// We can be done here, but we need to check if we're focused on this org\n\t\t\t// if so, we need to replace with a new org\n\t\t\tif( Route.getValue().organization_id == org.organization_id ) {\n\n\t\t\t\t// We could use replace value but that could create an invalid (group|role,organization_id) pairing\n\t\t\t\t// So we go to List. This means if you were editing another org before this one and you went\n\t\t\t\t// straight to editing a different org without going to list\n\t\t\t\t// we are effectively rewriting history, but thats pretty good users are unlikely to notice\n\t\t\t\t// the alternative would be branching on route which would be brittle\n\t\t\t\tRoute.replace(\n\t\t\t\t\tRoute.List({ organization_id: diffOrg.organization_id })\n\t\t\t\t)\n\t\t\t}\n\n\t\t\t// At this point we should have removed the org from the recent history stack\n\t\t\t// It should be fairly safe to delete it now\n\n\t\t\tawait data.api.organizations.delete(org)\n\n\t\t\t// We now tell the app to refetch all the auth data\n\t\t\t// because the org data has changed\n\t\t\t// this ensures the top nav syncs up with the latest state\n\t\t\t// and ensures the rest of the app is up to date\n\t\t\tawait data.auth_refresh()\n\n\t\t\tconfirmed = false\n\t\t}, () => {}, 'danger', () => false, NotificationBar.alertError)\n\t\t: E.actionEvent('Delete', e => {\n\t\t\te.preventDefault()\n\t\t\tconfirmed = true\n\t\t}, () => form.$.unsaved() || $.organizations().length < 2, 'danger')\n\n\treturn {\n\t\tview\n\t}\n}\n\nfunction ConfirmDeleteGroup({\n\tattrs: { group, data, form, $ }\n }) {\n\n\tlet confirmed = false\n\n\tconst view = () =>\n\t\tconfirmed\n\t\t? E.actionEvent('Confirm Delete', async e => {\n\t\t\te.preventDefault()\n\t\t\tconst g = group()\n\n\t\t\twindow.history.back()\n\n\n\t\t\tawait data.api.groups2.delete(g)\n\n\t\t\t// We now tell the app to refetch all the auth data\n\t\t\t// because the org data has changed\n\t\t\t// this ensures the top nav syncs up with the latest state\n\t\t\t// and ensures the rest of the app is up to date\n\t\t\tawait data.auth_refresh()\n\n\t\t\t$.groups = $.groups().filter( x => x.group_id != g.group_id )\n\n\t\t\tconfirmed = false\n\t\t}, () => {}, 'danger')\n\t\t: E.actionEvent('Delete', e => {\n\t\t\te.preventDefault()\n\t\t\tconfirmed = true\n\t\t}, () => form.$.unsaved(), 'danger')\n\n\treturn {\n\t\tview\n\t}\n}\n\nfunction ConfirmDeleteRole({\n\tattrs: { role, data, form, $ }\n}) {\n\n\tlet confirmed = false\n\n\tconst view = () =>\n\t\tconfirmed\n\t\t? E.actionEvent('Confirm Delete', async e => {\n\t\t\te.preventDefault()\n\n\t\t\tconst r = role()\n\n\t\t\twindow.history.back()\n\n\t\t\tawait data.api.roles.delete(r)\n\n\t\t\t// We now tell the app to refetch all the auth data\n\t\t\t// because the org data has changed\n\t\t\t// this ensures the top nav syncs up with the latest state\n\t\t\t// and ensures the rest of the app is up to date\n\t\t\tawait data.auth_refresh()\n\n\t\t\t$.roles = $.roles().filter( x => x.role_id != r.role_id )\n\n\t\t\tconfirmed = false\n\t\t}, () => {}, 'danger')\n\t\t: E.actionEvent('Delete', e => {\n\t\t\te.preventDefault()\n\t\t\tconfirmed = true\n\t\t}, () => form.$.unsaved(), 'danger')\n\n\treturn {\n\t\tview\n\t}\n}\n\nconst saveDone = ({ form, row }) =>\n\th('.actions'\n\t\t+ H.css`\n\t\t\tdisplay: grid;\n\t\t\tgap: 1em;\n\t\t\tgrid-auto-flow: column;\n\t\t`\n\t\t,h('button.btn.btn-primary',\n\t\t\t{\n\t\t\t\ttype: 'submit'\n\t\t\t\t,disabled: form.isSaveDisabled()\n\t\t\t}\n\t\t\t,'Save'\n\t\t)\n\t\t,h('button.btn.btn-default',\n\t\t\t{\n\t\t\t\ttype: 'button'\n\t\t\t\t,onclick: () => window.history.back()\n\t\t\t}\n\t\t\t,row.unsaved() ? 'Cancel' : 'Done'\n\t\t)\n\t)\n\nfunction EditOrg({ attrs: { organization, data, Route, $ } }){\n\tconst view = () => !organization() ? null : h(Form, {\n\t\tinitialValues: organization.$stream()\n\t\t,async onsubmit({ $ }){\n\n\t\t\ttry {\n\t\t\t\tif( $.unsaved() ) {\n\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\tawait data.api.organizations.create($())\n\t\t\t\t\t// remove unsaved property from form\n\t\t\t\t\t// $.unsaved.$remove()\n\t\t\t\t} else {\n\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\tawait data.api.organizations.update($())\n\t\t\t\t}\n\n\t\t\t\t// remove unsaved property\n\t\t\t\tdelete $.unsaved\n\n\t\t\t\t// Step 2: Orgs is complicated in Odin so we manually\n\t\t\t\t// sync the org. This can go away when we replace\n\t\t\t\t// the org model and completely delete state-router\n\t\t\t\tawait data.auth_refresh()\n\n\t\t\t\tlet answer =\n\t\t\t\t\tawait data.api.organizations.get({ organization_id: $().organization_id})\n\t\t\t\t\t.then( JSON.stringify ).then( JSON.parse)\n\n\t\t\t\tObject.assign(organization, answer)\n\n\t\t\t\t// Step 3: Tell this route about the new values\n\t\t\t\t// organization($())\n\n\t\t\t} catch(e) {\n\t\t\t\tNotificationBar.Notifications.alertError(e.message)\n\t\t\t} finally {\n\t\t\t\t// disable reset form\n\t\t\t\treturn { values: organization() }\n\t\t\t}\n\n\t\t}\n\t}, form =>\n\t\th('.edit-org'\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t\tpadding: 1em 0em;\n\n\t\t\t\t& label {\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 0.3em;\n\t\t\t\t}\n\t\t\t\t& input[type=text] {\n\t\t\t\t\tpadding: 0em 0.5em;\n\t\t\t\t}\n\n\t\t\t\t& .alert {\n\t\t\t\t\tmargin-bottom: 0px;\n\t\t\t\t}\n\t\t\t`\n\t\t\t, { key: Route.getValue().organization_id }\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Organization Name')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organization_name'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, ...form.bind({ value: organization.organization_name })\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Incorporation No.')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organization_incorporation_no'\n\t\t\t\t\t, ...form.bind({\n\t\t\t\t\t\tvalue: organization.organization_incorporation_no\n\t\t\t\t\t})\n\t\t\t\t\t, required: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Phone')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organizations_details_phone'\n\t\t\t\t\t, ...form.bind({\n\t\t\t\t\t\tvalue: organization.organizations_details_phone\n\t\t\t\t\t})\n\t\t\t\t\t, required: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Address')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organizations_details_address'\n\t\t\t\t\t, ...form.bind({\n\t\t\t\t\t\tvalue: organization.organizations_details_address\n\t\t\t\t\t})\n\n\t\t\t\t\t, required: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'State / Province')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organizations_details_state'\n\t\t\t\t\t, ...form.bind({\n\t\t\t\t\t\tvalue: organization.organizations_details_state\n\t\t\t\t\t})\n\t\t\t\t\t, required: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Zip / Post Code')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'organizations_details_postcode'\n\t\t\t\t\t, ...form.bind({\n\t\t\t\t\t\tvalue: organization.organizations_details_postcode\n\t\t\t\t\t})\n\t\t\t\t\t, required: false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\n\t\t\t, saveDone({ form, row: organization })\n\t\t\t, form.$.unsaved() || E.alert('danger', 'Deleting an organization cannot be undone. This will eliminate all associated data')\n\t\t\t, form.$.unsaved()\n\t\t\t|| h(ConfirmDeleteOrg, { organization, form, data, Route, $ })\n\t\t)\n\t)\n\n\treturn { view }\n}\n\nfunction GroupUsers(){\n\tconst view = ({ attrs: { form, $ }}) => {\n\t\tconst list =\n\t\t\t$.users.$map( (xs, ys) => {\n\t\t\t\tconst ids = new Set( ys.map( x => x.user_id ))\n\t\t\t\tconst out = xs.filter( x => !ids.has(x.user_id) )\n\t\t\t\treturn out.map( x => x.user_username)\n\t\t\t}, form.$.users.$stream())\n\t\t\t.$stream()\n\t\t\t.default([])\n\n\n\t\treturn h(''\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t, h('label'\n\t\t\t\t+ H.css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 0.5em;\n\t\t\t\t`\n\t\t\t\t, 'Add Users'\n\t\t\t\t, h(Autocomplete.Main, {\n\t\t\t\t\tlist\n\t\t\t\t\t,disabled: list().length\n\t\t\t\t\t,title: list().length\n\t\t\t\t\t\t? 'Search for users to add to the group'\n\t\t\t\t\t\t: 'All users have been selected'\n\t\t\t\t\t,onselect(user_username, model){\n\t\t\t\t\t\tconst { user_id, user_name, user_email } =\n\t\t\t\t\t\t\t$.users().find( x => x.user_username == user_username )\n\n\t\t\t\t\t\tform.$.users(\n\t\t\t\t\t\t\txs => xs.concat({\n\t\t\t\t\t\t\t\tuser_id, user_username, user_name, user_email\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\twindow.setTimeout( () => {\n\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\tmodel.open(false)\n\t\t\t\t\t\t}, 0)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t, form.$.users.length() > 0 && h(''\n\t\t\t\t, h('p', 'Group Users:')\n\t\t\t\t, E.strikeList(\n\t\t\t\t\tform.$.users().map(\n\t\t\t\t\t\tx => ({\n\t\t\t\t\t\t\tlabel: x.user_name\n\t\t\t\t\t\t\t, action(){\n\t\t\t\t\t\t\t\tform.$.users(\n\t\t\t\t\t\t\t\t\txs => xs.filter(\n\t\t\t\t\t\t\t\t\t\ty => y.user_id != x.user_id\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\treturn { view }\n}\n\nfunction GroupInvites(){\n\tlet inviteNode;\n\n\tconst view = ({ attrs: { form, $ } }) =>\n\t\th(''\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t, h('form'\n\t\t\t\t+ H.css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t`\n\t\t\t\t, {\n\t\t\t\t\tonsubmit(e){\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tform.$.invites( xs => xs.concat( $.invite_email () ))\n\t\t\t\t\t\t$.invite_email = ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, h('label'\n\t\t\t\t\t+ H.css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t`\n\t\t\t\t\t, 'Invite Email'\n\t\t\t\t\t, E.textInput(\n\t\t\t\t\t\t$.invite_email\n\t\t\t\t\t\t,\n\t\t\t\t\t\t{ type: 'email'\n\t\t\t\t\t\t, oncreate: (vnode) => inviteNode = vnode\n\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, h('button.btn.btn-default', 'Invite')\n\t\t\t)\n\t\t\t, form.$.invites.length() > 0\n\t\t\t\t&& h(''\n\t\t\t\t\t, h('p', 'Group Invites:')\n\t\t\t\t\t, E.strikeList(\n\t\t\t\t\t\tform.$.invites().map(\n\t\t\t\t\t\t\tx => ({\n\t\t\t\t\t\t\t\tlabel: x\n\t\t\t\t\t\t\t\t, action(){\n\t\t\t\t\t\t\t\t\tform.$.invites(\n\t\t\t\t\t\t\t\t\t\txs => xs.filter(\n\t\t\t\t\t\t\t\t\t\t\ty => y != x\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t)\n\n\treturn { view }\n}\n\nfunction GroupRoles(){\n\tconst view = ({ attrs: { form, $ } }) => {\n\n\t\tconst list =\n\t\t\t$.roles.$map( (xs, ys) => {\n\t\t\t\tconst ids = new Set( ys.map( x => x.role_id ))\n\t\t\t\tconst out = xs.filter( x => !ids.has(x.role_id) )\n\t\t\t\treturn out.map( x => x.role_name)\n\t\t\t}, form.$.roles.$stream())\n\t\t\t.$stream()\n\t\t\t.default([])\n\n\t\treturn h(''\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t`\n\t\t\t, h('label'\n\t\t\t\t+ H.css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 0.5em;\n\t\t\t\t`\n\t\t\t\t, 'Add Roles'\n\t\t\t\t, h(Autocomplete.Main, {\n\t\t\t\t\tlist\n\t\t\t\t\t,disabled: list().length\n\t\t\t\t\t,title: list().length\n\t\t\t\t\t\t? 'Search for roles to add to the group'\n\t\t\t\t\t\t: 'All roles have been selected'\n\t\t\t\t\t,onselect(role_name, model){\n\t\t\t\t\t\tconst { role_id } =\n\t\t\t\t\t\t\t$.roles().find( x => x.role_name == role_name )\n\n\t\t\t\t\t\tform.$.roles(\n\t\t\t\t\t\t\txs => xs.concat({ role_id, role_name })\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\twindow.setTimeout( () => {\n\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\tmodel.open(false)\n\t\t\t\t\t\t}, 0)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t, form.$.roles.length() > 0 && h(''\n\t\t\t\t, h('p', 'Group Roles:')\n\t\t\t\t, E.strikeList(\n\t\t\t\t\tform.$.roles().map(\n\t\t\t\t\t\tx => ({\n\t\t\t\t\t\t\tlabel: x.role_name\n\t\t\t\t\t\t\t, action(){\n\t\t\t\t\t\t\t\tform.$.roles(\n\t\t\t\t\t\t\t\t\txs => xs.filter(\n\t\t\t\t\t\t\t\t\t\ty => y.role_id != x.role_id\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction EditGroup({\n\tattrs: { group, data, Route, $ }\n}){\n\n\tconst initialValues =\n\t\tgroup.$stream().filter(Boolean).map( group => {\n\t\t\treturn {\n\t\t\t\t...group\n\t\t\t\t, invite_email: ''\n\t\t\t\t, _invites: JSON.stringify(group.invites)\n\t\t\t\t, _users: JSON.stringify(group.users.map( x => x.user_id ))\n\t\t\t\t, _roles: JSON.stringify(group.roles.map( x => x.role_id ))\n\t\t\t}\n\t\t})\n\n\tconst view = () => {\n\t\treturn !group() ? null : h(Form, {\n\t\t\tinitialValues\n\t\t\t,async onsubmit({ $ }){\n\n\t\t\t\ttry {\n\t\t\t\t\tif( $.unsaved() ) {\n\t\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\t\tawait data.api.groups2.create($())\n\t\t\t\t\t\t// remove unsaved property from form\n\t\t\t\t\t\t// $.unsaved.$remove()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\t\tawait data.api.groups2.update($())\n\t\t\t\t\t}\n\n\t\t\t\t\t// remove unsaved property\n\t\t\t\t\tdelete $.unsaved\n\n\t\t\t\t\t// Step 2: Tell this route about the new values\n\t\t\t\t\tgroup($())\n\n\t\t\t\t\t// Step 3: Any time orgs/groups/roles change\n\t\t\t\t\t// we need to refetch auth permissions\n\t\t\t\t\t// or the UI will think we have access that we don't have\n\t\t\t\t\tawait data.auth_refresh()\n\n\t\t\t\t} catch(e) {\n\t\t\t\t\tNotificationBar.Notifications.alertError(e.message)\n\t\t\t\t} finally {\n\t\t\t\t\t// disable reset form\n\t\t\t\t\treturn { values: group() }\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, form =>\n\t\t\th('.edit-group'\n\t\t\t\t+ H.css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 1em;\n\t\t\t\t\tpadding: 1em 0em;\n\n\t\t\t\t\t& label {\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 0.3em;\n\t\t\t\t\t}\n\n\t\t\t\t\t& input[type=text] {\n\t\t\t\t\t\tpadding: 0em 0.5em;\n\t\t\t\t\t}\n\n\t\t\t\t\t& .alert {\n\t\t\t\t\t\tmargin-bottom: 0px;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t, { key: Route.getValue().group_id || 'no-group' }\n\t\t\t\t, () => {\n\t\t\t\t\t// By default the form tracks changes oninput\n\t\t\t\t\t// But any interaction that uses custom input handling\n\t\t\t\t\t// like an onselect in an autocomplete, or a button\n\t\t\t\t\t// needs to be manually registered\n\t\t\t\t\t//\n\t\t\t\t\t// In this route we just create a JSON serialized\n\t\t\t\t\t// list of primary keys when the actual form is modified\n\t\t\t\t\t//\n\t\t\t\t\t// This is then diffed against the initial values\n\t\t\t\t\t// which propagates to the `changes` and `changed`\n\t\t\t\t\t// streams.\n\t\t\t\t\t//\n\t\t\t\t\t// One day it would be great to have Z automatically\n\t\t\t\t\t// call form.inputHandler when any query write happens.\n\t\t\t\t\t// Definitely possible, but for now this is pretty robust.\n\t\t\t\t\tform.$.invites.$stream().map( xs => {\n\t\t\t\t\t\tform.inputHandler({\n\t\t\t\t\t\t\tpath: '_invites'\n\t\t\t\t\t\t\t,value: JSON.stringify(xs)\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn null\n\t\t\t\t\t})\n\n\t\t\t\t\tform.$.users.$stream().map( xs => {\n\t\t\t\t\t\tform.inputHandler({\n\t\t\t\t\t\t\tpath: '_users'\n\t\t\t\t\t\t\t,value: JSON.stringify(xs.map( x => x.user_id ))\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn null\n\t\t\t\t\t})\n\n\t\t\t\t\tform.$.roles.$stream().map( xs => {\n\t\t\t\t\t\tform.inputHandler({\n\t\t\t\t\t\t\tpath: '_roles'\n\t\t\t\t\t\t\t,value: JSON.stringify(xs.map( x => x.role_id ))\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn null\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t, h('label'\n\t\t\t\t\t, h('span', 'Group Name')\n\t\t\t\t\t, h('input.form-control'\n\t\t\t\t\t\t,\n\t\t\t\t\t\t{ name: 'group_name'\n\t\t\t\t\t\t, ...form.bind({ value: group.group_name})\n\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t, disabled: group.group_name() == 'Worker'\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, E.alert('info','Assign users, roles and data to groups to control how data is accessed.')\n\t\t\t\t, h(GroupRoles, { form, $ })\n\t\t\t\t, h(GroupUsers, { form, $ })\n\t\t\t\t, h(GroupInvites, { form, $ })\n\t\t\t\t, saveDone({ form, row: group })\n\t\t\t\t, form.$.unsaved() || E.alert('danger', 'Deleting a group cannot be undone. Make sure all users in this group belong to other groups or they will be removed from the organization.')\n\t\t\t\t, form.$.unsaved()\n\t\t\t\t|| h(ConfirmDeleteGroup, { group, data, form, $ })\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction PermissionsList({ attrs: { $, form }}){\n\tconst list =\n\t\t$.permissions.$map( (xs, ys) => {\n\t\t\tconst ids = new Set( ys.map( x => x.permission_id ))\n\t\t\tconst out = xs.filter( x => !ids.has(x.permission_id) )\n\t\t\treturn out.map( x => x.permission_name_pretty)\n\t\t}, form.$.permissions.$stream())\n\t\t.$stream()\n\t\t.default([])\n\n\tlet selectPermission = () => {}\n\n\tconst view = () => [\n\t\th('label',\n\t\t\t'Search for Permissions',\n\t\t\th(Autocomplete.Main, {\n\t\t\t\tlist\n\t\t\t\t,onselect(y, model){\n\t\t\t\t\tform.$.permission = y\n\n\t\t\t\t\twindow.setTimeout( () => {\n\t\t\t\t\t\tmodel.open(false)\n\t\t\t\t\t})\n\n\t\t\t\t\tconst permission =\n\t\t\t\t\t\t$.permissions().find(\n\t\t\t\t\t\t\tx => x.permission_name_pretty == y\n\t\t\t\t\t\t)\n\n\t\t\t\t\tselectPermission = ({\n\t\t\t\t\t\trole_permissions_write\n\t\t\t\t\t}) => {\n\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\tmodel.open(false)\n\t\t\t\t\t\tform.$.permission = null\n\t\t\t\t\t\tform.$.permissions(\n\t\t\t\t\t\t\txs => xs.concat({\n\t\t\t\t\t\t\t\t...permission\n\t\t\t\t\t\t\t\t,role_permissions_write\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t)\n\t\t, h('.actions'\n\t\t\t+ (form.$.permission() ? '' : '.inactive')\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-auto-flow: column;\n\t\t\t\tgap: 1em;\n\t\t\t\topacity; 1;\n\t\t\t\tmax-height: 10em;\n\t\t\t\ttransition: opacity 2s 0.5s, max-height 1s 0.5s;\n\n\n\t\t\t\t& .fa-plus {\n\t\t\t\t\tcolor: #555;\n\t\t\t\t\tmargin-right: 0.5em;\n\t\t\t\t}\n\n\t\t\t\t&.inactive {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tmax-height: 0;\n\t\t\t\t\toverflow-y: hidden;\n\t\t\t\t\tmargin: 0em inherit;\n\t\t\t\t\tpadding: 0em inherit;\n\t\t\t\t\ttransition: opacity 0.1s, max-height 1s 0.5s;\n\t\t\t\t}\n\t\t\t`\n\t\t\t, h('button.btn.btn-default',\n\t\t\t\t{\n\t\t\t\t\ttype: 'button'\n\t\t\t\t\t,onclick: () => selectPermission({\n\t\t\t\t\t\trole_permissions_write: false\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\th('i.fa.fa-plus'), 'Read'\n\t\t\t)\n\t\t\t, h('button.btn.btn-default',\n\t\t\t\t{\n\t\t\t\t\ttype: 'button'\n\t\t\t\t\t,onclick: () => selectPermission({\n\t\t\t\t\t\trole_permissions_write: true\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\th('i.fa.fa-plus'), 'Write'\n\t\t\t)\n\t\t)\n\t]\n\n\treturn { view }\n}\n\nfunction EditRole({\n\tattrs: { organization, role, data, Route, $ }\n}){\n\tconst initialValues =\n\t\trole.$stream().filter(Boolean).map( role => {\n\t\t\treturn {\n\t\t\t\t...role\n\t\t\t\t, _permission: null\n\t\t\t\t, _permissions:\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\trole.permissions\n\t\t\t\t\t\t\t.map( x => x.permission_id + x.role_permissions_write )\n\t\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\tconst permissionLabel = x => {\n\t\tconst name = x.permission_name_pretty\n\t\tconst readWrite = x.role_permissions_write\n\t\t\t? '(Read & Write)' : '(Read Only)'\n\n\t\treturn `${name} ${readWrite}`\n\t}\n\n\tconst view = () => !role() ? null : h(Form, {\n\t\tinitialValues\n\t\t,async onsubmit({ $ }){\n\t\t\ttry {\n\t\t\t\tif( $.unsaved() ) {\n\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\tawait data.api.roles.create($())\n\t\t\t\t\t// remove unsaved property from form\n\t\t\t\t\t// $.unsaved.$remove()\n\t\t\t\t} else {\n\t\t\t\t\t// Step 1: Patch the Name\n\t\t\t\t\tawait data.api.roles.update($())\n\t\t\t\t}\n\n\t\t\t\t// remove unsaved property\n\t\t\t\tdelete $.unsaved\n\n\t\t\t\t// Step 2: Tell this route about the new values\n\t\t\t\trole($())\n\n\t\t\t\t// Step 3: Any time orgs/groups/roles change\n\t\t\t\t// we need to refetch auth permissions\n\t\t\t\t// or the UI will think we have access that we don't have\n\t\t\t\tawait data.auth_refresh()\n\n\t\t\t} catch(e) {\n\t\t\t\tNotificationBar.Notifications.alertError(e.message)\n\t\t\t} finally {\n\t\t\t\t// disable reset form\n\t\t\t\treturn { values: role() }\n\t\t\t}\n\t\t}\n\t}, form =>\n\t\th('.edit-role'\n\t\t\t+ H.css`\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 1em;\n\t\t\t\tpadding: 1em 0em;\n\n\t\t\t\t& label {\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 0.3em;\n\t\t\t\t}\n\n\t\t\t\t& input[type=text] {\n\t\t\t\t\tpadding: 0em 0.5em;\n\t\t\t\t}\n\n\t\t\t\t& .alert {\n\t\t\t\t\tmargin-bottom: 0px;\n\t\t\t\t}\n\t\t\t`\n\t\t\t, { key: Route.getValue().role_id || 'no-role' }\n\t\t\t, () => {\n\t\t\t\t// By default the form tracks changes oninput\n\t\t\t\t// But any interaction that uses custom input handling\n\t\t\t\t// like an onselect in an autocomplete, or a button\n\t\t\t\t// needs to be manually registered\n\t\t\t\t//\n\t\t\t\t// In this route we just create a JSON serialized\n\t\t\t\t// list of primary keys when the actual form is modified\n\t\t\t\t//\n\t\t\t\t// This is then diffed against the initial values\n\t\t\t\t// which propagates to the `changes` and `changed`\n\t\t\t\t// streams.\n\t\t\t\t//\n\t\t\t\t// One day it would be great to have Z automatically\n\t\t\t\t// call form.inputHandler when any query write happens.\n\t\t\t\t// Definitely possible, but for now this is pretty robust.\n\t\t\t\tform.$.permissions.$stream().map( xs => {\n\t\t\t\t\tform.inputHandler({\n\t\t\t\t\t\tpath: '_permissions'\n\t\t\t\t\t\t,value: JSON.stringify(\n\t\t\t\t\t\t\txs.map( x => x.permission_id + x.role_permissions_write )\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t\treturn null\n\t\t\t\t})\n\t\t\t}\n\t\t\t, h('label'\n\t\t\t\t, h('span', 'Role Name')\n\t\t\t\t, h('input.form-control'\n\t\t\t\t\t,\n\t\t\t\t\t{ name: 'role_name'\n\t\t\t\t\t, ...form.bind({ value: role.role_name })\n\t\t\t\t\t, required: true\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t\t, E.alert('info', [\n\t\t\t\t'A role is a set of permissions that can be applied to a Group. '\n\t\t\t\t,'Users assigned to a Group will inherit permissions from this group. '\n\t\t\t\t,'See a full list of Odin permissions '\n\t\t\t\t, h('a',\n\t\t\t\t\t{ href: 'https://harth.io/documentation/permissions-descriptions.html'\n\t\t\t\t\t, target: '_blank'\n\t\t\t\t\t, rel: \"noopener noreferrer\"\n\t\t\t\t\t}\n\t\t\t\t\t, 'here'\n\t\t\t\t)\n\t\t\t])\n\t\t\t, h(PermissionsList, { $, form })\n\t\t\t, form.$.permissions.length() > 0 && h(''\n\t\t\t\t, h('p', 'Role Permissions:')\n\t\t\t\t, E.strikeList(\n\t\t\t\t\tform.$.permissions().map(\n\t\t\t\t\t\tx => ({\n\t\t\t\t\t\t\tlabel: permissionLabel(x)\n\t\t\t\t\t\t\t, action(){\n\t\t\t\t\t\t\t\tform.$.permissions(\n\t\t\t\t\t\t\t\t\txs => xs.filter(\n\t\t\t\t\t\t\t\t\t\ty => y.permission_id != x.permission_id\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t, saveDone({ form, row: role })\n\t\t\t, form.$.unsaved() || E.alert('danger', 'Deleting a role cannot be undone. This will alter the permissions for all groups that use this role and all users within those groups.')\n\t\t\t, form.$.unsaved()\n\t\t\t|| h(ConfirmDeleteRole, { role, data, form, $ })\n\t\t)\n\t)\n\n\treturn { view }\n}\n\nexport default h.routed(\n\t'Organizations2'\n\t, (x, attrs) => x.List({ organization_id: attrs.data.organization()} )\n\t, {\n\t\tList: '/:organization_id'\n\t\t,Organization: '/:organization_id/edit'\n\t\t,Group: '/:organization_id/groups/:group_id/edit'\n\t\t,Role: '/:organization_id/roles/:role_id/edit'\n\t}\n\t, { search: { tab: 'groups' } }\n\t, (v) => {\n\t\tconst { attrs: { Route, $, $$, ParentRoute, data } } = v\n\t\tconst _ = {\n\t\t\tall: H.options.otherwise(Route.tags)\n\t\t\t,edit: H.options.otherwise(['Organization', 'Group', 'Role'])\n\t\t}\n\n\t\tconst isEdit = $.route.$stream().map(\n\t\t\tRoute.fold({\n\t\t\t\t... _.all( () => false )\n\t\t\t\t, ..._.edit ( () => true )\n\t\t\t})\n\t\t)\n\t\tconst organization_id = $.route.value.organization_id.$stream()\n\n\t\tconst definedEquals = (x,y) => x != null & y != null && x == y\n\t\t// const organization_id = $.route.value.organization_id.$stream()\n\t\tconst group_id = $.route.value.group_id.$stream()\n\t\tconst role_id = $.route.value.role_id.$stream()\n\n\t\tconst search = Route.search\n\n\t\t$.loading = true\n\t\t$.groups = []\n\t\t$.roles = []\n\t\t$.users = []\n\t\t$.invites = []\n\t\t$.permissions = permissions.filter( x => x.permission_selectable )\n\t\t$.auth_permissions = []\n\t\t$.organizations = data.organizations.organizations()\n\t\t$.detailsPaneTitle = null\n\n\t\t$.dev = true\n\n\t\tdata.organizations.organizations.map( xs => {\n\t\t\t$.organizations = xs || []\n\t\t\treturn null\n\t\t})\n\n\t\tconst organization =\n\t\t\t$.organizations\n\t\t\t.$values.$filter( (x,y) => x.organization_id == y, organization_id )\n\n\t\tconst group =\n\t\t\t$.groups\n\t\t\t.$values.$filter( (x,y) => definedEquals(x.group_id, y), group_id )\n\n\t\tconst role =\n\t\t\t$.roles\n\t\t\t.$values.$filter( (x,y) => definedEquals(x.role_id, y), role_id )\n\n\t\tlet formView = () => null\n\t\tlet formTitle = null\n\n\t\t// details pane item\n\t\tstream.merge([\n\t\t\trole.role_name.$stream().default(null)\n\t\t\t,group.group_name.$stream().default(null)\n\t\t\t,organization.organization_name.$stream()\n\t\t\t,Route.$stream()\n\t\t])\n\t\t.map( () => {\n\t\t\tconst f = Route.fold({\n\t\t\t\t... _.all( () => null )\n\t\t\t\t, Organization: () => {\n\t\t\t\t\tlet $ = organization.organization_name()\n\t\t\t\t\t$= $ ? 'Editing ' + $ : 'Creating new Organization'\n\t\t\t\t\treturn $\n\t\t\t\t}\n\t\t\t\t, Group: () => {\n\t\t\t\t\tlet $ = group.group_name()\n\t\t\t\t\t$= $ ? 'Editing ' + $ : 'Creating new Group'\n\t\t\t\t\treturn $\n\t\t\t\t}\n\t\t\t\t, Role: () => {\n\t\t\t\t\tlet $ = role.role_name()\n\t\t\t\t\t$= $ ? 'Editing ' + $ : 'Creating new Role'\n\t\t\t\t\treturn $\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst g = Route.fold({\n\t\t\t\t... _.all( () => () => null )\n\t\t\t\t, Organization: () => attrs => h(EditOrg, attrs)\n\t\t\t\t, Group: () => attrs => h(EditGroup, attrs)\n\t\t\t\t, Role: () => attrs => h(EditRole, attrs)\n\t\t\t})\n\n\t\t\tformTitle = f($.route())\n\t\t\tformView = g($.route())\n\t\t\th.redraw()\n\t\t\treturn null\n\t\t})\n\n\t\t// receive-global-org-id\n\t\tdata.organizations.organization_id.map( globalOrgId => {\n\n\t\t\tif( globalOrgId == organization_id() ) return null;\n\t\t\tconst next =\n\t\t\t\tRoute.toURL(Route.List({ organization_id: globalOrgId }))\n\n\t\t\tRoute.set(Route.fromURL(next)) // no search\n\n\t\t\treturn null\n\t\t})\n\n\t\t// update-global-org-id\n\t\torganization.$stream().map( x => {\n\t\t\tif(x && !x.unsaved) {\n\t\t\t\tdata.organizations.organization_id(x.organization_id)\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\n\t\t// fetch-extra-org-data\n\t\tRoute.$stream().map( async ({ value: { organization_id }}) => {\n\t\t\tif( organization_id ) {\n\n\t\t\t\t// this binding may need to be tweaked a bit\n\t\t\t\tconst answer = await data.api.organizations.get({ organization_id})\n\t\t\t\t\t.then( JSON.stringify ).then( JSON.parse).catch( () => null )\n\n\t\t\t\t// merging onto `organization` query should target the active\n\t\t\t\t// org automatically when the url has an org id in it\n\t\t\t\tif ( answer ) {\n\t\t\t\t\tObject.assign(organization, answer)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\t// fetch\n\t\torganization.$stream().map( async o => {\n\t\t\tif( o && !o.unsaved ) {\n\t\t\t\t$.loading = true\n\n\t\t\t\t$.groups = await data.api.groups2.fetch.byOrganization( o )\n\t\t\t\t\t.then( JSON.stringify ).then( JSON.parse)\n\n\t\t\t\t$.roles = await data.api.roles.fetch.byOrganization( o )\n\t\t\t\t\t.then( JSON.stringify ).then(JSON.parse)\n\n\t\t\t\t$.users = await data.api.users2.fetch.all()\n\n\t\t\t\t$.loading = false\n\t\t\t} else {\n\t\t\t\t$.groups = []\n\t\t\t\t$.roles = []\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\n\t\t// window-expose\n\t\t$.dev.$stream().map( dev => {\n\t\t\tdev && Object.assign(window, {\n\t\t\t\tH\n\t\t\t\t, h\n\t\t\t\t, Route\n\t\t\t\t, $\n\t\t\t\t, $$\n\t\t\t\t, ParentRoute\n\t\t\t\t, organization\n\t\t\t\t, organization_id\n\t\t\t\t, group\n\t\t\t\t, role\n\t\t\t\t, data\n\t\t\t})\n\t\t\treturn null;\n\t\t})\n\n\t\t// auto-redraw\n\t\tstream.merge([\n\t\t\t$.route.$stream()\n\t\t\t,$.roles.$values.role_name.$stream()\n\t\t\t,$.roles.$values.group_name.$stream()\n\t\t]\n\t\t).map( () => h.redraw() )\n\n\t\t// Instead of initializing an empty group\n\t\t// on a click event, we create one when the state\n\t\t// would imply we are creating a new group\n\t\t// this means on a cold boot of the page the data\n\t\t// will be initialized just as if you had clicked \"Create Group\"\n\n\t\t// initialize-empty-group\n\t\tstream.merge([\n\t\t\t$.loading.$stream()\n\t\t\t,$.route.value.group_id.$stream()\n\t\t\t,group.$stream().default(null)\n\t\t])\n\t\t.map( ([loading, group_id, g]) => {\n\t\t\tif( group_id && !loading && !g ) {\n\t\t\t\t$.groups(\n\t\t\t\t\txs => xs.filter( x => !x.unsaved )\n\t\t\t\t\t.concat({\n\t\t\t\t\t\tgroup_id\n\t\t\t\t\t\t, group_name: ''\n\t\t\t\t\t\t, roles: []\n\t\t\t\t\t\t, users: []\n\t\t\t\t\t\t, invites: []\n\t\t\t\t\t\t, unsaved: true\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\n\t\t// Instead of initializing an empty role\n\t\t// on a click event, we create one when the state\n\t\t// would imply we are creating a new role\n\t\t// this means on a cold boot of the page the data\n\t\t// will be initialized just as if you had clicked \"Create Group\"\n\t\tstream.merge([\n\t\t\t$.loading.$stream()\n\t\t\t,$.route.value.role_id.$stream()\n\t\t\t,role.$stream().default(null)\n\t\t])\n\t\t.map(\n\t\t\t([loading, role_id, _role]) => {\n\t\t\t\tif( role_id && !loading && !_role ) {\n\n\t\t\t\t\t$.roles(\n\t\t\t\t\t\txs => xs.filter( x => !x.unsaved )\n\t\t\t\t\t\t.concat({\n\t\t\t\t\t\t\trole_id\n\t\t\t\t\t\t\t, role_name: ''\n\t\t\t\t\t\t\t, organization_id: Route.getValue().organization_id\n\t\t\t\t\t\t\t, permissions: []\n\t\t\t\t\t\t\t, unsaved: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t)\n\n\t\t// Instead of initializing an empty org\n\t\t// on a click event, we create one when the state\n\t\t// would imply we are creating a new org\n\t\t// this means on a cold boot of the page the data\n\t\t// will be initialized just as if you had clicked \"Create Organization\"\n\t\tstream.merge([\n\t\t\t$.loading.$stream()\n\t\t\t,$.route.value.organization_id.$stream()\n\t\t\t,organization.$stream().default(null)\n\t\t\t,$.route.$stream()\n\t\t])\n\t\t.map( ([loading, organization_id, org, route]) => {\n\t\t\tif(\n\t\t\t\torganization_id\n\t\t\t\t&& !loading\n\t\t\t\t&& !org\n\t\t\t\t&& Route.isOrganization(route)\n\t\t\t) {\n\n\t\t\t\t$.organizations(\n\t\t\t\t\txs => xs.filter( x => !x.unsaved )\n\t\t\t\t\t.concat({\n\t\t\t\t\t\torganization_id\n\t\t\t\t\t\t, organization_name: ''\n\t\t\t\t\t\t, organization_incorporation_no: ''\n\t\t\t\t\t\t, organizations_details_id: null\n\t\t\t\t\t\t, organizations_details_phone: ''\n\t\t\t\t\t\t, organizations_details_address: ''\n\t\t\t\t\t\t, organizations_details_state: ''\n\t\t\t\t\t\t, organizations_details_postcode: ''\n\t\t\t\t\t\t, unsaved: true\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\n\n\t\tfunction view(){\n\t\t\treturn h('.organizations2'\n\t\t\t\t+ H.css`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgap: 2em;\n\t\t\t\t\tpadding: 1em;\n\n\t\t\t\t\t& * {\n\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\tpadding: 0em;\n\t\t\t\t\t}\n\n\t\t\t\t\tform input {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tcolor: black;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t, h('header'\n\t\t\t\t\t+ H.css`\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\talign-items: center;\n\n\t\t\t\t\t\t& .desktop {\n\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@media( min-width: 1000px ) {\n\t\t\t\t\t\t\t& .desktop {\n\t\t\t\t\t\t\t\tdisplay: inline;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t, h('h4',\n\t\t\t\t\t\th('.desktop', 'Groups, Users, Roles and Access: ')\n\t\t\t\t\t\t, organization.unsaved()\n\t\t\t\t\t\t? 'Creating new Organization'\n\t\t\t\t\t\t: organization.organization_name()\n\t\t\t\t\t)\n\t\t\t\t\t, h('.actions'\n\t\t\t\t\t\t, h(DropdownButton, {\n\t\t\t\t\t\t\tdefaultOption:\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t['organizations', 'Create Organization']\n\t\t\t\t\t\t\t\t\t,['groups', 'Create Group']\n\t\t\t\t\t\t\t\t\t,['roles', 'Create Role']\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter( ([x]) => x == search.$.tab() )\n\t\t\t\t\t\t\t\t.map( ([_, x]) => x)\n\t\t\t\t\t\t\t\t[0]\n\t\t\t\t\t\t\t\t|| 'Create Organization'\n\t\t\t\t\t\t\t,onselect(option){\n\t\t\t\t\t\t\t\tif( option == 'Create Organization' ) {\n\t\t\t\t\t\t\t\t\tconst organization_id = H.id()\n\n\t\t\t\t\t\t\t\t\tRoute.set( Route.Organization({ organization_id }))\n\t\t\t\t\t\t\t\t} else if( option == 'Create Group' ) {\n\t\t\t\t\t\t\t\t\tconst group_id = H.id()\n\n\t\t\t\t\t\t\t\t\tconst o = Route.getValue()\n\t\t\t\t\t\t\t\t\tRoute.set( Route.Group({ ...o, group_id }))\n\t\t\t\t\t\t\t\t} else if( option == 'Create Role' ) {\n\t\t\t\t\t\t\t\t\tconst role_id = H.id()\n\n\t\t\t\t\t\t\t\t\tconst o = Route.getValue()\n\t\t\t\t\t\t\t\t\tRoute.set( Route.Role({ ...o, role_id }))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,options: [\n\t\t\t\t\t\t\t\t'Create Organization'\n\t\t\t\t\t\t\t\t,'Create Group'\n\t\t\t\t\t\t\t\t,'Create Role'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t, text: 'Create'\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, E.tabset(['organizations', 'groups', 'roles'], search.$.tab)\n\t\t\t\t, h('.tab-content-pane'\n\t\t\t\t\t+ H.css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t,\n\n\t\t\t\t\tsearch.$.tab() == 'organizations'\n\t\t\t\t\t&& $.organizations().map( ({ organization_id, organization_name }) =>\n\t\t\t\t\t\th('a'\n\t\t\t\t\t\t\t, Route.link(\n\t\t\t\t\t\t\t\tRoute.Organization({ organization_id })\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\treplace: isEdit()\n\t\t\t\t\t\t\t\t\t,back: () => Route.List({ organization_id})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, organization_name\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, search.$.tab() == 'groups'\n\t\t\t\t\t&& $.groups().map( ({ group_id, group_name }) =>\n\t\t\t\t\t\th('a'\n\t\t\t\t\t\t\t, Route.link(\n\t\t\t\t\t\t\t\tRoute.Group({ organization_id: organization_id(), group_id })\n\t\t\t\t\t\t\t\t, { replace: isEdit() }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, group_name\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, search.$.tab() == 'roles'\n\t\t\t\t\t&& $.roles().map( ({ role_id, role_name }) =>\n\t\t\t\t\t\th('a'\n\t\t\t\t\t\t\t, Route.link(\n\t\t\t\t\t\t\t\tRoute.Role({ organization_id: organization_id(), role_id })\n\t\t\t\t\t\t\t\t, { replace: isEdit() }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, role_name\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t, D.Light(\n\t\t\t\t\t() => isEdit()\n\t\t\t\t\t, () => formTitle\n\t\t\t\t\t, () => h(''\n\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\t& input {\n\t\t\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\t\t\tcolor: black;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t& .manuel-complete input {\n\t\t\t\t\t\t\t\tborder: 0px;\n\t\t\t\t\t\t\t\tbox-shadow: none;\n\t\t\t\t\t\t\t\tborder-bottom: solid 1px #CCC;\n\t\t\t\t\t\t\t\tborder-radius: 0px;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t& .manuel-complete input:focus {\n\t\t\t\t\t\t\t\tborder: 0px;\n\t\t\t\t\t\t\t\tborder-bottom: 1px solid hsl(200, 80%, 60%);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, formView({\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t, $\n\t\t\t\t\t\t\t, organization\n\t\t\t\t\t\t\t, group\n\t\t\t\t\t\t\t, role\n\t\t\t\t\t\t\t, Route\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\treturn {\n\t\t\tview\n\t\t}\n\t})","import h, { css, options } from '../../../how/index'\n\nconst Resource =\n\toptions.tags('Resource', ['Loading', 'Loaded', 'Empty', 'Error'])\n\nconst extensions = {\n\tdwg: {\n\t\tdescription: 'CAD Drawing'\n\t\t,preview: 'link'\n\t}\n\t,doc: {\n\t\tdescription: 'Word Document'\n\t\t,preview: 'link'\n\t}\n\t,docx: {\n\t\tdescription: 'Word Document'\n\t\t,preview: 'link'\n\t}\n\t,xls: {\n\t\tdescription: 'Excel Document'\n\t\t,preview: 'link'\n\t}\n\t,xlsx: {\n\t\tdescription: 'Excel Document'\n\t\t,preview: 'link'\n\t}\n\t,msg: {\n\t\tdescription: 'Outlook Message'\n\t\t,preview: 'link'\n\t}\n\t,eml: {\n\t\tdescription: 'Email Message'\n\t\t,preview: 'link'\n\t}\n\t,dat: {\n\t\tdescription: 'Unknown'\n\t\t,preview: 'link'\n\t}\n\t,webm: {\n\t\tdescription: 'Video'\n\t\t,preview: 'link'\n\t}\n\t,heic: {\n\t\tdescription: 'Video'\n\t\t,preview: 'link'\n\t}\n\t,mov: {\n\t\tdescription: 'Video'\n\t\t,preview: 'link'\n\t}\n\t,png: {\n\t\tdescription: 'Image'\n\t\t,preview: 'img'\n\t}\n\t,svg: {\n\t\tdescription: 'Vector Image'\n\t\t,preview: 'img'\n\t}\n\t,jpg: {\n\t\tdescription: 'Image'\n\t\t,preview: 'img'\n\t}\n\t,jpeg: {\n\t\tdescription: 'Image'\n\t\t,preview: 'img'\n\t}\n\t,gif: {\n\t\tdescription: 'Image'\n\t\t,preview: 'img'\n\t}\n\t,csv: {\n\t\tdescription: 'CSV File'\n\t\t,preview: 'link'\n\t}\n\t,pdf: {\n\t\tdescription: 'PDF Document'\n\t\t,preview: 'object'\n\t\t,contentType: 'application/pdf'\n\t}\n\t,txt: {\n\t\tdescription: 'Text File'\n\t\t,preview: 'link'\n\t}\n\t,lnk: {\n\t\tdescription: 'Windows Shortcut'\n\t\t,preview: 'link'\n\t}\n\t,zip: {\n\t\tdescription: 'Zip Archive'\n\t\t,preview: 'link'\n\t}\n}\n\nfunction message(...content){\n\treturn h('.message'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t\tmin-height: 100vh;\n\t\t\tjustify-content: center;\n\t\t\talign-content: center;\n\t\t\tcolor: white;\n\t\t\ttext-align: center;\n\t\t`\n\t\t, content\n\t)\n}\n\nexport default h.routed(\n\t'Files'\n\t, (x) => x.List()\n\t, {\n\t\tRedirect: '/'\n\t\t,View: '/:organization_id/view/:file_id'\n\t}\n\t, { search: {} }\n\t, (v) => {\n\n\t\tconst { attrs: { data, Route, $, ParentRoute } } = v\n\n\t\tif (Route.isRedirect(Route.get())) {\n\t\t\tParentRoute.set( ParentRoute.Autodirect() )\n\t\t}\n\n\n\t\tconst id$ = $.route.$stream().map(\n\t\t\tRoute.fold({\n\t\t\t\tRedirect: () => null\n\t\t\t\t,View: ({ file_id, organization_id }) => ({file_id, organization_id})\n\t\t\t})\n\t\t)\n\n\t\t$.file = Resource.Empty()\n\t\tv.useEffect({ name: 'fetch-file' }, function * (){\n\t\t\tconst { file_id, organization_id } = (yield id$() || {})\n\t\t\tif (!file_id) $.file = Resource.Empty()\n\n\t\t\ttry {\n\t\t\t\t$.file = Resource.Loading()\n\t\t\t\tconst [file] = yield data.api.files.LIST({ file_id, organization_id })\n\n\t\t\t\tif (!file) {\n\t\t\t\t\t$.file = Resource.Empty()\n\t\t\t\t} else {\n\t\t\t\t\t$.file = Resource.Loaded(file)\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t\t$.file = Resource.Error(e)\n\t\t\t}\n\t\t})\n\n\t\tconst view = Route.fold({\n\t\t\tRedirect: () => null\n\t\t\t,View\n\t\t})\n\n\t\tfunction View({ file_id }){\n\n\t\t\tconst resourceView = Resource.fold({\n\t\t\t\tEmpty: () =>\n\t\t\t\t\tmessage(\n\t\t\t\t\t\th('p', `We couldn't retrieve the requested file, please try again and if problems continue contact support@harth.io`)\n\t\t\t\t\t)\n\t\t\t\t, Loading: () => null\n\t\t\t\t, Error: () =>\n\t\t\t\t\tmessage(\n\t\t\t\t\t\th('p', `There was an error retrieving the requested file, please try again and if problems continue contact support@harth.io`)\n\t\t\t\t\t)\n\t\t\t\t, Loaded: LoadedView\n\t\t\t})\n\n\t\t\treturn resourceView($.file())\n\t\t}\n\n\t\tfunction LoadedView(file){\n\t\t\tconst { file_url, file_ext } = file\n\n\t\t\tconst ext = file_ext.replace('.', '').toLowerCase()\n\n\t\t\tconst info = extensions[ext] || {\n\t\t\t\tdescription: 'Unknown File'\n\t\t\t\t,preview: 'link'\n\t\t\t}\n\n\t\t\tif ( info.preview === 'img' ) {\n\t\t\t\treturn h('img' + css`\n\t\t\t\t\tmax-width: 100vw;\n\t\t\t\t\tmax-height: 100vh;\n\t\t\t\t`, { src: file_url })\n\t\t\t} else if ( info.preview === 'object' ) {\n\t\t\t\t\treturn h('object'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tmin-height: 100vh;\n\t\t\t\t\t`\n\t\t\t\t\t, {data: file_url, type: info.contentType, width: '100%', height: '100%' }\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn message(\n\t\t\t\t\th('p', 'Download ')\n\t\t\t\t\t, h('p', h('a'\n\t\t\t\t\t\t, { href: file_url }\n\t\t\t\t\t\t, file.file_upname,'.',file.file_ext\n\t\t\t\t\t))\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\t$.file.$stream().map( () => h.redraw() )\n\n\t\treturn {\n\t\t\tview: () => view(Route.get())\n\t\t}\n\t}\n)","\nimport * as R from 'ramda'\n\n/**\n * A CSS value that obey's the Functor API\n *\n */\nclass Unit {\n\n\n constructor(unitType, value){\n this.__value = value\n this.__unitType = unitType\n }\n\n join() {\n\t return this.__value\n }\n\n valueOf (){\n return this.__value+this.__unitType\n }\n\n toString (){\n\t return this.valueOf()\n }\n\n map (f){\n return Unit.of(this.__unitType, f(this.__value))\n }\n\n ap (otherUnit){\n\t return Unit.of(\n\t\t this.__unitType\n\t\t ,otherUnit.__value\n\t )\n\t .map(this.__value)\n }\n\n static of(unitType, value){\n return new Unit(unitType, value)\n }\n\n static type(unitType){\n\t return function(value){\n\t\t return Unit.of(unitType, value)\n\t }\n }\n\n\n}\n\n\nclass Func {\n\tconstructor(name, argKeys, args){\n\t\tthis.__name = name\n\t\tthis.__argKeys = argKeys\n\t\tthis.__args = args\n\t}\n\n\tget(key){\n\t\treturn this.__args[this.__argKeys.indexOf(key)]\n\t}\n\n\tmap (f){\n\t\treturn Func.of(this.__name, this.__argKeys)( ...this.__args.map(f) )\n\t}\n\n\tap (otherFunc){\n\t\treturn Func.of(\n\t\t\tthis.__name\n\t\t\t,this.__argKeys\n\t\t)\n\t\t(...otherFunc.__args)\n\t\t.map(this.__args[0])\n\t}\n\n\tstatic of (name, argKeys){\n\t\treturn function(...args){\n\t\t\treturn new Func(name, argKeys, args)\n\t\t}\n\t}\n\n\tvalueOf (){\n\t\treturn this.__name + '('+this.__args+')'\n\t}\n\n\ttoString (){\n\t\treturn this.valueOf()\n\t}\n}\n\n\nconst func = Func.of\n\nconst unit = Unit.type\n\nconst css = {\n\tUnit\n\t,unit, func\n\t,sequence: R.unapply(R.join(' '))\n\t,textAlign: {\n\t\tcenter: 'center'\n\t\t,left: 'left'\n\t}\n\t,colors: {\n\t\twhite: 'white'\n\t\t,black: 'black'\n\t}\n\t,position: {\n\t\trelative:'relative'\n\t\t,absolute:'absolute'\n\t\t,fixed:'fixed'\n\t}\n\t,display: {\n\t\tinline: 'inline'\n\t}\n\t,fontWeight: {\n\t\tlighter: 'lighter'\n\t}\n\t,cursor: {\n\t\t// default rendered as text select in FF\n\t\tdefault: 'pointer'\n\t}\n\t,overflow: {\n\t\tscroll: 'scroll'\n\t\t,hidden: 'hidden'\n\t}\n\t,units: {\n\t\tem: Unit.type('em')\n\t\t,percent: Unit.type('%')\n\t\t,px: Unit.type('px')\n\t\t,seconds: Unit.type('s')\n\t\t,vw: Unit.type('vw')\n\t\t,vh: Unit.type('vh')\n\t\t,degrees: Unit.type('deg')\n\t}\n\t,funcs: {\n\t\trgb: func('rgb', ['red', 'green', 'blue'])\n\t\t,rgba: func('rgba', ['red', 'green', 'blue', 'alpha'])\n\t\t,translate: func('translate', ['x', 'y'])\n\t\t,translateX: func('translateX', ['x'])\n\t\t,translateY: func('translateY', ['y'])\n\t\t,translate3d: func('translate3d', ['x', 'y', 'z'])\n\t\t,boxShadow: func('boxShadow', [])\n\t\t,rotate: func('rotate', ['angle'])\n\t\t,scale: func('scale', ['x', 'y'])\n\t\t,scale3d: func('scale3d', ['x', 'y', 'z'])\n\t\t,hsl: func('hsl', ['hue', 'saturation', 'lightness'])\n\t}\n\t// dev\n\t,class: (name) => '.'+name\n\t// production\n\t// ,class: (name) => '.'+name+Math.random().toString(15).slice(2, 10)\n}\n\nexport default css","function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0:\n return function () {\n return fn.apply(this, arguments);\n };\n case 1:\n return function (a0) {\n return fn.apply(this, arguments);\n };\n case 2:\n return function (a0, a1) {\n return fn.apply(this, arguments);\n };\n case 3:\n return function (a0, a1, a2) {\n return fn.apply(this, arguments);\n };\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.apply(this, arguments);\n };\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.apply(this, arguments);\n };\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.apply(this, arguments);\n };\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.apply(this, arguments);\n };\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.apply(this, arguments);\n };\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.apply(this, arguments);\n };\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.apply(this, arguments);\n };\n default:\n throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n}\nmodule.exports = _arity;","function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}\nmodule.exports = _isPlaceholder;","var _isPlaceholder = /*#__PURE__*/require('./_isPlaceholder');\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}\nmodule.exports = _curry1;","var _curry1 = /*#__PURE__*/require('./_curry1');\n\nvar _isPlaceholder = /*#__PURE__*/require('./_isPlaceholder');\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}\nmodule.exports = _curry2;","var _arity = /*#__PURE__*/require('./_arity');\n\nvar _isPlaceholder = /*#__PURE__*/require('./_isPlaceholder');\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curryN(length, received, fn) {\n return function () {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n combined[combinedIdx] = result;\n if (!_isPlaceholder(result)) {\n left -= 1;\n }\n combinedIdx += 1;\n }\n return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn));\n };\n}\nmodule.exports = _curryN;","var _arity = /*#__PURE__*/require('./internal/_arity');\n\nvar _curry1 = /*#__PURE__*/require('./internal/_curry1');\n\nvar _curry2 = /*#__PURE__*/require('./internal/_curry2');\n\nvar _curryN = /*#__PURE__*/require('./internal/_curryN');\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * var sumArgs = (...args) => R.sum(args);\n *\n * var curriedAddFourNumbers = R.curryN(4, sumArgs);\n * var f = curriedAddFourNumbers(1, 2);\n * var g = f(3);\n * g(4); //=> 10\n */\n\n\nvar curryN = /*#__PURE__*/_curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n return _arity(length, _curryN(length, [], fn));\n});\nmodule.exports = curryN;","'use strict';\n\nvar curryN = require('ramda/src/curryN');\n\n// Utility\nfunction isFunction(obj) {\n return !!(obj && obj.constructor && obj.call && obj.apply);\n}\nfunction trueFn() { return true; }\n\n// Globals\nvar toUpdate = [];\nvar inStream;\nvar order = [];\nvar orderNextIdx = -1;\nvar flushingUpdateQueue = false;\nvar flushingStreamValue = false;\n\nfunction flushing() {\n return flushingUpdateQueue || flushingStreamValue;\n}\n\n\n/** @namespace */\nvar flyd = {}\n\n// /////////////////////////// API ///////////////////////////////// //\n\n/**\n * Creates a new stream\n *\n * __Signature__: `a -> Stream a`\n *\n * @name flyd.stream\n * @param {*} initialValue - (Optional) the initial value of the stream\n * @return {stream} the stream\n *\n * @example\n * var n = flyd.stream(1); // Stream with initial value `1`\n * var s = flyd.stream(); // Stream with no initial value\n */\nflyd.stream = function(initialValue) {\n var endStream = createDependentStream([], trueFn);\n var s = createStream();\n s.end = endStream;\n s.fnArgs = [];\n endStream.listeners.push(s);\n if (arguments.length > 0) s(initialValue);\n return s;\n}\n// fantasy-land Applicative\nflyd.stream['fantasy-land/of'] = flyd.stream.of = flyd.stream;\n\n\n/**\n * Create a new dependent stream\n *\n * __Signature__: `(...Stream * -> Stream b -> b) -> [Stream *] -> Stream b`\n *\n * @name flyd.combine\n * @param {Function} fn - the function used to combine the streams\n * @param {Array} dependencies - the streams that this one depends on\n * @return {stream} the dependent stream\n *\n * @example\n * var n1 = flyd.stream(0);\n * var n2 = flyd.stream(0);\n * var max = flyd.combine(function(n1, n2, self, changed) {\n * return n1() > n2() ? n1() : n2();\n * }, [n1, n2]);\n */\nflyd.combine = curryN(2, combine);\nfunction combine(fn, streams) {\n var i, s, deps, depEndStreams;\n var endStream = createDependentStream([], trueFn);\n deps = []; depEndStreams = [];\n for (i = 0; i < streams.length; ++i) {\n if (streams[i] !== undefined) {\n deps.push(streams[i]);\n if (streams[i].end !== undefined) depEndStreams.push(streams[i].end);\n }\n }\n s = createDependentStream(deps, fn);\n s.depsChanged = [];\n s.fnArgs = s.deps.concat([s, s.depsChanged]);\n s.end = endStream;\n endStream.listeners.push(s);\n addListeners(depEndStreams, endStream);\n endStream.deps = depEndStreams;\n updateStream(s);\n return s;\n}\n\n/**\n * Returns `true` if the supplied argument is a Flyd stream and `false` otherwise.\n *\n * __Signature__: `* -> Boolean`\n *\n * @name flyd.isStream\n * @param {*} value - the value to test\n * @return {Boolean} `true` if is a Flyd streamn, `false` otherwise\n *\n * @example\n * var s = flyd.stream(1);\n * var n = 1;\n * flyd.isStream(s); //=> true\n * flyd.isStream(n); //=> false\n */\nflyd.isStream = function(stream) {\n return isFunction(stream) && 'hasVal' in stream;\n}\n\n/**\n * Invokes the body (the function to calculate the value) of a dependent stream\n *\n * By default the body of a dependent stream is only called when all the streams\n * upon which it depends has a value. `immediate` can circumvent this behaviour.\n * It immediately invokes the body of a dependent stream.\n *\n * __Signature__: `Stream a -> Stream a`\n *\n * @name flyd.immediate\n * @param {stream} stream - the dependent stream\n * @return {stream} the same stream\n *\n * @example\n * var s = flyd.stream();\n * var hasItems = flyd.immediate(flyd.combine(function(s) {\n * return s() !== undefined && s().length > 0;\n * }, [s]);\n * console.log(hasItems()); // logs `false`. Had `immediate` not been\n * // used `hasItems()` would've returned `undefined`\n * s([1]);\n * console.log(hasItems()); // logs `true`.\n * s([]);\n * console.log(hasItems()); // logs `false`.\n */\nflyd.immediate = function(s) {\n if (s.depsMet === false) {\n s.depsMet = true;\n updateStream(s);\n }\n return s;\n}\n\n/**\n * Changes which `endsStream` should trigger the ending of `s`.\n *\n * __Signature__: `Stream a -> Stream b -> Stream b`\n *\n * @name flyd.endsOn\n * @param {stream} endStream - the stream to trigger the ending\n * @param {stream} stream - the stream to be ended by the endStream\n * @param {stream} the stream modified to be ended by endStream\n *\n * @example\n * var n = flyd.stream(1);\n * var killer = flyd.stream();\n * // `double` ends when `n` ends or when `killer` emits any value\n * var double = flyd.endsOn(flyd.merge(n.end, killer), flyd.combine(function(n) {\n * return 2 * n();\n * }, [n]);\n*/\nflyd.endsOn = function(endS, s) {\n detachDeps(s.end);\n endS.listeners.push(s.end);\n s.end.deps.push(endS);\n return s;\n}\n\n/**\n * Map a stream\n *\n * Returns a new stream consisting of every value from `s` passed through\n * `fn`. I.e. `map` creates a new stream that listens to `s` and\n * applies `fn` to every new value.\n * __Signature__: `(a -> result) -> Stream a -> Stream result`\n *\n * @name flyd.map\n * @param {Function} fn - the function that produces the elements of the new stream\n * @param {stream} stream - the stream to map\n * @return {stream} a new stream with the mapped values\n *\n * @example\n * var numbers = flyd.stream(0);\n * var squaredNumbers = flyd.map(function(n) { return n*n; }, numbers);\n */\n// Library functions use self callback to accept (null, undefined) update triggers.\nfunction map(f, s) {\n return combine(function(s, self) { self(f(s.val)); }, [s]);\n}\nflyd.map = curryN(2, map)\n\n/**\n * Chain a stream\n *\n * also known as flatMap\n *\n * Where `fn` returns a stream this function will flatten the resulting streams.\n * Every time `fn` is called the context of the returned stream will \"switch\" to that stream.\n *\n * __Signature__: `(a -> Stream b) -> Stream a -> Stream b`\n *\n * @name flyd.chain\n * @param {Function} fn - the function that produces the streams to be flattened\n * @param {stream} stream - the stream to map\n * @return {stream} a new stream with the mapped values\n *\n * @example\n * var filter = flyd.stream('who');\n * var items = flyd.chain(function(filter){\n * return flyd.stream(findUsers(filter));\n * }, filter);\n */\nflyd.chain = curryN(2, chain);\n\n/**\n * Apply a stream\n *\n * Applies the value in `s2` to the function in `s1`.\n *\n * __Signature__: `Stream (a -> b) -> Stream a -> Stream b`\n *\n * @name flyd.ap\n * @param {stream} s1 - The value to be applied\n * @param {stream} s2 - The function expecting the value\n * @return {stream} a new stream with the mapped values\n *\n * @example\n * var add = stream(a => b => a + b)\n * var n1 = stream(1)\n * var n2 = stream(2)\n *\n * var added = flyd.ap(n2, flyd.ap(n1, add)) // stream(3)\n * // can also be written using pipe\n * var added_pipe = add\n * .pipe(ap(n1))\n * .pipe(ap(n2));\n * added_pipe() // 3\n */\nflyd.ap = curryN(2, ap);\n\n/**\n * Listen to stream events\n *\n * Similar to `map` except that the returned stream is empty. Use `on` for doing\n * side effects in reaction to stream changes. Use the returned stream only if you\n * need to manually end it.\n *\n * __Signature__: `(a -> result) -> Stream a -> Stream undefined`\n *\n * @name flyd.on\n * @param {Function} cb - the callback\n * @param {stream} stream - the stream\n * @return {stream} an empty stream (can be ended)\n */\nflyd.on = curryN(2, function(f, s) {\n return combine(function(s) { f(s.val); }, [s]);\n})\n\n/**\n * Creates a new stream with the results of calling the function on every incoming\n * stream with and accumulator and the incoming value.\n *\n * __Signature__: `(a -> b -> a) -> a -> Stream b -> Stream a`\n *\n * @name flyd.scan\n * @param {Function} fn - the function to call\n * @param {*} val - the initial value of the accumulator\n * @param {stream} stream - the stream source\n * @return {stream} the new stream\n *\n * @example\n * var numbers = flyd.stream();\n * var sum = flyd.scan(function(sum, n) { return sum+n; }, 0, numbers);\n * numbers(2)(3)(5);\n * sum(); // 10\n */\nflyd.scan = curryN(3, function(f, acc, s) {\n var ns = combine(function(s, self) {\n self(acc = f(acc, s.val));\n }, [s]);\n if (!ns.hasVal) ns(acc);\n return ns;\n});\n\n/**\n * Creates a new stream down which all values from both `stream1` and `stream2`\n * will be sent.\n *\n * __Signature__: `Stream a -> Stream a -> Stream a`\n *\n * @name flyd.merge\n * @param {stream} source1 - one stream to be merged\n * @param {stream} source2 - the other stream to be merged\n * @return {stream} a stream with the values from both sources\n *\n * @example\n * var btn1Clicks = flyd.stream();\n * button1Elm.addEventListener(btn1Clicks);\n * var btn2Clicks = flyd.stream();\n * button2Elm.addEventListener(btn2Clicks);\n * var allClicks = flyd.merge(btn1Clicks, btn2Clicks);\n */\nflyd.merge = curryN(2, function(s1, s2) {\n var s = flyd.immediate(combine(function(s1, s2, self, changed) {\n if (changed[0]) {\n self(changed[0]());\n } else if (s1.hasVal) {\n self(s1.val);\n } else if (s2.hasVal) {\n self(s2.val);\n }\n }, [s1, s2]));\n flyd.endsOn(combine(function() {\n return true;\n }, [s1.end, s2.end]), s);\n return s;\n});\n\n/**\n * Creates a new stream resulting from applying `transducer` to `stream`.\n *\n * __Signature__: `Transducer -> Stream a -> Stream b`\n *\n * @name flyd.transduce\n * @param {Transducer} xform - the transducer transformation\n * @param {stream} source - the stream source\n * @return {stream} the new stream\n *\n * @example\n * var t = require('transducers.js');\n *\n * var results = [];\n * var s1 = flyd.stream();\n * var tx = t.compose(t.map(function(x) { return x * 2; }), t.dedupe());\n * var s2 = flyd.transduce(tx, s1);\n * flyd.combine(function(s2) { results.push(s2()); }, [s2]);\n * s1(1)(1)(2)(3)(3)(3)(4);\n * results; // => [2, 4, 6, 8]\n */\nflyd.transduce = curryN(2, function(xform, source) {\n xform = xform(new StreamTransformer());\n return combine(function(source, self) {\n var res = xform['@@transducer/step'](undefined, source.val);\n if (res && res['@@transducer/reduced'] === true) {\n self.end(true);\n return res['@@transducer/value'];\n } else {\n return res;\n }\n }, [source]);\n});\n\n/**\n * Returns `fn` curried to `n`. Use this function to curry functions exposed by\n * modules for Flyd.\n *\n * @name flyd.curryN\n * @function\n * @param {Integer} arity - the function arity\n * @param {Function} fn - the function to curry\n * @return {Function} the curried function\n *\n * @example\n * function add(x, y) { return x + y; };\n * var a = flyd.curryN(2, add);\n * a(2)(4) // => 6\n */\nflyd.curryN = curryN\n\n/**\n * Returns a new stream identical to the original except every\n * value will be passed through `f`.\n *\n * _Note:_ This function is included in order to support the fantasy land\n * specification.\n *\n * __Signature__: Called bound to `Stream a`: `(a -> b) -> Stream b`\n *\n * @name stream.map\n * @param {Function} function - the function to apply\n * @return {stream} a new stream with the values mapped\n *\n * @example\n * var numbers = flyd.stream(0);\n * var squaredNumbers = numbers.map(function(n) { return n*n; });\n */\nfunction boundMap(f) { return map(f, this); }\n\n/**\n * Returns the result of applying function `fn` to this stream\n *\n * __Signature__: Called bound to `Stream a`: `(a -> Stream b) -> Stream b`\n *\n * @name stream.pipe\n * @param {Function} fn - the function to apply\n * @return {stream} A new stream\n *\n * @example\n * var numbers = flyd.stream(0);\n * var squaredNumbers = numbers.pipe(flyd.map(function(n){ return n*n; }));\n */\nfunction operator_pipe(f) { return f(this) }\n\nfunction boundChain(f) {\n return chain(f, this);\n}\n\nfunction chain(f, s) {\n // Internal state to end flat map stream\n var flatEnd = flyd.stream(1);\n var internalEnded = flyd.on(function() {\n var alive = flatEnd() - 1;\n flatEnd(alive);\n if (alive <= 0) {\n flatEnd.end(true);\n }\n });\n\n internalEnded(s.end);\n var last = flyd.stream();\n var flatStream = flyd.combine(function(s, own) {\n last.end(true)\n // Our fn stream makes streams\n var newS = f(s());\n flatEnd(flatEnd() + 1);\n internalEnded(newS.end);\n\n // Update self on call -- newS is never handed out so deps don't matter\n last = map(own, newS);\n }, [s]);\n\n flyd.endsOn(flatEnd.end, flatStream);\n\n return flatStream;\n}\n\nflyd.fromPromise = function fromPromise(p) {\n var s = flyd.stream();\n p.then(function(val) {\n s(val);\n s.end(true);\n });\n return s;\n}\n\nflyd.flattenPromise = function flattenPromise(s) {\n return combine(function(s, self) {\n s().then(self);\n }, [s])\n}\n\n\n/**\n * Returns a new stream which is the result of applying the\n * functions from `this` stream to the values in `stream` parameter.\n *\n * `this` stream must be a stream of functions.\n *\n * _Note:_ This function is included in order to support the fantasy land\n * specification.\n *\n * __Signature__: Called bound to `Stream (a -> b)`: `a -> Stream b`\n *\n * @name stream.ap\n * @param {stream} stream - the values stream\n * @return {stream} a new stream with the functions applied to values\n *\n * @example\n * var add = flyd.curryN(2, function(x, y) { return x + y; });\n * var numbers1 = flyd.stream();\n * var numbers2 = flyd.stream();\n * var addToNumbers1 = flyd.map(add, numbers1);\n * var added = addToNumbers1.ap(numbers2);\n */\nfunction ap(s2, s1) {\n return combine(function(s1, s2, self) { self(s1.val(s2.val)); }, [s1, s2]);\n}\n\nfunction boundAp(s2) {\n return ap(s2, this);\n}\n\n/**\n * @private\n */\nfunction fantasy_land_ap(s1) {\n return ap(this, s1);\n}\n\n/**\n * Get a human readable view of a stream\n * @name stream.toString\n * @return {String} the stream string representation\n */\nfunction streamToString() {\n return 'stream(' + this.val + ')';\n}\n\n/**\n * @name stream.end\n * @memberof stream\n * A stream that emits `true` when the stream ends. If `true` is pushed down the\n * stream the parent stream ends.\n */\n\n/**\n * @name stream.of\n * @function\n * @memberof stream\n * Returns a new stream with `value` as its initial value. It is identical to\n * calling `flyd.stream` with one argument.\n *\n * __Signature__: Called bound to `Stream (a)`: `b -> Stream b`\n *\n * @param {*} value - the initial value\n * @return {stream} the new stream\n *\n * @example\n * var n = flyd.stream(1);\n * var m = n.of(1);\n */\n\n// /////////////////////////// PRIVATE ///////////////////////////////// //\n/**\n * @private\n * Create a stream with no dependencies and no value\n * @return {Function} a flyd stream\n */\nfunction createStream() {\n function s(n) {\n if (arguments.length === 0) return s.val\n updateStreamValue(n, s)\n return s\n }\n s.hasVal = false;\n s.val = undefined;\n s.updaters = [];\n s.listeners = [];\n s.queued = false;\n s.end = undefined;\n\n // fantasy-land compatibility\n s.ap = boundAp;\n s['fantasy-land/map'] = s.map = boundMap;\n s['fantasy-land/ap'] = fantasy_land_ap;\n s['fantasy-land/of'] = s.of = flyd.stream;\n s['fantasy-land/chain'] = s.chain = boundChain;\n\n s.pipe = operator_pipe;\n\n // According to the fantasy-land Applicative specification\n // Given a value f, one can access its type representative via the constructor property:\n // `f.constructor.of`\n s.constructor = flyd.stream;\n\n s.toJSON = function() {\n return s.val;\n }\n s.toString = streamToString;\n return s;\n}\n\n/**\n * @private\n * Create a dependent stream\n * @param {Array} dependencies - an array of the streams\n * @param {Function} fn - the function used to calculate the new stream value\n * from the dependencies\n * @return {stream} the created stream\n */\nfunction createDependentStream(deps, fn) {\n var s = createStream();\n s.fn = fn;\n s.deps = deps;\n s.depsMet = false;\n s.depsChanged = deps.length > 0 ? [] : undefined;\n s.shouldUpdate = false;\n addListeners(deps, s);\n return s;\n}\n\n/**\n * @private\n * Check if all the dependencies have values\n * @param {stream} stream - the stream to check depencencies from\n * @return {Boolean} `true` if all dependencies have vales, `false` otherwise\n */\nfunction initialDependenciesMet(stream) {\n stream.depsMet = stream.deps.every(function(s) {\n return s.hasVal;\n });\n return stream.depsMet;\n}\n\nfunction dependenciesAreMet(stream) {\n return stream.depsMet === true || initialDependenciesMet(stream);\n}\n\nfunction isEnded(stream) {\n return stream.end && stream.end.val === true;\n}\n\nfunction listenersNeedUpdating(s) {\n return s.listeners.some(function(s) { return s.shouldUpdate; });\n}\n\n/**\n * @private\n * Update a dependent stream using its dependencies in an atomic way\n * @param {stream} stream - the stream to update\n */\nfunction updateStream(s) {\n if (isEnded(s) || !dependenciesAreMet(s)) return;\n if (inStream !== undefined) {\n updateLaterUsing(updateStream, s);\n return;\n }\n inStream = s;\n if (s.depsChanged) s.fnArgs[s.fnArgs.length - 1] = s.depsChanged;\n var returnVal = s.fn.apply(s.fn, s.fnArgs);\n if (returnVal !== undefined) {\n s(returnVal);\n }\n inStream = undefined;\n if (s.depsChanged !== undefined) s.depsChanged = [];\n s.shouldUpdate = false;\n if (flushing() === false) flushUpdate();\n if (listenersNeedUpdating(s)) {\n if (!flushingStreamValue) s(s.val)\n else {\n s.listeners.forEach(function(listener) {\n if (listener.shouldUpdate) updateLaterUsing(updateStream, listener);\n });\n }\n }\n}\n\n/**\n * @private\n * Update the dependencies of a stream\n * @param {stream} stream\n */\nfunction updateListeners(s) {\n var i, o, list\n var listeners = s.listeners;\n for (i = 0; i < listeners.length; ++i) {\n list = listeners[i];\n if (list.end === s) {\n endStream(list);\n } else {\n if (list.depsChanged !== undefined) list.depsChanged.push(s);\n list.shouldUpdate = true;\n findDeps(list);\n }\n }\n for (; orderNextIdx >= 0; --orderNextIdx) {\n o = order[orderNextIdx];\n if (o.shouldUpdate === true) updateStream(o);\n o.queued = false;\n }\n}\n\n/**\n * @private\n * Add stream dependencies to the global `order` queue.\n * @param {stream} stream\n * @see updateDeps\n */\nfunction findDeps(s) {\n var i\n var listeners = s.listeners;\n if (s.queued === false) {\n s.queued = true;\n for (i = 0; i < listeners.length; ++i) {\n findDeps(listeners[i]);\n }\n order[++orderNextIdx] = s;\n }\n}\n\nfunction updateLaterUsing(updater, stream) {\n toUpdate.push(stream);\n stream.updaters.push(updater);\n stream.shouldUpdate = true;\n}\n\n/**\n * @private\n */\nfunction flushUpdate() {\n flushingUpdateQueue = true;\n while (toUpdate.length > 0) {\n var stream = toUpdate.shift();\n var nextUpdateFn = stream.updaters.shift();\n if (nextUpdateFn && stream.shouldUpdate) nextUpdateFn(stream);\n }\n flushingUpdateQueue = false;\n}\n\n/**\n * @private\n * Push down a value into a stream\n * @param {stream} stream\n * @param {*} value\n */\nfunction updateStreamValue(n, s) {\n s.val = n;\n s.hasVal = true;\n if (inStream === undefined) {\n flushingStreamValue = true;\n updateListeners(s);\n if (toUpdate.length > 0) flushUpdate();\n flushingStreamValue = false;\n } else if (inStream === s) {\n markListeners(s, s.listeners);\n } else {\n updateLaterUsing(function(s) { updateStreamValue(n, s); }, s);\n }\n}\n\n/**\n * @private\n */\nfunction markListeners(s, lists) {\n var i, list;\n for (i = 0; i < lists.length; ++i) {\n list = lists[i];\n if (list.end !== s) {\n if (list.depsChanged !== undefined) {\n list.depsChanged.push(s);\n }\n list.shouldUpdate = true;\n } else {\n endStream(list);\n }\n }\n}\n\n/**\n * @private\n * Add dependencies to a stream\n * @param {Array} dependencies\n * @param {stream} stream\n */\nfunction addListeners(deps, s) {\n for (var i = 0; i < deps.length; ++i) {\n deps[i].listeners.push(s);\n }\n}\n\n/**\n * @private\n * Removes an stream from a dependency array\n * @param {stream} stream\n * @param {Array} dependencies\n */\nfunction removeListener(s, listeners) {\n var idx = listeners.indexOf(s);\n listeners[idx] = listeners[listeners.length - 1];\n listeners.length--;\n}\n\n/**\n * @private\n * Detach a stream from its dependencies\n * @param {stream} stream\n */\nfunction detachDeps(s) {\n for (var i = 0; i < s.deps.length; ++i) {\n removeListener(s, s.deps[i].listeners);\n }\n s.deps.length = 0;\n}\n\n/**\n * @private\n * Ends a stream\n */\nfunction endStream(s) {\n if (s.deps !== undefined) detachDeps(s);\n if (s.end !== undefined) detachDeps(s.end);\n}\n\n/**\n * @private\n */\n/**\n * @private\n * transducer stream transformer\n */\nfunction StreamTransformer() { }\nStreamTransformer.prototype['@@transducer/init'] = function() { };\nStreamTransformer.prototype['@@transducer/result'] = function() { };\nStreamTransformer.prototype['@@transducer/step'] = function(s, v) { return v; };\n\nmodule.exports = flyd;\n","/* global window */\r\nvar mergeWith = function(t){\r\n\treturn function(a, b){\r\n\t\treturn [].concat(\r\n\t\t\tObject.keys(a),\r\n\t\t\tObject.keys(b)\r\n\t\t)\r\n\t\t.reduce(function(p,k){\r\n\t\t\tp[k] = p[k] || t(a[k], b[k])\r\n\t\t\treturn p\r\n\t\t}, {})\r\n\t}\r\n}\r\n\r\nvar merge = mergeWith(function(a,b){\r\n\treturn b || a\r\n})\r\n\r\nvar add = function(a,b){ return a + b }\r\nvar subtract = function(a,b){ return a - b }\r\n\r\nvar always = function(v){\r\n\treturn function(){\r\n\t\treturn v\r\n\t}\r\n}\r\n\r\nvar mapObj = function(t,o){\r\n\treturn Object.keys(o)\r\n\t\t.reduce(function(p,k){\r\n\t\t\tp[k] = t(o[k])\r\n\t\t\treturn p\r\n\t\t}, {})\r\n}\r\n\r\nvar clamp = function(min, max, value){\r\n\treturn Math.max(Math.min(value, max), min)\r\n}\r\n\r\nvar f = require('flyd')\r\nvar stream = f.stream\r\nvar scan = f.scan\r\nvar on = f.on\r\nvar endsOn = f.endsOn\r\n\r\nvar endsOn_ = f.curryN(2, endsOn)\r\nvar initialCoords = { x:0 , y:0 }\r\n\r\n/**\r\n *\tSets up the zoompoint as the centre of a radius\r\n *\tcreated by 2 pointers.\r\n *\r\n *\tJust like onscale_mousewheel, sets up some state\r\n *\tand then passes it down to onscale() in a uniform format.\r\n */\r\nfunction onscale_fingers(state, a, b){\r\n\r\n\tvar x = [a.pageX, b.pageX]\r\n\t\t.sort(subtract).map(function(v){ return v - state.settings.offset().x })\r\n\tvar y = [a.pageY, b.pageY]\r\n\t\t.sort(subtract).map(function(v){ return v - state.settings.offset().y })\r\n\r\n\r\n\tvar dx = x[1] - x[0]\r\n\tvar dy = y[1] - y[0]\r\n\tvar d = Math.hypot(dx,dy)\r\n\r\n\tif(state.pinching() == 1){\r\n\t\tstate.touchRadius(d)\r\n\t} else {\r\n\t\tvar zoompoint =\r\n\t\t\t{ x: x[1] - dx / 2\r\n\t\t\t, y: y[1] - dy / 2\r\n\t\t\t}\r\n\r\n\t\tvar newScale = state.initialPinchScale() * d / state.touchRadius()\r\n\r\n\t\tonscale(state, zoompoint, newScale)\r\n\t}\r\n}\r\n\r\n/**\r\n * A lot like, onscale_fingers().\r\n * It sets up some state, and then passes it on scale.\r\n *\r\n * Mousewheel just {inc,dec}rements\r\n * a number, unlike fingers, which uses the ratio of changes\r\n * in the radius caused by the fingers.\r\n *\r\n * This function sets toggles state.wheeling while it updates\r\n * the other userfacing streams, so a user could make decisions\r\n * about how they want to react to a scale event.\r\n */\r\nfunction onscale_mousewheel(state, e){\r\n\tif(Math.abs(e.deltaX) < 1e-1){\r\n\t\t// now we tell everyone we are scrolling the mouse wheel\r\n\t\t// so our coords stream doesn't ignore these movements\r\n\t\tstate.wheeling(true)\r\n\r\n\t\t\tvar zoompoint =\r\n\t\t\t\t{ x: e.pageX - state.settings.offset().x\r\n\t\t\t\t, y: e.pageY - state.settings.offset().y\r\n\t\t\t\t}\r\n\r\n\t\t\t// scale more quickly the higher the scale gets\r\n\t\t\tvar next = 0.01 + state.scale() * 1e-1\r\n\t\t\tvar nextScale = state.scale()\r\n\t\t\t\t+ (\r\n\t\t\t\t\te.deltaY > 0\r\n\t\t\t\t\t? - next\r\n\t\t\t\t\t: + next\r\n\t\t\t\t)\r\n\r\n\t\t\tonscale(state, zoompoint, nextScale)\r\n\r\n\t\t\t// sync the pinch scale with the mousewheel scaling\r\n\t\t\t// otherwise, switching from 1 to the other can cause jumps in scale\r\n\t\t\tstate.initialPinchScale(state.scale())\r\n\r\n\t\t\tstate.wheeling(false)\r\n\t\t}\r\n}\r\n\r\n/**\r\n * Calculates how much to move the viewport in order to keep\r\n * the zoompoint in the same position (as a ratio) between zooms\r\n *\r\n * The scale itself, is calculated upstream -\r\n * this tells the user how much they need to shift\r\n * their container to retain the screen position across scales.\r\n */\r\nfunction onscale(state, zoompoint, nextScale){\r\n\tvar scale =\r\n\t\t{ current: state.scale()\r\n\t\t, next: clamp(\r\n\t\t\t\tstate.settings.scale.min, state.settings.scale.max, nextScale\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t// 1. how far into the *current* viewport, the zoompoint is, as a ratio\r\n\t// 2. how far into the *new* viewport, the zoompoint is as a ratio\r\n\t// 3. the correct translation to the new viewport, so those ratios are equal\r\n\t//\r\n\t// In order to get 1. and 2.\r\n\t// We need to know the zoompoint coordinates from the perspective\r\n\t// of each viewport, the translation coords are always in world.\r\n\r\n\tvar bounds = {\r\n\t\tw: window.innerWidth - state.settings.offset().x\r\n\t\t,h: window.innerHeight - state.settings.offset().y\r\n\t}\r\n\r\n\tvar viewports = {\r\n\t\tcurrent: {\r\n\t\t\t// origin of current viewport (0,0)\r\n\t\t\t// in world coordinates (x,y)\r\n\t\t\tx: state.coords().x , y: state.coords().y\r\n\r\n\t\t\t// the dimensions of the viewport, in world coordinates\r\n\t\t\t,w: bounds.w / scale.current\r\n\t\t\t,h: bounds.h / scale.current\r\n\t\t}\r\n\t\t,next: {\r\n\t\t\tx: state.coords().x, y: state.coords().y\r\n\t\t\t,w: bounds.w / scale.next\r\n\t\t\t,h: bounds.h / scale.next\r\n\t\t}\r\n\t}\r\n\r\n\tvar ratios =\r\n\t\t// the ratio the zoom point is into the viewport\r\n\t\t// 0.5 would be the mouse half way through\r\n\t\t// the viewport (but not the window!)\r\n\t\t{ current:\r\n\t\t\t{ x: (zoompoint.x - viewports.current.x) / viewports.current.w\r\n\t\t\t, y: (zoompoint.y - viewports.current.y) / viewports.current.h\r\n\t\t\t}\r\n\r\n\t\t// the next viewport will be slightly bigger or slightly smaller\r\n\t\t// so its ratio will be slightly bigger or smaller\r\n\t\t// we can use the ratio to translate the viewport so our zoompoint\r\n\t\t// doesn't drift as we scale\r\n\t\t, next:\r\n\t\t\t{ x: (zoompoint.x - viewports.next.x) / viewports.next.w\r\n\t\t\t, y: (zoompoint.y - viewports.next.y) / viewports.next.h\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t// we now have the ratios that allow us to compare\r\n\t// how much the zoompoint would drift\r\n\t// but our code above, assumes both viewports have the same origin\r\n\t// this means the container that is being scaled\r\n\t// must have transform-origin set to \"top left\"\r\n\t//\r\n\t// with that out of the way, lets figure out how to\r\n\t// compensate for the scale drift\r\n\t// we find the difference between the two ratios,\r\n\t// and we multiply that difference\r\n\t// by the dimensions of the new viewport\r\n\tvar zoomDrift =\r\n\t\t{ x: (ratios.next.x - ratios.current.x) * viewports.current.w * -1\r\n\t\t, y: (ratios.next.y - ratios.current.y) * viewports.current.h * -1\r\n\t\t}\r\n\r\n\r\n\r\n\t// apply the zoom drift to the container\r\n\t// so our zoom point is always in the same \"spot\"\r\n\t// at whatever zoom level\r\n\tstate.movement(zoomDrift)\r\n\tstate.move(zoompoint)\r\n\r\n\t// apply our new scale so the container can update\r\n\tstate.scale(scale.next)\r\n}\r\n\r\n/**\r\n * By incrementing, it would be quite trivial\r\n * to create a custom longtap/click stream\r\n * in userland\r\n */\r\nfunction onmousedown(state,e ){\r\n\tif(state.container().contains(e.target)){\r\n\t\tstate.mousedown(state.mousedown()+1)\r\n\t}\r\n}\r\n\r\n/**\r\n * Reset mousedown, dragging and pinching.\r\n * Save the pinchScale so we have a base scale\r\n * to work with next time\r\n */\r\nfunction onmouseup(state, e){\r\n\tstate.mousedown(0)\r\n\tstate.dragging(false)\r\n\tstate.selectingText(false)\r\n\r\n\tif(e.touches && e.touches.length){\r\n\t\tstate.pinching(0)\r\n\t\tstate.initialPinchScale( state.scale() )\r\n\t}\r\n}\r\n\r\n/**\r\n *\tManages a few states. Dragging, mouse position.\r\n *\tTriggers pinch zoom, if there are many touches.\r\n *\r\n *\tOtherwise it treats a dragging finger, just like\r\n *\ta click and drag gesture with a mouse\r\n */\r\nfunction onmousemove(state, e){\r\n\r\n\tif( state.selectingText() ){\r\n\t} else {\r\n\t\t/**\r\n\t\t * Fig 1.\r\n\t\t * This may seem unnecessary to check if the state is pinching.\r\n\t\t * Seeing as we are the onces that set it.\r\n\t\t *\r\n\t\t * But its important to remember that this handler will accept\r\n\t\t * events from both the mouse and fingers. And if the mouse happens to be\r\n\t\t * on screen when someone decides to pinch, it will conflict and jump\r\n\t\t * to the mouse's coordinates; if the condtion in Fig 1. is not present\r\n\t\t */\r\n\r\n\t\tvar touches = e.touches || []\r\n\t\tvar event = touches[0] || e\r\n\r\n\t\tif(touches.length > 1){\r\n\t\t\t// +1 how long have we been pinching for?\r\n\t\t\tstate.pinching(state.pinching()+1)\r\n\t\t\tonscale_fingers(state, e.touches[0], e.touches[1])\r\n\r\n\t\t} else if( !state.pinching() ) { // Fig 1.\r\n\r\n\r\n\t\t\tvar x = event.pageX - state.settings.offset().x\r\n\t\t\tvar y = event.pageY - state.settings.offset().y\r\n\r\n\t\t\tif(state.mousedown() > 2){\r\n\t\t\t\tif( state.settings.ignoreTextSelect && !state.selectingText() ){\r\n\t\t\t\t\tstate.selectingText(\r\n\t\t\t\t\t\t(getSelection()+\"\").length > 0\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!state.selectingText() && state.mousedown() > 3){\r\n\r\n\t\t\t\tstate.dragging(state.mousedown())\r\n\t\t\t\tvar movement =\r\n\t\t\t\t\t{ x: (x - state.move().x) * state.polarity().x\r\n\t\t\t\t\t, y: (y - state.move().y) * state.polarity().y\r\n\t\t\t\t\t}\r\n\t\t\t\tstate.movement(movement)\r\n\t\t\t}\r\n\r\n\t\t\tstate.move({ x:x, y:y })\r\n\t\t}\r\n\r\n\t\t// It is possible to move the mouse without having the mouse down\r\n\t\t// We only want to increment, if we are already incrementing.\r\n\t\tstate.mousedown(\r\n\t\t\tstate.mousedown()\r\n\t\t\t+ (\r\n\t\t\t\tstate.mousedown() > 0\r\n\t\t\t\t? 1\r\n\t\t\t\t: 0\r\n\t\t\t)\r\n\t\t)\r\n\t}\r\n}\r\n\r\nfunction streamFromEvent(container, event, endStream){\r\n\tvar s = stream()\r\n\tvar processed = true\r\n\tcontainer.addEventListener(event, function(e){\r\n\t\tif( processed ){\r\n\t\t\tprocessed = false\r\n\t\t\trequestAnimationFrame(function(){\r\n\t\t\t\ts(e)\r\n\t\t\t\tprocessed=true\r\n\t\t\t})\r\n\t\t}\r\n\t})\r\n\ton(function(){\r\n\t\tcontainer.removeEventListener(event,s)\r\n\t}, s.end )\r\n\treturn endsOn(endStream, s)\r\n}\r\n\r\nvar defaultOptions = {\r\n\toffset: { x:0 , y:0 }\r\n\t,scale: { min:0.5, max:40 }\r\n\t,coords: { min: { x: -Infinity, y: -Infinity}, max: { x: Infinity, y: Infinity } }\r\n}\r\nfunction Pointer(options){\r\n\toptions = options || defaultOptions\r\n\toptions.offset = options.offset || defaultOptions.offset\r\n\toptions.scale = options.scale || defaultOptions.scale\r\n\toptions.manualActivation = options.manualActivation || false\r\n\toptions.container = options.container || always(document.body)\r\n\r\n\toptions.coords = options.coords || defaultOptions.coords\r\n\toptions.polarity = options.polarity || { x: 1, y: 1 }\r\n\toptions.ignoreTextSelect = options.ignoreTextSelect || false\r\n\r\n\tconst selectingText = stream(false)\r\n\r\n\tvar x = options.offset.x\r\n\tvar y = options.offset.y\r\n\tvar min = options.scale.min\r\n\tvar max = options.scale.max\r\n\t/**\r\n\t * Pass `true` into this stream and it will\r\n\t * destroy all event lsiteners and internal streams\r\n\t */\r\n\tvar end = stream()\r\n\r\n\tvar offset = stream({\r\n\t\tx:x\r\n\t\t,y:y\r\n\t})\r\n\r\n\t/**\r\n\t * Flip polarity for x/y axis to change behavour of event handlers\r\n\t */\r\n\tvar polarity = stream(options.polarity)\r\n\t/*\r\n\t* A stream of numbers that increments for every\r\n\t* mousemove event.\r\n\t* Resets to 0 on mouseup/touchend\r\n\t*/\r\n\tvar mousedown = stream(0)\r\n\r\n\t/**\r\n\t * A stream of increment translations.\r\n\t * Useful if you want to apply incremental translations\r\n\t * in sync with coords updating.\r\n\t */\r\n\tvar movement = stream(initialCoords)\r\n\r\n\t/**\r\n\t * The last known coordinates of the pointer as a stream\r\n\t */\r\n\tvar move = stream(initialCoords)\r\n\r\n\t/**\r\n\t * A stream of booleans indicating whether we are currently dragging\r\n\t */\r\n\r\n\tvar dragging = stream(false)\r\n\t/**\r\n\t * A stream of booleans indicating whether we are currently pinching\r\n\t */\r\n\tvar pinching = stream(0)\r\n\r\n\t/**\r\n\t * A stream of booleans indicating whether we are currently wheeling\r\n\t */\r\n\tvar wheeling = stream(0)\r\n\r\n\t/**\r\n\t * A stream of the current scale of the viewport.\r\n\t * Responds to mouse wheel and pinchzoom\r\n\t */\r\n\tvar scale = stream(1)\r\n\r\n\t/**\r\n\t *\tThe viewport scale at the end of the last pinch gesture.\r\n\t *\tUsed internally, but exposed because why not?\r\n\t */\r\n\tvar initialPinchScale = stream(1)\r\n\r\n\t/**\r\n\t *\tThe radius of the circle created by the first two touches in\r\n\t * in the event.touches array.\r\n\t *\r\n\t *\tUsed internally to calculate the scale.\r\n\t */\r\n\tvar touchRadius = stream(1)\r\n\r\n\r\n\t/**\r\n\t * A predicate true if we are either dragging or zooming\r\n\t */\r\n\tvar notHover = function() {\r\n\r\n\t\treturn [dragging,pinching,wheeling]\r\n\t\t\t.some(function(s){\r\n\t\t\t\treturn s()\r\n\t\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t*\tThe coords you should translate your canvas or container\r\n\t*\tAdds all movements to a vector when either dragging or zooming\r\n\t*\tThese coords are global, so you should apply them _before_ scaling\r\n\t*/\r\n\tvar coords = scan(\r\n\t\tfunction(p, n) {\r\n\t\t\tif( notHover() ){\r\n\t\t\t\treturn {\r\n\t\t\t\t\tx: clamp(options.coords.min.x, options.coords.max.x, p.x + n.x)\r\n\t\t\t\t\t,y: clamp(options.coords.min.y, options.coords.max.y, p.y + n.y)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn p\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\t,initialCoords\r\n\t\t,movement\r\n\t)\r\n\r\n\t/**\r\n\t *\tAll the state streams that get passed to the event handlers.\r\n\t *\tThis is also the public API of the pointer instance.\r\n\t */\r\n\r\n\tvar state =\r\n\t\tmerge(\r\n\t\t\t{\r\n\t\t\t\tsettings: {\r\n\t\t\t\t\tscale: { min:min, max:max }, offset:offset\r\n\t\t\t\t\t,coords: options.coords\r\n\t\t\t\t\t,ignoreTextSelect: options.ignoreTextSelect\r\n\t\t\t\t}\r\n\t\t\t\t,container: options.container\r\n\r\n\t\t\t\t/**\r\n\t\t\t\t * Create a stream for event.\r\n\t\t\t\t * The event stream will be destroyed when the end stream\r\n\t\t\t\t * receives `true` as a value.\r\n\t\t\t\t *\r\n\t\t\t\t * Also passes in the state to each handler.\r\n\t\t\t\t */\r\n\t\t\t\t,activateListeners: function(){\r\n\t\t\t\t\t;[\r\n\t\t\t\t\t\t,[onmousedown, 'mousedown']\r\n\t\t\t\t\t\t,[onmouseup, 'mouseup']\r\n\t\t\t\t\t\t,[onmousemove, 'mousemove']\r\n\t\t\t\t\t\t,[onmouseup, 'touchend']\r\n\t\t\t\t\t\t,[onmousedown, 'touchstart']\r\n\t\t\t\t\t\t,[onmousemove, 'touchmove']\r\n\t\t\t\t\t]\r\n\t\t\t\t\t.concat(\r\n\t\t\t\t\t\toptions.disable_mousewheel\r\n\t\t\t\t\t\t\t? []\r\n\t\t\t\t\t\t\t: [[onscale_mousewheel, 'wheel']]\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.map(function(pair){\r\n\t\t\t\t\t\tvar handler = pair[0]\r\n\t\t\t\t\t\tvar eventName = pair[1]\r\n\t\t\t\t\t\tvar container = options.container()\r\n\t\t\t\t\t\treturn streamFromEvent(window, eventName, end).map(\r\n\t\t\t\t\t\t\tfunction(e){\r\n\t\t\t\t\t\t\t\treturn handler(state, e)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t,mapObj(endsOn_(end), {\r\n\t\t\t\tmousedown:mousedown\r\n\t\t\t\t,movement:movement\r\n\t\t\t\t,move:move\r\n\t\t\t\t,dragging:dragging\r\n\t\t\t\t,pinching:pinching\r\n\t\t\t\t,wheeling:wheeling\r\n\t\t\t\t,scale:scale\r\n\t\t\t\t,initialPinchScale:initialPinchScale\r\n\t\t\t\t,touchRadius:touchRadius\r\n\t\t\t\t,coords:coords\r\n\t\t\t\t,selectingText: selectingText\r\n\t\t\t\t,polarity: polarity\r\n\t\t\t\t,end:end\r\n\r\n\t\t\t})\r\n\t\t)\r\n\r\n\tif( !options.manualActivation ){\r\n\t\tstate.activateListeners()\r\n\t}\r\n\r\n\t/**\r\n\t * Give the user access to coords, scale and other streams.\r\n\t */\r\n\treturn state\r\n\r\n}\r\n\r\nglobal.PointerStream = Pointer\r\nmodule.exports = Pointer\r\n\r\n","module.exports = require('./lib')\r\n","export default function(event) {\n\tevent.preventDefault()\n\t// event.stopPropagation()\n\treturn false\n}","/* eslint-disable */\r\nexport default {\r\n\tdark: 'var(--color-dark)'// '#24394b'\r\n\t,mid: 'var(--color-mid)'//'#3c4f5f' // 'rgb(12, 15, 39)'\r\n\t,light: 'var(--color-light)'// '#e6eefa'\r\n\t,selected: 'var(--color-selected)' //'#f1f9ff'\r\n\t,muted: 'var(--color-muted)' // '#c0c4c7'\r\n\t,empty: 'var(--color-empty)' //'#577288'\r\n\t,github_selected: 'var(--color-github-selected)' // '#4078C0'\r\n\t,blackboard: 'var(--color-blackboard)' // '#2F3031' // 'hsl(254, 72%, 5%)'\r\n}\r\n","/* globals innerWidth */\n\nimport m from 'bacta'\nimport * as R from 'ramda'\n\nimport moment from 'moment'\nimport css from '../../utils/css'\n\nconst {percent, em, px, vw, seconds} = css.units\nconst {translate, translateY} = css.funcs\nimport colors from '../../utils/colors'\n\n/**\n *\n *\tA touch and mouse friendly date/time indicator.\n *\tContextually shows years/months/days based on your zoom level.\n *\n * Refer to ./readme.md for more information.\n */\n\nexport default function Dates({\n\tcontainer\n\t, dateContainer\n\t, pointer\n\t, xScale\n\t, currentTime\n\t, redraw\n\t, DAY_MILLIS\n}){\n\n\tconst containerDimensions =\n\t\tcontainer.map(function(el){\n\t\t\tconst { width,height } =\n\t\t\t\tel.getBoundingClientRect()\n\n\t\t\treturn {\n\t\t\t\twidth\n\t\t\t\t,height\n\t\t\t}\n\n\t\t})\n\n\tconst daysWidth = (days) => days * xScale * pointer.scale()\n\n\tconst itemsRequired = (days, container) =>\n\t\t(\n\t\t\tcontainer\n\t\t\t? container.width / daysWidth(days)\n\t\t\t: innerWidth / daysWidth(days)\n\t\t)\n\t\t// if it doesn't evenly divide we need to see the oncoming item\n\t\t+ 1\n\n\tconst style = {\n\t\tmain: () => R.merge(\n\t\t\t{\n\t\t\t\tleft: em(0)\n\t\t\t\t,position: css.position.absolute\n\t\t\t\t,width: percent(100)\n\t\t\t\t,height: '3em'\n\t\t\t\t,backgroundColor: colors.mid\n\t\t\t\t,overflow: css.overflow.hidden\n\t\t\t\t,borderTop: '1px solid #1a2154'\n\t\t\t\t,boxSizing: 'content-box'\n\t\t\t}\n\t\t\t, { bottom: em(0) }\n\t\t)\n\t\t,container:function(){\n\t\t\treturn {\n\t\t\t\ttransform: translate(\n\t\t\t\t\tpx(-currentTime()/DAY_MILLIS * xScale * pointer.scale()),\n\t\t\t\t\tpx(0)\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t,label: (label) => {\n\t\t\t// const fontSize = R.clamp(1, 40, pointer.scale * label.size)\n\n\t\t\tconst fontSize = R.clamp(1, 4)(pointer.scale() * label.size)\n\n\t\t\treturn {\n\n\t\t\t\tlineHeight: em(3 / fontSize)\n\t\t\t\t,fontSize: em(fontSize)\n\t\t\t\t,textAlign: css.textAlign.center\n\t\t\t\t,position: css.position.absolute\n\t\t\t\t,transform: translate(\n\t\t\t\t\tpx( label.day * xScale * pointer.scale() )\n\t\t\t\t\t,px(0)\n\t\t\t\t)\n\t\t\t\t,width: px( label.days * xScale * pointer.scale() )\n\t\t\t}\n\t\t}\n\t\t,currentTime: () => ({\n\t\t\tposition: css.position.absolute\n\t\t\t,top: em(0)\n\t\t\t,left: em(0)\n\t\t\t,width: em(1)\n\t\t\t,height: vw(100)\n\t\t})\n\t}\n\n\tconst lessThan = R.flip(R.lt)\n\n\tconst monthVisible = pointer.scale.map(lessThan(3.8))\n\n\tconst dayVisible = monthVisible.map(R.not)\n\n\tconst Visibility = ({offY, onY, toggleOpacity}) => function(visible){\n\n\t\treturn {\n\t\t\topacity: toggleOpacity ? visible ? 1 : 0 : 1\n\t\t\t, transform: translateY(\n\t\t\t\t3 * (visible ? onY : offY) + 'em'\n\t\t\t)\n\t\t\t,transition: seconds(0.5)\n\t\t}\n\t}\n\n\tconst monthVisibility = monthVisible.map(\n\t\tVisibility({offY:-1, onY:0, toggleOpacity: false})\n\t)\n\tconst dayVisibility = dayVisible.map(\n\t\tVisibility({offY:1, onY:0, toggleOpacity: true})\n\t)\n\tconst Labels = ({type, format, days, size, indexes}) =>\n\t\tfunction(currentTime) {\n\t\t\treturn indexes().map(function(i){\n\t\t\t\tconst m = moment(currentTime)\n\t\t\t\t\t.startOf(type)\n\t\t\t\t\t.add( moment.duration(i, type) )\n\n\t\t\t\treturn {\n\t\t\t\t\tmoment: m\n\t\t\t\t\t, day: m / DAY_MILLIS\n\t\t\t\t\t, days: days(m)\n\t\t\t\t\t, label: m.format(format())\n\t\t\t\t\t, size: size()\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\tconst dayLabels = currentTime.map(\n\t\tLabels({\n\t\t\tformat: () =>\n\t\t\t\tpointer.scale() > 15 ? 'Do MMMM YYYY'\n\t\t\t\t: pointer.scale() > 12 ? 'Do MMMM'\n\t\t\t\t: pointer.scale() > 10 ? 'Do MMM'\n\t\t\t\t: 'DD/MM'\n\t\t\t, days: R.always(1)\n\t\t\t, type: 'day'\n\t\t\t, size: () => 0.01\n\t\t\t, indexes: () =>\n\t\t\t\tdayVisible()\n\t\t\t\t? R.range(0,\n\t\t\t\t\t// how many days can fit in the screen width\n\t\t\t\t\titemsRequired(1, containerDimensions())\n\t\t\t\t)\n\t\t\t\t: []\n\t\t})\n\t)\n\n\tconst monthLabels = currentTime.map(\n\t\tLabels({\n\t\t\ttype: 'month'\n\t\t\t, format: () => \"MMMM YYYY\"\n\t\t\t, days: m => m.endOf('month').date()\n\t\t\t, size: R.always(0.2)\n\t\t\t, indexes:\n\t\t\t\tR.pipe(\n\t\t\t\t\t() => containerDimensions()\n\t\t\t\t\t// how many months fit in the screen?\n\t\t\t\t\t, d => itemsRequired(31, d)\n\t\t\t\t\t// build a list of indexes [1-n]\n\t\t\t\t\t, R.range(0)\n\t\t\t\t)\n\t\t})\n\t)\n\n\tmonthLabels.map(function(){\n\t\treturn redraw()\n\t})\n\n\treturn function(){\n\t\treturn m('div.datebar',\n\t\t\t{ oncreate: ({ dom }) => dateContainer(dom), style: style.main() }\n\t\t\t,m('div.time-container', { style: style.container() }\n\t\t\t\t,m('div', { style: monthVisibility() }\n\t\t\t\t\t,(monthLabels() || []).map(\n\t\t\t\t\t\tl => m('div', {\n\t\t\t\t\t\t\tstyle: style.label(l)\n\t\t\t\t\t\t\t,key: l.moment.valueOf()\n\t\t\t\t\t\t}, l.label)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('div', { style: dayVisibility() }\n\t\t\t\t\t,(dayLabels() || []).map(\n\t\t\t\t\t\tl => m('div', {\n\t\t\t\t\t\t\tstyle:style.label(l)\n\t\t\t\t\t\t\t,key: l.moment.valueOf()\n\t\t\t\t\t\t}, l.label)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,m('div', { style: style.currentTime() })\n\t\t\t)\n\t\t)\n\t}\n}","function pointAsBounds({x,y}) {\n\treturn [ y, x, y, x]\n}\n\nfunction normalize([top,left,bottom,right] ){\n\tconst [TOP,BOTTOM] =\n\t\ttop > bottom\n\t\t? [bottom,top]\n\t\t: [top,bottom]\n\n\tconst [LEFT,RIGHT] =\n\t\tleft > right\n\t\t? [right,left]\n\t\t: [left,right]\n\n\treturn [TOP, LEFT, BOTTOM, RIGHT]\n}\n\nfunction contains(bounds, point){\n\treturn intersects(bounds, pointAsBounds(point) )\n}\n\nfunction intersects(a, b){\n\treturn !outside(a, b)\n}\n\nfunction outside (\n\t[top,left,bottom,right]\n\t,[TOP,LEFT,BOTTOM,RIGHT]\n) {\n\n\treturn RIGHT < left\n\t\t|| LEFT > right\n\t\t|| TOP > bottom\n\t\t|| BOTTOM < top\n}\n\nexport default\n\t{ pointAsBounds\n\t, normalize\n\t, contains\n\t, intersects\n\t, outside\n\t}","import m from 'bacta'\nimport * as R from 'ramda'\nimport * as elements from '../../components/elements'\nimport { money as makeMoney } from '../../utils/regExes'\nimport { Dark as newDetailsPane } from '../../components/detailspane2'\nimport moment from 'moment'\nimport { prop as stream } from '../../../../stream'\n\nfunction DetailsPane({ attrs: world }){\n\n\tconst active =\n\t\tworld.selectedProject.map(Boolean)\n\n\tconst selectedAllocationDiscipline =\n\t\tworld.selectedAllocationDiscipline\n\n\tconst heading =\n\t\tworld.selectedProject.map(\n\t\t\tp => p ? p.project_name : ''\n\t\t)\n\n\tconst fieldView =\n\t\t([heading, value]) =>\n\t\t\t[ elements.list([\n\t\t\t\tm('label.control-label', heading+':')\n\t\t\t\t,value\n\t\t\t])\n\t\t\t]\n\t\t\t.map(\n\t\t\t\tlist => {\n\n\t\t\t\t\tlist.attrs.style =\n\t\t\t\t\t\tObject.assign({}, list.attrs.style, {\n\t\t\t\t\t\t\tmaxHeight: '20em'\n\t\t\t\t\t\t\t,overflowY: 'auto'\n\t\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}\n\t\t\t)\n\n\tconst hashToFieldViews = function(hash) {\n\t\treturn hash\n\t\t\t? R.toPairs(hash).map(fieldView)\n\t\t\t// [\n\t\t\t// \tR.toPairs(hash).map(fieldView)\n\t\t\t// \t,elements.selectbuttons(\n\t\t\t// \t\t['Total Period', 'Work-Day Average']\n\t\t\t// \t\t,dailyAverage\n\t\t\t// \t\t,{\n\t\t\t// \t\t\tdisabled: false\n\t\t\t// \t\t\t,title: `Calulation representation`\n\t\t\t// \t\t}\n\t\t\t// \t)\n\t\t\t// ]\n\t\t\t: null\n\t}\n\n\n\tconst completionPercentage = function(project){\n\t\treturn (project.project_completion * 100).toFixed(2) + '%'\n\t}\n\n\tconst localDate = (v) => moment(v).format(\"ll\")\n\n\tconst forecastEnd = function( project ) {\n\t\treturn localDate(\n\t\t\tR.last(\n\t\t\t\tworld.byProject()[ project.project_id ]\n\t\t\t)\n\t\t\t.allocations_allocation_date\n\t\t)\n\t}\n\n\tconst dailyAverage = world.scoped('Total Period')\n\n\tconst disciplineCalculated =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.selectedAllocation\n\t\t\t\t,world.coalatedSelectedVersion\n\t\t\t]\n\t\t).map(([a, c]) =>\n\t\t\ta && a.discipline_id\n\t\t\t\t? c[a.discipline_id] || {}\n\t\t\t\t: {}\n\t\t)\n\n\tconst disciplineCalculatedView =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tdailyAverage\n\t\t\t\t,disciplineCalculated\n\t\t\t]\n\t\t).map(([d, p]) =>\n\t\t\td == 'Total Period'\n\t\t\t\t? makeMoney(p.accruedProfits) + \" | \"\n\t\t\t\t\t+ makeMoney(p.outstandingProfits) + \" | \"\n\t\t\t\t\t// makeMoney(p.currentProfits) + \" | \" +\n\t\t\t\t\t+ makeMoney(p.forecastedProfits)\n\t\t\t\t: makeMoney(p.accruedDailyProfits)\n\t\t\t\t\t+ \" | \" + makeMoney(p.outstandingDailyProfits)\n\t\t\t\t\t// + \" | \" + makeMoney(p.currentDailyProfits)\n\t\t\t\t\t+ \" | \" + makeMoney(p.forecastedDailyProfits)\n\t\t)\n\n\tconst projectCalculated =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.selectedAllocation\n\t\t\t\t,world.selectedProject\n\t\t\t\t,world.coalatedSelectedVersion\n\t\t\t]\n\t\t).map(([a, p, c]) =>\n\t\t\ta && a.project_id\n\t\t\t\t? c[a.project_id] || {}\n\t\t\t: p && p.project_id\n\t\t\t\t? c[p.project_id] || {}\n\t\t\t\t: {}\n\t\t)\n\n\tconst projectCalculatedView =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tdailyAverage\n\t\t\t\t,projectCalculated\n\t\t\t]\n\t\t).map(([d, p]) =>\n\t\t\td == 'Total Period'\n\t\t\t\t? makeMoney(p.accruedProfits) + \" | \"\n\t\t\t\t\t+ makeMoney(p.outstandingProfits) + \" | \"\n\t\t\t\t\t// makeMoney(p.currentProfits) + \" | \" +\n\t\t\t\t\t+ makeMoney(p.forecastedProfits)\n\t\t\t\t: makeMoney(p.accruedDailyProfits)\n\t\t\t\t\t+ \" | \" + makeMoney(p.outstandingDailyProfits)\n\t\t\t\t\t// + \" | \" + makeMoney(p.currentDailyProfits)\n\t\t\t\t\t+ \" | \" + makeMoney(p.forecastedDailyProfits)\n\t\t)\n\n\n\tconst todaysInvoices = stream.merge(\n\t\t\t[\n\t\t\t\tworld.selectedAllocation\n\t\t\t\t,world.calculatedData\n\t\t\t\t,world.selectedVersion\n\t\t\t]\n\t\t).map(([a, cd, sv]) =>\n\t\t\ta && a.allocation_id\n\t\t\t\t? (cd[sv.schedule_version_id + '0Infinity'] || {focussedInvoices:[]})\n\t\t\t\t['focussedInvoices']\n\t\t\t\t.filter((i) =>\n\t\t\t\t\ti.allocation_id()\n\t\t\t\t\t== a.allocation_id\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst allocatioCrewnData =\n\t\tworld.selectedAllocation.map((a) =>\n\t\t\ta\n\t\t\t\t? R.unnest(\n\t\t\t\t\ta.allocations_contractors\n\t\t\t\t\t\t.map((ac) =>\n\t\t\t\t\t\t\tac.allocations_contractors_crews\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\n\tconst disciplineContract =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.allContractItemsIndexByItemID\n\t\t\t\t,world.selectedAllocation\n\t\t\t]\n\t\t).map(([allContractItemsIndexByItemID, a]) =>\n\t\t\ta\n\t\t\t\t? allContractItemsIndexByItemID[a.organizations_disciplines_id] || []\n\t\t\t\t: []\n\t\t)\n\n\tconst crewDayContracts =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.allContractItemsIndexByItemID\n\t\t\t\t,allocatioCrewnData\n\t\t\t\t,world.auth.stream\n\t\t\t]\n\t\t).map(([allContractItemsIndexByItemID,allocatioCrewnData, auth]) =>\n\t\t\tR.unnest(\n\t\t\t\tallocatioCrewnData.map((acc) =>\n\n\t\t\t\t\t\tacc.user_id\n\t\t\t\t\t\t== auth.user_id\n\t\t\t\t\t\t|| world.readContractPermissions()\n\n\t\t\t\t\t\t? allContractItemsIndexByItemID[acc.crew_id] || []\n\t\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst crewWorkContracts =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.allContractItemsIndexByItemID\n\t\t\t\t,allocatioCrewnData\n\t\t\t\t,world.auth.stream\n\t\t\t]\n\t\t).map(([allContractItemsIndexByItemID, allocatioCrewnData, auth]) =>\n\t\t\tR.unnest(\n\t\t\t\tallocatioCrewnData.map((acc) =>\n\n\t\t\t\t\t\tacc.user_id\n\t\t\t\t\t\t== auth.user_id\n\t\t\t\t\t\t|| world.readContractPermissions()\n\n\t\t\t\t\t\t? allContractItemsIndexByItemID[\n\t\t\t\t\t\t\tacc.crews_discipline_rates[0].crews_discipline_rates_id\n\t\t\t\t\t\t] || []\n\t\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst userDayContracts =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.allContractItemsIndexByItemID\n\t\t\t\t,world.auth.stream\n\t\t\t\t,world.timesheets\n\t\t\t]\n\t\t).map(([allContractItemsIndexByItemID, auth, timesheets]) =>\n\t\t\tR.unnest(\n\t\t\t\ttimesheets.map((t) =>\n\t\t\t\t\tt.user_id\n\t\t\t\t\t== auth.user_id\n\t\t\t\t\t|| world.readContractPermissions()\n\t\t\t\t\t\t? allContractItemsIndexByItemID[t.user_id()] || []\n\t\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst resourceContracts =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.allContractItemsIndexByItemID\n\t\t\t\t,world.auth.stream\n\t\t\t\t,world.selectedAllocation\n\t\t\t]\n\t\t).map(([allContractItemsIndexByItemID, auth, a]) =>\n\t\t\tR.unnest(\n\t\t\t\ta\n\t\t\t\t\t? a.allocations_contractors.map((ac) =>\n\n\t\t\t\t\t\t\tac.user_id\n\t\t\t\t\t\t\t== auth.user_id\n\t\t\t\t\t\t\t|| world.readContractPermissions()\n\n\t\t\t\t\t\t\t? allContractItemsIndexByItemID[ac.contractor_id] || []\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t)\n\t\t\t\t\t: []\n\t\t\t)\n\t)\n\n\tconst allocationDollarsArray =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tuserDayContracts\n\t\t\t\t,crewDayContracts\n\t\t\t\t,crewWorkContracts\n\t\t\t\t,disciplineContract\n\t\t\t\t,todaysInvoices\n\t\t\t\t,world.selectedAllocation\n\t\t\t\t,world.timesheets\n\t\t\t\t,allocatioCrewnData\n\t\t\t\t,resourceContracts\n\t\t\t]\n\t\t).map(([\n\t\t\tuserDayContracts\n\t\t\t,crewDayContracts\n\t\t\t,crewWorkContracts\n\t\t\t,disciplineContract\n\t\t\t,todaysInvoices\n\t\t\t,a\n\t\t\t,timesheets\n\t\t\t,allocatioCrewnData\n\t\t\t,resourceContracts\n\t\t]) =>\n\t\t\ta && a.allocations_allocation_date\n\t\t\t\t? R.unnest(\n\t\t\t\t\t[].concat(\n\t\t\t\t\t\tuserDayContracts\n\t\t\t\t\t\t,crewDayContracts\n\t\t\t\t\t\t,crewWorkContracts\n\t\t\t\t\t\t,disciplineContract\n\t\t\t\t\t\t,todaysInvoices\n\t\t\t\t\t\t,resourceContracts\n\t\t\t\t\t)\n\t\t\t\t\t.filter((cItems) => cItems.contract_items_applied != false )\n\t\t\t\t\t.map((contractItem) => {\n\n\t\t\t\t\t\t// when resources are deleted and old versions still have resources the below errors at crews_discipline_rates[0]\n\t\t\t\t\t\tconst fAmount = !contractItem.crew_id && !contractItem.user_id\n\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t? R.sum(\n\t\t\t\t\t\t\t\t\tallocatioCrewnData.map((acc) =>\n\t\t\t\t\t\t\t\t\t\tacc.allocations_contractors_crews_work_forecasted\n\t\t\t\t\t\t\t\t\t\t* acc.allocations_contractors_crews_work_application\n\t\t\t\t\t\t\t\t\t\t|| 0\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: allocatioCrewnData.find((acc) =>\n\t\t\t\t\t\t\t\t\tacc.crews_discipline_rates[0]\n\t\t\t\t\t\t\t\t\t&& acc.crews_discipline_rates[0].crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t) || {\n\t\t\t\t\t\t\t\t\tallocations_contractors_crews_work_forecasted: 0\n\t\t\t\t\t\t\t\t\t,allocations_contractors_crews_work_application: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: 1\n\n\n\t\t\t\t\t\treturn world.criteriaBasedCalculation(\n\t\t\t\t\t\t\tcontractItem\n\t\t\t\t\t\t\t, contractItem.invoice_id\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tincriment: 'invoice'\n\t\t\t\t\t\t\t\t\t,forecastedWorkAmount: null\n\t\t\t\t\t\t\t\t\t,forecastedDamagesAmount: null\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tincriment: 'contract'\n\t\t\t\t\t\t\t\t\t,forecastedWorkAmount:\n\t\t\t\t\t\t\t\t\t\t!contractItem.crew_id && !contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t\t? fAmount\n\t\t\t\t\t\t\t\t\t\t\t\t: fAmount.allocations_contractors_crews_work_forecasted\n\t\t\t\t\t\t\t\t\t\t\t\t* fAmount.allocations_contractors_crews_work_application\n\t\t\t\t\t\t\t\t\t\t\t: 1\n\n\t\t\t\t\t\t\t\t\t,accruedAmount: !contractItem.crew_id && !contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t? contractItem.organizations_disciplines_id\n\t\t\t\t\t\t\t\t\t\t\t? R.sum(\n\t\t\t\t\t\t\t\t\t\t\t\tallocatioCrewnData.map((acc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tacc.allocations_contractors_crews_work_completed || 0\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t\t\t\tallocatioCrewnData.find((acc) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tacc.crews_discipline_rates[0].crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t== contractItem.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t\t\t) || {allocations_contractors_crews_work_completed: 0}\n\t\t\t\t\t\t\t\t\t\t\t).allocations_contractors_crews_work_completed\n\t\t\t\t\t\t\t\t\t\t: contractItem.contract_items_recorded_reference != 'Timesheets'\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: contractItem.crew_id\n\t\t\t\t\t\t\t\t\t\t\t\t? timesheets.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tt.crew_id() == contractItem.crew_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& t.allocation_id() == a.allocation_id\n\t\t\t\t\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t\t\t\t\t\t: timesheets.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tt.user_id() == contractItem.user_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& t.allocation_id() == a.allocation_id\n\t\t\t\t\t\t\t\t\t\t\t\t).length\n\n\t\t\t\t\t\t\t\t\t,forecastedDamagesAmount:\n\t\t\t\t\t\t\t\t\t\ta.allocations_allocation_date\n\t\t\t\t\t\t\t\t\t\t>= new Date(contractItem.contractEnd).getTime()\n\t\t\t\t\t\t\t\t\t\t&& a.allocations_allocation_date\n\t\t\t\t\t\t\t\t\t\t<= new Date(contractItem.damagesEnd).getTime()\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: []\n\t\t)\n\t/* eslint-enable */\n\n\tconst allocationDollars =\n\t\tallocationDollarsArray.map((iArray) =>\n\t\t\tR.reduce(\n\t\t\t\tworld.accumulator\n\t\t\t\t,{\n\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t,budget: 0\n\t\t\t\t}\n\t\t\t\t,R.unnest(iArray)\n\t\t\t)\n\t\t)\n\n\tconst todaysProfits =\n\t\tallocationDollars.map((t) =>\n\t\t\tmakeMoney(t.accruedProfits)\n\t\t\t+ \" | \"\n\t\t\t+ makeMoney(t.outstandingProfits)\n\t\t\t+ \" | \"\n\t\t\t// makeMoney(t.currentProfits)\n\t\t\t// + \" | \" +\n\t\t\t+ makeMoney(t.forecastedProfits)\n\t\t)\n\n\n\tconst projectView =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.selectedProject\n\t\t\t\t,projectCalculatedView\n\t\t\t]\n\t\t)\n\t\t.map(function([project, pProfits]){\n\t\t\t\treturn project\n\t\t\t\t? {\n\n\t\t\t\t\t'Project': project.project_name\n\t\t\t\t\t,'Proposed Start':\n\t\t\t\t\t\tlocalDate(project.project_start_date)\n\t\t\t\t\t,'Proposed Completion' :\n\t\t\t\t\t\tlocalDate(project.project_dead_date)\n\t\t\t\t\t,'Completion %':\n\t\t\t\t\t\tcompletionPercentage(project)\n\t\t\t\t\t,'Forcasted Completion':\n\t\t\t\t\t\tforecastEnd( project )\n\t\t\t\t\t,'Actual Completion': project.project_completion_marker\n\t\t\t\t\t\t? localDate(project.project_completion_marker)\n\t\t\t\t\t\t: 'In Progress'\n\t\t\t\t\t,'Important Project Summaries' : (\n\t\t\t\t\t\tproject.worksummaries\n\t\t\t\t\t\t\t? project.worksummaries\n\t\t\t\t\t\t\t\t.split(\"\\n\")\n\n\t\t\t\t\t\t\t: ['No notes recorded during work updates.']\n\t\t\t\t\t)\n\t\t\t\t\t\t.map( s => m('p', s) )\n\n\t\t\t\t\t,'Discipline Summary':\n\t\t\t\t\t\tworld.selectedProject().disciplines\n\t\t\t\t\t\t.map((d) =>\n\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t'p.ma0'\n\t\t\t\t\t\t\t\t, d.discipline_order\n\t\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t\t+ d.discplinenamedescription\n\t\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t\t+ d.discipline_completed\n\t\t\t\t\t\t\t\t+ ' of '\n\t\t\t\t\t\t\t\t+ d.discipline_work\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Project Profits': pProfits\n\t\t\t\t\t,'Accrued | Requisitions | Forecast': null\n\t\t\t\t}\n\t\t\t\t: null\n\t\t\t})\n\n\t\t\t.map(hashToFieldViews)\n\n\tconst allocationView =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tworld.selectedAllocation\n\t\t\t\t,todaysProfits\n\t\t\t\t,disciplineCalculatedView\n\t\t\t\t,projectCalculatedView\n\t\t\t\t,selectedAllocationDiscipline\n\t\t\t]\n\t\t)\n\t\t.map(function([a, tProfits, dProfits, pProfits, Md]){\n\n\t\t\tif(a){\n\n\t\t\t\tconst disciplineCompletion =\n\t\t\t\t\tMd.case == 'Loading'\n\t\t\t\t\t? '...'\n\t\t\t\t\t: Md.case == 'Empty'\n\t\t\t\t\t? 0\n\t\t\t\t\t: Number(\n\t\t\t\t\t\tMd.value.discipline_completed\n\t\t\t\t\t) / Number(Md.value.discipline_work)\n\n\t\t\t\tconst disciplinePercentage =\n\t\t\t\t\tMd.case == 'Loading'\n\t\t\t\t\t? '...'\n\t\t\t\t\t: Md.case == 'Empty'\n\t\t\t\t\t? 0\n\t\t\t\t\t: disciplineCompletion >= 1\n\t\t\t\t\t\t? '100%'\n\t\t\t\t\t\t: (disciplineCompletion*100).toFixed(2)+'%'\n\n\t\t\t\tconst team =\n\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t(a) => a.allocations_contractors_crews\n\t\t\t\t\t\t,R.pluck('allocations_contractors_crews_name')\n\t\t\t\t\t\t,list => list.join(', ')\n\t\t\t\t\t)\n\n\t\t\t\tconst teams =\n\t\t\t\t\tR.pipe(\n\t\t\t\t\t\tR.prop('allocations_contractors')\n\t\t\t\t\t\t,(list) => list.map(team)\n\t\t\t\t\t\t,(list) => list.join(', ')\n\t\t\t\t\t)\n\n\t\t\t\tconst resources =\n\t\t\t\t\tR.pluck('allocations_contractors_name')\n\t\t\t\t\t(a.allocations_contractors || [])\n\t\t\t\t\t.join(', ')\n\n\t\t\t\treturn {\n\t\t\t\t\t'Work Date':\n\t\t\t\t\t\tlocalDate(a.allocations_allocation_date)\n\n\t\t\t\t\t,'Work name':\n\t\t\t\t\t\ta.allocations_work_name\n\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t+ a.discipline_description\n\n\t\t\t\t\t,'Discipline Completion %':\n\t\t\t\t\t\tdisciplinePercentage\n\n\t\t\t\t\t,'Resources':\n\t\t\t\t\t\tresources\n\n\t\t\t\t\t,'Teams':\n\t\t\t\t\t\tteams(a)\n\t\t\t\t\t\t|| a.allocations_bad_day\n\t\t\t\t\t\t|| a.allocations_day_status\n\t\t\t\t\t\t|| a.allocations_weather_status\n\n\t\t\t\t\t,'Important Comments':\n\t\t\t\t\t\ta.allocations_completion_comments\n\t\t\t\t\t\t|| '(No Comments)'\n\t\t\t\t\t,'Work Completed':\n\t\t\t\t\t\ta.allocations_allocation_complete + ' of ' + a.allocations_allocation_forecast\n\t\t\t\t\t,'Variations':\n\t\t\t\t\t\ta.allocations_vars.length\n\t\t\t\t\t,'Notices Of Delay':\n\t\t\t\t\t\ta.allocations_nods.length\n\t\t\t\t\t,'Extensions of Time':\n\t\t\t\t\t\ta.allocations_eots.length\n\n\t\t\t\t\t,'Accrued | Requisitions | Forecast': null\n\n\t\t\t\t\t,'Todays Profits': tProfits\n\n\t\t\t\t\t,'Discipline Profits': dProfits\n\n\t\t\t\t\t,'Project Profits': pProfits\n\n\t\t\t\t\t// todo-eja ADD transposes to show why a person is allocated for work\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\t\t.map( hashToFieldViews )\n\n\n\n\tconst dataView =\n\t\tstream.merge([\n\t\t\tprojectView, allocationView\n\t\t])\n\t\t.map(function([p, a]){\n\t\t\tif(world.selectedAllocation()){\n\t\t\t\treturn a\n\t\t\t} else if (world.selectedProject() ){\n\t\t\t\treturn p\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t})\n\n\tconst className = active.map(v => v ? 'active' : '')\n\n\tconst stop = (e) => e.stopPropagation()\n\tconst view = () =>\n\t\tnewDetailsPane(\n\t\t\t\tactive\n\t\t\t\t,heading() || null\n\t\t\t\t,dataView() || null\n\t\t\t\t,{\n\t\t\t\t\tonwheel: stop\n\t\t\t\t\t,onscroll: stop\n\t\t\t\t\t,onmousedown: stop\n\t\t\t\t\t,onmouseup: stop\n\t\t\t\t\t,ontouchdown: stop\n\t\t\t\t\t,ontouchend: stop\n\t\t\t\t\t,ontouchmove: stop\n\t\t\t\t\t,onclick: stop\n\t\t\t}\n\t\t)\n\n\n\tclassName(\"\");\n\n\treturn { view: () => view() }\n}\n\nexport default DetailsPane","import m from 'bacta'\nimport * as R from 'ramda'\n\n\nfunction d([ head, ...tail]){\n\n\tconst c = c => p => c+\" \"+p.x+\" \"+p.y\n\n\treturn []\n\t\t.concat(\n\t\t\thead ? c('M')(head) : \"\"\n\t\t\t,R.map(c('L'), tail)\n\t\t)\n\t\t.join(' ')\n}\n\nfunction line(attrs, {x:x1,y:y1}, {x:x2,y:y2}){\n\treturn m('line', R.merge( { x1, y1, x2, y2 }, attrs ))\n}\n\nfunction dashLine(attrs, p1, p2){\n\treturn line(R.merge({ 'stroke-dasharray':'100, 50' }, attrs), p1, p2 )\n}\n\nfunction circle(attrs, { cx, cy, r }){\n\treturn m('circle', R.merge(attrs, { cx, cy, r }))\n}\n\nfunction shape(attrs, points){\n\treturn m('path'\n\t\t,R.merge(\n\t\t\tattrs\n\t\t\t, {\n\t\t\t\td: d(points).concat(\n\t\t\t\t\tpoints.length ? 'Z' : []\n\t\t\t\t)\n\t\t\t}\n\t\t)\n\t)\n}\n\nfunction path(attrs, points){\n\treturn m('path', R.merge(attrs, { d: d(points)}) )\n}\n\nfunction svgShape(attrs, points){\n\treturn m('svg', { style: {overflow: 'visible'} }, shape(attrs, points))\n}\n\nfunction svgPath(attrs, points){\n\treturn m('svg', { style: {overflow: 'visible'} }, path(attrs, points))\n}\n\nfunction svg(children){\n\treturn m('svg', { style: {overflow: 'visible'} }, children)\n}\n\n\nexport default\n\t{ d\n\t, line\n\t, dashLine\n\t, circle\n\t, shape\n\t, path\n\t, svgShape\n\t, svgPath\n\t, svg\n\t}","\n/**\n * @license\n *\n * chroma.js - JavaScript library for color conversions\n * \n * Copyright (c) 2011-2017, Gregor Aisch\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * \n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * \n * 3. The name Gregor Aisch may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n(function() {\n var Color, DEG2RAD, LAB_CONSTANTS, PI, PITHIRD, RAD2DEG, TWOPI, _average_lrgb, _guess_formats, _guess_formats_sorted, _input, _interpolators, abs, atan2, bezier, blend, blend_f, brewer, burn, chroma, clip_rgb, cmyk2rgb, colors, cos, css2rgb, darken, dodge, each, floor, hcg2rgb, hex2rgb, hsi2rgb, hsl2css, hsl2rgb, hsv2rgb, interpolate, interpolate_hsx, interpolate_lab, interpolate_lrgb, interpolate_num, interpolate_rgb, lab2lch, lab2rgb, lab_xyz, lch2lab, lch2rgb, lighten, limit, log, luminance_x, m, max, multiply, normal, num2rgb, overlay, pow, rgb2cmyk, rgb2css, rgb2hcg, rgb2hex, rgb2hsi, rgb2hsl, rgb2hsv, rgb2lab, rgb2lch, rgb2luminance, rgb2num, rgb2temperature, rgb2xyz, rgb_xyz, rnd, root, round, screen, sin, sqrt, temperature2rgb, type, unpack, w3cx11, xyz_lab, xyz_rgb,\n slice = [].slice;\n\n type = (function() {\n\n /*\n for browser-safe type checking+\n ported from jQuery's $.type\n */\n var classToType, len, name, o, ref;\n classToType = {};\n ref = \"Boolean Number String Function Array Date RegExp Undefined Null\".split(\" \");\n for (o = 0, len = ref.length; o < len; o++) {\n name = ref[o];\n classToType[\"[object \" + name + \"]\"] = name.toLowerCase();\n }\n return function(obj) {\n var strType;\n strType = Object.prototype.toString.call(obj);\n return classToType[strType] || \"object\";\n };\n })();\n\n limit = function(x, min, max) {\n if (min == null) {\n min = 0;\n }\n if (max == null) {\n max = 1;\n }\n if (x < min) {\n x = min;\n }\n if (x > max) {\n x = max;\n }\n return x;\n };\n\n unpack = function(args) {\n if (args.length >= 3) {\n return Array.prototype.slice.call(args);\n } else {\n return args[0];\n }\n };\n\n clip_rgb = function(rgb) {\n var i, o;\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n for (i = o = 0; o < 3; i = ++o) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) {\n rgb._clipped = true;\n }\n if (rgb[i] < 0) {\n rgb[i] = 0;\n }\n if (rgb[i] > 255) {\n rgb[i] = 255;\n }\n } else if (i === 3) {\n if (rgb[i] < 0) {\n rgb[i] = 0;\n }\n if (rgb[i] > 1) {\n rgb[i] = 1;\n }\n }\n }\n if (!rgb._clipped) {\n delete rgb._unclipped;\n }\n return rgb;\n };\n\n PI = Math.PI, round = Math.round, cos = Math.cos, floor = Math.floor, pow = Math.pow, log = Math.log, sin = Math.sin, sqrt = Math.sqrt, atan2 = Math.atan2, max = Math.max, abs = Math.abs;\n\n TWOPI = PI * 2;\n\n PITHIRD = PI / 3;\n\n DEG2RAD = PI / 180;\n\n RAD2DEG = 180 / PI;\n\n chroma = function() {\n if (arguments[0] instanceof Color) {\n return arguments[0];\n }\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, arguments, function(){});\n };\n\n chroma[\"default\"] = chroma;\n\n _interpolators = [];\n\n if ((typeof module !== \"undefined\" && module !== null) && (module.exports != null)) {\n module.exports = chroma;\n }\n\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return chroma;\n });\n } else {\n root = typeof exports !== \"undefined\" && exports !== null ? exports : this;\n root.chroma = chroma;\n }\n\n chroma.version = '1.4.1';\n\n _input = {};\n\n _guess_formats = [];\n\n _guess_formats_sorted = false;\n\n Color = (function() {\n function Color() {\n var arg, args, chk, len, len1, me, mode, o, w;\n me = this;\n args = [];\n for (o = 0, len = arguments.length; o < len; o++) {\n arg = arguments[o];\n if (arg != null) {\n args.push(arg);\n }\n }\n if (args.length > 1) {\n mode = args[args.length - 1];\n }\n if (_input[mode] != null) {\n me._rgb = clip_rgb(_input[mode](unpack(args.slice(0, -1))));\n } else {\n if (!_guess_formats_sorted) {\n _guess_formats = _guess_formats.sort(function(a, b) {\n return b.p - a.p;\n });\n _guess_formats_sorted = true;\n }\n for (w = 0, len1 = _guess_formats.length; w < len1; w++) {\n chk = _guess_formats[w];\n mode = chk.test.apply(chk, args);\n if (mode) {\n break;\n }\n }\n if (mode) {\n me._rgb = clip_rgb(_input[mode].apply(_input, args));\n }\n }\n if (me._rgb == null) {\n console.warn('unknown format: ' + args);\n }\n if (me._rgb == null) {\n me._rgb = [0, 0, 0];\n }\n if (me._rgb.length === 3) {\n me._rgb.push(1);\n }\n }\n\n Color.prototype.toString = function() {\n return this.hex();\n };\n\n return Color;\n\n })();\n\n chroma._input = _input;\n\n\n /**\n \tColorBrewer colors for chroma.js\n \n \tCopyright (c) 2002 Cynthia Brewer, Mark Harrower, and The \n \tPennsylvania State University.\n \n \tLicensed under the Apache License, Version 2.0 (the \"License\"); \n \tyou may not use this file except in compliance with the License.\n \tYou may obtain a copy of the License at\t\n \thttp://www.apache.org/licenses/LICENSE-2.0\n \n \tUnless required by applicable law or agreed to in writing, software distributed\n \tunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n \tCONDITIONS OF ANY KIND, either express or implied. See the License for the\n \tspecific language governing permissions and limitations under the License.\n \n @preserve\n */\n\n chroma.brewer = brewer = {\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n };\n\n (function() {\n var key, results;\n results = [];\n for (key in brewer) {\n results.push(brewer[key.toLowerCase()] = brewer[key]);\n }\n return results;\n })();\n\n\n /**\n \tX11 color names\n \n \thttp://www.w3.org/TR/css3-color/#svg-color\n */\n\n w3cx11 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflower: '#6495ed',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n };\n\n chroma.colors = colors = w3cx11;\n\n lab2rgb = function() {\n var a, args, b, g, l, r, x, y, z;\n args = unpack(arguments);\n l = args[0], a = args[1], b = args[2];\n y = (l + 16) / 116;\n x = isNaN(a) ? y : y + a / 500;\n z = isNaN(b) ? y : y - b / 200;\n y = LAB_CONSTANTS.Yn * lab_xyz(y);\n x = LAB_CONSTANTS.Xn * lab_xyz(x);\n z = LAB_CONSTANTS.Zn * lab_xyz(z);\n r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);\n g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);\n b = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n xyz_rgb = function(r) {\n return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055);\n };\n\n lab_xyz = function(t) {\n if (t > LAB_CONSTANTS.t1) {\n return t * t * t;\n } else {\n return LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0);\n }\n };\n\n LAB_CONSTANTS = {\n Kn: 18,\n Xn: 0.950470,\n Yn: 1,\n Zn: 1.088830,\n t0: 0.137931034,\n t1: 0.206896552,\n t2: 0.12841855,\n t3: 0.008856452\n };\n\n rgb2lab = function() {\n var b, g, r, ref, ref1, x, y, z;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n ref1 = rgb2xyz(r, g, b), x = ref1[0], y = ref1[1], z = ref1[2];\n return [116 * y - 16, 500 * (x - y), 200 * (y - z)];\n };\n\n rgb_xyz = function(r) {\n if ((r /= 255) <= 0.04045) {\n return r / 12.92;\n } else {\n return pow((r + 0.055) / 1.055, 2.4);\n }\n };\n\n xyz_lab = function(t) {\n if (t > LAB_CONSTANTS.t3) {\n return pow(t, 1 / 3);\n } else {\n return t / LAB_CONSTANTS.t2 + LAB_CONSTANTS.t0;\n }\n };\n\n rgb2xyz = function() {\n var b, g, r, ref, x, y, z;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n r = rgb_xyz(r);\n g = rgb_xyz(g);\n b = rgb_xyz(b);\n x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS.Xn);\n y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / LAB_CONSTANTS.Yn);\n z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / LAB_CONSTANTS.Zn);\n return [x, y, z];\n };\n\n chroma.lab = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['lab']), function(){});\n };\n\n _input.lab = lab2rgb;\n\n Color.prototype.lab = function() {\n return rgb2lab(this._rgb);\n };\n\n bezier = function(colors) {\n var I, I0, I1, c, lab0, lab1, lab2, lab3, ref, ref1, ref2;\n colors = (function() {\n var len, o, results;\n results = [];\n for (o = 0, len = colors.length; o < len; o++) {\n c = colors[o];\n results.push(chroma(c));\n }\n return results;\n })();\n if (colors.length === 2) {\n ref = (function() {\n var len, o, results;\n results = [];\n for (o = 0, len = colors.length; o < len; o++) {\n c = colors[o];\n results.push(c.lab());\n }\n return results;\n })(), lab0 = ref[0], lab1 = ref[1];\n I = function(t) {\n var i, lab;\n lab = (function() {\n var o, results;\n results = [];\n for (i = o = 0; o <= 2; i = ++o) {\n results.push(lab0[i] + t * (lab1[i] - lab0[i]));\n }\n return results;\n })();\n return chroma.lab.apply(chroma, lab);\n };\n } else if (colors.length === 3) {\n ref1 = (function() {\n var len, o, results;\n results = [];\n for (o = 0, len = colors.length; o < len; o++) {\n c = colors[o];\n results.push(c.lab());\n }\n return results;\n })(), lab0 = ref1[0], lab1 = ref1[1], lab2 = ref1[2];\n I = function(t) {\n var i, lab;\n lab = (function() {\n var o, results;\n results = [];\n for (i = o = 0; o <= 2; i = ++o) {\n results.push((1 - t) * (1 - t) * lab0[i] + 2 * (1 - t) * t * lab1[i] + t * t * lab2[i]);\n }\n return results;\n })();\n return chroma.lab.apply(chroma, lab);\n };\n } else if (colors.length === 4) {\n ref2 = (function() {\n var len, o, results;\n results = [];\n for (o = 0, len = colors.length; o < len; o++) {\n c = colors[o];\n results.push(c.lab());\n }\n return results;\n })(), lab0 = ref2[0], lab1 = ref2[1], lab2 = ref2[2], lab3 = ref2[3];\n I = function(t) {\n var i, lab;\n lab = (function() {\n var o, results;\n results = [];\n for (i = o = 0; o <= 2; i = ++o) {\n results.push((1 - t) * (1 - t) * (1 - t) * lab0[i] + 3 * (1 - t) * (1 - t) * t * lab1[i] + 3 * (1 - t) * t * t * lab2[i] + t * t * t * lab3[i]);\n }\n return results;\n })();\n return chroma.lab.apply(chroma, lab);\n };\n } else if (colors.length === 5) {\n I0 = bezier(colors.slice(0, 3));\n I1 = bezier(colors.slice(2, 5));\n I = function(t) {\n if (t < 0.5) {\n return I0(t * 2);\n } else {\n return I1((t - 0.5) * 2);\n }\n };\n }\n return I;\n };\n\n chroma.bezier = function(colors) {\n var f;\n f = bezier(colors);\n f.scale = function() {\n return chroma.scale(f);\n };\n return f;\n };\n\n chroma.cubehelix = function(start, rotations, hue, gamma, lightness) {\n var dh, dl, f;\n if (start == null) {\n start = 300;\n }\n if (rotations == null) {\n rotations = -1.5;\n }\n if (hue == null) {\n hue = 1;\n }\n if (gamma == null) {\n gamma = 1;\n }\n if (lightness == null) {\n lightness = [0, 1];\n }\n dh = 0;\n if (type(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n f = function(fract) {\n var a, amp, b, cos_a, g, h, l, r, sin_a;\n a = TWOPI * ((start + 120) / 360 + rotations * fract);\n l = pow(lightness[0] + dl * fract, gamma);\n h = dh !== 0 ? hue[0] + fract * dh : hue;\n amp = h * l * (1 - l) / 2;\n cos_a = cos(a);\n sin_a = sin(a);\n r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n b = l + amp * (+1.97294 * cos_a);\n return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n };\n f.start = function(s) {\n if (s == null) {\n return start;\n }\n start = s;\n return f;\n };\n f.rotations = function(r) {\n if (r == null) {\n return rotations;\n }\n rotations = r;\n return f;\n };\n f.gamma = function(g) {\n if (g == null) {\n return gamma;\n }\n gamma = g;\n return f;\n };\n f.hue = function(h) {\n if (h == null) {\n return hue;\n }\n hue = h;\n if (type(hue) === 'array') {\n dh = hue[1] - hue[0];\n if (dh === 0) {\n hue = hue[1];\n }\n } else {\n dh = 0;\n }\n return f;\n };\n f.lightness = function(h) {\n if (h == null) {\n return lightness;\n }\n if (type(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h, h];\n dl = 0;\n }\n return f;\n };\n f.scale = function() {\n return chroma.scale(f);\n };\n f.hue(hue);\n return f;\n };\n\n chroma.random = function() {\n var code, digits, i, o;\n digits = '0123456789abcdef';\n code = '#';\n for (i = o = 0; o < 6; i = ++o) {\n code += digits.charAt(floor(Math.random() * 16));\n }\n return new Color(code);\n };\n\n _interpolators = [];\n\n interpolate = function(col1, col2, f, m) {\n var interpol, len, o, res;\n if (f == null) {\n f = 0.5;\n }\n if (m == null) {\n m = 'rgb';\n }\n\n /*\n interpolates between colors\n f = 0 --> me\n f = 1 --> col\n */\n if (type(col1) !== 'object') {\n col1 = chroma(col1);\n }\n if (type(col2) !== 'object') {\n col2 = chroma(col2);\n }\n for (o = 0, len = _interpolators.length; o < len; o++) {\n interpol = _interpolators[o];\n if (m === interpol[0]) {\n res = interpol[1](col1, col2, f, m);\n break;\n }\n }\n if (res == null) {\n throw \"color mode \" + m + \" is not supported\";\n }\n return res.alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));\n };\n\n chroma.interpolate = interpolate;\n\n Color.prototype.interpolate = function(col2, f, m) {\n return interpolate(this, col2, f, m);\n };\n\n chroma.mix = interpolate;\n\n Color.prototype.mix = Color.prototype.interpolate;\n\n _input.rgb = function() {\n var k, ref, results, v;\n ref = unpack(arguments);\n results = [];\n for (k in ref) {\n v = ref[k];\n results.push(v);\n }\n return results;\n };\n\n chroma.rgb = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['rgb']), function(){});\n };\n\n Color.prototype.rgb = function(round) {\n if (round == null) {\n round = true;\n }\n if (round) {\n return this._rgb.map(Math.round).slice(0, 3);\n } else {\n return this._rgb.slice(0, 3);\n }\n };\n\n Color.prototype.rgba = function(round) {\n if (round == null) {\n round = true;\n }\n if (!round) {\n return this._rgb.slice(0);\n }\n return [Math.round(this._rgb[0]), Math.round(this._rgb[1]), Math.round(this._rgb[2]), this._rgb[3]];\n };\n\n _guess_formats.push({\n p: 3,\n test: function(n) {\n var a;\n a = unpack(arguments);\n if (type(a) === 'array' && a.length === 3) {\n return 'rgb';\n }\n if (a.length === 4 && type(a[3]) === \"number\" && a[3] >= 0 && a[3] <= 1) {\n return 'rgb';\n }\n }\n });\n\n _input.lrgb = _input.rgb;\n\n interpolate_lrgb = function(col1, col2, f, m) {\n var xyz0, xyz1;\n xyz0 = col1._rgb;\n xyz1 = col2._rgb;\n return new Color(sqrt(pow(xyz0[0], 2) * (1 - f) + pow(xyz1[0], 2) * f), sqrt(pow(xyz0[1], 2) * (1 - f) + pow(xyz1[1], 2) * f), sqrt(pow(xyz0[2], 2) * (1 - f) + pow(xyz1[2], 2) * f), m);\n };\n\n _average_lrgb = function(colors) {\n var col, f, len, o, rgb, xyz;\n f = 1 / colors.length;\n xyz = [0, 0, 0, 0];\n for (o = 0, len = colors.length; o < len; o++) {\n col = colors[o];\n rgb = col._rgb;\n xyz[0] += pow(rgb[0], 2) * f;\n xyz[1] += pow(rgb[1], 2) * f;\n xyz[2] += pow(rgb[2], 2) * f;\n xyz[3] += rgb[3] * f;\n }\n xyz[0] = sqrt(xyz[0]);\n xyz[1] = sqrt(xyz[1]);\n xyz[2] = sqrt(xyz[2]);\n if (xyz[3] > 1) {\n xyz[3] = 1;\n }\n return new Color(clip_rgb(xyz));\n };\n\n _interpolators.push(['lrgb', interpolate_lrgb]);\n\n chroma.average = function(colors, mode) {\n var A, alpha, c, cnt, dx, dy, first, i, l, len, o, xyz, xyz2;\n if (mode == null) {\n mode = 'rgb';\n }\n l = colors.length;\n colors = colors.map(function(c) {\n return chroma(c);\n });\n first = colors.splice(0, 1)[0];\n if (mode === 'lrgb') {\n return _average_lrgb(colors);\n }\n xyz = first.get(mode);\n cnt = [];\n dx = 0;\n dy = 0;\n for (i in xyz) {\n xyz[i] = xyz[i] || 0;\n cnt.push(isNaN(xyz[i]) ? 0 : 1);\n if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n A = xyz[i] / 180 * PI;\n dx += cos(A);\n dy += sin(A);\n }\n }\n alpha = first.alpha();\n for (o = 0, len = colors.length; o < len; o++) {\n c = colors[o];\n xyz2 = c.get(mode);\n alpha += c.alpha();\n for (i in xyz) {\n if (!isNaN(xyz2[i])) {\n cnt[i] += 1;\n if (mode.charAt(i) === 'h') {\n A = xyz2[i] / 180 * PI;\n dx += cos(A);\n dy += sin(A);\n } else {\n xyz[i] += xyz2[i];\n }\n }\n }\n }\n for (i in xyz) {\n if (mode.charAt(i) === 'h') {\n A = atan2(dy / cnt[i], dx / cnt[i]) / PI * 180;\n while (A < 0) {\n A += 360;\n }\n while (A >= 360) {\n A -= 360;\n }\n xyz[i] = A;\n } else {\n xyz[i] = xyz[i] / cnt[i];\n }\n }\n return chroma(xyz, mode).alpha(alpha / l);\n };\n\n hex2rgb = function(hex) {\n var a, b, g, r, rgb, u;\n if (hex.match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/)) {\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n }\n if (hex.length === 3) {\n hex = hex.split(\"\");\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n u = parseInt(hex, 16);\n r = u >> 16;\n g = u >> 8 & 0xFF;\n b = u & 0xFF;\n return [r, g, b, 1];\n }\n if (hex.match(/^#?([A-Fa-f0-9]{8})$/)) {\n if (hex.length === 9) {\n hex = hex.substr(1);\n }\n u = parseInt(hex, 16);\n r = u >> 24 & 0xFF;\n g = u >> 16 & 0xFF;\n b = u >> 8 & 0xFF;\n a = round((u & 0xFF) / 0xFF * 100) / 100;\n return [r, g, b, a];\n }\n if ((_input.css != null) && (rgb = _input.css(hex))) {\n return rgb;\n }\n throw \"unknown color: \" + hex;\n };\n\n rgb2hex = function(channels, mode) {\n var a, b, g, hxa, r, str, u;\n if (mode == null) {\n mode = 'auto';\n }\n r = channels[0], g = channels[1], b = channels[2], a = channels[3];\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n r = Math.round(r);\n g = Math.round(g);\n b = Math.round(b);\n u = r << 16 | g << 8 | b;\n str = \"000000\" + u.toString(16);\n str = str.substr(str.length - 6);\n hxa = '0' + round(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n return \"#\" + (function() {\n switch (mode.toLowerCase()) {\n case 'rgba':\n return str + hxa;\n case 'argb':\n return hxa + str;\n default:\n return str;\n }\n })();\n };\n\n _input.hex = function(h) {\n return hex2rgb(h);\n };\n\n chroma.hex = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['hex']), function(){});\n };\n\n Color.prototype.hex = function(mode) {\n if (mode == null) {\n mode = 'auto';\n }\n return rgb2hex(this._rgb, mode);\n };\n\n _guess_formats.push({\n p: 4,\n test: function(n) {\n if (arguments.length === 1 && type(n) === \"string\") {\n return 'hex';\n }\n }\n });\n\n hsl2rgb = function() {\n var args, b, c, g, h, i, l, o, r, ref, s, t1, t2, t3;\n args = unpack(arguments);\n h = args[0], s = args[1], l = args[2];\n if (s === 0) {\n r = g = b = l * 255;\n } else {\n t3 = [0, 0, 0];\n c = [0, 0, 0];\n t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n t1 = 2 * l - t2;\n h /= 360;\n t3[0] = h + 1 / 3;\n t3[1] = h;\n t3[2] = h - 1 / 3;\n for (i = o = 0; o <= 2; i = ++o) {\n if (t3[i] < 0) {\n t3[i] += 1;\n }\n if (t3[i] > 1) {\n t3[i] -= 1;\n }\n if (6 * t3[i] < 1) {\n c[i] = t1 + (t2 - t1) * 6 * t3[i];\n } else if (2 * t3[i] < 1) {\n c[i] = t2;\n } else if (3 * t3[i] < 2) {\n c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6;\n } else {\n c[i] = t1;\n }\n }\n ref = [round(c[0] * 255), round(c[1] * 255), round(c[2] * 255)], r = ref[0], g = ref[1], b = ref[2];\n }\n if (args.length > 3) {\n return [r, g, b, args[3]];\n } else {\n return [r, g, b];\n }\n };\n\n rgb2hsl = function(r, g, b) {\n var h, l, min, ref, s;\n if (r !== void 0 && r.length >= 3) {\n ref = r, r = ref[0], g = ref[1], b = ref[2];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n min = Math.min(r, g, b);\n max = Math.max(r, g, b);\n l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = Number.NaN;\n } else {\n s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);\n }\n if (r === max) {\n h = (g - b) / (max - min);\n } else if (g === max) {\n h = 2 + (b - r) / (max - min);\n } else if (b === max) {\n h = 4 + (r - g) / (max - min);\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n return [h, s, l];\n };\n\n chroma.hsl = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['hsl']), function(){});\n };\n\n _input.hsl = hsl2rgb;\n\n Color.prototype.hsl = function() {\n return rgb2hsl(this._rgb);\n };\n\n hsv2rgb = function() {\n var args, b, f, g, h, i, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, s, t, v;\n args = unpack(arguments);\n h = args[0], s = args[1], v = args[2];\n v *= 255;\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) {\n h = 0;\n }\n if (h > 360) {\n h -= 360;\n }\n if (h < 0) {\n h += 360;\n }\n h /= 60;\n i = floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n ref = [v, t, p], r = ref[0], g = ref[1], b = ref[2];\n break;\n case 1:\n ref1 = [q, v, p], r = ref1[0], g = ref1[1], b = ref1[2];\n break;\n case 2:\n ref2 = [p, v, t], r = ref2[0], g = ref2[1], b = ref2[2];\n break;\n case 3:\n ref3 = [p, q, v], r = ref3[0], g = ref3[1], b = ref3[2];\n break;\n case 4:\n ref4 = [t, p, v], r = ref4[0], g = ref4[1], b = ref4[2];\n break;\n case 5:\n ref5 = [v, p, q], r = ref5[0], g = ref5[1], b = ref5[2];\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n rgb2hsv = function() {\n var b, delta, g, h, min, r, ref, s, v;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n min = Math.min(r, g, b);\n max = Math.max(r, g, b);\n delta = max - min;\n v = max / 255.0;\n if (max === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n }\n if (g === max) {\n h = 2 + (b - r) / delta;\n }\n if (b === max) {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n }\n return [h, s, v];\n };\n\n chroma.hsv = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['hsv']), function(){});\n };\n\n _input.hsv = hsv2rgb;\n\n Color.prototype.hsv = function() {\n return rgb2hsv(this._rgb);\n };\n\n num2rgb = function(num) {\n var b, g, r;\n if (type(num) === \"number\" && num >= 0 && num <= 0xFFFFFF) {\n r = num >> 16;\n g = (num >> 8) & 0xFF;\n b = num & 0xFF;\n return [r, g, b, 1];\n }\n console.warn(\"unknown num color: \" + num);\n return [0, 0, 0, 1];\n };\n\n rgb2num = function() {\n var b, g, r, ref;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n return (r << 16) + (g << 8) + b;\n };\n\n chroma.num = function(num) {\n return new Color(num, 'num');\n };\n\n Color.prototype.num = function(mode) {\n if (mode == null) {\n mode = 'rgb';\n }\n return rgb2num(this._rgb, mode);\n };\n\n _input.num = num2rgb;\n\n _guess_formats.push({\n p: 1,\n test: function(n) {\n if (arguments.length === 1 && type(n) === \"number\" && n >= 0 && n <= 0xFFFFFF) {\n return 'num';\n }\n }\n });\n\n hcg2rgb = function() {\n var _c, _g, args, b, c, f, g, h, i, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, t, v;\n args = unpack(arguments);\n h = args[0], c = args[1], _g = args[2];\n c = c / 100;\n g = g / 100 * 255;\n _c = c * 255;\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) {\n h = 0;\n }\n if (h > 360) {\n h -= 360;\n }\n if (h < 0) {\n h += 360;\n }\n h /= 60;\n i = floor(h);\n f = h - i;\n p = _g * (1 - c);\n q = p + _c * (1 - f);\n t = p + _c * f;\n v = p + _c;\n switch (i) {\n case 0:\n ref = [v, t, p], r = ref[0], g = ref[1], b = ref[2];\n break;\n case 1:\n ref1 = [q, v, p], r = ref1[0], g = ref1[1], b = ref1[2];\n break;\n case 2:\n ref2 = [p, v, t], r = ref2[0], g = ref2[1], b = ref2[2];\n break;\n case 3:\n ref3 = [p, q, v], r = ref3[0], g = ref3[1], b = ref3[2];\n break;\n case 4:\n ref4 = [t, p, v], r = ref4[0], g = ref4[1], b = ref4[2];\n break;\n case 5:\n ref5 = [v, p, q], r = ref5[0], g = ref5[1], b = ref5[2];\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n rgb2hcg = function() {\n var _g, b, c, delta, g, h, min, r, ref;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n min = Math.min(r, g, b);\n max = Math.max(r, g, b);\n delta = max - min;\n c = delta * 100 / 255;\n _g = min / (255 - delta) * 100;\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === max) {\n h = (g - b) / delta;\n }\n if (g === max) {\n h = 2 + (b - r) / delta;\n }\n if (b === max) {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n }\n return [h, c, _g];\n };\n\n chroma.hcg = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['hcg']), function(){});\n };\n\n _input.hcg = hcg2rgb;\n\n Color.prototype.hcg = function() {\n return rgb2hcg(this._rgb);\n };\n\n css2rgb = function(css) {\n var aa, ab, hsl, i, m, o, rgb, w;\n css = css.toLowerCase();\n if ((chroma.colors != null) && chroma.colors[css]) {\n return hex2rgb(chroma.colors[css]);\n }\n if (m = css.match(/rgb\\(\\s*(\\-?\\d+),\\s*(\\-?\\d+)\\s*,\\s*(\\-?\\d+)\\s*\\)/)) {\n rgb = m.slice(1, 4);\n for (i = o = 0; o <= 2; i = ++o) {\n rgb[i] = +rgb[i];\n }\n rgb[3] = 1;\n } else if (m = css.match(/rgba\\(\\s*(\\-?\\d+),\\s*(\\-?\\d+)\\s*,\\s*(\\-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)/)) {\n rgb = m.slice(1, 5);\n for (i = w = 0; w <= 3; i = ++w) {\n rgb[i] = +rgb[i];\n }\n } else if (m = css.match(/rgb\\(\\s*(\\-?\\d+(?:\\.\\d+)?)%,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*\\)/)) {\n rgb = m.slice(1, 4);\n for (i = aa = 0; aa <= 2; i = ++aa) {\n rgb[i] = round(rgb[i] * 2.55);\n }\n rgb[3] = 1;\n } else if (m = css.match(/rgba\\(\\s*(\\-?\\d+(?:\\.\\d+)?)%,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)/)) {\n rgb = m.slice(1, 5);\n for (i = ab = 0; ab <= 2; i = ++ab) {\n rgb[i] = round(rgb[i] * 2.55);\n }\n rgb[3] = +rgb[3];\n } else if (m = css.match(/hsl\\(\\s*(\\-?\\d+(?:\\.\\d+)?),\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*\\)/)) {\n hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n rgb = hsl2rgb(hsl);\n rgb[3] = 1;\n } else if (m = css.match(/hsla\\(\\s*(\\-?\\d+(?:\\.\\d+)?),\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(\\-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)/)) {\n hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n rgb = hsl2rgb(hsl);\n rgb[3] = +m[4];\n }\n return rgb;\n };\n\n rgb2css = function(rgba) {\n var mode;\n mode = rgba[3] < 1 ? 'rgba' : 'rgb';\n if (mode === 'rgb') {\n return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ')';\n } else if (mode === 'rgba') {\n return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ',' + rgba[3] + ')';\n } else {\n\n }\n };\n\n rnd = function(a) {\n return round(a * 100) / 100;\n };\n\n hsl2css = function(hsl, alpha) {\n var mode;\n mode = alpha < 1 ? 'hsla' : 'hsl';\n hsl[0] = rnd(hsl[0] || 0);\n hsl[1] = rnd(hsl[1] * 100) + '%';\n hsl[2] = rnd(hsl[2] * 100) + '%';\n if (mode === 'hsla') {\n hsl[3] = alpha;\n }\n return mode + '(' + hsl.join(',') + ')';\n };\n\n _input.css = function(h) {\n return css2rgb(h);\n };\n\n chroma.css = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['css']), function(){});\n };\n\n Color.prototype.css = function(mode) {\n if (mode == null) {\n mode = 'rgb';\n }\n if (mode.slice(0, 3) === 'rgb') {\n return rgb2css(this._rgb);\n } else if (mode.slice(0, 3) === 'hsl') {\n return hsl2css(this.hsl(), this.alpha());\n }\n };\n\n _input.named = function(name) {\n return hex2rgb(w3cx11[name]);\n };\n\n _guess_formats.push({\n p: 5,\n test: function(n) {\n if (arguments.length === 1 && (w3cx11[n] != null)) {\n return 'named';\n }\n }\n });\n\n Color.prototype.name = function(n) {\n var h, k;\n if (arguments.length) {\n if (w3cx11[n]) {\n this._rgb = hex2rgb(w3cx11[n]);\n }\n this._rgb[3] = 1;\n this;\n }\n h = this.hex('rgb');\n for (k in w3cx11) {\n if (h === w3cx11[k]) {\n return k;\n }\n }\n return h;\n };\n\n lch2lab = function() {\n\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n \n A saturation multiplier was added by Gregor Aisch\n */\n var c, h, l, ref;\n ref = unpack(arguments), l = ref[0], c = ref[1], h = ref[2];\n h = h * DEG2RAD;\n return [l, cos(h) * c, sin(h) * c];\n };\n\n lch2rgb = function() {\n var L, a, args, b, c, g, h, l, r, ref, ref1;\n args = unpack(arguments);\n l = args[0], c = args[1], h = args[2];\n ref = lch2lab(l, c, h), L = ref[0], a = ref[1], b = ref[2];\n ref1 = lab2rgb(L, a, b), r = ref1[0], g = ref1[1], b = ref1[2];\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n lab2lch = function() {\n var a, b, c, h, l, ref;\n ref = unpack(arguments), l = ref[0], a = ref[1], b = ref[2];\n c = sqrt(a * a + b * b);\n h = (atan2(b, a) * RAD2DEG + 360) % 360;\n if (round(c * 10000) === 0) {\n h = Number.NaN;\n }\n return [l, c, h];\n };\n\n rgb2lch = function() {\n var a, b, g, l, r, ref, ref1;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n ref1 = rgb2lab(r, g, b), l = ref1[0], a = ref1[1], b = ref1[2];\n return lab2lch(l, a, b);\n };\n\n chroma.lch = function() {\n var args;\n args = unpack(arguments);\n return new Color(args, 'lch');\n };\n\n chroma.hcl = function() {\n var args;\n args = unpack(arguments);\n return new Color(args, 'hcl');\n };\n\n _input.lch = lch2rgb;\n\n _input.hcl = function() {\n var c, h, l, ref;\n ref = unpack(arguments), h = ref[0], c = ref[1], l = ref[2];\n return lch2rgb([l, c, h]);\n };\n\n Color.prototype.lch = function() {\n return rgb2lch(this._rgb);\n };\n\n Color.prototype.hcl = function() {\n return rgb2lch(this._rgb).reverse();\n };\n\n rgb2cmyk = function(mode) {\n var b, c, f, g, k, m, r, ref, y;\n if (mode == null) {\n mode = 'rgb';\n }\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n r = r / 255;\n g = g / 255;\n b = b / 255;\n k = 1 - Math.max(r, Math.max(g, b));\n f = k < 1 ? 1 / (1 - k) : 0;\n c = (1 - r - k) * f;\n m = (1 - g - k) * f;\n y = (1 - b - k) * f;\n return [c, m, y, k];\n };\n\n cmyk2rgb = function() {\n var alpha, args, b, c, g, k, m, r, y;\n args = unpack(arguments);\n c = args[0], m = args[1], y = args[2], k = args[3];\n alpha = args.length > 4 ? args[4] : 1;\n if (k === 1) {\n return [0, 0, 0, alpha];\n }\n r = c >= 1 ? 0 : 255 * (1 - c) * (1 - k);\n g = m >= 1 ? 0 : 255 * (1 - m) * (1 - k);\n b = y >= 1 ? 0 : 255 * (1 - y) * (1 - k);\n return [r, g, b, alpha];\n };\n\n _input.cmyk = function() {\n return cmyk2rgb(unpack(arguments));\n };\n\n chroma.cmyk = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['cmyk']), function(){});\n };\n\n Color.prototype.cmyk = function() {\n return rgb2cmyk(this._rgb);\n };\n\n _input.gl = function() {\n var i, k, o, rgb, v;\n rgb = (function() {\n var ref, results;\n ref = unpack(arguments);\n results = [];\n for (k in ref) {\n v = ref[k];\n results.push(v);\n }\n return results;\n }).apply(this, arguments);\n for (i = o = 0; o <= 2; i = ++o) {\n rgb[i] *= 255;\n }\n return rgb;\n };\n\n chroma.gl = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['gl']), function(){});\n };\n\n Color.prototype.gl = function() {\n var rgb;\n rgb = this._rgb;\n return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n };\n\n rgb2luminance = function(r, g, b) {\n var ref;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n };\n\n luminance_x = function(x) {\n x /= 255;\n if (x <= 0.03928) {\n return x / 12.92;\n } else {\n return pow((x + 0.055) / 1.055, 2.4);\n }\n };\n\n interpolate_rgb = function(col1, col2, f, m) {\n var xyz0, xyz1;\n xyz0 = col1._rgb;\n xyz1 = col2._rgb;\n return new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);\n };\n\n _interpolators.push(['rgb', interpolate_rgb]);\n\n Color.prototype.luminance = function(lum, mode) {\n var cur_lum, eps, max_iter, rgba, test;\n if (mode == null) {\n mode = 'rgb';\n }\n if (!arguments.length) {\n return rgb2luminance(this._rgb);\n }\n rgba = this._rgb;\n if (lum === 0) {\n rgba = [0, 0, 0, this._rgb[3]];\n } else if (lum === 1) {\n rgba = [255, 255, 255, this[3]];\n } else {\n cur_lum = rgb2luminance(this._rgb);\n eps = 1e-7;\n max_iter = 20;\n test = function(l, h) {\n var lm, m;\n m = l.interpolate(h, 0.5, mode);\n lm = m.luminance();\n if (Math.abs(lum - lm) < eps || !max_iter--) {\n return m;\n }\n if (lm > lum) {\n return test(l, m);\n }\n return test(m, h);\n };\n if (cur_lum > lum) {\n rgba = test(chroma('black'), this).rgba();\n } else {\n rgba = test(this, chroma('white')).rgba();\n }\n }\n return chroma(rgba).alpha(this.alpha());\n };\n\n temperature2rgb = function(kelvin) {\n var b, g, r, temp;\n temp = kelvin / 100;\n if (temp < 66) {\n r = 255;\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);\n b = 255;\n }\n return [r, g, b];\n };\n\n rgb2temperature = function() {\n var b, eps, g, maxTemp, minTemp, r, ref, rgb, temp;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n minTemp = 1000;\n maxTemp = 40000;\n eps = 0.4;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n rgb = temperature2rgb(temp);\n if ((rgb[2] / rgb[0]) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return round(temp);\n };\n\n chroma.temperature = chroma.kelvin = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['temperature']), function(){});\n };\n\n _input.temperature = _input.kelvin = _input.K = temperature2rgb;\n\n Color.prototype.temperature = function() {\n return rgb2temperature(this._rgb);\n };\n\n Color.prototype.kelvin = Color.prototype.temperature;\n\n chroma.contrast = function(a, b) {\n var l1, l2, ref, ref1;\n if ((ref = type(a)) === 'string' || ref === 'number') {\n a = new Color(a);\n }\n if ((ref1 = type(b)) === 'string' || ref1 === 'number') {\n b = new Color(b);\n }\n l1 = a.luminance();\n l2 = b.luminance();\n if (l1 > l2) {\n return (l1 + 0.05) / (l2 + 0.05);\n } else {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n };\n\n chroma.distance = function(a, b, mode) {\n var d, i, l1, l2, ref, ref1, sum_sq;\n if (mode == null) {\n mode = 'lab';\n }\n if ((ref = type(a)) === 'string' || ref === 'number') {\n a = new Color(a);\n }\n if ((ref1 = type(b)) === 'string' || ref1 === 'number') {\n b = new Color(b);\n }\n l1 = a.get(mode);\n l2 = b.get(mode);\n sum_sq = 0;\n for (i in l1) {\n d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d * d;\n }\n return Math.sqrt(sum_sq);\n };\n\n chroma.deltaE = function(a, b, L, C) {\n var L1, L2, a1, a2, b1, b2, c1, c2, c4, dH2, delA, delB, delC, delL, f, h1, ref, ref1, ref2, ref3, sc, sh, sl, t, v1, v2, v3;\n if (L == null) {\n L = 1;\n }\n if (C == null) {\n C = 1;\n }\n if ((ref = type(a)) === 'string' || ref === 'number') {\n a = new Color(a);\n }\n if ((ref1 = type(b)) === 'string' || ref1 === 'number') {\n b = new Color(b);\n }\n ref2 = a.lab(), L1 = ref2[0], a1 = ref2[1], b1 = ref2[2];\n ref3 = b.lab(), L2 = ref3[0], a2 = ref3[1], b2 = ref3[2];\n c1 = sqrt(a1 * a1 + b1 * b1);\n c2 = sqrt(a2 * a2 + b2 * b2);\n sl = L1 < 16.0 ? 0.511 : (0.040975 * L1) / (1.0 + 0.01765 * L1);\n sc = (0.0638 * c1) / (1.0 + 0.0131 * c1) + 0.638;\n h1 = c1 < 0.000001 ? 0.0 : (atan2(b1, a1) * 180.0) / PI;\n while (h1 < 0) {\n h1 += 360;\n }\n while (h1 >= 360) {\n h1 -= 360;\n }\n t = (h1 >= 164.0) && (h1 <= 345.0) ? 0.56 + abs(0.2 * cos((PI * (h1 + 168.0)) / 180.0)) : 0.36 + abs(0.4 * cos((PI * (h1 + 35.0)) / 180.0));\n c4 = c1 * c1 * c1 * c1;\n f = sqrt(c4 / (c4 + 1900.0));\n sh = sc * (f * t + 1.0 - f);\n delL = L1 - L2;\n delC = c1 - c2;\n delA = a1 - a2;\n delB = b1 - b2;\n dH2 = delA * delA + delB * delB - delC * delC;\n v1 = delL / (L * sl);\n v2 = delC / (C * sc);\n v3 = sh;\n return sqrt(v1 * v1 + v2 * v2 + (dH2 / (v3 * v3)));\n };\n\n Color.prototype.get = function(modechan) {\n var channel, i, me, mode, ref, src;\n me = this;\n ref = modechan.split('.'), mode = ref[0], channel = ref[1];\n src = me[mode]();\n if (channel) {\n i = mode.indexOf(channel);\n if (i > -1) {\n return src[i];\n } else {\n return console.warn('unknown channel ' + channel + ' in mode ' + mode);\n }\n } else {\n return src;\n }\n };\n\n Color.prototype.set = function(modechan, value) {\n var channel, i, me, mode, ref, src;\n me = this;\n ref = modechan.split('.'), mode = ref[0], channel = ref[1];\n if (channel) {\n src = me[mode]();\n i = mode.indexOf(channel);\n if (i > -1) {\n if (type(value) === 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n case '-':\n src[i] += +value;\n break;\n case '*':\n src[i] *= +(value.substr(1));\n break;\n case '/':\n src[i] /= +(value.substr(1));\n break;\n default:\n src[i] = +value;\n }\n } else {\n src[i] = value;\n }\n } else {\n console.warn('unknown channel ' + channel + ' in mode ' + mode);\n }\n } else {\n src = value;\n }\n return chroma(src, mode).alpha(me.alpha());\n };\n\n Color.prototype.clipped = function() {\n return this._rgb._clipped || false;\n };\n\n Color.prototype.alpha = function(a) {\n if (arguments.length) {\n return chroma.rgb([this._rgb[0], this._rgb[1], this._rgb[2], a]);\n }\n return this._rgb[3];\n };\n\n Color.prototype.darken = function(amount) {\n var lab, me;\n if (amount == null) {\n amount = 1;\n }\n me = this;\n lab = me.lab();\n lab[0] -= LAB_CONSTANTS.Kn * amount;\n return chroma.lab(lab).alpha(me.alpha());\n };\n\n Color.prototype.brighten = function(amount) {\n if (amount == null) {\n amount = 1;\n }\n return this.darken(-amount);\n };\n\n Color.prototype.darker = Color.prototype.darken;\n\n Color.prototype.brighter = Color.prototype.brighten;\n\n Color.prototype.saturate = function(amount) {\n var lch, me;\n if (amount == null) {\n amount = 1;\n }\n me = this;\n lch = me.lch();\n lch[1] += amount * LAB_CONSTANTS.Kn;\n if (lch[1] < 0) {\n lch[1] = 0;\n }\n return chroma.lch(lch).alpha(me.alpha());\n };\n\n Color.prototype.desaturate = function(amount) {\n if (amount == null) {\n amount = 1;\n }\n return this.saturate(-amount);\n };\n\n Color.prototype.premultiply = function() {\n var a, rgb;\n rgb = this.rgb();\n a = this.alpha();\n return chroma(rgb[0] * a, rgb[1] * a, rgb[2] * a, a);\n };\n\n blend = function(bottom, top, mode) {\n if (!blend[mode]) {\n throw 'unknown blend mode ' + mode;\n }\n return blend[mode](bottom, top);\n };\n\n blend_f = function(f) {\n return function(bottom, top) {\n var c0, c1;\n c0 = chroma(top).rgb();\n c1 = chroma(bottom).rgb();\n return chroma(f(c0, c1), 'rgb');\n };\n };\n\n each = function(f) {\n return function(c0, c1) {\n var i, o, out;\n out = [];\n for (i = o = 0; o <= 3; i = ++o) {\n out[i] = f(c0[i], c1[i]);\n }\n return out;\n };\n };\n\n normal = function(a, b) {\n return a;\n };\n\n multiply = function(a, b) {\n return a * b / 255;\n };\n\n darken = function(a, b) {\n if (a > b) {\n return b;\n } else {\n return a;\n }\n };\n\n lighten = function(a, b) {\n if (a > b) {\n return a;\n } else {\n return b;\n }\n };\n\n screen = function(a, b) {\n return 255 * (1 - (1 - a / 255) * (1 - b / 255));\n };\n\n overlay = function(a, b) {\n if (b < 128) {\n return 2 * a * b / 255;\n } else {\n return 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\n }\n };\n\n burn = function(a, b) {\n return 255 * (1 - (1 - b / 255) / (a / 255));\n };\n\n dodge = function(a, b) {\n if (a === 255) {\n return 255;\n }\n a = 255 * (b / 255) / (1 - a / 255);\n if (a > 255) {\n return 255;\n } else {\n return a;\n }\n };\n\n blend.normal = blend_f(each(normal));\n\n blend.multiply = blend_f(each(multiply));\n\n blend.screen = blend_f(each(screen));\n\n blend.overlay = blend_f(each(overlay));\n\n blend.darken = blend_f(each(darken));\n\n blend.lighten = blend_f(each(lighten));\n\n blend.dodge = blend_f(each(dodge));\n\n blend.burn = blend_f(each(burn));\n\n chroma.blend = blend;\n\n chroma.analyze = function(data) {\n var len, o, r, val;\n r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n for (o = 0, len = data.length; o < len; o++) {\n val = data[o];\n if ((val != null) && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n if (val < r.min) {\n r.min = val;\n }\n if (val > r.max) {\n r.max = val;\n }\n r.count += 1;\n }\n }\n r.domain = [r.min, r.max];\n r.limits = function(mode, num) {\n return chroma.limits(r, mode, num);\n };\n return r;\n };\n\n chroma.scale = function(colors, positions) {\n var _classes, _colorCache, _colors, _correctLightness, _domain, _fixed, _gamma, _max, _min, _mode, _nacol, _out, _padding, _pos, _spread, _useCache, classifyValue, f, getClass, getColor, resetCache, setColors, tmap;\n _mode = 'rgb';\n _nacol = chroma('#ccc');\n _spread = 0;\n _fixed = false;\n _domain = [0, 1];\n _pos = [];\n _padding = [0, 0];\n _classes = false;\n _colors = [];\n _out = false;\n _min = 0;\n _max = 1;\n _correctLightness = false;\n _colorCache = {};\n _useCache = true;\n _gamma = 1;\n setColors = function(colors) {\n var c, col, o, ref, ref1, w;\n if (colors == null) {\n colors = ['#fff', '#000'];\n }\n if ((colors != null) && type(colors) === 'string' && (chroma.brewer != null)) {\n colors = chroma.brewer[colors] || chroma.brewer[colors.toLowerCase()] || colors;\n }\n if (type(colors) === 'array') {\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n }\n colors = colors.slice(0);\n for (c = o = 0, ref = colors.length - 1; 0 <= ref ? o <= ref : o >= ref; c = 0 <= ref ? ++o : --o) {\n col = colors[c];\n if (type(col) === \"string\") {\n colors[c] = chroma(col);\n }\n }\n _pos.length = 0;\n for (c = w = 0, ref1 = colors.length - 1; 0 <= ref1 ? w <= ref1 : w >= ref1; c = 0 <= ref1 ? ++w : --w) {\n _pos.push(c / (colors.length - 1));\n }\n }\n resetCache();\n return _colors = colors;\n };\n getClass = function(value) {\n var i, n;\n if (_classes != null) {\n n = _classes.length - 1;\n i = 0;\n while (i < n && value >= _classes[i]) {\n i++;\n }\n return i - 1;\n }\n return 0;\n };\n tmap = function(t) {\n return t;\n };\n classifyValue = function(value) {\n var i, maxc, minc, n, val;\n val = value;\n if (_classes.length > 2) {\n n = _classes.length - 1;\n i = getClass(value);\n minc = _classes[0] + (_classes[1] - _classes[0]) * (0 + _spread * 0.5);\n maxc = _classes[n - 1] + (_classes[n] - _classes[n - 1]) * (1 - _spread * 0.5);\n val = _min + ((_classes[i] + (_classes[i + 1] - _classes[i]) * 0.5 - minc) / (maxc - minc)) * (_max - _min);\n }\n return val;\n };\n getColor = function(val, bypassMap) {\n var c, col, i, k, o, p, ref, t;\n if (bypassMap == null) {\n bypassMap = false;\n }\n if (isNaN(val) || val === null) {\n return _nacol;\n }\n if (!bypassMap) {\n if (_classes && _classes.length > 2) {\n c = getClass(val);\n t = c / (_classes.length - 2);\n } else if (_max !== _min) {\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n }\n if (!bypassMap) {\n t = tmap(t);\n }\n if (_gamma !== 1) {\n t = pow(t, _gamma);\n }\n t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));\n t = Math.min(1, Math.max(0, t));\n k = Math.floor(t * 10000);\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type(_colors) === 'array') {\n for (i = o = 0, ref = _pos.length - 1; 0 <= ref ? o <= ref : o >= ref; i = 0 <= ref ? ++o : --o) {\n p = _pos[i];\n if (t <= p) {\n col = _colors[i];\n break;\n }\n if (t >= p && i === _pos.length - 1) {\n col = _colors[i];\n break;\n }\n if (t > p && t < _pos[i + 1]) {\n t = (t - p) / (_pos[i + 1] - p);\n col = chroma.interpolate(_colors[i], _colors[i + 1], t, _mode);\n break;\n }\n }\n } else if (type(_colors) === 'function') {\n col = _colors(t);\n }\n if (_useCache) {\n _colorCache[k] = col;\n }\n }\n return col;\n };\n resetCache = function() {\n return _colorCache = {};\n };\n setColors(colors);\n f = function(v) {\n var c;\n c = chroma(getColor(v));\n if (_out && c[_out]) {\n return c[_out]();\n } else {\n return c;\n }\n };\n f.classes = function(classes) {\n var d;\n if (classes != null) {\n if (type(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length - 1]];\n } else {\n d = chroma.analyze(_domain);\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma.limits(d, 'e', classes);\n }\n }\n return f;\n }\n return _classes;\n };\n f.domain = function(domain) {\n var c, d, k, len, o, ref, w;\n if (!arguments.length) {\n return _domain;\n }\n _min = domain[0];\n _max = domain[domain.length - 1];\n _pos = [];\n k = _colors.length;\n if (domain.length === k && _min !== _max) {\n for (o = 0, len = domain.length; o < len; o++) {\n d = domain[o];\n _pos.push((d - _min) / (_max - _min));\n }\n } else {\n for (c = w = 0, ref = k - 1; 0 <= ref ? w <= ref : w >= ref; c = 0 <= ref ? ++w : --w) {\n _pos.push(c / (k - 1));\n }\n }\n _domain = [_min, _max];\n return f;\n };\n f.mode = function(_m) {\n if (!arguments.length) {\n return _mode;\n }\n _mode = _m;\n resetCache();\n return f;\n };\n f.range = function(colors, _pos) {\n setColors(colors, _pos);\n return f;\n };\n f.out = function(_o) {\n _out = _o;\n return f;\n };\n f.spread = function(val) {\n if (!arguments.length) {\n return _spread;\n }\n _spread = val;\n return f;\n };\n f.correctLightness = function(v) {\n if (v == null) {\n v = true;\n }\n _correctLightness = v;\n resetCache();\n if (_correctLightness) {\n tmap = function(t) {\n var L0, L1, L_actual, L_diff, L_ideal, max_iter, pol, t0, t1;\n L0 = getColor(0, true).lab()[0];\n L1 = getColor(1, true).lab()[0];\n pol = L0 > L1;\n L_actual = getColor(t, true).lab()[0];\n L_ideal = L0 + (L1 - L0) * t;\n L_diff = L_actual - L_ideal;\n t0 = 0;\n t1 = 1;\n max_iter = 20;\n while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n (function() {\n if (pol) {\n L_diff *= -1;\n }\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n L_actual = getColor(t, true).lab()[0];\n return L_diff = L_actual - L_ideal;\n })();\n }\n return t;\n };\n } else {\n tmap = function(t) {\n return t;\n };\n }\n return f;\n };\n f.padding = function(p) {\n if (p != null) {\n if (type(p) === 'number') {\n p = [p, p];\n }\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n f.colors = function(numColors, out) {\n var dd, dm, i, o, ref, result, results, samples, w;\n if (arguments.length < 2) {\n out = 'hex';\n }\n result = [];\n if (arguments.length === 0) {\n result = _colors.slice(0);\n } else if (numColors === 1) {\n result = [f(0.5)];\n } else if (numColors > 1) {\n dm = _domain[0];\n dd = _domain[1] - dm;\n result = (function() {\n results = [];\n for (var o = 0; 0 <= numColors ? o < numColors : o > numColors; 0 <= numColors ? o++ : o--){ results.push(o); }\n return results;\n }).apply(this).map(function(i) {\n return f(dm + i / (numColors - 1) * dd);\n });\n } else {\n colors = [];\n samples = [];\n if (_classes && _classes.length > 2) {\n for (i = w = 1, ref = _classes.length; 1 <= ref ? w < ref : w > ref; i = 1 <= ref ? ++w : --w) {\n samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n }\n } else {\n samples = _domain;\n }\n result = samples.map(function(v) {\n return f(v);\n });\n }\n if (chroma[out]) {\n result = result.map(function(c) {\n return c[out]();\n });\n }\n return result;\n };\n f.cache = function(c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n f.gamma = function(g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n f.nodata = function(d) {\n if (d != null) {\n _nacol = chroma(d);\n return f;\n } else {\n return _nacol;\n }\n };\n return f;\n };\n\n if (chroma.scales == null) {\n chroma.scales = {};\n }\n\n chroma.scales.cool = function() {\n return chroma.scale([chroma.hsl(180, 1, .9), chroma.hsl(250, .7, .4)]);\n };\n\n chroma.scales.hot = function() {\n return chroma.scale(['#000', '#f00', '#ff0', '#fff'], [0, .25, .75, 1]).mode('rgb');\n };\n\n chroma.analyze = function(data, key, filter) {\n var add, k, len, o, r, val, visit;\n r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n if (filter == null) {\n filter = function() {\n return true;\n };\n }\n add = function(val) {\n if ((val != null) && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n if (val < r.min) {\n r.min = val;\n }\n if (val > r.max) {\n r.max = val;\n }\n r.count += 1;\n }\n };\n visit = function(val, k) {\n if (filter(val, k)) {\n if ((key != null) && type(key) === 'function') {\n return add(key(val));\n } else if ((key != null) && type(key) === 'string' || type(key) === 'number') {\n return add(val[key]);\n } else {\n return add(val);\n }\n }\n };\n if (type(data) === 'array') {\n for (o = 0, len = data.length; o < len; o++) {\n val = data[o];\n visit(val);\n }\n } else {\n for (k in data) {\n val = data[k];\n visit(val, k);\n }\n }\n r.domain = [r.min, r.max];\n r.limits = function(mode, num) {\n return chroma.limits(r, mode, num);\n };\n return r;\n };\n\n chroma.limits = function(data, mode, num) {\n var aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, assignments, best, centroids, cluster, clusterSizes, dist, i, j, kClusters, limits, max_log, min, min_log, mindist, n, nb_iters, newCentroids, o, p, pb, pr, ref, ref1, ref10, ref11, ref12, ref13, ref14, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, repeat, sum, tmpKMeansBreaks, v, value, values, w;\n if (mode == null) {\n mode = 'equal';\n }\n if (num == null) {\n num = 7;\n }\n if (type(data) === 'array') {\n data = chroma.analyze(data);\n }\n min = data.min;\n max = data.max;\n sum = data.sum;\n values = data.values.sort(function(a, b) {\n return a - b;\n });\n if (num === 1) {\n return [min, max];\n }\n limits = [];\n if (mode.substr(0, 1) === 'c') {\n limits.push(min);\n limits.push(max);\n }\n if (mode.substr(0, 1) === 'e') {\n limits.push(min);\n for (i = o = 1, ref = num - 1; 1 <= ref ? o <= ref : o >= ref; i = 1 <= ref ? ++o : --o) {\n limits.push(min + (i / num) * (max - min));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'l') {\n if (min <= 0) {\n throw 'Logarithmic scales are only possible for values > 0';\n }\n min_log = Math.LOG10E * log(min);\n max_log = Math.LOG10E * log(max);\n limits.push(min);\n for (i = w = 1, ref1 = num - 1; 1 <= ref1 ? w <= ref1 : w >= ref1; i = 1 <= ref1 ? ++w : --w) {\n limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'q') {\n limits.push(min);\n for (i = aa = 1, ref2 = num - 1; 1 <= ref2 ? aa <= ref2 : aa >= ref2; i = 1 <= ref2 ? ++aa : --aa) {\n p = (values.length - 1) * i / num;\n pb = floor(p);\n if (pb === p) {\n limits.push(values[pb]);\n } else {\n pr = p - pb;\n limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n }\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'k') {\n\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n n = values.length;\n assignments = new Array(n);\n clusterSizes = new Array(num);\n repeat = true;\n nb_iters = 0;\n centroids = null;\n centroids = [];\n centroids.push(min);\n for (i = ab = 1, ref3 = num - 1; 1 <= ref3 ? ab <= ref3 : ab >= ref3; i = 1 <= ref3 ? ++ab : --ab) {\n centroids.push(min + (i / num) * (max - min));\n }\n centroids.push(max);\n while (repeat) {\n for (j = ac = 0, ref4 = num - 1; 0 <= ref4 ? ac <= ref4 : ac >= ref4; j = 0 <= ref4 ? ++ac : --ac) {\n clusterSizes[j] = 0;\n }\n for (i = ad = 0, ref5 = n - 1; 0 <= ref5 ? ad <= ref5 : ad >= ref5; i = 0 <= ref5 ? ++ad : --ad) {\n value = values[i];\n mindist = Number.MAX_VALUE;\n for (j = ae = 0, ref6 = num - 1; 0 <= ref6 ? ae <= ref6 : ae >= ref6; j = 0 <= ref6 ? ++ae : --ae) {\n dist = abs(centroids[j] - value);\n if (dist < mindist) {\n mindist = dist;\n best = j;\n }\n }\n clusterSizes[best]++;\n assignments[i] = best;\n }\n newCentroids = new Array(num);\n for (j = af = 0, ref7 = num - 1; 0 <= ref7 ? af <= ref7 : af >= ref7; j = 0 <= ref7 ? ++af : --af) {\n newCentroids[j] = null;\n }\n for (i = ag = 0, ref8 = n - 1; 0 <= ref8 ? ag <= ref8 : ag >= ref8; i = 0 <= ref8 ? ++ag : --ag) {\n cluster = assignments[i];\n if (newCentroids[cluster] === null) {\n newCentroids[cluster] = values[i];\n } else {\n newCentroids[cluster] += values[i];\n }\n }\n for (j = ah = 0, ref9 = num - 1; 0 <= ref9 ? ah <= ref9 : ah >= ref9; j = 0 <= ref9 ? ++ah : --ah) {\n newCentroids[j] *= 1 / clusterSizes[j];\n }\n repeat = false;\n for (j = ai = 0, ref10 = num - 1; 0 <= ref10 ? ai <= ref10 : ai >= ref10; j = 0 <= ref10 ? ++ai : --ai) {\n if (newCentroids[j] !== centroids[i]) {\n repeat = true;\n break;\n }\n }\n centroids = newCentroids;\n nb_iters++;\n if (nb_iters > 200) {\n repeat = false;\n }\n }\n kClusters = {};\n for (j = aj = 0, ref11 = num - 1; 0 <= ref11 ? aj <= ref11 : aj >= ref11; j = 0 <= ref11 ? ++aj : --aj) {\n kClusters[j] = [];\n }\n for (i = ak = 0, ref12 = n - 1; 0 <= ref12 ? ak <= ref12 : ak >= ref12; i = 0 <= ref12 ? ++ak : --ak) {\n cluster = assignments[i];\n kClusters[cluster].push(values[i]);\n }\n tmpKMeansBreaks = [];\n for (j = al = 0, ref13 = num - 1; 0 <= ref13 ? al <= ref13 : al >= ref13; j = 0 <= ref13 ? ++al : --al) {\n tmpKMeansBreaks.push(kClusters[j][0]);\n tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n }\n tmpKMeansBreaks = tmpKMeansBreaks.sort(function(a, b) {\n return a - b;\n });\n limits.push(tmpKMeansBreaks[0]);\n for (i = am = 1, ref14 = tmpKMeansBreaks.length - 1; am <= ref14; i = am += 2) {\n v = tmpKMeansBreaks[i];\n if (!isNaN(v) && limits.indexOf(v) === -1) {\n limits.push(v);\n }\n }\n }\n return limits;\n };\n\n hsi2rgb = function(h, s, i) {\n\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n var args, b, g, r;\n args = unpack(arguments);\n h = args[0], s = args[1], i = args[2];\n if (isNaN(h)) {\n h = 0;\n }\n h /= 360;\n if (h < 1 / 3) {\n b = (1 - s) / 3;\n r = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;\n g = 1 - (b + r);\n } else if (h < 2 / 3) {\n h -= 1 / 3;\n r = (1 - s) / 3;\n g = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;\n b = 1 - (r + g);\n } else {\n h -= 2 / 3;\n g = (1 - s) / 3;\n b = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;\n r = 1 - (g + b);\n }\n r = limit(i * r * 3);\n g = limit(i * g * 3);\n b = limit(i * b * 3);\n return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n };\n\n rgb2hsi = function() {\n\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n var b, g, h, i, min, r, ref, s;\n ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];\n TWOPI = Math.PI * 2;\n r /= 255;\n g /= 255;\n b /= 255;\n min = Math.min(r, g, b);\n i = (r + g + b) / 3;\n s = 1 - min / i;\n if (s === 0) {\n h = 0;\n } else {\n h = ((r - g) + (r - b)) / 2;\n h /= Math.sqrt((r - g) * (r - g) + (r - b) * (g - b));\n h = Math.acos(h);\n if (b > g) {\n h = TWOPI - h;\n }\n h /= TWOPI;\n }\n return [h * 360, s, i];\n };\n\n chroma.hsi = function() {\n return (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(Color, slice.call(arguments).concat(['hsi']), function(){});\n };\n\n _input.hsi = hsi2rgb;\n\n Color.prototype.hsi = function() {\n return rgb2hsi(this._rgb);\n };\n\n interpolate_hsx = function(col1, col2, f, m) {\n var dh, hue, hue0, hue1, lbv, lbv0, lbv1, res, sat, sat0, sat1, xyz0, xyz1;\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n }\n if (m.substr(0, 1) === 'h') {\n hue0 = xyz0[0], sat0 = xyz0[1], lbv0 = xyz0[2];\n hue1 = xyz1[0], sat1 = xyz1[1], lbv1 = xyz1[2];\n }\n if (!isNaN(hue0) && !isNaN(hue1)) {\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n if ((lbv1 === 1 || lbv1 === 0) && m !== 'hsv') {\n sat = sat0;\n }\n } else if (!isNaN(hue1)) {\n hue = hue1;\n if ((lbv0 === 1 || lbv0 === 0) && m !== 'hsv') {\n sat = sat1;\n }\n } else {\n hue = Number.NaN;\n }\n if (sat == null) {\n sat = sat0 + f * (sat1 - sat0);\n }\n lbv = lbv0 + f * (lbv1 - lbv0);\n return res = chroma[m](hue, sat, lbv);\n };\n\n _interpolators = _interpolators.concat((function() {\n var len, o, ref, results;\n ref = ['hsv', 'hsl', 'hsi', 'hcl', 'lch', 'hcg'];\n results = [];\n for (o = 0, len = ref.length; o < len; o++) {\n m = ref[o];\n results.push([m, interpolate_hsx]);\n }\n return results;\n })());\n\n interpolate_num = function(col1, col2, f, m) {\n var n1, n2;\n n1 = col1.num();\n n2 = col2.num();\n return chroma.num(n1 + (n2 - n1) * f, 'num');\n };\n\n _interpolators.push(['num', interpolate_num]);\n\n interpolate_lab = function(col1, col2, f, m) {\n var res, xyz0, xyz1;\n xyz0 = col1.lab();\n xyz1 = col2.lab();\n return res = new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);\n };\n\n _interpolators.push(['lab', interpolate_lab]);\n\n}).call(this);\n","/* globals window, setTimeout, clearTimeout */\nimport * as R from 'ramda'\nimport Promise from 'bluebird'\nimport m from 'bacta'\nimport moment from 'moment'\nimport css from '../../utils/css'\nimport colors from '../../utils/colors'\nimport AABB from './aabb'\nimport DetailsPane from './detailspane'\nimport { prop as stream } from '../../../../stream'\nimport svg from '../../utils/svg'\nimport { T } from '../../utils/safe'\nimport chroma from 'chroma-js'\n\n\nconst double = (v) => v * 2\nconst { percent, em, px, vw, seconds } = css.units\nconst lt = R.flip(R.lt)\n\n\nconst mapObj = R.map\n\nconst {\n\ttranslate\n\t, translateX\n\t, translateY\n\t, scale\n} = css.funcs\n\nfunction ProjectStyle(\n\tscale\n\t, scaleMax\n\t, projectScale\n) {\n\tconst ganttScale = scale / scaleMax\n\n\treturn {\n\t\tposition: css.position.absolute\n\t\t, textAlign: css.textAlign.left\n\t\t, fontSize: em(50)\n\t\t, color: colors.muted\n\t\t, width: vw(1 / ganttScale * 1000)\n\t\t, transformOrigin: 'top left'\n\t\t, transition: seconds(0.2)\n\t\t, transform: css.funcs.scale(1, 1)\n\t\t\t.map(R.multiply(projectScale))\n\t\t, '-webkit-user-select': 'none'\n\t}\n}\n\nexport default function (world) {\n\n\tconst {\n\t\tallocations\n\t\t, pointer\n\t\t, DAY_MILLIS\n\t\t, currentTime\n\t} = world\n\n\tconst clicks = world.scoped()\n\n\tconst resizes = world.scoped()\n\n\tfunction getWindowDimensions() {\n\t\treturn {\n\t\t\twidth: window.innerWidth\n\t\t\t, height: window.innerHeight\n\t\t}\n\t}\n\n\tconst windowSize =\n\t\tstream\n\t\t\t.afterSilence(1000, resizes)\n\t\t\t.map(getWindowDimensions)\n\n\twindowSize(getWindowDimensions())\n\n\t// todo-james create a scoped prop.scoped.fromEvent\n\twindow.addEventListener('resize', resizes)\n\n\twindowSize.end.map(function () {\n\t\treturn window.removeEventListener('resize', resizes)\n\t})\n\n\tconst xScale = world.xScale * pointer.settings.scale.max\n\n\tconst style = {\n\t\tmain: () => ({\n\t\t\ttop: em(0)\n\t\t\t, left: em(0)\n\t\t\t, position: css.position.absolute\n\t\t\t, width: percent(100)\n\t\t\t, height: percent(100)\n\t\t\t, overflow: css.overflow.hidden\n\t\t\t, backgroundColor: colors.blackboard\n\t\t})\n\n\t\t, container: function () {\n\t\t\tconst ganttScale = pointer.scale() / pointer.settings.scale.max\n\t\t\tconst timeAsX = currentTime() / DAY_MILLIS * xScale\n\t\t\tconst transform = css.sequence(\n\t\t\t\ttranslateY(px(pointer.coords().y))\n\t\t\t\t, scale(ganttScale, ganttScale)\n\t\t\t\t, translateX(px(- timeAsX))\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tposition: css.position.absolute\n\t\t\t\t, transform\n\t\t\t\t, transformOrigin: 'top left'\n\t\t\t}\n\t\t}\n\n\t}\n\n\tconst byProject =\n\t\tallocations.map(\n\t\t\tR.pipe(\n\t\t\t\tR.groupBy(R.prop('project_id'))\n\t\t\t\t, mapObj(\n\t\t\t\t\tR.sortBy(\n\t\t\t\t\t\tR.prop('allocations_allocation_date')\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst contractorKey =\n\t\tR.pipe(\n\t\t\tR.propOr([], 'allocations_contractors')\n\t\t\t, R.pluck('contractor_id')\n\t\t\t, R.uniq\n\t\t\t, R.sortBy(R.identity)\n\t\t\t, R.join('|')\n\t\t)\n\n\n\n\tconst byProjectByContractor =\n\t\tbyProject.map(\n\t\t\tmapObj(\n\t\t\t\tR.ifElse(\n\t\t\t\t\tR.isEmpty\n\t\t\t\t\t, R.always({})\n\t\t\t\t\t, R.groupBy(contractorKey)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst contractorLabel =\n\t\tR.pipe(\n\t\t\tR.propOr([], 'allocations_contractors')\n\t\t\t, R.pluck('allocations_contractors_name')\n\t\t\t, R.uniq\n\t\t\t, R.sortBy(R.identity)\n\t\t\t, R.join(' & ')\n\t\t)\n\n\tconst contractorKeys =\n\t\tbyProjectByContractor.map(\n\t\t\tmapObj(\n\t\t\t\tmapObj(function (allocations) {\n\t\t\t\t\treturn contractorKey(allocations[0])\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\n\tconst byContractor =\n\t\tbyProjectByContractor.map(\n\t\t\tR.pipe(\n\t\t\t\tR.values\n\t\t\t\t, R.mergeAll\n\t\t\t)\n\t\t)\n\n\tconst allContractors = contractorKeys.map(\n\t\tR.pipe(\n\t\t\tmapObj(R.values)\n\t\t\t, R.values\n\t\t\t, R.unnest\n\t\t\t, R.uniq\n\t\t)\n\t)\n\n\tconst byProjectByDiscipline =\n\t\tbyProject.map(\n\t\t\tmapObj(\n\t\t\t\tR.groupBy(\n\t\t\t\t\t(allocation) => allocation.discipline_id\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\tconst byProjectByWorkname =\n\t\tbyProject.map(\n\t\t\tmapObj(\n\t\t\t\tR.groupBy((a) => a.allocations_work_name)\n\t\t\t)\n\t\t)\n\n\tconst allWorknames =\n\t\tbyProjectByWorkname.map(\n\t\t\tR.pipe(\n\t\t\t\t(index) => R.values(index)\n\t\t\t\t, R.unnest\n\t\t\t\t, (list) => list.map(R.keys)\n\t\t\t\t, R.unnest\n\t\t\t\t, R.uniq\n\t\t\t)\n\t\t)\n\n\tconst indexToColour = (i, _, length) => {\n\n\t\t//todo-james there's a bug where length=1 returns a value not a list\n\t\tconst colour = [].concat(chroma.scale('Spectral').colors(length))[i]\n\t\treturn chroma(colour)\n\t\t\t.saturate(1.5)\n\t}\n\n\n\tconst worknameColours =\n\t\tallWorknames.map(\n\t\t\t(list) => list.reduce(\n\t\t\t\t(hash, workname, i) =>\n\t\t\t\t\tR.merge({\n\t\t\t\t\t\t[workname]: indexToColour(i, 30, allWorknames().length)\n\t\t\t\t\t}, hash)\n\t\t\t\t, {}\n\t\t\t)\n\t\t)\n\n\tconst contractorColours =\n\t\tallContractors.map(\n\t\t\tfunction (list) {\n\t\t\t\treturn list.reduce(function (p, contractorKey) {\n\n\t\t\t\t\tif (contractorKey && contractorKey in byContractor()) {\n\t\t\t\t\t\tconst allocations = byContractor()[contractorKey]\n\n\t\t\t\t\t\tconst allocation = allocations[0]\n\t\t\t\t\t\treturn R.merge({\n\t\t\t\t\t\t\t[contractorKey]:\n\t\t\t\t\t\t\t\tworknameColours()\n\t\t\t\t\t\t\t\t[allocation.allocations_work_name]\n\t\t\t\t\t\t\t\t\t.desaturate(1)\n\t\t\t\t\t\t\t\t\t.darken(1.5)\n\t\t\t\t\t\t}, p)\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn p\n\t\t\t\t}, {})\n\t\t\t}\n\t\t)\n\n\t/**\n\t * Project ids sorted by the date of their earliest allocation\n\t */\n\tconst sortedProjectIds = byProject\n\t\t.map(function (byProject) {\n\t\t\tconst projects = R.keys(byProject)\n\n\t\t\treturn R.sortBy(function (project_id) {\n\t\t\t\treturn byProject[project_id][0].allocations_allocation_date\n\t\t\t})(projects)\n\t\t})\n\n\tconst projects =\n\t\t[ sortedProjectIds\n\t\t, stream.dropRepeats\n\t\t, s => s.map(\n\t\t\tids => {\n\t\t\t\tPromise.all(ids)\n\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\tworld.readProjectPermissions()\n\t\t\t\t\t\t? world.fetchProjectsByProjectId({\n\t\t\t\t\t\t\tproject_id: i\n\t\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\t\tdisciplines: [\n\t\t\t\t\t\t\t\t\t'discipline_name'\n\t\t\t\t\t\t\t\t\t, 'discipline_order'\n\t\t\t\t\t\t\t\t\t, 'discipline_work'\n\t\t\t\t\t\t\t\t\t, 'discipline_completed'\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, depth: 2\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: []\n\t\t\t\t\t)\n\t\t\t\t\t// emit here\n\t\t\t\t\t.then(xs => projects(xs))\n\n\t\t\t\t// don't emit yet\n\t\t\t\treturn stream.SKIP\n\t\t\t}\n\t\t)\n\t\t]\n\t\t.reduce(T)\n\n\tconst projectIndex =\n\t\tprojects.map(R.indexBy(R.prop('project_id')))\n\n\tconst ProjectCompletion = function (project) {\n\n\t\tconst allocations =\n\t\t\tbyProject()[project.project_id]\n\t\t\t// added because lower level users dont' have project permissions\n\t\t\t|| []\n\t\t// But its nice to see there worth in the gannt\n\n\t\tconst earliestCompleteAllocation =\n\t\t\tR.find(a =>\n\t\t\t\ta.allocations_allocation_complete > 0\n\t\t\t)(allocations)\n\n\t\tconst earliestAllocation =\n\t\t\tallocations[0]\n\t\t\t// added because lower level users dont' have project permissions\n\t\t\t|| {}\n\t\t// But its nice to see there worth in the gannt\n\n\t\tconst earliestAllocationWorkDate =\n\t\t\tearliestCompleteAllocation\n\t\t\t\t? earliestCompleteAllocation.allocations_allocation_date\n\t\t\t\t: earliestAllocation.allocations_allocation_date\n\n\t\tconst earliestAllocationDate =\n\t\t\tearliestAllocation.allocations_allocation_date\n\n\t\tconst latestAllocationDate =\n\t\t\tbyProject()[project.project_id]\n\t\t\t// added because lower level users dont' have project permissions\n\t\t\t|| [{ allocations_allocation_date: null }]\n\t\t\t\t// But its nice to see there worth in the gannt\n\t\t\t\t.slice(-1)[0]\n\t\t\t\t.allocations_allocation_date\n\n\t\treturn {\n\t\t\tproject_id: project.project_id\n\t\t\t, forecastStart:\n\t\t\t\tmoment(earliestAllocationDate).startOf('day').valueOf()\n\t\t\t, forecastEnd:\n\t\t\t\tmoment(latestAllocationDate).startOf('day').valueOf()\n\t\t\t, actualStart:\n\t\t\t\tmoment(earliestAllocationWorkDate).startOf('day').valueOf()\n\t\t\t, actualEnd:\n\t\t\t\tproject.project_completion_marker\n\t\t\t\t\t? moment(project.project_completion_marker)\n\t\t\t\t\t\t.startOf('day').valueOf()\n\t\t\t\t\t: null\n\t\t}\n\t}\n\n\tconst projectCompletions =\n\t\tprojects.map(\n\t\t\tR.pipe(\n\t\t\t\tR.map(ProjectCompletion)\n\t\t\t\t, R.indexBy(p => p.project_id)\n\t\t\t)\n\t\t)\n\n\tconst sortedProjectDisciplines =\n\t\tbyProjectByDiscipline.map(\n\t\t\tR.addIndex(mapObj)(\n\t\t\t\tfunction (byDiscipline, project_id) {\n\t\t\t\t\tconst disciplines = R.keys(byDiscipline)\n\t\t\t\t\treturn R.sortBy(function (discipline_id) {\n\n\t\t\t\t\t\treturn byDiscipline[discipline_id][0]\n\t\t\t\t\t\t\t.allocations_allocation_date\n\n\t\t\t\t\t})(disciplines)\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\n\tconst disciplineIndexes =\n\t\tsortedProjectDisciplines.map(\n\t\t\tmapObj(function (disciplines) {\n\t\t\t\treturn disciplines.reduce(function (p, discipline_id, i) {\n\n\t\t\t\t\tp[discipline_id] = i\n\t\t\t\t\treturn p\n\t\t\t\t}, {})\n\t\t\t})\n\t\t)\n\n\t/**\n\t * How much extra space between each discipline row as a ratio\n\t * of the font height\n\t */\n\tconst discipline_row_height = 10\n\tconst discipline_margin = em(3)\n\n\tconst getAllocationCoords = (\n\t\tdiscipline_i\n\t\t, shiftAfterScale\n\t\t, metadataSize\n\t\t, allocations\n\t) => function (a) {\n\n\t\tconst x = px(\n\t\t\tmoment(\n\t\t\t\ta.allocations_allocation_date\n\t\t\t\t- allocations[0].allocations_allocation_date\n\t\t\t).valueOf() / DAY_MILLIS * xScale\n\t\t)\n\n\n\n\t\t/**\n\t\t * The spacing between the heading and the rendered allocations\n\t\t */\n\t\tconst headerPadding = metadataSize.map(R.multiply(0.5))\n\n\t\tconst y = em(\n\t\t\tdiscipline_i\n\t\t\t* discipline_row_height\n\t\t\t// todo-james lift these functors\n\t\t\t+ headerPadding.join()\n\t\t\t+ metadataSize.join()\n\t\t\t- shiftAfterScale * metadataSize.join()\n\t\t)\n\n\t\treturn { x, y }\n\t}\n\n\tconst scaleSettings =\n\t\tstream.fromFlydStream(pointer.scale).map(\n\t\t\tR.cond([\n\t\t\t\t[lt(7), R.always([0.9, 0])]\n\t\t\t\t, [lt(30), R.always([0.5, 0.8])]\n\t\t\t\t, [R.T, R.always([0.05, 1.4])]\n\t\t\t])\n\t\t)\n\n\tconst projectScale = scaleSettings.map(R.head)\n\tconst shiftAfterScale = scaleSettings.map(R.last)\n\n\tconst projectStyle =\n\t\tstream.merge([\n\t\t\tstream.fromFlydStream(pointer.scale)\n\t\t\t, stream(pointer.settings.scale.max)\n\t\t\t, projectScale\n\t\t])\n\t\t\t.map(function (args) {\n\t\t\t\treturn ProjectStyle(...args)\n\t\t\t})\n\n\t/**\n\t * The height of the heading / metadata\n\t */\n\tconst metadataSize = projectStyle.map((s) => s.fontSize)\n\n\tconst nestedIndexReduce = (\n\t\tvisitor\n\t) => function (container) {\n\t\treturn Object.keys(container).reduce(function (\n\t\t\tprev, containerKey\n\t\t) {\n\t\t\tconst child = container[containerKey]\n\n\n\t\t\tprev[containerKey] =\n\t\t\t\tObject.keys(container[containerKey])\n\t\t\t\t\t.reduce(function (prev, childKey) {\n\n\t\t\t\t\t\treturn visitor(\n\t\t\t\t\t\t\tprev\n\t\t\t\t\t\t\t, child[childKey]\n\t\t\t\t\t\t\t, childKey\n\t\t\t\t\t\t\t, containerKey\n\t\t\t\t\t\t)\n\n\t\t\t\t\t}, {})\n\n\t\t\treturn prev\n\n\t\t}, {})\n\t}\n\n\tconst allocationCoordsByProject =\n\t\tstream.merge([\n\t\t\tdisciplineIndexes\n\t\t\t, shiftAfterScale\n\t\t\t, metadataSize\n\t\t\t, byProjectByDiscipline\n\t\t\t, byProject\n\t\t]).map(function ([\n\t\t\tprojectDisciplines\n\t\t\t, shiftAfterScale\n\t\t\t, metadataSize\n\t\t\t, byProjectDiscipline\n\t\t\t, byProject\n\t\t]) {\n\n\t\t\treturn nestedIndexReduce(function (\n\t\t\t\tp\n\t\t\t\t, discipline_i\n\t\t\t\t, discipline_id\n\t\t\t\t, project_id\n\t\t\t) {\n\t\t\t\tconst projectAllocations =\n\t\t\t\t\tbyProject[project_id]\n\n\t\t\t\tconst disciplineAllocations =\n\t\t\t\t\tbyProjectDiscipline[project_id][discipline_id]\n\n\t\t\t\tconst ids =\n\t\t\t\t\tR.pluck('allocation_id')(disciplineAllocations)\n\n\t\t\t\tconst coords = disciplineAllocations\n\t\t\t\t\t.map(getAllocationCoords(\n\t\t\t\t\t\tdiscipline_i\n\t\t\t\t\t\t, shiftAfterScale\n\t\t\t\t\t\t, metadataSize\n\t\t\t\t\t\t, projectAllocations\n\t\t\t\t\t))\n\n\t\t\t\treturn R.merge(\n\t\t\t\t\tR.zipObj(ids)(coords)\n\t\t\t\t)(p)\n\n\t\t\t})(projectDisciplines)\n\t\t})\n\n\tfunction completionDiagram(\n\t\tcompletion\n\t\t, offset\n\t) {\n\n\t\tif (completion) {\n\n\t\t\tconst {\n\t\t\t\tactualStart\n\t\t\t\t, actualEnd\n\t\t\t\t, forecastStart\n\t\t\t\t, forecastEnd\n\t\t\t} = completion\n\n\t\t\tconst start = {\n\t\t\t\tfulfilled: !!actualStart\n\t\t\t\t, early: actualStart < forecastStart\n\t\t\t\t, late: actualStart > forecastStart\n\t\t\t\t, onTime: actualStart == forecastStart\n\t\t\t\t, isStart: true\n\t\t\t}\n\n\t\t\tconst end = {\n\t\t\t\tfulfilled: !!actualEnd\n\t\t\t\t, early: actualEnd && actualEnd < forecastEnd\n\t\t\t\t, late: actualEnd && actualEnd > forecastEnd\n\n\t\t\t\t// if we haven't actually ended, we project that we are on time\n\t\t\t\t// but with an empty circle\n\t\t\t\t, onTime: !actualEnd || actualEnd == forecastEnd\n\t\t\t\t, isStart: false\n\t\t\t}\n\n\t\t\tconst w = 150\n\t\t\tconst stroke = 15\n\n\t\t\tconst r = w - stroke\n\n\t\t\tconst columns = 24\n\t\t\tconst totalWidth = columns * w\n\t\t\tconst positionWidth = totalWidth / columns\n\t\t\tconst spacing = columns / 6 // 6 possible states\n\n\n\t\t\tconst x = {\n\t\t\t\tstart: {\n\t\t\t\t\tearly: positionWidth * spacing * 0\n\t\t\t\t\t, onTime: positionWidth * spacing * 1\n\t\t\t\t\t, late: positionWidth * spacing * 2\n\t\t\t\t}\n\t\t\t\t, end: {\n\t\t\t\t\tearly: positionWidth * spacing * 3\n\t\t\t\t\t, onTime: positionWidth * spacing * 4\n\t\t\t\t\t, late: positionWidth * spacing * 5\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst y = {\n\t\t\t\tforecast: w\n\t\t\t\t, actual: w * 5\n\t\t\t}\n\n\t\t\tconst style = function ({ fulfilled, early, onTime }) {\n\t\t\t\tconst color =\n\t\t\t\t\tearly ? 'green'\n\t\t\t\t\t\t: onTime ? 'white'\n\t\t\t\t\t\t\t: 'red'\n\n\t\t\t\treturn {\n\t\t\t\t\tfill: fulfilled ? color : 'none'\n\t\t\t\t\t, stroke: color\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst xAxis = function (\n\t\t\t\tp\n\t\t\t\t, { early, onTime, fulfilled, isStart }\n\t\t\t) {\n\n\t\t\t\treturn early\n\t\t\t\t\t? p.early\n\t\t\t\t\t: onTime || isStart && !fulfilled\n\t\t\t\t\t\t? p.onTime\n\t\t\t\t\t\t: p.late\n\t\t\t}\n\n\n\n\t\t\tconst forecastStyle =\n\t\t\t\tstyle({ fulfilled: false, early: false, onTime: true })\n\n\t\t\tconst forecast =\n\t\t\t\t[\n\t\t\t\t\t[x.start.onTime, y.forecast, forecastStyle]\n\t\t\t\t\t, [x.end.onTime, y.forecast, forecastStyle]\n\t\t\t\t]\n\n\t\t\tconst actual =\n\t\t\t\t[\n\t\t\t\t\t[xAxis(x.start, start), y.actual, style(start)]\n\t\t\t\t\t, [xAxis(x.end, end), y.actual, style(end)]\n\t\t\t\t]\n\n\t\t\tconst forecastLine =\n\t\t\t\tsvg.dashLine(\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { stroke: 'white' }\n\t\t\t\t\t}\n\t\t\t\t\t, { x: x.start.onTime + w * 2, y: y.forecast }\n\t\t\t\t\t, { x: x.end.onTime, y: y.forecast }\n\t\t\t\t)\n\n\t\t\tconst actualLine =\n\t\t\t\tsvg.line(\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: { stroke: 'white' }\n\t\t\t\t\t}\n\t\t\t\t\t, { x: xAxis(x.start, start) + w * 2, y: y.actual }\n\t\t\t\t\t, { x: xAxis(x.end, end), y: y.actual }\n\t\t\t\t)\n\n\t\t\tconst permutations =\n\t\t\t\tforecast\n\t\t\t\t\t.concat(actual)\n\t\t\t\t\t.map(\n\n\t\t\t\t\t\t([cx, cy, o]) => [cx + w, cy, o]\n\n\t\t\t\t\t)\n\n\n\t\t\treturn m('svg'\n\t\t\t\t, {\n\t\t\t\t\tstyle:\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: 'absolute'\n\t\t\t\t\t\t, transform: translateY(offset)\n\t\t\t\t\t\t, 'stroke-width': stroke\n\t\t\t\t\t}\n\t\t\t\t\t, height: px(1200)\n\t\t\t\t\t, width: px(3500)\n\n\t\t\t\t}\n\t\t\t\t, forecastLine\n\t\t\t\t, actualLine\n\t\t\t\t, permutations.map(\n\t\t\t\t\t([cx, cy, attrs]) => svg.circle(\n\t\t\t\t\t\tattrs\n\t\t\t\t\t\t, { cx, cy, r }\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t)\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\tconst pointerWasDragging = world.scoped()\n\n\n\tconst selectedProject =\n\t\tallocations.map(() => null)\n\n\tconst selectedAllocation =\n\t\tselectedProject.map(() => null)\n\n\tconst timesheets = stream([])\n\n\tstream.dropRepeats(selectedAllocation).map(\n\t\ta => {\n\t\t\tif( a ) {\n\t\t\t\tworld.fetchTimesheetsByAllocation({allocation_id: a.allocation_id, sharedtimesheet: 'none'})\n\t\t\t\t\t.then(timesheets)\n\t\t\t} else {\n\t\t\t\ttimesheets([])\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\t)\n\n\tconst onclickEmptySpace = function () {\n\t\tif (!pointerWasDragging()) {\n\t\t\tselectedProject(null)\n\t\t\tselectedAllocation(null)\n\t\t}\n\t}\n\n\tclicks.map(onclickEmptySpace)\n\n\tfunction ProjectView(project_id) {\n\n\t\tfunction projectTitle() {\n\t\t\treturn m('div.truncate'\n\t\t\t\t, {\n\t\t\t\t\tstyle: projectStyle()\n\t\t\t\t}\n\t\t\t\t, project_name\n\t\t\t)\n\t\t}\n\n\t\tfunction contractorView(a) {\n\t\t\tconst colour = contractorColours()[contractorKey(a)]\n\n\t\t\treturn colour\n\t\t\t\t? m('span'\n\t\t\t\t\t, {\n\t\t\t\t\t\tstyle: style.contractor(\n\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t, allocationCoordsByProject()\n\t\t\t\t\t\t\t[project_id][a.allocation_id]\n\t\t\t\t\t\t\t, discipline_row_height\n\t\t\t\t\t\t\t, discipline_margin.map(R.multiply(1))\n\t\t\t\t\t\t\t, contractorColours()[contractorKey(a)]\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t// cache this later\n\t\t\t\t\t, contractorLabel(a)\n\t\t\t\t)\n\t\t\t\t: []\n\t\t}\n\n\t\tfunction allocationView(a) {\n\t\t\tconst index = allocationCoordsByProject()\n\n\t\t\treturn m('span'\n\t\t\t\t, {\n\t\t\t\t\tstyle: style.allocation(\n\t\t\t\t\t\ta\n\t\t\t\t\t\t, index[project_id][a.allocation_id]\n\t\t\t\t\t\t, discipline_row_height\n\t\t\t\t\t\t, discipline_margin.map(R.multiply(1))\n\t\t\t\t\t\t, worknameColours()[a.allocations_work_name]\n\t\t\t\t\t\t, selectedAllocation()\n\t\t\t\t\t\t&& selectedAllocation()\n\t\t\t\t\t\t\t.allocation_id == a.allocation_id\n\t\t\t\t\t\t, selected\n\t\t\t\t\t)\n\t\t\t\t\t, title: a.allocations_work_name\n\t\t\t\t\t, onclick: selected && onclickAllocation(a)\n\t\t\t\t}\n\t\t\t\t, pointer.scale() > 20 ? a.allocations_work_name : ''\n\t\t\t)\n\t\t}\n\n\t\tconst style = {\n\n\t\t\tcontractor: function (\n\t\t\t\ta\n\t\t\t\t, { x, y }\n\t\t\t\t, height\n\t\t\t) {\n\n\t\t\t\treturn {\n\t\t\t\t\tposition: css.position.absolute\n\t\t\t\t\t, height: em(height / 2)\n\t\t\t\t\t, textAlign: css.textAlign.left\n\t\t\t\t\t, transform: translate(x, y.map(R.multiply(1 / 2)))\n\t\t\t\t\t, width: px(xScale)\n\t\t\t\t\t// ,backgroundColor: backgroundColor.hex()\n\t\t\t\t\t, overflow: css.overflow.hidden\n\t\t\t\t\t, fontSize: em(2)\n\t\t\t\t\t, paddingLeft: em(0.2)\n\t\t\t\t\t// ,color: css.colors.black\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t, allocation: function (\n\t\t\t\ta\n\t\t\t\t, { x, y }\n\t\t\t\t, height\n\t\t\t\t, margin\n\t\t\t\t, backgroundColor\n\t\t\t\t, selected\n\t\t\t\t, selectedProject\n\t\t\t) {\n\n\t\t\t\tconst doubleMargin = margin.map(double)\n\n\t\t\t\tconst calcWidth = `calc( ${px(xScale)} - ${doubleMargin} )`\n\t\t\t\tconst calcHeight = `calc( ${em(height)} - ${doubleMargin} )`\n\n\t\t\t\tconst opacity =\n\t\t\t\t\tselectedProject\n\t\t\t\t\t\t&& selectedAllocation()\n\t\t\t\t\t\t&& !selected\n\t\t\t\t\t\t? 0.2\n\t\t\t\t\t\t: 1\n\n\t\t\t\treturn {\n\t\t\t\t\tposition: css.position.absolute\n\t\t\t\t\t, height: calcHeight\n\t\t\t\t\t, textAlign: css.textAlign.center\n\t\t\t\t\t, transform: translate(x, y)\n\t\t\t\t\t, width: calcWidth\n\t\t\t\t\t, margin: margin\n\t\t\t\t\t, backgroundColor\n\t\t\t\t\t, lineHeight: calcHeight\n\t\t\t\t\t, overflow: css.overflow.hidden\n\t\t\t\t\t, paddingLeft: em(1)\n\t\t\t\t\t, paddingRight: em(1)\n\t\t\t\t\t, color: css.colors.black\n\t\t\t\t\t, fontWeight: 'bold'\n\t\t\t\t\t, opacity\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * An approximation of the ratio of extra empty space that around a font\n\t\t * */\n\t\tconst fontPadding = 1.1\n\n\t\t/**\n\t\t * The amount the height has reduce due to internal factors\n\t\t * like smaller fontsizes at different scales\n\t\t **/\n\t\tconst amountShrunk = metadataSize().map(\n\t\t\tR.multiply(shiftAfterScale())\n\t\t)\n\n\t\t/**\n\t\t * The space between the allocations and the heading text\n\t\t */\n\n\n\t\t/**\n\t\t * The spacing between the heading and the rendered allocations\n\t\t */\n\t\tconst headerPadding = metadataSize().map(R.multiply(0.5))\n\n\t\tconst offset =\n\t\t\tR.lift(function (metadataSize, headerPadding) {\n\t\t\t\treturn (metadataSize + headerPadding) * fontPadding\n\t\t\t})(metadataSize(), headerPadding)\n\n\t\tconst allocations = byProject()[project_id]\n\t\tconst disciplines = sortedProjectDisciplines()[project_id]\n\t\tconst completion = projectCompletions()[project_id]\n\n\t\t/**\n\t\t* The earliest time of an allocation in the project\n\t\t* Layout managers can use this to sort/arrange projects\n\t\t*/\n\t\tconst startTime =\n\t\t\tallocations[0]\n\t\t\t\t.allocations_allocation_date\n\n\t\tconst project_name =\n\t\t\tallocations[0]\n\t\t\t\t.project_name\n\n\n\n\t\t/**\n\t\t * The total height of the rendered project.\n\t\t * Layout managers can then arrange the projects how they see fit.\n\t\t */\n\t\tconst atLeast = R.max\n\t\tconst height =\n\t\t\toffset.map(\n\t\t\t\tR.add(disciplines.length * discipline_row_height)\n\t\t\t)\n\t\t\t\t// make sure the height at least gives us enough room\n\t\t\t\t// to render teh heading and the completion\n\t\t\t\t.map(atLeast(200))\n\t\t\t\t.map(\n\t\t\t\t\t(v) => v - amountShrunk.join()\n\t\t\t\t)\n\n\t\tconst selected =\n\t\t\tselectedProject() && selectedProject().project_id == project_id\n\n\t\tconst onclickProject = function (e) {\n\t\t\tif (!pointerWasDragging()) {\n\n\t\t\t\tselectedProject(projectIndex()[project_id])\n\n\t\t\t\tselectedAllocation(null)\n\t\t\t\te.stopPropagation()\n\t\t\t}\n\t\t}\n\n\t\tconst onclickAllocation = (a) => function (e) {\n\t\t\tif (selectedAllocation()\n\t\t\t\t&& selectedAllocation().allocation_id != a.allocation_id\n\t\t\t) {\n\t\t\t\tselectedAllocation(null)\n\t\t\t} else {\n\t\t\t\tselectedAllocation(a)\n\t\t\t}\n\t\t\te.stopPropagation()\n\t\t}\n\n\t\tconst a = allocations[0]\n\t\tconst days = moment(a.allocations_allocation_date)\n\t\t\t.startOf('day').valueOf() / DAY_MILLIS * xScale\n\n\t\tconst mode =\n\t\t\tpointer.scale() > 2\n\t\t\t\t? 'allocation'\n\t\t\t\t: 'project'\n\n\t\tconst completionDiagramWidth =\n\t\t\t15 * xScale\n\n\t\t/**\n\t\t * The expected width of the rendered Project\n\t\t *\n\t\t * In reality the width may be smaller if the project is offscreen.\n\t\t */\n\t\tconst onScreenWidth =\n\t\t\tmode == 'allocation'\n\t\t\t\t? moment(\n\t\t\t\t\tR.last(allocations)\n\t\t\t\t\t\t.allocations_allocation_date\n\t\t\t\t)\n\t\t\t\t\t.startOf('day').add(1, 'day') / DAY_MILLIS * xScale - days\n\t\t\t\t: completionDiagramWidth\n\n\t\tconst view = function (\n\t\t\t{ transform\n\t\t\t\t, onScreen\n\t\t\t}\n\t\t) {\n\n\t\t\treturn m('div'\n\t\t\t\t, {\n\t\t\t\t\tstyle:\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttransform\n\t\t\t\t\t\t\t\t, width: px(onScreenWidth)\n\t\t\t\t\t\t\t\t, height\n\t\t\t\t\t\t\t\t, position: 'absolute'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, selected\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tbackgroundColor: '#133a50'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t)\n\t\t\t\t\t, onclick: onScreen && onclickProject\n\t\t\t\t}\n\t\t\t\t, projectTitle()\n\t\t\t\t, onScreen && mode == 'allocation'\n\t\t\t\t\t? allocations.map(function (a) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tpointer.scale() > 14 ? contractorView(a) : []\n\t\t\t\t\t\t\t, allocationView(a)\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\n\t\t\t\t\t: completionDiagram(completion, offset)\n\t\t\t)\n\t\t}\n\n\t\tconst meta = {\n\t\t\tstartTime\n\t\t\t, height\n\t\t\t, width: onScreenWidth\n\t\t\t, amountShrunk\n\t\t}\n\n\t\treturn {\n\t\t\tview\n\t\t\t, meta\n\t\t}\n\t}\n\n\tconst scaleChange =\n\t\tstream.afterSilence(0, stream.fromFlydStream(pointer.scale))\n\n\tconst coordsChange =\n\t\tstream.afterSilence(1000, stream.fromFlydStream(pointer.coords))\n\t\t\t.map(() => null)\n\n\tconst viewport =\n\t\tstream.merge([\n\t\t\twindowSize, scaleChange, coordsChange\n\t\t])\n\t\t\t.map(function ([size]) {\n\n\t\t\t\tconst ganttScale = pointer.scale() / pointer.settings.scale.max\n\t\t\t\tconst timeAsX = currentTime() / DAY_MILLIS * xScale\n\t\t\t\tconst dateBar = 0\n\t\t\t\tconst projected = {\n\t\t\t\t\twidth: size.width * 1 / ganttScale\n\t\t\t\t\t, height: (size.height - dateBar * 1.5) * 1 / ganttScale\n\t\t\t\t\t, y: (pointer.coords().y - dateBar) * 1 / ganttScale\n\t\t\t\t\t, x: timeAsX * 1 / ganttScale\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * The ratio of the dimensions of the screen where we rendered\n\t\t\t\t * the viewport.\n\t\t\t\t */\n\t\t\t\tconst cutoffRatio = { w: 1, h: 1 }\n\n\t\t\t\tconst offsetY = (1 - cutoffRatio.h) * projected.height * 0.5\n\t\t\t\tconst offsetX = (1 - cutoffRatio.w) * projected.width * 0.5\n\n\t\t\t\treturn {\n\t\t\t\t\tx: timeAsX + offsetX\n\t\t\t\t\t, y: -projected.y + offsetY\n\t\t\t\t\t, width: projected.width * cutoffRatio.w\n\t\t\t\t\t, height: projected.height * cutoffRatio.h\n\t\t\t\t\t, projected\n\t\t\t\t}\n\t\t\t})\n\n\n\tconst viewportBounds =\n\t\tviewport.map(function (v) {\n\t\t\treturn [v.y, v.x, v.y + v.height, v.x + v.width]\n\t\t})\n\n\tconst ChronologicalLayout = function (projects) {\n\n\n\t\tlet padding = em(0)\n\t\tlet yOffset = em(0)\n\n\n\t\tconst sumUnits = R.liftN(\n\t\t\t4\n\t\t\t, R.unapply(\n\t\t\t\tR.sum\n\t\t\t)\n\t\t)\n\n\t\treturn projects.map(function (project_id) {\n\n\t\t\tconst allocations = byProject()[project_id]\n\t\t\tconst a = allocations[0]\n\n\t\t\tconst days = moment(a.allocations_allocation_date)\n\t\t\t\t.startOf('day').valueOf() / DAY_MILLIS * xScale\n\n\t\t\tconst p = ProjectView(project_id)\n\n\t\t\tconst transform =\n\t\t\t\ttranslate(\n\t\t\t\t\tpx(days)\n\t\t\t\t\t, R.lift(R.add)(\n\t\t\t\t\t\tyOffset\n\t\t\t\t\t\t, p.meta.amountShrunk\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t/* tslint:disable */\n\n\t\t\tconst x = days\n\t\t\tconst y = transform.get('y').join() * 14\n\t\t\tconst height = p.meta.height.join() * 14\n\t\t\tconst width = p.meta.width\n\n\t\t\tconst projectViewBox =\n\t\t\t\t[y, x, y + height, x + width]\n\n\t\t\tconst onScreen =\n\t\t\t\tAABB.intersects(viewportBounds(), projectViewBox)\n\n\n\t\t\tyOffset = sumUnits(\n\t\t\t\tp.meta.height, yOffset, padding, p.meta.amountShrunk\n\t\t\t)\n\n\t\t\treturn R.merge(p, {\n\t\t\t\ttransform, onScreen, project_id, x, y, yOffset, projectViewBox\n\t\t\t})\n\t\t\t/* tslint:enable */\n\t\t})\n\t}\n\n\tconst chronologicalLayout =\n\t\tstream.afterSilence(\n\t\t\t0\n\t\t\t, stream.merge([\n\t\t\t\tsortedProjectIds\n\t\t\t\t, viewportBounds\n\t\t\t\t, contractorColours\n\t\t\t\t, disciplineIndexes\n\t\t\t\t, projectCompletions\n\t\t\t\t, windowSize\n\t\t\t\t, selectedProject\n\t\t\t\t, selectedAllocation\n\t\t\t\t, projectIndex\n\t\t\t\t, allocationCoordsByProject\n\t\t\t])\n\t\t)\n\t\t\t.map(function ([\n\t\t\t\tsortedProjectIds\n\t\t\t\t, viewportBounds\n\t\t\t\t, contractorColours\n\t\t\t\t, disciplineIndexes\n\t\t\t\t, projectCompletions\n\t\t\t\t, windowSize\n\t\t\t\t, selectedProject\n\t\t\t\t, selectedAllocation\n\t\t\t\t, projectIndex\n\t\t\t\t, allocationCoordsByProject\n\t\t\t]) {\n\t\t\t\treturn ChronologicalLayout(\n\t\t\t\t\tsortedProjectIds\n\t\t\t\t\t, viewportBounds\n\t\t\t\t\t, contractorColours\n\t\t\t\t\t, disciplineIndexes\n\t\t\t\t\t, projectCompletions\n\t\t\t\t\t, windowSize\n\t\t\t\t\t, selectedProject\n\t\t\t\t\t, selectedAllocation\n\t\t\t\t\t, projectIndex\n\t\t\t\t\t, allocationCoordsByProject\n\t\t\t\t)\n\t\t\t})\n\n\tconst lost = chronologicalLayout.map(\n\t\txs => xs.length > 0\n\t\t&& R.none(\n\t\t\tp => p.onScreen\n\t\t\t,xs\n\t\t)\n\t)\n\n\tconst someOnScreen = chronologicalLayout.map(\n\t\tR.any(\n\t\t\tp => p.onScreen\n\t\t)\n\t)\n\n\tconst localRouteState = stream.merge([\n\t\tstream.fromFlydStream(pointer.scale), currentTime\n\t]).map(function () {\n\t\treturn {\n\t\t\tscale: pointer.scale().toFixed(2)\n\t\t\t, currentTime: Math.round(currentTime())\n\t\t\t, y: pointer.coords().y\n\t\t}\n\t})\n\n\tconst chronologicalView =\n\t\tchronologicalLayout.map(function (children) {\n\t\t\treturn m('div'\n\t\t\t\t, { style: { position: 'absolute', top: 0, left: 0 } }\n\t\t\t\t, children\n\t\t\t\t\t.map(function (p) {\n\t\t\t\t\t\treturn p.view(p)\n\t\t\t\t\t})\n\t\t\t)\n\t\t})\n\t/*\n\n\t███████╗██╗██████╗ ███████╗\n\t██╔════╝██║██╔══██╗██╔════╝\n\t███████╗██║██║ ██║█████╗\n\t╚════██║██║██║ ██║██╔══╝\n\t███████║██║██████╔╝███████╗\n\t╚══════╝╚═╝╚═════╝ ╚══════╝\n\n\t███████╗███████╗███████╗███████╗ ██████╗████████╗███████╗\n\t██╔════╝██╔════╝██╔════╝██╔════╝██╔════╝╚══██╔══╝██╔════╝██╗\n\t█████╗ █████╗ █████╗ █████╗ ██║ ██║ ███████╗╚═╝\n\t██╔══╝ ██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ╚════██║██╗\n\t███████╗██║ ██║ ███████╗╚██████╗ ██║ ███████║╚═╝\n\t╚══════╝╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚══════╝\n\n\tFor Search: Side Effects\n\t*/\n\t// Some awkward code for debouncing drag state\n\t// todo-james make this all go away :)\n\n\tconst isDragging = stream.dropRepeats(\n\t\tstream.fromFlydStream(world.pointer.dragging)\n\t)\n\t\t.map(Boolean)\n\n\tisDragging.map(function () {\n\t\tif (isDragging() && !pointerWasDragging()) {\n\t\t\tpointerWasDragging(true)\n\t\t}\n\t\treturn null\n\t})\n\n\tlet timeoutID\n\n\tstream.merge([\n\t\tstream.afterSilence(500, chronologicalView)\n\t\t, isDragging\n\t])\n\t\t.map(function () {\n\t\t\tclearTimeout(timeoutID)\n\t\t\tsetTimeout(function () {\n\t\t\t\tpointerWasDragging(isDragging())\n\t\t\t}, 0)\n\t\t\treturn null\n\t\t})\n\n\n\tconst earliestProjectID =\n\t\tsortedProjectIds.map(\n\t\t\txs => xs.length > 0 ? [xs[0]] : []\n\t\t)\n\n\tconst earliestAllocationDate =\n\t\tstream.merge([\n\t\t\tbyProject\n\t\t\t, earliestProjectID\n\t\t])\n\t\t\t.map(\n\t\t\t\t([byProject\n\t\t\t\t\t, earliestProject\n\t\t\t\t]) => earliestProject.flatMap(\n\t\t\t\t\tproject_id => project_id in byProject\n\t\t\t\t\t\t? [byProject[project_id]]\n\t\t\t\t\t\t: []\n\t\t\t\t)\n\t\t\t\t.flatMap( xs => xs.slice(0,1) )\n\t\t\t\t.map( a => a.allocations_allocation_date )\n\t\t\t)\n\n\t// if they change schedule and they are lost, change their viewport\n\tstream.merge([\n\t\tearliestAllocationDate, lost\n\t])\n\t\t.map(function ([d, lost]) {\n\n\t\t\td.map(\n\t\t\t\td => {\n\t\t\t\t\tif (lost && Object.keys(projectIndex()).length > 0) {\n\n\t\t\t\t\t\tpointer.scale(1)\n\n\t\t\t\t\t\tconst now = world.now\n\n\t\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\t\td = moment(d).subtract(4, 'days').valueOf()\n\n\t\t\t\t\t\tconst timeAsPx =\n\t\t\t\t\t\t\t(now - d) / DAY_MILLIS * world.xScale\n\t\t\t\t\t\t\t* pointer.scale()\n\n\t\t\t\t\t\tconst { x, y } = pointer.coords()\n\n\t\t\t\t\t\tpointer.dragging(true)\n\t\t\t\t\t\tpointer.movement(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tx: -1 * (x - timeAsPx)\n\t\t\t\t\t\t\t\t, y: -1 * (y - 120)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\tpointer.dragging(false)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t)\n\n\n\t\treturn null\n\t})\n\n\n\t// Only save route state if they are not completely lost\n\tsomeOnScreen.map(function (someOnScreen) {\n\t\tif (someOnScreen && localRouteState()) {\n\t\t\tworld.routeState(localRouteState())\n\t\t}\n\t\treturn null\n\t})\n\n\n\tconst selectedAllocationDiscipline = world.scoped()\n\n\tselectedAllocation.map(function (nullableAllocation) {\n\t\tselectedAllocationDiscipline({\n\t\t\tcase: 'Loading'\n\t\t})\n\n\t\tnullableAllocation == null\n\t\t\t? { case: 'Empty' }\n\t\t\t: world.fetchAllocationsbyDiscipline(\n\t\t\t\tnullableAllocation.allocation_id\n\t\t\t)\n\t\t\t\t.then(function (value) {\n\t\t\t\t\treturn { case: 'Loaded', value }\n\t\t\t\t})\n\t\t\t\t.catch(function () {\n\t\t\t\t\treturn { case: 'Empty' }\n\t\t\t\t})\n\t\t\t\t.then(selectedAllocationDiscipline)\n\n\t\treturn null\n\t})\n\n\tselectedAllocationDiscipline.map(\n\t\t() => world.redraw()\n\t)\n\n\tchronologicalView.map(() => world.redraw())\n\n\treturn function () {\n\n\t\treturn m('div.gantt',\n\t\t\t{\n\t\t\t\tstyle: style.main()\n\t\t\t\t, onclick: clicks\n\t\t\t\t, oncreate({ dom: el }){\n\t\t\t\t\tel.addEventListener('wheel', function (e) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\t, m('div.gantt-container',\n\t\t\t\t{ style: style.container() }\n\t\t\t\t, chronologicalView()\n\t\t\t)\n\t\t\t, m(\n\t\t\t\tDetailsPane\n\t\t\t\t, R.merge(world, {\n\t\t\t\t\tselectedAllocation\n\t\t\t\t\t, selectedAllocationDiscipline\n\t\t\t\t\t, selectedProject\n\t\t\t\t\t, byProject\n\t\t\t\t\t, timesheets\n\t\t\t\t\t, projects\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\t}\n}","import m from 'bacta'\nimport css from '../../utils/css'\nimport Pointer from 'pointer-stream'\nimport disableEvent from '../../utils/disable_event'\nimport Dates from './dates'\nimport Gantt from './gantt'\nimport { prop as stream } from '../../../../stream'\nimport colors from '../../utils/colors'\n\nconst { percent } = css.units\nconst xScale = 10\nconst DAY_MILLIS = 86400000\n\nexport default function (universe) {\n\tconst container = universe.scoped()\n\tconst dateContainer = universe.scoped()\n\tconst routeState = universe.routeState\n\n\tconst pointer = Pointer({\n\t\toffset: { x: 0, y: 0 }\n\t\t, scale: { min: 0.7, max: 40 }\n\t\t, container: container\n\t\t, manualActivation: true\n\t})\n\n\tconst routeParams =\n\t\t// todo-james superouter injects trailing slash after query params\n\t\tm.route.parseQueryString( m.route.get().replace(/\\//g,'') )\n\n\tstream.once(container).map(pointer.activateListeners)\n\n\tconst now = Number(routeParams['currentTime'] || new Date().getTime())\n\n\tpointer.dragging(true)\n\tpointer.movement({\n\t\tx: 0\n\t\t, y: [routeParams['y']]\n\t\t\t.map(Number).filter(Number.isFinite).concat(0).shift()\n\t})\n\tpointer.dragging(false)\n\n\tpointer.scale(\n\t\tNumber(routeParams['scale']) || 1\n\t)\n\tpointer.initialPinchScale(\n\t\tpointer.scale()\n\t)\n\n\n\tuniverse.scoped().end.map(function () {\n\t\treturn pointer.end(true)\n\t})\n\n\tpointer.coords.map(function () {\n\t\treturn universe.redraw()\n\t})\n\n\tconst currentTime =\n\t\tstream.merge([\n\t\t\tstream.fromFlydStream(pointer.scale)\n\t\t\t, stream.fromFlydStream(pointer.coords)\n\t\t])\n\t\t\t.map(function ([scale, { x }]) {\n\t\t\t\tconst xAsTime = x / xScale / scale * DAY_MILLIS\n\t\t\t\treturn now - xAsTime\n\t\t\t})\n\n\tconst world = Object.assign({\n\t\tpointer\n\t\t, dateContainer\n\t\t, container\n\t\t, DAY_MILLIS\n\t\t, currentTime\n\t\t, now\n\t\t, xScale\n\t\t, routeState\n\t}, universe)\n\n\tconst style = {\n\t\tgantt: _ => (\n\t\t\t{\n\t\t\t\tcolor: 'white'\n\t\t\t\t, width: percent(100)\n\t\t\t\t, height: percent(100)\n\t\t\t\t, cursor: pointer.mousedown()\n\t\t\t\t\t? '-webkit-grabbing'\n\t\t\t\t\t: '-webkit-grab'\n\t\t\t}\n\t\t)\n\t\t, body:\n\t\t{\n\t\t\tbackgroundColor: colors.blackboard\n\t\t}\n\t}\n\n\tconst datebar = Dates(world)\n\n\tconst gantt = Gantt(world)\n\n\treturn function () {\n\t\treturn m('div.gantt-index'\n\t\t\t, {\n\t\t\t\tstyle: style.gantt()\n\t\t\t\t, onupdate: ({ dom }) => container(dom)\n\t\t\t\t, oncontextmenu: disableEvent\n\t\t\t}\n\t\t\t, gantt()\n\t\t\t, datebar()\n\t\t)\n\t}\n}","import m from 'bacta'\nimport * as R from 'ramda'\nimport Gantt from './gantt'\n\nimport NotificationBar from '../components/notification'\nimport { Router, Manager, HREF } from '../utils/state-router'\nimport Promise from 'bluebird'\nimport { prop as stream } from '../../../stream'\nimport css from 'bss'\n\nfunction Dashboard({ attrs: { data: universe } }) {\n\n\tconst allocations = universe.scoped()\n\n\tconst href = HREF('/dashboard')\n\n\tconst writeState = universe.scoped()\n\tconst readState = stream.scan(\n\t\tfunction(p, { state, _ }){\n\n\t\t\treturn state\n\t\t}\n\t\t, m.route.get().includes('/dashboard')\n\t\t\t? href.from(\n\t\t\t\t['organization_id'\n\t\t\t\t, 'schedule_id'\n\t\t\t\t, 'schedule_version_id'\n\t\t\t\t]\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t, m.route.get()\n\t\t\t)\n\t\t\t: { path: {}, search: {} }\n\t\t, writeState\n\t)\n\n\tconst manager = Manager(readState, writeState)\n\tconst router = Router(href, manager)\n\n\tconst path = router.createPathStream()\n\n\t// window.writeState = writeState\n\t// window.pathStream = path\n\tconst [\n\t\torganization_id\n\t\t, schedule_id\n\t\t, schedule_version_id\n\t\t, routeState\n\t] =\n\t\t[\n\t\t['path','organization_id']\n\t\t, ['path','schedule_id']\n\t\t, ['path','schedule_version_id']\n\t\t, ['search']\n\n\t\t]\n\t\t\t.map( manager.streamFromPath )\n\n\t/**\n\t * Side effects!\n\t */\n\tpath.map(function(path){\n\t\t// todo-james this runs even though writeState is ended\n\t\t// I'm not sure if it is a bug in mithril-stream\n\t\t// or a bug in state-router\n\t\t// Instead of spending too long investigating, I'm just putting this\n\t\t// guard in. Long term, I want us to use Z instead of mithril-stream\n\t\t// and state-router is deprecated, so not worth the effort probably\n\t\tif( m.route.get().startsWith('/dashboard') ) {\n\t\t\t// eslint-disable-next-line\n\t\t\treturn history.replaceState(null, null, path)\n\t\t}\n\t\treturn null\n\t})\n\n\n\tconst redraw = function(){\n\t\t// eslint-disable-next-line no-var\n\t\tvar requested = false\n\n\t\tfunction loop(){\n\t\t\tif( requested ){\n\t\t\t\tm.redraw()\n\n\t\t\t\trequested = false\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\trequestAnimationFrame(loop)\n\t\t}\n\n\t\tloop()\n\n\t\treturn function redraw(){\n\n\t\t\trequested = true\n\t\t}\n\t}.call()\n\n\n\tconst world = Object.assign({\n\t\tschedule_id\n\t\t, schedule_version_id\n\t\t, organization_id\n\t\t, allocations\n\t\t, routeState\n\t\t, redraw\n\t}, universe)\n\n\tconst loading = m.prop(!!schedule_version_id())\n\n\n\tlet session\n\n\tstream.merge(\n\t\t[\n\t\t\tuniverse.initiateContractFetch\n\t\t\t,universe.schedule_version_id\n\t\t]\n\t)\n\t.map(function([ready, sv]){\n\n\t\tif( !ready ) return null;\n\n\t\t// const schedule_version_id = universe.actual.schedule_version_id\n\t\tconst organization_id = universe.organization_id\n\n\t\tif(\n\t\t\torganization_id == null\n\t\t\t|| sv == null\n\t\t){\n\t\t\tallocations([])\n\t\t\treturn Promise.resolve(null)\n\t\t} else {\n\t\t\tallocations([])\n\n\t\t\tif( session != null ){\n\t\t\t\tsession.abort()\n\t\t\t}\n\n\n\t\t\tsession = world.api.Session()\n\n\t\t\tloading(true)\n\t\t\treturn world\n\t\t\t\t.fetchAllocationsbyScheduleVersion(\n\t\t\t\t\t{schedule_version_id: sv}\n\t\t\t\t\t,'shallow'\n\t\t\t\t)\n\t\t\t.then(R.sortBy(R.prop('allocation_id')))\n\t\t\t.then(\n\t\t\t\tR.reject(\n\t\t\t\t\tx => x.allocations_allocation_date == null\n\t\t\t\t\t\t|| x.allocations_allocation_date == 0\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then(world.allocations)\n\n\t\t\t.then(function(){\n\n\t\t\t\tredraw()\n\n\t\t\t\treturn world\n\t\t\t\t\t.fetchAllocationsbyScheduleVersion(\n\t\t\t\t\t\t{schedule_version_id: sv}\n\t\t\t\t\t\t,'complete'\n\t\t\t\t\t)\n\n\t\t\t})\n\t\t\t.then(R.sortBy(R.prop('allocation_id')))\n\t\t\t.then(\n\t\t\t\tR.reject(\n\t\t\t\t\tx => x.allocations_allocation_date == null\n\t\t\t\t\t\t|| x.allocations_allocation_date == 0\n\t\t\t\t)\n\t\t\t)\n\t\t\t.then(world.allocations)\n\t\t\t.catch(\n\t\t\t\tsession.onerror(NotificationBar.Notifications.alertError)\n\t\t\t)\n\t\t\t.then(function(){\n\t\t\t\tredraw()\n\t\t\t\tloading(false)\n\t\t\t\tworld.currentRoute('gantt')\n\n\t\t\t\tready.schange = false\n\n\t\t\t\tready.ochange = false\n\t\t\t})\n\t\t}\n\t})\n\n\tconst gantt = Gantt(world)\n\n\tconst centeredSpinner = () =>\n\t\tm('img', {\n\t\t\tsrc: '/assets/spinner.gif'\n\t\t\t, style:\n\t\t\t\t{ transform:\n\t\t\t\t\t'translate(calc(50vw - 100%), calc(50vh - 100% - var(--top-nav-height)))'\n\t\t\t\t, transformOrigin: 'top left'\n\t\t\t\t, filter: 'saturate(0%) brightness(100%)'\n\t\t\t\t, width: '3em'\n\t\t\t\t, userSelect: 'none'\n\t\t\t\t}\n\t\t})\n\n\treturn {\n\t\tview: function(){\n\n\t\t\treturn m('div'\n\t\t\t\t, { style: { touchAction: 'none' } }\n\t\t\t\t, gantt(world)\n\t\t\t\t, m('div.vw-100.vh-100.absolute.bg-black'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tmin-width: 100vw;\n\t\t\t\t\t\tmin-height: 100vh;\n\t\t\t\t\t\tposition: absolute:\n\t\t\t\t\t\ttop: 0px;\n\t\t\t\t\t\tleft: 0px;\n\t\t\t\t\t\topacity: ${ loading() ? 0.9 : 0 }\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\ttransition: opacity 1s;\n\t\t\t\t\t`\n\t\t\t\t)\n\t\t\t\t, loading()\n\t\t\t\t\t? centeredSpinner()\n\t\t\t\t\t: null\n\t\t\t)\n\t\t}\n\t\t,onremove(){\n\t\t\tif( session != null ){\n\t\t\t\tsession.abort()\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line\n\t\t\tallocations([])\n\t\t}\n\t}\n}\n\nexport default Dashboard","import m from 'bacta'\nimport * as elements from '../components/elements'\nimport * as R from 'ramda'\nimport NotificationBar from '../components/notification'\nimport humanList from '../utils/human_list'\nimport { prop as stream } from '../../../stream'\nimport Permissions from '../models/permissions'\nimport moment from 'moment'\n\nfunction Main({ attrs: { data } }){\n\n\tconst {\n\t\tschedule_id: schedule_id_no_repeats\n\t\t,actual\n\t\t,deleteSchedule\n\t\t,fetchSchedulesLocal\n\t\t,schedules\n\t\t,progress\n\t\t,schedule_params\n\t\t,schedulesLoadable\n\t\t,createStatsStream\n\t\t,currentRoute\n\t} = data\n\n\tcurrentRoute('schedules')\n\tconst statsIndex =\n\t\tcreateStatsStream()\n\t// eslint-disable-next-line no-unused-vars\n\tconst forceRedraw =\n\t\tstream.merge(\n\t\t\t[\n\t\t\t\tschedules\n\t\t\t\t,progress\n\t\t\t\t,schedulesLoadable\n\t\t\t\t,statsIndex\n\t\t\t]\n\t\t)\n\t\t.map(function(){\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\treturn setTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t})\n\n\n\n\tstatsIndex({})\n\n\tconst scheduleTaskCompletionChange =\n\t\tstream.scan(function(p, n){\n\t\t\tconst completed =\n\t\t\t\tR.keys(R.filter( x => x === '', n))\n\n\t\t\treturn {\n\t\t\t\tchanged: R.any( k => p.progress[k] !== '', completed)\n\t\t\t\t,progress: n\n\t\t\t}\n\n\t\t}, { progress: {}, changed: false }, progress)\n\n\tconst refetchStats = () =>\n\t\tschedulesLoadable(\n\t\t\tschedulesLoadable()\n\t\t)\n\n\tscheduleTaskCompletionChange.map(\n\t\t({ changed }) => {\n\t\t\tif( changed ){\n\t\t\t\tm.redraw()\n\t\t\t\trefetchStats()\n\t\t\t}\n\t\t\treturn null\n\t\t}\n\t)\n\n\tconst pDelete = stream()\n\tconst generating = stream(false)\n\tconst deleting = stream(false)\n\tconst loadingTemplate = stream(false)\n\tconst pending =\n\t\tstream.merge([ generating, deleting, loadingTemplate ])\n\t\t.map(R.any(R.equals(true)))\n\n\tpending.map( () => m.redraw() )\n\n\tconst schedule_parent = data.scoped()\n\tconst permissions = data.permissions\n\tconst showOption = data.scoped(false)\n\tconst selectedTemplateShort = data.scoped(\"Building\")\n\tconst selectedTemplateLong =\n\t\tselectedTemplateShort.map(\n\t\t\ts =>\n\t\t\ts == 'Telecommunications'\n\t\t\t? 'Telecommunications Schedule'\n\t\t\t: s == 'Building'\n\t\t\t\t? 'Building & Construction Schedule'\n\t\t\t\t: 'Residential & Commercial Development Schedule'\n\t\t)\n\n\tconst missingPermissions =\n\t\tdata.initiateContractFetch.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Resource'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\tconst templateOptions =\n\t\t[{ name: 'Building & Construction Schedule'\n\t\t, shortName: 'Building'\n\t\t, loaded: false\n\t\t}\n\t\t,{ name: 'Telecommunications Schedule'\n\t\t, shortName: 'Telecommunications'\n\t\t, loaded: false\n\t\t}\n\t\t,{ name: 'Residential & Commercial Developments Schedule'\n\t\t, shortName: 'Developing'\n\t\t, loaded: false\n\t\t}\n\t\t]\n\n\tconst editPermissions = m.prop()\n\tpermissions.map(function(p){\n\t\teditPermissions(\n\t\t\tPermissions.hasWrite(p, 'schedule_management')\n\t\t)\n\t\treturn null\n\t})\n\n\tconst active =\n\t\tm.route.get().includes('create')\n\t\t? {\n\t\t\t//by mapping; local changes don't go up stream automatically\n\t\t\t//but we automatically receive upstream changes\n\t\t\tschedule_name: data.scoped()\n\t\t\t,schedule_priority: data.scoped()\n\t\t\t,schedule_id: data.scoped()\n\t\t\t,schedules_parameters_id: data.scoped()\n\t\t\t,schedule_params: data.scoped.clone( data.schedule_params )\n\t\t\t,schedule_shared_resources: data.scoped(false)\n\t\t}\n\t\t: {\n\t\t\t//by mapping; local changes don't go up stream automatically\n\t\t\t//but we automatically receive upstream changes\n\t\t\tschedule_name: data.scoped.clone( data.schedule_name )\n\t\t\t,schedule_shared_resources: data.scoped( false )\n\t\t\t,schedule_priority: data.scoped.clone( data.schedule_priority )\n\t\t\t,schedule_id: data.scoped.clone( schedule_id_no_repeats )\n\t\t\t,schedules_parameters_id: data.selectedVersion.map(\n\t\t\t\tR.propOr(null, 'schedules_parameters_id')\n\t\t\t)\n\t\t\t,schedule_params: data.scoped.clone( data.schedule_params )\n\t\t}\n\n\ttry {\n\n\n\t\tif( m.route.param('schedule_parent') ){\n\n\t\t\tschedule_parent( m.route.param('schedule_parent') )\n\n\t\t\tschedules.map(function(list){\n\t\t\t\tconst found = list\n\t\t\t\t.find(\n\t\t\t\t\ts => s.schedule_versions.find(\n\t\t\t\t\t\tsv => sv.schedule_version_id == schedule_parent()\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\tif( found ){\n\n\t\t\t\t\tconst schedule_version =\n\t\t\t\t\t\tfound.schedule_versions.find(\n\t\t\t\t\t\t\tsv => sv.schedule_version_id == schedule_parent()\n\t\t\t\t\t\t)\n\n\t\t\t\t\tactive.schedule_name(\n\t\t\t\t\t\tfound.schedule_name + ' (Clone)'\n\t\t\t\t\t)\n\n\t\t\t\t\tif( schedule_version ){\n\n\t\t\t\t\t\tactive.schedule_priority(\n\t\t\t\t\t\t\tschedule_version.schedule_priority\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tactive.schedule_id(null)\n\t\t\t\t\tm.redraw()\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t})\n\t\t}\n\n\t\tif( m.route.param('schedule_id') ){\n\t\t\tconst route_schedule_id = m.route.param('schedule_id')\n\t\t\tactual.schedule_id(route_schedule_id)\n\t\t}\n\n\t} catch (e) {\n\t\tdebugger;\n\t}\n\n\t//create a stream of well formatted payload objects\n\tconst payload = stream.afterSilence(0, stream.merge(\n\t\t[\tactive.schedule_name\n\t\t\t,active.schedule_priority\n\t\t\t,active.schedule_params\n\t\t]\n\t)).map(([ schedule_name, schedule_priority, schedule_params ]) => {\n\n\t\tconst schedule_id = active.schedule_id()\n\t\tconst sv = data.selectedVersion()\n\n\t\tconst schedules_parameters_id =\n\t\t\tschedule_params.filter((p) =>\n\t\t\t\tp.schedules_parameters_name()\n\t\t\t\t\t== schedule_priority\n\t\t\t)\n\t\t\t.map( sp => sp.schedules_parameters_id() )\n\t\t\t.find( Boolean )\n\n\t\tconst schedule_version_old_id =\n\t\t\tsv\n\t\t\t? sv.schedule_version_id\n\t\t\t: null\n\n\t\treturn {\n\t\t\tschedule_name\n\t\t\t,schedule_id\n\t\t\t,schedule_shared_resources: active.schedule_shared_resources()\n\t\t\t,schedule_parent: schedule_parent()\n\t\t\t,schedule_versions: [\n\t\t\t\t{\n\t\t\t\t\tschedule_priority\n\t\t\t\t\t,schedules_parameters_id\n\t\t\t\t\t,schedule_version_old_id\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t})\n\n\n\tfunction loadTemplateSchedule(){\n\t\treturn data.api.template_schedules.post(\n\t\t\tselectedTemplateLong()\n\t\t)\n\t\t\t.then(function({ organization_id }){\n\t\t\t\treturn data.auth_refresh()\n\t\t\t\t\t.then(function(){\n\t\t\t\t\t\tdata.organization_id(organization_id)\n\t\t\t\t\t})\n\t\t\t})\n\t\t\t.catch( NotificationBar.Notifications.alertError )\n\t}\n\n\tfunction canGenerate(schedule){\n\n\t\tconst checkobj = schedule || active\n\t\tconst originalSchedule =\n\t\t\tdata.schedules().find((s) =>\n\t\t\t\ts.schedule_id\n\t\t\t\t== checkobj.schedule_id\n\t\t\t) || {}\n\n\t\tconst latestVersion =\n\t\t\toriginalSchedule.schedule_versions\n\t\t\t\t? originalSchedule.schedule_versions[0]\n\t\t\t\t: active\n\n\t\tconst schedule_id =\n\t\t\tschedule\n\t\t\t\t? checkobj.schedule_id\n\t\t\t\t: checkobj.schedule_id()\n\n\t\tconst schedule_name =\n\t\t\tschedule\n\t\t\t\t? checkobj.schedule_name\n\t\t\t\t: checkobj.schedule_name()\n\n\t\tconst priority = typeof latestVersion.schedule_priority == 'function'\n\t\t\t? latestVersion.schedule_priority()\n\t\t\t: latestVersion.schedule_priority\n\n\t\treturn !!priority\n\t\t\t&& !!schedule_name\n\t\t\t&& (\n\t\t\t\t!!(statsIndex()[schedule_id] || {}).intersectdisciplinescount\n\t\t\t\t|| scheduleCreation()\n\t\t\t)\n\t\t\t&& !data.progress()[latestVersion.schedule_version_id]\n\t}\n\n\n\tfunction saveSchedule(forcedPayload){\n\n\t\tconst realPayload =\n\t\t\tforcedPayload\n\t\t\t\t? forcedPayload\n\t\t\t\t: payload()\n\n\t\treturn data.api.schedules.patch([realPayload])\n\t\t\t.then(fetchSchedulesLocal)\n\t\t\t.then(function(){\n\n\t\t\t\tconst id =\n\t\t\t\t\tdata.schedules().find((s) =>\n\t\t\t\t\t\ts.schedule_name\n\t\t\t\t\t\t== realPayload.schedule_name\n\t\t\t\t\t)\n\t\t\t\t\t.schedule_versions[0].schedule_version_id\n\n\t\t\t\t// todo-james we don't handle templates here\n\t\t\t\tdata.progress(\n\t\t\t\t\tR.merge({\n\t\t\t\t\t\t[id]: '0 %'\n\t\t\t\t\t}, data.progress() )\n\t\t\t\t)\n\n\t\t\t\tm.route.set('/data/schedules')\n\t\t\t})\n\t\t\t.catch(function(error){\n\t\t\t\tthrow error\n\t\t\t})\n\t}\n\n\tfunction checkErrors(schedule){\n\n\n\t\tconst propValues =\n\t\t\ttypeof schedule.schedule_name == 'function'\n\n\n\t\tconst {\n\t\t\tscheduleId\n\t\t\t,sname\n\t\t\t,spriority\n\t\t} =\n\t\t\tpropValues\n\t\t\t? {\n\t\t\t\tscheduleId:\n\t\t\t\t\tschedule.schedule_id()\n\t\t\t\t,sname:\n\t\t\t\t\t!schedule.schedule_name()\n\t\t\t\t,spriority:\n\t\t\t\t\t!schedule.schedule_priority()\n\t\t\t}\n\t\t\t:{ scheduleId:\n\t\t\t\tschedule.schedule_id\n\t\t\t, sname:\n\t\t\t\t!schedule.schedule_name\n\t\t\t, spriority:\n\t\t\t\t!schedule.schedule_priority\n\t\t\t}\n\n\t\tconst stats =\n\t\t\tstatsIndex()[scheduleId] != null\n\t\t\t? statsIndex()[scheduleId]\n\t\t\t: { crewcount: 0\n\t\t\t, projectcount: 0\n\t\t\t, intersectdisciplinescount: 0\n\t\t\t}\n\n\t\tconst sccount =\n\t\t\tstats.crewcount\n\n\t\tconst spcount =\n\t\t\tstats.projectcount\n\n\t\tconst sdicount =\n\t\t\tstats.intersectdisciplinescount\n\n\t\treturn elements.errorAlert(\n\t\t\t`To generate a schedule, `\n\t\t\t,' and '\n\t\t\t,' must be entered'\n\t\t\t,[false,false,false,false,false]\n\t\t\t,[\n\t\t\t\t() => sname\n\t\t\t\t\t? `a schedule name`\n\t\t\t\t\t: null\n\t\t\t\t,() => propValues && spriority\n\t\t\t\t\t? `a directive`\n\t\t\t\t\t: null\n\t\t\t\t,() => !sccount\n\t\t\t\t\t&& !scheduleCreation()\n\t\t\t\t\t? ` one or more projects`\n\t\t\t\t\t: null\n\t\t\t\t,() => !spcount\n\t\t\t\t\t&& !scheduleCreation()\n\t\t\t\t\t? `one or more resources`\n\t\t\t\t\t: null\n\t\t\t\t,() => !sdicount\n\t\t\t\t\t&& !scheduleCreation()\n\t\t\t\t\t? 'teams capable of working on the'\n\t\t\t\t\t\t+ ' related projects'\n\t\t\t\t\t: null\n\t\t\t]\n\t\t\t,false\n\t\t\t,true\n\t\t\t,'warning'\n\t\t)\n\t}\n\n\tfunction canEdit(s){\n\t\treturn s\n\t\t\t? editPermissions()\n\t\t\t&& !data.progress()[s.schedule_versions[0].schedule_version_id]\n\t\t\t: editPermissions()\n\t}\n\n\n\tfunction list(){\n\t\tconst cloneHref = s =>\n\t\t\t'/data/schedules/clone/schedule_parent/'+currentVersionId(s)\n\n\t\treturn m('div', [\n\t\t\t[ missingPermissions()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`info`\n\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t+ ' permissions'\n\t\t\t\t)\n\t\t\t\t: [\n\t\t\t\t\t!data.organizations.organization_id()\n\n\t\t\t\t\t\t// todo-james check if they have orgs to choose...\n\t\t\t\t\t\t? elements.alert(`info`, `Choose or Create an organization`)\n\t\t\t\t\t\t: canEdit()\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\tschedules().length != 0\n\t\t\t\t\t\t\t\t\t? elements.table(data,\n\t\t\t\t\t\t\t\t\t\t['Schedule', '', '', '', '', 'Scheduled End', 'Projects', 'Shared Resources', 'Workable Resource', 'Workable Teams', 'Approx Work Days (1 Team)', 'Extensions of Time', 'Delays', 'Variations']\n\t\t\t\t\t\t\t\t\t\t,schedules().map((s) =>\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\ts.schedule_name\n\n\t\t\t\t\t\t\t\t\t\t\t\t,m(\"a\", {\n\t\t\t\t\t\t\t\t\t\t\t\t\thref: '/data/schedules/'+s.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t\t, disabled: !canEdit(s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t, title: 'Change the directive that runs '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'this schedule. If Odin is allowed to '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'automatically choose resources for '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'projects our rating system will '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'change to pick best options for this directive '\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'Edit'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t,m(\"a\", {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thref: cloneHref(s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, disabled: !canEdit(s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, title: 'Safely explore alternative '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'scheduling timelines by copying all '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'projects Workflow relationships and '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'directions to a new schedule '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'and running alterations that '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'may expose different benefits '\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'Clone'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t,m(\"a\", {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thref: '/dashboard/' + data.organizations.organization_id() + '/' + s.schedule_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, title: 'Go to the Gantt and '\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ 'view all scheduled works'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'View'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t,data.progress()[s.schedule_versions[0].schedule_version_id]\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'label.control-label'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, `Generating ` + data.progress()[s.schedule_versions[0].schedule_version_id]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: elements.action(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Re-Generate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, () =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsaveSchedule(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_parent: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_versions: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_priority: s.schedule_versions[0].schedule_priority\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedules_parameters_id: s.schedule_versions[0].schedules_parameters_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_version_old_id: s.schedule_versions[0].schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, generating\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'primary'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, () => !canGenerate(s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: !canEdit(s) || !canGenerate(s)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,title: \"Re-Generate this schedule to suspect with updates and parameter changes for a new or updated forecast\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (statsIndex()[s.schedule_id] || {}).lastallocationdate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? moment( (statsIndex()[s.schedule_id] || {}).lastallocationdate ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [checkErrors(s)]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter( x => (x.children ? x.children[0] || '' : '').trim() )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.concat( '...' )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[0]\n\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).projectcount || 0)\n\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: elements.checkbox(\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif( e ){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.schedule_shared_resources = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.schedule_shared_resources = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn saveSchedule(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ts\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_parent: null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_versions: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tschedule_priority: s.schedule_versions[0].schedule_priority\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedules_parameters_id: s.schedule_versions[0].schedules_parameters_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,schedule_version_old_id: s.schedule_versions[0].schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disabled: data.progress()[s.schedule_versions[0].schedule_version_id]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,checked: s.schedule_shared_resources\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,title: 'Resource availabilities will be shared with all other checked schedules'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).resourcecount || 0)\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).crewcount || 0)\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).daycountsum || 0).toFixed(0)\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).eotsum || 0)\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).nodsum || 0)\n\t\t\t\t\t\t\t\t\t\t\t\t,!Object.keys(statsIndex()).length\n\t\t\t\t\t\t\t\t\t\t\t\t? '...'\n\t\t\t\t\t\t\t\t\t\t\t\t: Number((statsIndex()[s.schedule_id] || {}).varsum || 0)\n\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\t\t\t\tschedules().length != 0\n\t\t\t\t\t\t\t\t\t\t\t\t? m(\"a.btn.btn-primary\", {\n\t\t\t\t\t\t\t\t\t\t\thref: '/dashboard'\n\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t, disabled: !canEdit()\n\t\t\t\t\t\t\t\t\t\t\t, title: 'Go to the Gantt and '\n\t\t\t\t\t\t\t\t\t\t\t+ 'view all scheduled works'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, 'Gantt'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t,m('a.btn.btn-primary', {\n\t\t\t\t\t\t\t\t\t\thref: '/data/schedules/create'\n\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t, disabled: !canEdit()\n\t\t\t\t\t\t\t\t\t\t, title: \"Create a new schedule\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, 'Create'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t,schedules().length != 0\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: elements.alert(`info`\n\t\t\t\t\t\t\t\t\t\t,`I have no records of schedules, you may not have permissions to access them`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t: []\n\t\t\t\t]\n\t\t\t\t,true\n\t\t\t\t? null\n\t\t\t\t: elements.list([\n\n\t\t\t\t\tshowOption()\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t'info'\n\t\t\t\t\t\t\t,['Templates are example data sets you can use'\n\t\t\t\t\t\t\t, 'to familiarize yourself with Odin\\'s'\n\t\t\t\t\t\t\t, 'vast array of features.'\n\t\t\t\t\t\t\t].join(' ')\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t\t,[showOption() ? 'Hide' : 'Show']\n\t\t\t\t\t.map(\n\t\t\t\t\t\tverb =>\n\t\t\t\t\t\t\tm('button.btn.btn-', {\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tshowOption(!showOption())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, disabled: loadingTemplate()\n\t\t\t\t\t\t\t\t, title: verb\n\t\t\t\t\t\t\t\t\t+ \" templates available for loading\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, verb\n\t\t\t\t\t\t\t\t\t+ ' Available Templates'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)[0]\n\n\t\t\t\t\t,showOption()\n\t\t\t\t\t\t? elements.select(\n\t\t\t\t\t\t\ttemplateOptions\n\t\t\t\t\t\t\t\t.map( s => s.shortName )\n\t\t\t\t\t\t\t,selectedTemplateShort\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: \"The template to activate\"\n\t\t\t\t\t\t\t\t,disabled: loadingTemplate()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,showOption()\n\t\t\t\t\t\t? elements.forward(\"Activate Template\")(\n\t\t\t\t\t\t\t\"Activate Template\",\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tshowOption(false)\n\t\t\t\t\t\t\t\tloadingTemplate(true)\n\t\t\t\t\t\t\t\tloadTemplateSchedule()\n\t\t\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\t\t\tloadingTemplate(false)\n\t\t\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tdisabled: loadingTemplate()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t,loadingTemplate()\n\t\t\t\t\t? elements.alert(`info`\n\t\t\t\t\t\t,`Loading ` + selectedTemplateShort() + ` Template ...`\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t].filter(Boolean))\n\t\t\t]\n\n\t\t])\n\t}\n\n\tfunction generateButton(){\n\t\treturn canGenerate()\n\t\t\t? elements.action(\n\t\t\t\t'Generate Schedule'\n\t\t\t\t, saveSchedule\n\t\t\t\t, generating\n\t\t\t)\n\t\t\t: m('button.btn.btn-primary',{\n\t\t\t\t\tdisabled: true\n\t\t\t\t\t,title: 'Generate the work allocations for this '\n\t\t\t\t\t+ 'schedule with all current data and specifications'\n\t\t\t\t}\n\t\t\t\t, 'Generate Schedule'\n\n\t\t\t)\n\t}\n\n\tfunction scheduleCreation(){\n\t\treturn m.route.get().includes('create')\n\t\t\t|| m.route.get().includes('clone')\n\t}\n\n\tfunction edit_table(){\n\t\treturn [\n\t\t\telements.list([\n\t\t\t\telements.formInput([\n\t\t\t\t\t'Schedule Name'\n\t\t\t\t\t, active.schedule_name, {}\n\t\t\t\t])\n\t\t\t\t,m('div.form-group', [\n\t\t\t\t\tm('label.control-label', 'Schedule Directive'\n\t\t\t\t\t\t,elements.select(\n\t\t\t\t\t\t\tschedule_params()\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\ts => s.schedules_parameters_name()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t, active.schedule_priority\n\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\ttitle: 'This will change rating statistics in'\n\t\t\t\t\t\t\t\t+ ' our engine to find best matching'\n\t\t\t\t\t\t\t\t+ ' resources for each project.'\n\t\t\t\t\t\t\t\t+ ' Primarily to keep core directive'\n\t\t\t\t\t\t\t\t+ ' consistent'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Select a Directive'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t])\n\n\t\t\t,pending()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`info`\n\t\t\t\t\t, generating()\n\t\t\t\t\t\t? `Starting the next generation`\n\t\t\t\t\t\t: `Loading`\n\t\t\t\t)\n\t\t\t\t: checkErrors(active)\n\n\t\t\t,elements.list([\n\t\t\t\tgenerateButton()\n\t\t\t\t,m(\"a.btn.btn-warning\", {\n\t\t\t\t\thref: '/data/schedules'\n\t\t\t\t\t,oncreate: m.route.link\n\t\t\t\t\t,title: \"Discard changes to the schedule\"\n\t\t\t\t}, 'Discard')\n\t\t\t\t,m.route.get().includes('create')\n\t\t\t\t? null\n\t\t\t\t: pDelete() == active.schedule_id\n\t\t\t\t\t? elements.action(\n\t\t\t\t\t\t'Permanantly Delete'\n\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\tpDelete(null)\n\t\t\t\t\t\t\treturn deleteSchedule(active.schedule_id())\n\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\tschedule_id_no_repeats(null)\n\t\t\t\t\t\t\t\tm.route.set('/data/schedules')\n\t\t\t\t\t\t\t\tm.redraw()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, pending\n\t\t\t\t\t\t, 'danger'\n\t\t\t\t\t\t, () => false\n\t\t\t\t\t\t, NotificationBar.Notifications.alertError\n\t\t\t\t\t)\n\t\t\t\t\t: m(\"button.btn.btn-warning\", {\n\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\tpDelete(\n\t\t\t\t\t\t\t\t\tactive.schedule_id\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, disabled: pending()\n\t\t\t\t\t\t\t, title: 'Go to the Gantt and '\n\t\t\t\t\t\t\t+ 'view all scheduled works'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Delete'\n\t\t\t\t\t)\n\t\t\t])\n\t\t]\n\t}\n\n\tfunction currentVersionId(schedule){\n\t\treturn schedule.schedule_versions[0].schedule_version_id\n\t}\n\n\n\tfunction edit(){\n\t\treturn m('div'\n\t\t\t,missingPermissions()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`info`\n\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t+ ' permissions'\n\t\t\t\t)\n\t\t\t\t: null\n\t\t\t,edit_table()\n\t\t)\n\t}\n\n\tfunction view(){\n\t\treturn m('div.hth-schedule',\n\t\t\t(\n\t\t\t\tm.route.param('schedule_id')\n\t\t\t\t|| m.route.param('schedule_parent')\n\t\t\t\t|| m.route.get().includes('create')\n\t\t\t\t\t? edit\n\t\t\t\t\t: list\n\t\t\t)()\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nexport default Main","/* globals setTimeout */\nimport m from 'bacta'\nimport * as elements from '../components/elements'\nimport NumberInput from '../components/number'\nimport scrollableTable from '../components/scrollableTable'\nimport humanList from '../utils/human_list'\nimport { prop } from '../../../stream'\nimport moment from 'moment'\nimport Responsive from '../components/responsive'\nimport drawChart from '../components/harth-chartist'\nimport HarthUppy from '../components/harth-uppy'\nimport * as modalStack from '../components/modal-stack'\nimport * as H from '../../../how/index.js'\n\nconst nullUser = {\n\tuser_id: m.prop('Unassigned')\n\t, user_username: m.prop('Unassigned')\n\t, usersFullName: 'Unassigned'\n\t, contractrecognitionname: 'Unassigned'\n\t, contractrecognitionid: null\n}\n\nconst financialSummary = [\n\t'Accrued'\n\t,'Requisitions'\n\t,'Receipted'\n\t,'Forecasts'\n]\n\nconst contractProps = [\n\t'contract_items_name'\n\t,'contract_items_description'\n\t,'contract_items_client_reference'\n\t,'contract_items_budget'\n\t,'contract_items_rate'\n\t,'contract_items_service'\n\t,'contract_items_depreciation'\n\t,'contract_items_appreciation'\n\t,'contract_items_uom'\n\t,'contract_items_damages_rate'\n\t,'contract_items_damages_period'\n\t,'contract_items_applied'\n\t,'contract_items_recorded_reference'\n\t,'contract_name'\n\t,'contractor_id'\n\t,'crew_id'\n\t,'crews_discipline_rates_id'\n\t,'modules_id'\n\t,'organizations_disciplines_id'\n\t,'tools_id'\n\t,'warehouse_id'\n\t,'contractprojectid'\n\t,'contractuserid'\n]\n\nconst asyncMergeAll =\n\txs => prop.afterSilence(\n\t\t500\n\t\t, prop.merge(xs)\n\t)\n\n\nconst checkprop = (a, b, c) =>\n\tc[a] && b && c[a][b]\n\t\t? typeof c[a][b] == 'function'\n\t\t\t? c[a][b]()\n\t\t\t: c[a][b]\n\t\t: typeof c[a] == 'function'\n\t\t\t? c[a]()\n\t\t\t: c[a]\n\nimport {\n\tfilterView\n\t,ListProcessing\n} from '../components/filter'\n\nimport { Light as DetailsPane } from '../components/detailspane2'\nimport Pencil from '../components/pencil'\nimport * as R from 'ramda'\nimport {identical} from '../utils/harth-identical'\nimport autocomplete from './autocomplete'\n// import Permissions from '../models/permissions'\nimport Promise from 'bluebird'\nimport css from 'bss'\n\nimport { money as makeMoney } from '../utils/regExes'\nconst milliperday = 1000*60*60*24\n\n\nfunction contractsRoute({ attrs: { data }}){\n\n\tconst features = data.features\n\n\tconst {\n\t\toriginalInvoices\n\t\t,users\n\t\t,tools\n\t\t,projects\n\t\t,resources\n\t\t,contracts\n\t\t,focussedContracts\n\t\t,organizations_disciplines\n\t\t,contractEntities\n\t\t,forecastdateA\n\t\t,forecastdateB\n\t\t,focussedEntities\n\t\t,calculated\n\t\t,fetchOrganizationsDisciplines\n\t\t,fetchUsers\n\t\t,fetchResource\n\t\t,fetchProjects\n\t\t,fetchWarehouses\n\t\t,fetchTools\n\t\t,fetchContracts\n\t\t,makeContractItem\n\t\t,cloneInvoice\n\t\t,viewOptions\n\t\t,viewWindow\n\t\t,viewWindowList\n\t\t,loading\n\t\t,reMapdateChange\n\t\t,recordedFocus\n\t\t,accumulator\n\t\t,api\n\t\t,warehouses\n\t\t,initiateContractFetch\n\t\t,readContractPermissions\n\t\t/* eslint-disable */\n\t\t,readWarehousePermissions\n\t\t,readProjectPermissions\n\t\t,readSupplierPermissions\n\t\t,readResourcePermissions\n\t\t,readFlowPermissions\n\t\t,readInterruptionsPermissions\n\t\t,readSchedulePermissions\n\t\t,readToolPermissions\n\t\t,readInvoicePermissions\n\t\t,readTimesheetPermissions\n\t\t,readUpdatePermissions\n\t\t,readUserPermissions\n\t\t,readOrderPermissions\n\t\t,readMaterialPermissions\n\t\t,readModulePermissions\n\t\t,readAssignedTimesheetsPermissions\n\t\t,readPaymentPermissions\n\t\t,readContractObligationPermissions\n\t\t,renderSummary\n\t\t,editContractPermissions\n\t\t,editInvoicePermissions\n\t\t,currentRoute\n\t\t,currentVersion\n\t\t,overHEadVersion\n\t\t,allContractItemsIndexByContractItemId\n\t\t,indexedContractEntities\n\t\t,baseItems\n\t\t,contractEntitiesIndexedById\n\t\t,invoiceWindow\n\t\t,focussedInvoices\n\t\t,schedules\n\t\t,multiplierIndex\n\t\t,invoiceDataLoading\n\t\t,metaDataIndexing\n\t\t,metaDataLoading\n\t\t,progressCalculation\n\t\t,baseItemsList\n\t\t,ctypes\n\t\t,coption\n\t\t,hiddenInvoiceData\n\t\t,disconnectedcontract\n\t\t,advancedView\n\t\t,calculatedData\n\t\t,focus_schedules\n\t\t,route_contract_id\n\t\t,route_original_contract_id\n\t\t,route_view_type\n\t\t,summation\n\t\t,routeParam\n\t\t,prevview\n\t\t,routeids\n\t\t,fetchCalculations\n\t\t,scheduleData\n\t\t,chartCreation\n\t\t,fetchXeroExport\n\t\t,loadchart\n\t\t,baseItemsSelectList\n\t\t,debounce\n\t\t/* eslint-enable */\n\t} = data\n\n\n\tfunction sendContracts(fload){\n\t\treMapdateChange(true)\n\t\tcalculated(false)\n\t\tconst payload =\n\t\t\tfload\n\t\t\t|| [\n\t\t\t\tR.merge(\n\t\t\t\t\tactive\n\t\t\t\t\t,{\n\t\t\t\t\t\tcontract_items:\n\t\t\t\t\t\t\tactive.contract_items()\n\t\t\t\t\t\t\t.filter(ci => ci.created)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t]\n\n\t\treturn deletetItem(true)\n\t\t.then(function(){\n\t\t\treturn api.contracts.patch.many(payload)\n\t\t\t\t.then(function(res){\n\t\t\t\t\tdeleteContractItems([])\n\t\t\t\t\tcheckMultipleContracts({})\n\t\t\t\t\tcheckMultiple({})\n\t\t\t\t\tcontracts(res)\n\t\t\t\t\tcalculated(true)\n\t\t\t\t\treMapdateChange(false)\n\n\t\t\t\t\tconst currentcontract =\n\t\t\t\t\t\tres.find((c) =>\n\t\t\t\t\t\t\tc.contract_name\n\t\t\t\t\t\t\t== active.contract_name()\n\t\t\t\t\t\t)\n\n\t\t\t\t\tcontract(currentcontract)\n\n\t\t\t\t\t!active.contract_name()\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: m.route.set(\n\t\t\t\t\t\t\t'/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t+ currentcontract.contract_id\n\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t)\n\n\t\t\t\t\treturn res\n\t\t\t\t})\n\t\t})\n\t}\n\n\n\tfunction deleteContract(){\n\t\tloading(true)\n\t\tinvoiceDataLoading(true)\n\t\treturn Promise.all(\n\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t.map((t) => api.contracts.remove.one(t))\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\treMapdateChange(true)\n\t\t\t\tconst removed = Object.keys(checkMultipleContracts()).map((cid) => cid )\n\t\t\t\tfocussedContracts(\n\t\t\t\t\tfocussedContracts().filter((c) =>\n\t\t\t\t\t\t!removed.find((tc) =>\n\t\t\t\t\t\t\ttc == c.contract_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tcheckMultipleContracts({})\n\t\t\t\tcontract({ contract_items: [] })\n\t\t\t\tloading(false)\n\t\t\t\tcalculated(false)\n\t\t\t\treMapdateChange(false)\n\t\t\t})\n\t}\n\n\tfunction deletetItem(makeAPICalls){\n\n\t\tfunction deleteLocal(){\n\t\t\tObject.keys(checkMultiple())\n\t\t\t\t.forEach((ci) => {\n\t\t\t\t\tcheckMultiple()[ci].contract_items_id()\n\t\t\t\t\t&& deleteContractItems().push(checkMultiple()[ci].contract_items_id())\n\t\t\t\t})\n\n\t\t\tR.map(\n\t\t\t\t(citem) => active.contract_items()\n\t\t\t\t\t.splice(\n\t\t\t\t\t\tactive.contract_items()\n\t\t\t\t\t\t\t.findIndex((ci) =>\n\t\t\t\t\t\t\t\tci.contract_items_id() == citem.contract_items_id()\n\t\t\t\t\t\t\t\t&& ci.contract_items_name() == citem.contract_items_name()\n\t\t\t\t\t\t\t\t&& ci.contract_items_description() == citem.contract_items_description()\n\t\t\t\t\t\t\t\t&& ci.contract_items_client_reference() == citem.contract_items_client_reference()\n\t\t\t\t\t\t\t\t&& ci.contract_items_rate() == citem.contract_items_rate()\n\t\t\t\t\t\t\t\t&& ci.contract_items_budget() == citem.contract_items_budget()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,1\n\t\t\t\t\t)\n\t\t\t\t,checkMultiple()\n\t\t\t)\n\t\t\tcheckMultiple({})\n\t\t\treturn true\n\t\t}\n\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteContractItems().map(\n\t\t\t\t\t(t) => api.contract_items.remove.one(t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t: deleteLocal()\n\t}\n\n\tfunction deletetInvoices(makeAPICalls){\n\t\treturn makeAPICalls\n\t\t\t? Promise.all(\n\t\t\t\tdeleteInvoiceItems().map(\n\t\t\t\t\t(t) => api.invoices.remove.one(t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t: \t\t\t\tselectedInvoices()\n\t\t\t\t\t.map((i) =>\n\t\t\t\t\t\ti.invoice_id()\n\t\t\t\t\t\t&& deleteInvoiceItems().push(\n\t\t\t\t\t\t\ti.invoice_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t&& selectedInvoices().map((selectedInvoice) =>\n\t\t\t\t\tfocussedInvoices().splice(\n\t\t\t\t\t\tfocussedInvoices()\n\t\t\t\t\t\t\t.findIndex((i) =>\n\t\t\t\t\t\t\t\ti.invoice_id()\n\t\t\t\t\t\t\t\t== selectedInvoice.invoice_id()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t&& selectedInvoices([])\n\n\t}\n\n\n\tfunction sendInvoices(){\n\n\t\tconst payload = (\n\t\t\troute_view_type() == 'Make Ledgers'\n\t\t\t\t? selectedInvoices\n\t\t\t\t: focussedInvoices\n\t\t)().filter((i) =>\n\t\t\ti.created\n\t\t\t&& Number(\n\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t) != 0\n\t\t)\n\n\t\tloading(true)\n\t\tinvoiceDataLoading(true)\n\t\tcalculated(false)\n\t\treMapdateChange(true)\n\n\t\tpayload.forEach((i) => {\n\t\t\ti.user_id(\n\t\t\t\tdata.auth.stream().user_id\n\t\t\t)\n\t\t\ti.invoice_type(\n\t\t\t\tNumber(\n\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t) > 0\n\t\t\t\t\t? i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Revenue'\n\t\t\t\t\t\t: 'Accrued Revenue'\n\t\t\t\t\t: i.invoice_received()\n\t\t\t\t\t\t? 'Receipted Expenditure'\n\t\t\t\t\t\t: 'Accrued Expenditure'\n\t\t\t)\n\t\t})\n\n\t\treturn deletetInvoices(true)\n\t\t.then(function(){\n\t\t\treturn api.invoices.patch.many(payload)\n\t\t\t\t.then(function(res){\n\t\t\t\t\tdeleteInvoiceItems([])\n\t\t\t\t\tselectedInvoices([])\n\t\t\t\t\tfilteredInvoiceOptions([])\n\t\t\t\t\tinvoiceDataLoading(false)\n\t\t\t\t\tcalculated(true)\n\t\t\t\t\treMapdateChange(false)\n\t\t\t\t\tloading(false)\n\t\t\t\t\tallSelected(false)\n\t\t\t\t\troute_view_type() == 'All Ledgers'\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: route_view_type('All Contracts')\n\n\t\t\t\t\tcheckMultiple({})\n\t\t\t\t\toriginalInvoices(cloneInvoice(focussedInvoices()))\n\t\t\t\t\treturn res\n\t\t\t\t})\n\t\t})\n\t}\n\n\tconst filteredContractItemOptions = data.scoped([])\n\tconst filteredOdinItemOptions = data.scoped([])\n\tconst filteredInvoiceOptions = data.scoped([])\n\tconst adjustPercenageOption = data.scoped(false)\n\tconst adjustPercenageValue = data.scoped(100)\n\tconst allSelected = data.scoped(false)\n\tconst savingProp = data.scoped(false)\n\tconst deleteStateProp = data.scoped(false)\n\tconst deleteInvoiceItems = data.scoped([])\n\tconst deleteContractItems = m.prop([])\n\tconst dailyAverage = data.scoped('Total Period')\n\n\tconst errors = data.scoped({})\n\tconst donerContract = data.scoped(null)\n\n\tchartCreation.map(({fe}) => {\n\n\t\tconst breakdownIndex =\n\t\t\tfe\n\t\t\t? R.groupBy(\n\t\t\t\tR.prop('contractrecognitionid')\n\t\t\t\t,(calculatedData()[\n\t\t\t\t\tfe.schedule_version_id\n\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t+ (forecastdateB() || Infinity)\n\t\t\t\t] || {chartdata: []}).chartdata\n\t\t\t)\n\t\t\t: {}\n\n\t\tconst series =\n\t\t\tfe && !fe.breakdown\n\t\t\t? [\n\t\t\t\tcalculatedData()[\n\t\t\t\t\tfe.schedule_version_id\n\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t+ (forecastdateB() || Infinity)\n\t\t\t\t]\n\t\t\t]\n\t\t\t: Object.keys( breakdownIndex )\n\t\t\t.map((c) => R.merge(baseItems()[c], {contractrecognitionid: c, chartdata: breakdownIndex[c]}))\n\n\n\t\tconst makeGroupings =\n\t\t\t({fe, series}) => {\n\t\t\t\treturn !fe.groupings.length ? series : fe.groupings.map((g) => {\n\n\t\t\t\t\tconst rseries = series.filter((sf) => g.find((g) => g == sf.contractrecognitionname))\n\t\t\t\t\treturn {\n\t\t\t\t\t\tchartdata: R.unnest(rseries.map(R.prop('chartdata')))\n\t\t\t\t\t\t,contractrecognitionname: rseries.map(R.prop('contractrecognitionname')).join('')\n\t\t\t\t\t\t,chartname: rseries.map(R.pipe(R.prop('contractrecognitionname'), R.split(' - '), R.head))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\treturn !fe\n\t\t? null\n\t\t: drawChart({\n\t\t\tfe\n\t\t\t,data: { series: makeGroupings({fe, series}) }\n\t\t\t,features\n\t\t})\n\t})\n\n\tconst viewtype =\n\t\troute_view_type\n\t\t.map((v) => {\n\t\t\treturn v == 'All Contracts'\n\t\t\t? ContractSummaryList\n\t\t\t: v == 'All Items'\n\t\t\t\t? ListAllContractEntities\n\t\t\t\t: v == 'All Ledgers'\n\t\t\t\t\t? ListInvoicesPOs\n\t\t\t\t\t: v != 'Overview'\n\t\t\t\t\t? CreateInvoicePO\n\t\t\t\t\t: () => ''\n\t\t})\n\n\n\t// asyncMergeAll(\n\t// \t[\n\t// \t\troute_contract_id\n\t// \t]\n\t// )\n\t// .map(() => reMapdateChange(false))\n\n\tconst selectedInvoices = data.scoped([])\n\tconst activeItem = data.scoped({})\n\tconst checkMultiple = data.scoped({})\n\tconst checkMultipleContracts = data.scoped({})\n\n\tconst missingPermissions =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tdata.initiateContractFetch\n\t\t\t]\n\t\t)\n\t\t.map(() =>\n\t\t\thumanList(\n\t\t\t\t[\n\t\t\t\t\t'Project'\n\t\t\t\t\t,'Resource'\n\t\t\t\t\t,'Warehouse'\n\t\t\t\t\t,'Tool'\n\t\t\t\t\t,'Timesheet'\n\t\t\t\t\t,'User'\n\t\t\t\t\t,'Order'\n\t\t\t\t\t,'Material'\n\t\t\t\t\t// ,'Module'\n\t\t\t\t\t,'Contract'\n\t\t\t\t\t,'Invoice'\n\t\t\t\t]\n\t\t\t\t\t.map((p)=>\n\t\t\t\t\t\tdata['read'+p+'Permissions']()\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: p\n\t\t\t\t\t)\n\t\t\t\t\t.filter((p) => p)\n\t\t\t)\n\t\t)\n\n\tconst invoicesReceipted =\n\t\tselectedInvoices.map((invoices) =>\n\t\t\tinvoices.some((i) => i.invoice_received())\n\t\t)\n\n\tconst invoicesapproved =\n\t\tselectedInvoices.map((invoices) =>\n\t\t\tinvoices.some((i) => i.invoice_approval())\n\t\t)\n\n\n\tconst scheduleList = asyncMergeAll(\n\t\t[\n\t\t\tschedules\n\t\t\t,focussedEntities\n\t\t]\n\t).map(([s, fe]) =>\n\t\tR.differenceWith(\n\t\t\t(a,b) => a.schedule_version_id == b.schedule_version_id\n\t\t\t,R.concat(\n\t\t\t\tR.unnest(\n\t\t\t\t\ts.map(\n\t\t\t\t\t\tschedule =>\n\t\t\t\t\t\t\tschedule.schedule_versions\n\t\t\t\t\t\t\t\t.map((sv) =>\n\t\t\t\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t\t\t\tsv\n\t\t\t\t\t\t\t\t\t\t,schedule\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,[{\n\t\t\t\t\tscheduleNameVersion: 'Overheads'\n\t\t\t\t\t,schedule_version_id: 'Overheads'\n\t\t\t\t\t,schedule_id: null\n\t\t\t\t}]\n\t\t\t)\n\t\t\t,fe\n\t\t)\n\t)\n\n\tconst SupplierEntities =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tresources\n\t\t\t\t,users\n\t\t\t]\n\t\t).map((data) =>\n\t\t\t[].concat(\n\t\t\t\tdata[0] || []\n\t\t\t\t,data[1] || []\n\t\t\t)\n\t\t)\n\n\n\tfunction setQuartelyButtonDate(t){\n\t\tlet dayA = 0\n\t\tlet monthA = 0\n\t\tlet dayB = 0\n\t\tlet monthB = 0\n\t\tlet year = new Date().getYear() + 1900\n\t\tif(t == 'Q1 Jul-Sep'){\n\t\t\tdayA = 1\n\t\t\tmonthA = 6\n\t\t\tdayB = 30\n\t\t\tmonthB = 8\n\t\t}\n\t\tif(t == 'Q2 Oct-Dec'){\n\t\t\tdayA = 1\n\t\t\tmonthA = 9\n\t\t\tdayB = 31\n\t\t\tmonthB = 11\n\t\t}\n\t\tif(t == 'Q3 Jan-Mar'){\n\t\t\tdayA = 1\n\t\t\tmonthA = 0\n\t\t\tdayB = 31\n\t\t\tmonthB = 2\n\t\t}\n\t\tif(t == 'Q4 Apr-Jun'){\n\t\t\tdayA = 1\n\t\t\tmonthA = 3\n\t\t\tdayB = 30\n\t\t\tmonthB = 5\n\t\t}\n\t\tforecastdateA( new Date(year, monthA, dayA).getTime())\n\t\tforecastdateB( new Date(year, monthB, dayB).getTime())\n\t\treMapdateChange(false)\n\treturn t\n\t}\n\n\t function cloneContractItems(o){\n\n\t\to.contract_items =\n\t\t\tR.sortBy(\n\t\t\t\t(a) => a.contract_items_id()\n\t\t\t\t,o.contract_items\n\t\t\t)\n\n\t\treturn R.sortBy(\n\t\t\t(a) => a.contract_items_id()\n\t\t\t,o.contract_items\n\t\t)\n\t\t.map((aItem) => {\n\t\t\treturn {\n\n\t\t\t\tkey: aItem.key\n\t\t\t\t\t? aItem.key\n\t\t\t\t\t: Math.random().toString(15).slice(2, 8)\n\n\t\t\t\t,contract_id: m.prop(\n\t\t\t\t\t\troute_original_contract_id()\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: aItem.contract_id()\n\t\t\t\t\t\t)\n\t\t\t\t,contract_items_id: m.prop(\n\t\t\t\t\t\troute_original_contract_id()\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: aItem.contract_items_id()\n\t\t\t\t\t\t)\n\n\t\t\t\t,contract_name: o.contract_name\n\t\t\t\t,organization_id: m.prop( aItem.organization_id() )\n\t\t\t\t,contract_items_name: m.prop( aItem.contract_items_name() )\n\t\t\t\t,contract_items_description: m.prop( aItem.contract_items_description() )\n\t\t\t\t,contract_items_client_reference: m.prop(aItem.contract_items_client_reference() )\n\t\t\t\t,contract_items_rate: m.prop( aItem.contract_items_rate() )\n\t\t\t\t,contract_items_budget: m.prop( aItem.contract_items_budget() )\n\t\t\t\t,contract_items_service: m.prop( aItem.contract_items_service() )\n\t\t\t\t,contract_items_depreciation: m.prop( aItem.contract_items_depreciation() )\n\t\t\t\t,contract_items_appreciation: m.prop( aItem.contract_items_appreciation() )\n\t\t\t\t,contract_items_uom: m.prop( aItem.contract_items_uom() )\n\t\t\t\t,contract_items_damages_rate: m.prop( aItem.contract_items_damages_rate() )\n\t\t\t\t,contract_items_damages_period: m.prop( aItem.contract_items_damages_period() )\n\t\t\t\t,contract_items_applied: m.prop( aItem.contract_items_applied() )\n\t\t\t\t,contract_items_recorded_reference: m.prop( aItem.contract_items_recorded_reference() )\n\t\t\t\t,contract_items_recorded_reference_standard: m.prop( aItem.contract_items_recorded_reference_standard() )\n\n\t\t\t\t,currentRevenue: aItem.currentRevenue || 0\n\t\t\t\t,currentExpenditures: aItem.currentExpenditures || 0\n\t\t\t\t,currentProfits: aItem.currentProfits || 0\n\t\t\t\t,forecastedRevenue: aItem.forecastedRevenue || 0\n\t\t\t\t,forecastedExpenditures: aItem.forecastedExpenditures || 0\n\t\t\t\t,forecastedProfits: aItem.forecastedProfits || 0\n\t\t\t\t,outstandingRevenue: aItem.outstandingRevenue || 0\n\t\t\t\t,outstandingExpenditures: aItem.outstandingExpenditures || 0\n\t\t\t\t,outstandingProfits: aItem.outstandingProfits || 0\n\n\t\t\t\t,accruedExpenditures: aItem.accruedExpenditures || 0\n\t\t\t\t,accruedRevenue: aItem.accruedRevenue || 0\n\t\t\t\t,accruedProfits: aItem.accruedProfits || 0\n\t\t\t\t,accruedDailyRevenue: aItem.accruedDailyRevenue || 0\n\t\t\t\t,accruedDailyExpenditures: aItem.accruedDailyExpenditures || 0\n\t\t\t\t,accruedDailyPeriodRevenue: aItem.accruedDailyPeriodRevenue || 0\n\t\t\t\t,accruedDailyPeriodExpenditures: aItem.accruedDailyPeriodExpenditures || 0\n\t\t\t\t,accruedDailyProfits: aItem.accruedDailyProfits || 0\n\t\t\t\t,accruedDailyPeriodProfits: aItem.accruedDailyPeriodProfits || 0\n\n\t\t\t\t,currentDailyPeriodRevenue: aItem.currentDailyPeriodRevenue || 0\n\t\t\t\t,currentDailyPeriodExpenditures: aItem.currentDailyPeriodExpenditures || 0\n\t\t\t\t,forecastedDailyPeriodRevenue: aItem.forecastedDailyPeriodRevenue || 0\n\t\t\t\t,forecastedDailyPeriodExpenditures: aItem.forecastedDailyPeriodExpenditures || 0\n\t\t\t\t,currentDailyPeriodProfits: aItem.currentDailyPeriodProfits || 0\n\t\t\t\t,forecastedDailyPeriodProfits: aItem.forecastedDailyPeriodProfits || 0\n\t\t\t\t,outstandingDailyPeriodRevenue: aItem.outstandingDailyPeriodRevenue || 0\n\t\t\t\t,outstandingDailyPeriodExpenditures: aItem.outstandingDailyPeriodExpenditures || 0\n\t\t\t\t,outstandingDailyPeriodProfits: aItem.outstandingDailyPeriodProfits || 0\n\n\t\t\t\t,currentDailyRevenue: aItem.currentDailyRevenue || 0\n\t\t\t\t,currentDailyExpenditures: aItem.currentDailyExpenditures || 0\n\t\t\t\t,forecastedDailyRevenue: aItem.forecastedDailyRevenue || 0\n\t\t\t\t,forecastedDailyExpenditures: aItem.forecastedDailyExpenditures || 0\n\t\t\t\t,currentDailyProfits: aItem.currentDailyProfits || 0\n\t\t\t\t,forecastedDailyProfits: aItem.forecastedDailyProfits || 0\n\t\t\t\t,outstandingDailyRevenue: aItem.outstandingDailyRevenue || 0\n\t\t\t\t,outstandingDailyExpenditures: aItem.outstandingDailyExpenditures || 0\n\t\t\t\t,outstandingDailyProfits: aItem.outstandingDailyProfits || 0\n\n\t\t\t\t,materialActual: aItem.materialActual || 0\n\t\t\t\t,materialForecasted: aItem.materialForecasted || 0\n\t\t\t\t,contractedDailyPeriodProgress: aItem.contractedDailyPeriodProgress || 0\n\t\t\t\t,contractedProgress: aItem.contractedProgress || 0\n\t\t\t\t,contractedDailyProgress: aItem.contractedDailyProgress || 0\n\t\t\t\t,budget: aItem.budget || 0\n\t\t\t\t,invoicecount: aItem.invoicecount\n\t\t\t\t,created: route_original_contract_id()\n\t\t\t\t\t? true\n\t\t\t\t\t: aItem.created\n\n\t\t\t\t,crews_discipline_rates_id: aItem.crews_discipline_rates_id\n\t\t\t\t,modules_id: aItem.modules_id\n\t\t\t\t,warehouse_id: aItem.warehouse_id\n\t\t\t\t,contractor_id: aItem.contractor_id\n\t\t\t\t,crew_id: aItem.crew_id\n\t\t\t\t,project_id: aItem.project_id\n\t\t\t\t,organizations_disciplines_id: aItem.organizations_disciplines_id\n\t\t\t\t,tools_id: aItem.tools_id\n\t\t\t\t,user_id: aItem.user_id\n\t\t\t\t,contractrecognitionid:\n\t\t\t\t\taItem.modules_id\n\t\t\t\t\t|| aItem.warehouse_id\n\t\t\t\t\t|| aItem.contractor_id\n\t\t\t\t\t|| aItem.project_id\n\t\t\t\t\t|| aItem.organizations_disciplines_id\n\t\t\t\t\t|| aItem.tools_id\n\t\t\t\t\t|| aItem.user_id\n\t\t\t\t\t|| aItem.crew_id\n\t\t\t\t\t|| aItem.crews_discipline_rates_id\n\t\t\t}\n\t\t})\n\t}\n\n\n\tconst contract =\n\t \tasyncMergeAll(\n\t\t\t[\n\t\t\t\troute_contract_id\n\t\t\t\t,route_original_contract_id\n\t\t\t\t,contracts\n\t\t\t]\n\t\t)\n\t\t.map(\n\t\t\t([routeContractID, routeOriginalContractID, fArray]) => {\n\n\t\t\t\tconst matchID = routeContractID || routeOriginalContractID\n\t\t\t\tconst selectedContract =\n\t\t\t\t\trouteContractID || routeOriginalContractID\n\t\t\t\t\t\t? fArray.find((c) => c.contract_id == matchID)\n\t\t\t\t\t\t: null\n\n\t\t\t\treturn selectedContract || { contract_items: [] }\n\t\t\t}\n\t\t)\n\n\tconst active = {\n\t\torganization_id: contract.map( R.propOr( null, 'organization_id' ) )\n\t\t,contract_id: contract.map( (c) =>\n\t\t\t\t\t\t\troute_original_contract_id()\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: R.propOr( null, 'contract_id')(c)\n\t\t\t\t\t\t)\n\t\t,contract_name: contract.map( (c) =>\n\t\t\t\t\t\t\troute_original_contract_id()\n\t\t\t\t\t\t\t\t? R.propOr( null, 'contract_name')(c) + ' (Clone)'\n\t\t\t\t\t\t\t\t: R.propOr( null, 'contract_name')(c)\n\t\t\t\t\t\t)\n\t\t,contract_description: contract.map( R.propOr( null, 'contract_description') )\n\t\t,contract_payment_term: contract.map( R.propOr(0, 'contract_payment_term') )\n\t\t,contract_count_invoices: contract.map( R.propOr( true, 'contract_count_invoices'))\n\t\t,contract_start_date: contract.map( R.propOr( null, 'contract_start_date') )\n\t\t,supplier_id: contract.map( R.propOr( null, 'supplier_id') )\n\t\t,supplier_name: contract.map( R.propOr( null, 'supplier_name') )\n\t\t,contract_end_date: contract.map( R.propOr( null, 'contract_end_date') )\n\t\t,contract_terms: contract.map( (a) => R.propOr(null, 'contract_terms')(a) )\n\n\t\t,client_id: contract.map( R.propOr( null, 'client_id') )\n\t\t,client_organization_name: contract.map( R.propOr( null, 'client_organization_name') )\n\t\t,client_incorporation_no: contract.map( R.propOr( null, 'client_incorporation_no') )\n\t\t,client_email: contract.map( R.propOr( null, 'client_email') )\n\t\t,client_phone: contract.map( R.propOr( null, 'client_phone') )\n\t\t,client_address: contract.map( R.propOr( null, 'client_address') )\n\t\t,client_state: contract.map( R.propOr( null, 'client_state') )\n\t\t,client_postcode: contract.map( R.propOr( null, 'client_postcode') )\n\n\t\t,account_id: contract.map( R.propOr( null, 'account_id') )\n\t\t,account_bsb: contract.map( R.propOr( null, 'account_bsb') )\n\t\t,account_no: contract.map( R.propOr( null, 'account_no') )\n\t\t,account_bank: contract.map( R.propOr( null, 'account_bank') )\n\t\t,account_bic: contract.map( R.propOr( null, 'account_bic') )\n\t\t,account_iban: contract.map( R.propOr( null, 'account_iban') )\n\t\t,account_swift_code: contract.map( R.propOr( null, 'account_swift_code') )\n\n\t\t,contract_items:\n\t\t\tcontract.map((c) =>\n\t\t\t\tc\n\t\t\t\t\t? cloneContractItems(c)\n\t\t\t\t\t: []\n\t\t\t)\n\t}\n\n\tconst hiddenItemData = data.scoped({})\n\n\tasyncMergeAll([\n\t\tadvancedView\n\t\t,contract\n\t])\n\t.map(([av, contract]) =>\n\t\thiddenItemData({\n\t\t\tcontract_items_service: !av && !contract.contract_items.some((c) => c.contract_items_service())\n\t\t\t,contract_items_depreciation: !av && !contract.contract_items.some((c) => c.contract_items_depreciation())\n\t\t\t,contract_items_appreciation: !av && !contract.contract_items.some((c) => c.contract_items_appreciation())\n\t\t\t,contract_items_damages: !av && !contract.contract_items.some((c) => c.contract_items_damages_rate())\n\t\t\t,contract_items_damages_period: !av && !contract.contract_items.some((c) => c.contract_items_damages_rate())\n\t\t})\n\t)\n\n\t;contract() == null && active && active.contract_items([])\n\n\tconst totalOverview =\n\t\tdata.scoped({\n\t\t\tscheduleNameVersion: ''\n\t\t\t,currentProfits: 0\n\t\t\t,odincount: 0\n\t\t\t,invoicecount: 0\n\t\t\t,odinitems: []\n\t\t\t,tp: data.scoped(20)\n\t\t})\n\tconst contractItemSums =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tactive.contract_items\n\t\t\t\t,checkMultiple\n\t\t\t\t,calculated\n\t\t\t]\n\t\t).map(([activeItems]) =>\n\t\t\tR.reduce(\n\t\t\t\taccumulator\n\t\t\t\t,{\n\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t,currentDailyPeriodRevenue: 0\n\t\t\t\t\t,currentDailyPeriodExpenditures: 0\n\t\t\t\t\t,forecastedDailyPeriodRevenue: 0\n\t\t\t\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t\t\t\t,currentDailyPeriodProfits: 0\n\t\t\t\t\t,forecastedDailyPeriodProfits: 0\n\t\t\t\t\t,outstandingDailyPeriodRevenue: 0\n\t\t\t\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t\t\t\t,outstandingDailyPeriodProfits: 0\n\t\t\t\t\t,currentDailyRevenue: 0\n\t\t\t\t\t,currentDailyExpenditures: 0\n\t\t\t\t\t,forecastedDailyRevenue: 0\n\t\t\t\t\t,forecastedDailyExpenditures: 0\n\t\t\t\t\t,currentDailyProfits: 0\n\t\t\t\t\t,forecastedDailyProfits: 0\n\t\t\t\t\t,outstandingDailyRevenue: 0\n\t\t\t\t\t,outstandingDailyExpenditures: 0\n\t\t\t\t\t,outstandingDailyProfits: 0\n\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t,accruedDailyRevenue: 0\n\t\t\t\t\t,accruedDailyExpenditures: 0\n\t\t\t\t\t,accruedDailyPeriodRevenue: 0\n\t\t\t\t\t,accruedDailyPeriodExpenditures: 0\n\t\t\t\t\t,accruedDailyProfits: 0\n\t\t\t\t\t,accruedDailyPeriodProfits: 0\n\t\t\t\t\t,contractedProgress: 0\n\t\t\t\t\t,contractedDailyProgress: 0\n\t\t\t\t\t,contractedDailyPeriodProgress: 0\n\t\t\t\t\t,budget:0\n\t\t\t\t\t,invoicecount:0\n\t\t\t\t}\n\t\t\t\t,calculated()\n\t\t\t\t\t? activeItems.map((c) =>\n\t\t\t\t\t\tallContractItemsIndexByContractItemId()\n\t\t\t\t\t\t[c.contract_items_id()]\n\t\t\t\t\t)\n\t\t\t\t\t.filter((c) => c )\n\t\t\t\t\t: []\n\t\t\t)\n\t\t)\n\n\n\tconst receiptedInvoices =\n\t\tfocussedInvoices.map((invoiceList) =>\n\t\t\tinvoiceList.filter((i) =>\n\t\t\t\ti.receipting && i.created\n\t\t\t)\n\t\t)\n\n\tconst selectedInvoiceStats =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tselectedInvoices\n\t\t\t\t,focussedInvoices\n\t\t\t]\n\t\t)\n\t\t.map((invoiceLists) => {\n\n\t\t\tconst stateOptions = [\n\t\t\t\t{type: 'Receipted Revenue', propStart: 'current', propEnd: 'Revenue'}\n\t\t\t\t,{type:'Accrued Revenue', propStart: 'outstanding', propEnd:'Revenue'}\n\t\t\t\t,{type:'Receipted Expenditure', propStart: 'current', propEnd:'Expenditures'}\n\t\t\t\t,{type:'Accrued Expenditure', propStart: 'outstanding', propEnd:'Expenditures'}\n\t\t\t]\n\n\t\t\tconst statArray =\n\t\t\t\tinvoiceLists.map((invoiceList) => {\n\n\t\t\t\t\tconst statObject =\n\t\t\t\t\t\tR.reduce(\n\t\t\t\t\t\t\t(a, b) => {\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t'invoice_amount'\n\t\t\t\t\t\t\t\t\t,'invoice_service_amount'\n\t\t\t\t\t\t\t\t\t,'invoice_damages_amount'\n\t\t\t\t\t\t\t\t\t,'invoice_depreciation_amount'\n\t\t\t\t\t\t\t\t\t,'invoice_appreciation_amount'\n\t\t\t\t\t\t\t\t].map((propName) =>\n\n\t\t\t\t\t\t\t\t\tb[propName]() * b[propName.replace('_amount', '_rate')]() >= 0 && b['invoice_received']()\n\t\t\t\t\t\t\t\t\t? a.currentRevenue = a.currentRevenue + b[propName]() * b[propName.replace('_amount', '_rate')]()\n\t\t\t\t\t\t\t\t\t: b[propName]() * b[propName.replace('_amount', '_rate')]() >= 0 && !b['invoice_received']()\n\t\t\t\t\t\t\t\t\t? a.outstandingRevenue = a.outstandingRevenue + b[propName]() * b[propName.replace('_amount', '_rate')]()\n\t\t\t\t\t\t\t\t\t: b[propName]() * b[propName.replace('_amount', '_rate')]() < 0 && b['invoice_received']()\n\t\t\t\t\t\t\t\t\t? a.currentExpenditures = a.currentExpenditures + b[propName]() * b[propName.replace('_amount', '_rate')]()\n\t\t\t\t\t\t\t\t\t: a.outstandingExpenditures = a.outstandingExpenditures + b[propName]() * b[propName.replace('_amount', '_rate')]()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\ta.currentProfits = a.currentRevenue + a.currentExpenditures\n\t\t\t\t\t\t\t\ta.outstandingProfits = a.outstandingRevenue + a.outstandingExpenditures\n\t\t\t\t\t\t\t\treturn a\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, invoiceList\n\t\t\t\t\t\t)\n\n\t\t\t\t\tstateOptions.map((ifilter) =>\n\t\t\t\t\t\tinvoiceList.filter((i) =>\n\t\t\t\t\t\t\ti.invoice_type() == ifilter.type\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.forEach((iList, iIndex) => {\n\t\t\t\t\t\tconst ref = stateOptions[iIndex]\n\t\t\t\t\t\tstatObject[ref.propStart + 'Daily' + ref.propEnd] = 0\n\t\t\t\t\t\tstatObject[ref.propStart + 'DailyPeriod' + ref.propEnd] = 0\n\n\t\t\t\t\t\tif(iList.length != 0){\n\t\t\t\t\t\t\tconst invoiceDays =\n\t\t\t\t\t\t\t\tiList.length > 1\n\t\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tnew Date(iList[iList.length - 1].invoice_date()).getTime()\n\t\t\t\t\t\t\t\t\t\t- new Date(iList[0].invoice_date()).getTime()\n\t\t\t\t\t\t\t\t\t)/milliperday\n\t\t\t\t\t\t\t\t\t: 1\n\t\t\t\t\t\t\tstatObject[ref.propStart + 'Daily' + ref.propEnd] = statObject[ref.propStart + ref.propEnd]/(invoiceDays || 1 )\n\t\t\t\t\t\t\tstatObject[ref.propStart + 'DailyPeriod' + ref.propEnd] = statObject[ref.propStart + ref.propEnd]/(invoiceDays || 1 )\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn statObject\n\t\t\t\t})\n\t\t\treturn {sInvoices: statArray[0], fInvoices: statArray[1]}\n\t\t}\n\t)\n\n\tconst viewStats = asyncMergeAll(\n\t\t[\n\t\t\troute_view_type\n\t\t\t,viewWindowList\n\t\t\t,selectedInvoiceStats\n\t\t]\n\t)\n\t.map(([v, viewWindowList]) =>\n\n\t\tR.reduce(\n\t\t\t(a, b) =>\n\t\t\t\tR.mapObjIndexed((object, propIndex) =>\n\t\t\t\t\tobject = object + checkprop(propIndex, null, b)\n\t\t\t\t)(a)\n\t\t\t,{\n\n\t\t\t\tcurrentRevenue: 0\n\t\t\t\t,currentExpenditures: 0\n\t\t\t\t,currentProfits: 0\n\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t,forecastedProfits: 0\n\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t,outstandingProfits: 0\n\n\t\t\t\t,currentDailyPeriodRevenue: 0\n\t\t\t\t,currentDailyPeriodExpenditures: 0\n\t\t\t\t,forecastedDailyPeriodRevenue: 0\n\t\t\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t\t\t,currentDailyPeriodProfits: 0\n\t\t\t\t,forecastedDailyPeriodProfits: 0\n\t\t\t\t,outstandingDailyPeriodRevenue: 0\n\t\t\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t\t\t,outstandingDailyPeriodProfits: 0\n\n\t\t\t\t,currentDailyRevenue: 0\n\t\t\t\t,currentDailyExpenditures: 0\n\t\t\t\t,forecastedDailyRevenue: 0\n\t\t\t\t,forecastedDailyExpenditures: 0\n\t\t\t\t,currentDailyProfits: 0\n\t\t\t\t,forecastedDailyProfits: 0\n\t\t\t\t,outstandingDailyRevenue: 0\n\t\t\t\t,outstandingDailyExpenditures: 0\n\t\t\t\t,outstandingDailyProfits: 0\n\n\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t,accruedRevenue: 0\n\t\t\t\t,accruedProfits: 0\n\t\t\t\t,accruedDailyRevenue: 0\n\t\t\t\t,accruedDailyExpenditures: 0\n\t\t\t\t,accruedDailyPeriodRevenue: 0\n\t\t\t\t,accruedDailyPeriodExpenditures: 0\n\t\t\t\t,accruedDailyProfits: 0\n\t\t\t\t,accruedDailyPeriodProfits: 0\n\n\t\t\t\t,contractedDailyPeriodProgress: 0\n\t\t\t\t,contractedProgress: 0\n\t\t\t\t,contractedDailyProgress: 0\n\t\t\t\t,budget: 0\n\n\t\t\t}\n\t\t\t, v == 'All Contracts'\n\t\t\t\t? focussedContracts()\n\t\t\t\t: v == 'All Items'\n\t\t\t\t? viewWindowList\n\t\t\t\t: v == 'Make Ledgers'\n\t\t\t\t? R.unnest([selectedInvoiceStats().sInvoices || []])\n\t\t\t\t: R.unnest([selectedInvoiceStats().fInvoices || []])\n\t\t)\n\t)\n\n\tfunction contractIdentical(){\n\n\t\treturn contract() && active\n\t\t\t? [\n\t\t\t\t'organization_id'\n\t\t\t\t,'contract_id'\n\t\t\t\t,'contract_name'\n\t\t\t\t,'contract_description'\n\t\t\t\t,'contract_payment_term'\n\t\t\t\t,'contract_count_invoices'\n\t\t\t\t,'contract_start_date'\n\t\t\t\t,'supplier_id'\n\t\t\t\t,'supplier_name'\n\t\t\t\t,'contract_end_date'\n\t\t\t\t,'contract_terms'\n\n\t\t\t\t,'client_id'\n\t\t\t\t,'client_organization_name'\n\t\t\t\t,'client_incorporation_no'\n\t\t\t\t,'client_email'\n\t\t\t\t,'client_phone'\n\t\t\t\t,'client_address'\n\t\t\t\t,'client_state'\n\t\t\t\t,'client_postcode'\n\n\t\t\t\t,'account_id'\n\t\t\t\t,'account_bsb'\n\t\t\t\t,'account_no'\n\t\t\t\t,'account_bank'\n\t\t\t\t,'account_bic'\n\t\t\t\t,'account_iban'\n\t\t\t\t,'account_swift_code'\n\n\t\t\t].every((a) =>\n\t\t\t\tactive[a]() == contract()[a]\n\t\t\t)\n\t\t\t&& identical(\n\t\t\t\tactive.contract_items()\n\t\t\t\t,contract().contract_items\n\t\t\t)\n\t\t\t: !contract()\n\t\t\t\t? false\n\t\t\t\t: true\n\t}\n\n\n\n\tfunction createReversals(){\n\t\tlet reversal = cloneInvoice(selectedInvoices())\n\t\treversal.forEach((i) => {\n\t\t\ti.invoice_id('')\n\t\t\ti.invoice_amount(\n\t\t\t\ti.invoice_amount() * -1\n\t\t\t)\n\t\t\ti.invoice_service_amount(\n\t\t\t\ti.invoice_service_amount() * -1\n\t\t\t)\n\t\t\ti.invoice_depreciation_amount(\n\t\t\t\ti.invoice_depreciation_amount() * -1\n\t\t\t)\n\t\t\ti.invoice_appreciation_amount(\n\t\t\t\ti.invoice_appreciation_amount() * -1\n\t\t\t)\n\t\t\ti.invoice_damages_amount(\n\t\t\t\ti.invoice_damages_amount() * -1\n\t\t\t)\n\t\t\ti.invoice_received(false)\n\t\t\ti.invoice_approval(false)\n\t\t\ti.invoice_reversal(true)\n\t\t\ti.created = true\n\t\t\ti.invoice_items.map((ii) =>\n\t\t\t\tR.merge(\n\t\t\t\t\tii\n\t\t\t\t\t,{\n\t\t\t\t\t\tinvoice_items_amount: ii.invoice_items_amount * -1\n\t\t\t\t\t\t,invoice_items_received_amount: 0\n\t\t\t\t\t\t,invoice_items_id: ''\n\t\t\t\t\t\t,invoice_id: ''\n\t\t\t\t\t\t,timesheets_id: ii.timesheets_id\n\t\t\t\t\t\t,project_extras_id: ii.project_extras_id\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t})\n\t\troute_view_type('Make Ledgers')\n\t\tselectedInvoices(reversal)\n\t}\n\n\tfunction invoiceIdenticals(){\n\t\treturn !focussedInvoices()\n\t\t|| identical(\n\t\t\tfocussedInvoices()\n\t\t\t,originalInvoices()\n\t\t\t,contractProps\n\t\t)\n\t}\n\n\tfunction saveDisabledInvoices(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t(i) =>\n\t\t\t\tNumber(\n\t\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t) == 0\n\t\t\t\t\t? 'ledger value must not be zero'\n\t\t\t\t\t: ''\n\t\t\t,(i) => !i.project_id()\n\t\t\t\t&& (\n\t\t\t\t\ti.crews_discipline_rates_id\n\t\t\t\t\t|| i.contractor_id\n\t\t\t\t\t|| i.contractprojectid\n\t\t\t\t\t|| i.organizations_disciplines_id\n\t\t\t\t\t|| i.crew_id\n\t\t\t\t)\n\t\t\t\t\t? 'project must be designated'\n\t\t\t\t\t: ''\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t`To save, `\n\t\t\t,' and '\n\t\t\t,''\n\t\t\t, route_view_type() == 'Make Ledgers'\n\t\t\t\t? selectedInvoices() || []\n\t\t\t\t: focussedInvoices() || []\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,[\n\t\t\t\tObject.keys(errors())\n\t\t\t\t.map((a) =>\n\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t: ''\n\t\t\t\t)\n\t\t\t\t.filter((a) => a)\n\t\t\t\t.join(' ')\n\t\t\t]\n\t\t)\n\t}\n\n\n\tconst dateDisabled = function(){\n\t\treturn forecastdateA() > forecastdateB()\n\t\t\t? `Focus dates should be forward flowing `\n\t\t\t\t+ moment(forecastdateA()).format(\"ll\")\n\t\t\t\t+ ' to the '\n\t\t\t\t+ moment(forecastdateB()).format(\"ll\")\n\t\t\t\t+ ' flows backwards.'\n\t\t\t: ''\n\t}\n\n\tconst notCalculated = function(returnBoolean){\n\t\tconst errorArray = [\n\t\t\t() =>\n\t\t\t\t!identical(\n\t\t\t\t\t{\n\t\t\t\t\t\tschedules: focussedEntities()\n\t\t\t\t\t\t\t.map((a) => ({\n\t\t\t\t\t\t\t\tsnv: a.scheduleNameVersion\n\t\t\t\t\t\t\t\t,dReceived: {\n\t\t\t\t\t\t\t\t\tcoalatedSelectedVersion: false\n\t\t\t\t\t\t\t\t\t,possibleContractEntities: false\n\t\t\t\t\t\t\t\t\t,focussedInvoices: false\n\t\t\t\t\t\t\t\t\t,allContractItems: false\n\t\t\t\t\t\t\t\t\t,allContracts: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,schedule_version_id: a.schedule_version_id\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t,dateA: forecastdateA()\n\t\t\t\t\t\t,dateB: forecastdateB()\n\t\t\t\t\t}\n\t\t\t\t\t,recordedFocus()\n\t\t\t\t) && reMapdateChange()\n\t\t\t\t\t? `The focus has changed but hasn't been re-calculated`\n\t\t\t\t\t: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t``\n\t\t\t,''\n\t\t\t,''\n\t\t\t,[true]\n\t\t\t,errorArray\n\t\t\t,returnBoolean\n\t\t\t,false\n\t\t\t,'warning'\n\t\t\t,null\n\t\t\t,[dateDisabled()]\n\t\t)\n\t}\n\n\tconst saveDisabled = function(returnBoolean){\n\t\tconst count = R.countBy(\n\t\t\tchr => typeof chr.contract_name == 'function'\n\t\t\t\t? chr.contract_name()\n\t\t\t\t: chr.contract_name\n\t\t\t,focussedContracts()\n\t\t\t.filter((r) => r.contract_id != active.contract_id())\n\t\t\t.concat(active)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d, prop='contract_name') => !d[prop]() && calculated()\n\t\t\t\t? `Contract Name must not be empty` : null\n\t\t\t,(d, prop='contract_description') => !d[prop]() && calculated()\n\t\t\t\t? `Contract Description must not be empty` : null\n\n\t\t\t,(d, prop='contract_start_date') => !d[prop]() && calculated()\n\t\t\t\t? `Contract Start Date must not be empty` : null\n\t\t\t,(d, prop='contract_end_date') => !d[prop]() && calculated()\n\t\t\t\t? `Contract End Date must not be empty` : null\n\n\t\t\t,(d, prop='contract_name') => count[d[prop]()] > 1 && calculated()\n\t\t\t\t? `Contract Names must not be duplicated` : null\n\t\t]\n\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and '\n\t\t\t\t,''\n\t\t\t\t,[active]\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t,null\n\t\t\t\t,Object.keys(errors())\n\t\t\t\t\t.map((a) =>\n\t\t\t\t\t\terrors()[a]\n\t\t\t\t\t\t\t? a + ' ' + errors()[a]\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tforecastdateA() > forecastdateB()\n\t\t\t\t\t\t\t? `Focus dates should be forward flowing `\n\t\t\t\t\t\t\t\t+ moment(forecastdateA()).format(\"ll\")\n\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t+ moment(forecastdateB()).format(\"ll\")\n\t\t\t\t\t\t\t\t+ ' flows backwards.'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t)\n\t\t\t\t\t.filter((a) => a)\n\t\t)\n\t}\n\n\n\tconst checkContractItem = function(returnBoolean, statistic){\n\t\tconst count = R.countBy(\n\t\t\t(chr) => chr\n\t\t\t\t? chr.contract_items_name()\n\t\t\t\t+ chr.contract_items_description()\n\t\t\t\t: null\n\t\t\t,R.uniqBy(\n\t\t\t\t(a) => a.contract_items_name()\n\t\t\t\t+ a.contract_items_description()\n\t\t\t\t+ a.contract_items_id()\n\t\t\t\t,[].concat(\n\t\t\t\t\tactive.contract_items() || []\n\t\t\t\t\t,R.filter(\n\t\t\t\t\t\t(a) => typeof a != 'string'\n\t\t\t\t\t\t,R.unnest(R.toPairs(checkMultiple()))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t\tconst errorArray = [\n\t\t\t(d, prop='contract_items_name') => !d[prop]()\n\t\t\t\t? `Item Name must not be empty` : null\n\t\t\t,(d, prop='contract_items_description') => !d[prop]()\n\t\t\t\t? `Item Description must not be empty` : null\n\t\t\t,(d) => count[ !d['contract_items_name']() + !d['contract_items_description']() ] > 1\n\t\t\t\t? `Item Name and Description must not be duplicated on different rows`\n\t\t\t\t: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t\t`To save, `\n\t\t\t\t,' and the '\n\t\t\t\t,''\n\t\t\t\t,[].concat(\n\t\t\t\t\tactive.contract_items() || []\n\t\t\t\t\t,R.filter(\n\t\t\t\t\t\t(a) => typeof a != 'string'\n\t\t\t\t\t\t,R.unnest(R.toPairs(checkMultiple()))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t, statistic\n\t\t)\n\t}\n\n\tconst duplicatedContractItem = function(returnBoolean, statistic){\n\t\tconst count =\n\t\t\tR.countBy(\n\t\t\t\t(c) => c.contractrecognitionid\n\t\t\t\t,active.contract_items() || []\n\t\t\t)\n\t\tconst errorArray = [\n\t\t\t(d) => count[d['contractrecognitionid']] > 1\n\t\t\t\t? d.contract_items_name() + ' x ' + count[d['contractrecognitionid']]\n\t\t\t\t: null\n\t\t]\n\t\treturn elements.errorAlert(\n\t\t\t\t``\n\t\t\t\t,', '\n\t\t\t\t,''\n\t\t\t\t,R.uniqBy(\n\t\t\t\t\t(c) => c.contractrecognitionid\n\t\t\t\t\t, active.contract_items() || []\n\t\t\t\t)\n\t\t\t\t,errorArray\n\t\t\t\t,returnBoolean\n\t\t\t\t,false\n\t\t\t\t,'warning'\n\t\t\t\t, statistic\n\t\t)\n\t}\n\n\n\tconst contractItemSelections = asyncMergeAll(\n\t\t[\n\t\t\tbaseItemsList\n\t\t\t,coption\n\t\t\t,active.contract_items\n\t\t]\n\t).map(([, co]) =>\n\t\tco.list().filter((a) =>\n\t\t\t!a.discipline_id\n\t\t\t&& !(a.project_id && !a.discipline_id && a.contract_id && a.contract_id != active.contract_id())\n\t\t\t&& !a.contract_items_id\n\t\t\t&& (co.cname != 'Users' || a.user_id() != 'Unassigned')\n\t\t\t&& (\n\t\t\t\ta.contractor_id\n\t\t\t\t|| a.project_id\n\t\t\t\t|| !a.user_id\n\t\t\t\t|| !a.crew_id\n\t\t\t \t|| !active.contract_items().find((ac) =>\n\t\t\t\t\ta.user_id && ac.user_id == ac.user_id\n\t\t\t\t\t|| a.crew_id && ac.crew_id == ac.crew_id\n\t\t\t\t )\n\t\t\t)\n\t\t)\n\t)\n\n\n\tconst adjustPercenage = (value, dataObject) => {\n\t\tR.map(\n\t\t\t(aitem) =>\n\t\t\t\t[\n\t\t\t\t\t'contract_items_rate'\n\t\t\t\t\t,'contract_items_service'\n\t\t\t\t\t,'contract_items_depreciation'\n\t\t\t\t\t,'contract_items_appreciation'\n\t\t\t\t\t,'contract_items_damages_rate'\n\t\t\t\t\t,'contract_items_budget'\n\t\t\t\t]\n\t\t\t\t.forEach((iRate) => {\n\t\t\t\t\taitem[iRate](\n\t\t\t\t\t\taitem[iRate]() * ( 1 + Number(value/100) )\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t,dataObject\n\t\t)\n\t\tadjustPercenageOption(false)\n\t}\n\n\n\tconst setOptions = function(value, prop, dataObject, forceset){\n\n\t\tconst standard = Array.isArray(dataObject)\n\t\t\t// typeof(dataObject) == 'object'\n\t\t\t? 0\n\t\t\t: Object.keys(dataObject)[0]\n\n\t\tlet dtype = typeof dataObject[standard][prop] == 'function'\n\n\t\tvalue || value == false || value == '' || value == 0 || forceset\n\t\t\t? (\n\t\t\t\tArray.isArray(dataObject)\n\t\t\t\t\t? dataObject\n\t\t\t\t\t: Object.keys(dataObject)\n\t\t\t)\n\t\t\t.forEach( (aitem) => {\n\n\t\t\t\tlet structure =\n\t\t\t\t\tArray.isArray(dataObject)\n\t\t\t\t\t\t? aitem\n\t\t\t\t\t\t: dataObject[aitem]\n\n\n\n\t\t\t\tstructure['created'] = true\n\t\t\t\tdtype ? structure[prop](value) : structure[prop] = value\n\n\t\t\t\tstructure.invoice_type\n\t\t\t\t\t? structure.invoice_type(\n\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\tstructure.invoice_amount() * structure.invoice_rate()\n\t\t\t\t\t\t\t+ structure.invoice_service_amount() * structure.invoice_service_rate()\n\t\t\t\t\t\t\t+ structure.invoice_depreciation_amount() * structure.invoice_depreciation_rate()\n\t\t\t\t\t\t\t+ structure.invoice_appreciation_amount() * structure.invoice_appreciation_rate()\n\t\t\t\t\t\t\t+ structure.invoice_damages_amount() * structure.invoice_damages_rate()\n\t\t\t\t\t\t) > 0\n\t\t\t\t\t\t\t? structure.invoice_received()\n\t\t\t\t\t\t\t\t? 'Receipted Revenue'\n\t\t\t\t\t\t\t\t: 'Accrued Revenue'\n\t\t\t\t\t\t\t: structure.invoice_received()\n\t\t\t\t\t\t\t\t? 'Receipted Expenditure'\n\t\t\t\t\t\t\t\t: 'Accrued Expenditure'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: null\n\n\t\t\t})\n\t\t\t: null\n\n\t\treturn dtype ? dataObject[standard][prop]() : dataObject[standard][prop]\n\t}\n\n\n\tfunction uploadmetadata({only}){\n\t\treturn R.pickBy(\n\t\t\t(a, k) => a && (!only || !Object.keys(only).length || (only && only[k]) || k == 'user_id' || k == 'organization_id')\n\t\t\t,{\n\t\t\t\torganization_id: data.initiateContractFetch().organization_id\n\t\t\t\t, user_id: data.auth.stream().user_id\n\t\t\t\t, invoice_id: R.last(selectedInvoices() || {}).invoice_id()\n\t\t\t}\n\t\t)\n\t}\n\n\n\tconst detailPaneInputs = function(){\n\n\n\t\tconst contractDetails = function(){\n\n\t\t\tconst nameProp =\n\t\t\t\troute_view_type() == 'All Items'\n\t\t\t\t\t? 'contractrecognitionname'\n\t\t\t\t\t: 'contract_name'\n\n\t\t\tconst descriptionProp =\n\t\t\t\troute_view_type() == 'All Items'\n\t\t\t\t\t? 'contractrecognitiondescription'\n\t\t\t\t\t: 'contract_description'\n\n\t\t\tconst SelectedValue =\n\t\t\t\tR.reduce(\n\t\t\t\t\taccumulator\n\t\t\t\t\t,{\n\t\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t\t,currentDailyPeriodRevenue: 0\n\t\t\t\t\t\t,currentDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,forecastedDailyPeriodRevenue: 0\n\t\t\t\t\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,currentDailyPeriodProfits: 0\n\t\t\t\t\t\t,forecastedDailyPeriodProfits: 0\n\t\t\t\t\t\t,outstandingDailyPeriodRevenue: 0\n\t\t\t\t\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,outstandingDailyPeriodProfits: 0\n\t\t\t\t\t\t,currentDailyRevenue: 0\n\t\t\t\t\t\t,currentDailyExpenditures: 0\n\t\t\t\t\t\t,forecastedDailyRevenue: 0\n\t\t\t\t\t\t,forecastedDailyExpenditures: 0\n\t\t\t\t\t\t,currentDailyProfits: 0\n\t\t\t\t\t\t,forecastedDailyProfits: 0\n\t\t\t\t\t\t,outstandingDailyRevenue: 0\n\t\t\t\t\t\t,outstandingDailyExpenditures: 0\n\t\t\t\t\t\t,outstandingDailyProfits: 0\n\t\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t\t,accruedDailyRevenue: 0\n\t\t\t\t\t\t,accruedDailyExpenditures: 0\n\t\t\t\t\t\t,accruedDailyPeriodRevenue: 0\n\t\t\t\t\t\t,accruedDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,accruedDailyProfits: 0\n\t\t\t\t\t\t,accruedDailyPeriodProfits: 0\n\t\t\t\t\t\t,contractedProgress: 0\n\t\t\t\t\t\t,contractedDailyProgress: 0\n\t\t\t\t\t\t,contractedDailyPeriodProgress: 0\n\t\t\t\t\t\t,budget: 0\n\t\t\t\t\t}\n\t\t\t\t\t, R.filter(\n\t\t\t\t\t\t(a) => typeof a != 'string'\n\t\t\t\t\t\t,R.unnest(R.toPairs(checkMultipleContracts()))\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\treturn [\n\n\t\t\t\telements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Name')\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t.map( (c) =>\n\t\t\t\t\t\t\tcheckMultipleContracts()[c][nameProp]\n\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t+ checkMultipleContracts()[c][descriptionProp]\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('h4','Statistics - ')\n\t\t\t\t\t,invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t? ` ... `\n\t\t\t\t\t: m('a'\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\thref: route_view_type() == 'All Items'\n\t\t\t\t\t\t\t\t? \t\t\t\t\t\t\t\t\t'/data/contracts/contractitems/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t+ \t\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t\t.map( (c) =>\n\t\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c]\n\t\t\t\t\t\t\t\t\t\t\t['contractrecognitionid']\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.join(',')\n\n\n\t\t\t\t\t\t\t\t: \t\t\t\t\t\t\t\t\t'/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t+ \t\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c]\n\t\t\t\t\t\t\t\t\t\t\t['contract_id']\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.join(',')\n\n\n\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t.every( c => checkMultipleContracts()[c]['invoicecount'] == 0 )\n\t\t\t\t\t\t\t\t|| invoiceDataLoading()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, R.sum(\n\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t.map((c) => checkMultipleContracts()[c]['invoicecount'] || 0)\n\t\t\t\t\t\t) + ' Ledgers'\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(SelectedValue, 'Revenue', dailyAverage, null, '', false, {})\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(SelectedValue, 'Expenditures', dailyAverage, null, '', false, {})\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(SelectedValue, 'Profits', dailyAverage, null, '', true, {})\n\t\t\t\t,m('br')\n\n\t\t\t\t,route_view_type() == 'All Items'\n\t\t\t\t? null\n\t\t\t\t: [\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('label.control-label', 'Absorb similar rates from')\n\t\t\t\t\t\t,m( Pencil,\n\t\t\t\t\t\t\t() => donerContract()\n\t\t\t\t\t\t\t\t? donerContract().contract_name\n\t\t\t\t\t\t\t\t: ' ...'\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\t\tcontracts\n\t\t\t\t\t\t\t\t\t\t,donerContract\n\t\t\t\t\t\t\t\t\t\t,'contract_name'\n\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t\t,width: '12em'\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t,title:\n\t\t\t\t\t\t\t\t\t\t\t\t'Absorb similiar rates from another Contract, '\n\t\t\t\t\t\t\t\t\t\t\t\t+'matched based on similiar item descriptions'\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('button.btn.btn-secondary'\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\ttitle: 'Absorb rates from another contract'\n\t\t\t\t\t\t\t\t\t\t\t,disabled: !donerContract()\n\t\t\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,onmousedown: () => {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst itemsIndex =\n\t\t\t\t\t\t\t\t\t\t\t\t\tR.groupBy(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tR.prop('contractrecognitiondescription')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.unnest(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map((c) => checkMultipleContracts()[c].contract_items )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(itemsIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t.forEach((c) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst donerItem =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdonerContract()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.contract_items\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.find((a) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ta.contractrecognitiondescription\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t== c\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t!donerItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: itemsIndex[c]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach((ri) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'contract_items_damages_period'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_recorded_reference'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_service'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_appreciation'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_damages_rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_depreciation'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_budget'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach((p) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tri['created'] =true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tri[p]( donerItem[p]() )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\t\t\tdonerContract(null)\n\t\t\t\t\t\t\t\t\t\t\t\tsendContracts(\n\t\t\t\t\t\t\t\t\t\t\t\t\tR.filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(a) => typeof a != 'string'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,R.unnest(R.toPairs(checkMultipleContracts()))\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, 'Absorb'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('button.btn.btn-secondary'\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: 'Consolidate multiple contracts'\n\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts()).length <= 1\n\t\t\t\t\t\t\t\t\t|| checkMultipleContracts()[null]\n\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,onmousedown: () => {\n\n\t\t\t\t\t\t\t\t\tconst uContract = checkMultipleContracts()[Object.keys(checkMultipleContracts())[0]]\n\t\t\t\t\t\t\t\t\tconst newContractId = uContract.contract_id\n\n\t\t\t\t\t\t\t\t\tconst newStartDateArray = []\n\t\t\t\t\t\t\t\t\tconst newFinishDateArray = []\n\n\t\t\t\t\t\t\t\t\tconst allContractItems =\n\t\t\t\t\t\t\t\t\t\tR.unnest(\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t\t\t.map((c) => {\n\t\t\t\t\t\t\t\t\t\t\t\tnewStartDateArray.push(new Date(checkMultipleContracts()[c].contract_start_date).getTime())\n\t\t\t\t\t\t\t\t\t\t\t\tnewFinishDateArray.push(new Date(checkMultipleContracts()[c].contract_end_date).getTime())\n\t\t\t\t\t\t\t\t\t\t\t\treturn checkMultipleContracts()[c].contract_items\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\tuContract.contract_end_date =\n\t\t\t\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\t\t\t\tR.filter(R.identity)\n\t\t\t\t\t\t\t\t\t\t\t,R.sort(R.identity)\n\t\t\t\t\t\t\t\t\t\t\t,R.last\n\t\t\t\t\t\t\t\t\t\t\t,R.tap(\n\t\t\t\t\t\t\t\t\t\t\t\t(x) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst parsed = new Date(x)\n\t\t\t\t\t\t\t\t\t\t\t\t\tparsed.setMinutes( + parsed.getTimezoneOffset() )\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn x = parsed.getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)(newFinishDateArray)\n\n\n\t\t\t\t\t\t\t\t\tuContract.contract_start_date =\n\t\t\t\t\t\t\t\t\t\tR.pipe(\n\t\t\t\t\t\t\t\t\t\t\tR.filter(R.identity)\n\t\t\t\t\t\t\t\t\t\t\t,R.sort(R.identity)\n\t\t\t\t\t\t\t\t\t\t\t,R.reverse\n\t\t\t\t\t\t\t\t\t\t\t,R.last\n\t\t\t\t\t\t\t\t\t\t\t,R.tap(\n\t\t\t\t\t\t\t\t\t\t\t\t(x) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst parsed = new Date(x)\n\t\t\t\t\t\t\t\t\t\t\t\t\tparsed.setMinutes( + parsed.getTimezoneOffset() )\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn x = parsed.getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)(newStartDateArray)\n\n\n\t\t\t\t\t\t\t\t\tdelete checkMultipleContracts()[newContractId]\n\n\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts())\n\t\t\t\t\t\t\t\t\t.forEach((c) => {\n\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c].contract_items\n\t\t\t\t\t\t\t\t\t\t.forEach((ci) => {\n\t\t\t\t\t\t\t\t\t\t\tci.contract_id(newContractId)\n\t\t\t\t\t\t\t\t\t\t\tci.contract_items_id('')\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\tuContract.contract_items = allContractItems\n\n\t\t\t\t\t\t\t\t\treturn sendContracts([uContract])\n\t\t\t\t\t\t\t\t\t.then(function(){\n\t\t\t\t\t\t\t\t\t\treturn deleteContract()\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Unify'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('label', ` Contracts `)\n\t\t\t\t\t])\n\t\t\t\t\t,m(\n\t\t\t\t\t\t'label'\n\t\t\t\t\t\t,`Unifying contracts will consolidate all contract items into a main contract\n\t\t\t\t\t\tand extend the main contracts terms to the earliest and latest dates of the existing contracts`\n\t\t\t\t\t)\n\t\t\t\t]\n\t\t\t]\n\t\t}\n\n\t\tconst contractItemsDetails = function(){\n\n\t\t\tconst SelectedValue =\n\t\t\t\tR.reduce(\n\t\t\t\t\taccumulator\n\t\t\t\t\t,{\n\t\t\t\t\t\tcurrentRevenue: 0\n\t\t\t\t\t\t,currentExpenditures: 0\n\t\t\t\t\t\t,currentProfits: 0\n\t\t\t\t\t\t,forecastedRevenue: 0\n\t\t\t\t\t\t,forecastedExpenditures: 0\n\t\t\t\t\t\t,forecastedProfits: 0\n\t\t\t\t\t\t,outstandingRevenue: 0\n\t\t\t\t\t\t,outstandingExpenditures: 0\n\t\t\t\t\t\t,outstandingProfits: 0\n\t\t\t\t\t\t,currentDailyPeriodRevenue: 0\n\t\t\t\t\t\t,currentDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,forecastedDailyPeriodRevenue: 0\n\t\t\t\t\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,currentDailyPeriodProfits: 0\n\t\t\t\t\t\t,forecastedDailyPeriodProfits: 0\n\t\t\t\t\t\t,outstandingDailyPeriodRevenue: 0\n\t\t\t\t\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,outstandingDailyPeriodProfits: 0\n\t\t\t\t\t\t,currentDailyRevenue: 0\n\t\t\t\t\t\t,currentDailyExpenditures: 0\n\t\t\t\t\t\t,forecastedDailyRevenue: 0\n\t\t\t\t\t\t,forecastedDailyExpenditures: 0\n\t\t\t\t\t\t,currentDailyProfits: 0\n\t\t\t\t\t\t,forecastedDailyProfits: 0\n\t\t\t\t\t\t,outstandingDailyRevenue: 0\n\t\t\t\t\t\t,outstandingDailyExpenditures: 0\n\t\t\t\t\t\t,outstandingDailyProfits: 0\n\t\t\t\t\t\t,accruedExpenditures: 0\n\t\t\t\t\t\t,accruedRevenue: 0\n\t\t\t\t\t\t,accruedProfits: 0\n\t\t\t\t\t\t,accruedDailyRevenue: 0\n\t\t\t\t\t\t,accruedDailyExpenditures: 0\n\t\t\t\t\t\t,accruedDailyPeriodRevenue: 0\n\t\t\t\t\t\t,accruedDailyPeriodExpenditures: 0\n\t\t\t\t\t\t,accruedDailyProfits: 0\n\t\t\t\t\t\t,accruedDailyPeriodProfits: 0\n\t\t\t\t\t\t,contractedProgress: 0\n\t\t\t\t\t\t,contractedDailyProgress: 0\n\t\t\t\t\t\t,contractedDailyPeriodProgress: 0\n\t\t\t\t\t\t,budget: 0\n\t\t\t\t\t}\n\t\t\t\t\t,R.filter(\n\t\t\t\t\t\t(a) => typeof a != 'string'\n\t\t\t\t\t\t,R.unnest(R.toPairs(checkMultiple()))\n\t\t\t\t\t)\n\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\tallContractItemsIndexByContractItemId()\n\t\t\t\t\t\t[c.contract_items_id()]\n\t\t\t\t\t)\n\t\t\t\t\t.filter((c) => c )\n\t\t\t\t)\n\n\n\t\t\treturn !Object.keys(checkMultiple()).length\n\t\t\t\t? null\n\t\t\t\t: [\n\n\t\t\t\t\tcheckContractItem(\n\t\t\t\t\t\tfalse\n\t\t\t\t\t\t, [\n\t\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\t\tm('h4','Statistics - ')\n\t\t\t\t\t\t\t\t,invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t\t\t: m('a'\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t\t\t+ contract().contract_id\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t\t\t+ \t\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t\t.map( (c) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tcheckMultiple()[c]\n\t\t\t\t\t\t\t\t\t\t\t\t\t['contract_items_id']()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t.join(',')\n\n\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t\t.every( c => c.invoicecount == 0 )\n\t\t\t\t\t\t\t\t\t\t\t|| invoiceDataLoading()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,R.sum(\n\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple())\n\t\t\t\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\t\t\t\t(allContractItemsIndexByContractItemId()\n\t\t\t\t\t\t\t\t\t\t\t[checkMultiple()[c].contract_items_id()] || {'invoicecount': 0})\n\t\t\t\t\t\t\t\t\t\t\t['invoicecount']\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) + ' Ledgers'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(SelectedValue, 'Revenue', dailyAverage, null, '', false, {})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(SelectedValue, 'Expenditures', dailyAverage, null, '', false, {})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(SelectedValue, 'Profits', dailyAverage, null, '', true, {})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.checkbox(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t\t'checked'\n\t\t\t\t\t\t\t\t\t, Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_applied', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_applied\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,checked: activeItem().contract_items_applied()\n\t\t\t\t\t\t\t\t,title: \"Will be calculated in forecasts\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t,m('p.pv1.ma0', 'Applied to Forecasts')\n\t\t\t\t\t])\n\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\teditInvoicePermissions()\n\t\t\t\t\t\t\t? m('button.btn.btn-secondary', {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\tselectedInvoices(\n\t\t\t\t\t\t\t\t\t\t\tcloneInvoice(\n\t\t\t\t\t\t\t\t\t\t\t\tcheckMultiple()\n\t\t\t\t\t\t\t\t\t\t\t\t,data.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t,active\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\troute_view_type('Make Ledgers')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple()).length == 0\n\t\t\t\t\t\t\t\t\t\t|| Object.keys(checkMultiple()).some((i) =>\n\t\t\t\t\t\t\t\t\t\t\t!checkMultiple()[i].contract_items_id()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t|| !calculated()\n\t\t\t\t\t\t\t\t\t\t|| !editInvoicePermissions()\n\t\t\t\t\t\t\t\t\t\t|| !contractIdentical()\n\n\t\t\t\t\t\t\t\t\t, title: \"Make a ledger for the selected items\"\n\t\t\t\t\t\t\t\t\t, style: {\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t, height: '2.5em'\n\t\t\t\t\t\t\t\t\t\t, width: '8.5em'\n\t\t\t\t\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Make Ledgers'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,!contractIdentical()\n\t\t\t\t\t\t\t? ' - Save prior to Invoicing'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Item Name'\n\t\t\t\t\t\t\t,Object.keys(checkMultiple())\n\t\t\t\t\t\t\t.map( (c) =>\n\t\t\t\t\t\t\t\t!checkMultiple()[c]['contract_items_id']()\n\t\t\t\t\t\t\t\t? checkMultiple()[c]['contract_items_name']()\n\t\t\t\t\t\t\t\t: \t\t\t\t\t\t\t\t\tcheckMultiple()[c]['contract_items_name']()\n\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t+ checkMultiple()[c]['contract_items_description']()\n\t\t\t\t\t\t\t\t\t+ ' - '\n\t\t\t\t\t\t\t\t\t+ checkMultiple()[c]['contract_items_client_reference']()\n\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0', elements.plainTxt(s) ))\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Item Description')\n\t\t\t\t\t\t, m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_description()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_description', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_description\n\t\t\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Client Reference')\n\t\t\t\t\t\t, m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_client_reference()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\tObject.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_client_reference', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_client_reference\n\t\t\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' ,'Adjust Rates by ')\n\t\t\t\t\t\t,adjustPercenageOption()\n\t\t\t\t\t\t\t? m(\n\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Rate Adjustment'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\tprop: adjustPercenageValue\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t,m('button.btn.btn', {\n\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\tadjustPercenageOption()\n\t\t\t\t\t\t\t\t\t? adjustPercenage(adjustPercenageValue(), checkMultiple())\n\t\t\t\t\t\t\t\t\t: adjustPercenageOption(true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, adjustPercenageOption()\n\t\t\t\t\t\t\t? 'Adjust'\n\t\t\t\t\t\t\t: 'Percentage'\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' , 'Item Rate $/UoM')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_rate()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Item Rate/UoM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_rate', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_rate\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: activeItem().modules_id\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\telements.selectbuttons(\n\t\t\t\t\t\t\t['Expenditure', 'Revenue']\n\t\t\t\t\t\t\t,(a) => {\n\t\t\t\t\t\t\t\tif(a){\n\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t!= (\n\t\t\t\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t'contract_items_rate'\n\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_service'\n\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_depreciation'\n\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_appreciation'\n\t\t\t\t\t\t\t\t\t\t\t\t,'contract_items_damages_rate'\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((r) => checkMultiple()[Object.keys(checkMultiple())[0]][r]())\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t<= 0\n\t\t\t\t\t\t\t\t\t\t? 'Expenditure'\n\t\t\t\t\t\t\t\t\t\t: 'Revenue'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t? adjustPercenage(-200, checkMultiple())\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,{title: `Switch rates to deductions or additions`}\n\t\t\t\t\t\t\t,(notReq, a) =>\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tR.sum(\n\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t'contract_items_rate'\n\t\t\t\t\t\t\t\t\t\t\t,'contract_items_service'\n\t\t\t\t\t\t\t\t\t\t\t,'contract_items_depreciation'\n\t\t\t\t\t\t\t\t\t\t\t,'contract_items_appreciation'\n\t\t\t\t\t\t\t\t\t\t\t,'contract_items_damages_rate'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((r) => checkMultiple()[Object.keys(checkMultiple())[0]][r]())\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t<= 0\n\t\t\t\t\t\t\t\t\t? 'Expenditure'\n\t\t\t\t\t\t\t\t\t: 'Revenue'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t== a\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,hiddenItemData()['contract_items_service']\n\t\t\t\t\t? null\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' ,'Servicing Rate $/UoM')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_service()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Servicing Rate/UoM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_service', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_service\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,hiddenItemData()['contract_items_depreciation']\n\t\t\t\t\t? null\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Depreciation Rate $/UoM')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_depreciation()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Depreciation Rate/UoM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_depreciation', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_depreciation\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,hiddenItemData()['contract_items_appreciation']\n\t\t\t\t\t? null\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' ,'Appreciation Rate $/UoM')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_appreciation()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Appreciation Rate/UoM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_appreciation', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_appreciation\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,hiddenItemData()['contract_items_damages_rate']\n\t\t\t\t\t? null\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' ,'Damages Rate UoM/Day $')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_damages_rate()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Damages Rate UoM/Day'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_damages_rate', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_damages_rate\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' ,'Damages Exemption Period (Days)')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_damages_period()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Damages Exemption Period (Days)'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_damages_period', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_damages_period\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1' , 'Item Budget $/UoM')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => activeItem().contract_items_budget()\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Item Budget/UoM'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_budget', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_budget\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: false\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\t\t\t\t\t,Object.keys(checkMultiple()).length\n\t\t\t\t\t&& Object.keys(checkMultiple())\n\t\t\t\t\t.every((k) =>\n\t\t\t\t\t\tcheckMultiple()[k].user_id\n\t\t\t\t\t\t|| checkMultiple()[k].crew_id\n\t\t\t\t\t)\n\t\t\t\t\t? [\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1'\n\t\t\t\t\t\t\t\t,'Reference'\n\t\t\t\t\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t\t\t\t\t['Timesheets', 'Contract Days']\n\t\t\t\t\t\t\t\t\t,(v) => {\n\t\t\t\t\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\t\t\t\t\tsetOptions(v, 'contract_items_recorded_reference', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\tv == 'Timesheets'\n\t\t\t\t\t\t\t\t\t\t\t\t? setOptions('Per Hour', 'contract_items_uom', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t\t: setOptions('Per Day', 'contract_items_uom', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,{ disabled: false\n\t\t\t\t\t\t\t\t\t, title: \"Quantification of hours or days used to evaluate forecasts and actual expense\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,(notReq, v) => activeItem().contract_items_recorded_reference() == v\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,`A Timesheet operation will only apply this rate to timesheets captured specifically for projects that belong to this contract (Casual Employees).\n\t\t\t\t\t\tA Contract Days operation will apply this rate to any timesheet for this entity, including those not connected to projects outside of this contract (Full Time Employees)`\n\t\t\t\t\t]\n\t\t\t\t\t: null\n\n\t\t\t\t\t,activeItem().contract_items_recorded_reference()\n\t\t\t\t\t!= 'Timesheets'\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1' , 'Standard Day')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => activeItem().contract_items_recorded_reference_standard()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Standard Day'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t\t\t\t\t\t\t\t? (value) => setOptions(value, 'contract_items_recorded_reference_standard', checkMultiple())\n\t\t\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_recorded_reference_standard\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t\t,disabled: false\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t]\n\t\t}\n\n\n\t\tconst invoiceItemsDetails = function(){\n\n\t\t\tconst noamountedits = selectedInvoices().some((i) => i.invoice_items.length)\n\t\t\treturn [\n\n\t\t\t\tm('br')\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('h4','Statistics')\n\t\t\t\t\t,reCalculateButton({spinner: false, forcereroute: true})\n\t\t\t\t\t// ,StatisticOptions()\n\t\t\t\t])\n\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(selectedInvoiceStats().sInvoices, 'Revenue', dailyAverage, null, '', false, {})\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(selectedInvoiceStats().sInvoices, 'Expenditures', dailyAverage, null, '', false, {})\n\t\t\t\t,m('br')\n\t\t\t\t,renderSummary(selectedInvoiceStats().sInvoices, 'Profits', dailyAverage, null, '', true, {})\n\t\t\t\t,m('br')\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Invoice Name | Ref | Approved | Received')\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t.map( (si, sindex) =>\n\t\t\t\t\t\t\tsindex + 1\n\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t+ si.invoice_name()\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ si.invoice_no()\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ (si.invoice_inv_id() || '')\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\tsi.invoice_approval()\n\t\t\t\t\t\t\t\t\t? 'APPROVED'\n\t\t\t\t\t\t\t\t\t: 'DECLINED'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\tsi.invoice_received()\n\t\t\t\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t\t\t\t: 'No'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\t\t\t\t])\n\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Payment Type | Recipient | Approval By')\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t.map( (si, sindex) =>\n\t\t\t\t\t\t\tsindex + 1\n\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t+ si.invoice_type()\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ (si.supplier_name() || `Unassigned`)\n\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\tusers().find((u) => u.user_id() == si.invoice_approver() )\n\t\t\t\t\t\t\t\t|| nullUser\n\t\t\t\t\t\t\t).usersFullName\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\t\t\t\t])\n\n\t\t\t\t/* eslint-disable */\n\t\t\t\t,!invoicesapproved()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Approval By')\n\t\t\t\t\t\t, m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => selectedInvoices().length == 1\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\tusers().find((u) => u.user_id() == selectedInvoices()[0].invoice_approver() )\n\t\t\t\t\t\t\t\t\t|| nullUser\n\t\t\t\t\t\t\t\t).usersFullName\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tusers\n\t\t\t\t\t\t\t\t\t, (v) => {\n\n\t\t\t\t\t\t\t\t\t\tif (v){\n\n\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tv.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_approver'\n\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_approval'\n\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst firstUser = users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t== selectedInvoices()[0].invoice_approver()\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t\t\t\t\t? v.usersFullName\n\t\t\t\t\t\t\t\t\t\t\t: firstUser\n\t\t\t\t\t\t\t\t\t\t\t\t? firstUser.usersFullName\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,'usersFullName'\n\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Invoice Date')\n\t\t\t\t\t,selectedInvoices().some((i) => i.invoice_approval())\n\t\t\t\t\t? elements.alert(`warning`, `The invoice date on approved invoices cannot be changed`)\n\t\t\t\t\t: m.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tselectedInvoices()[0].invoice_date()\n\t\t\t\t\t\t\t? moment( selectedInvoices()[0].invoice_date() || 0 ).format(\"ll\")\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t\t\t, 'invoice_date'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Date of invoice creation \"\n\t\t\t\t\t\t\t\t\t\t,mindate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t!calculated()\n\t\t\t\t\t\t\t\t\t\t\t|| savingProp()\n\t\t\t\t\t\t\t\t\t\t\t|| selectedInvoices().some((i) => i.invoice_approval())\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Due Date')\n\t\t\t\t\t,m.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tselectedInvoices()[0].invoice_due_date()\n\t\t\t\t\t\t\t? moment( selectedInvoices()[0].invoice_due_date() || 0 ).format(\"ll\")\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t\t\t, 'invoice_due_date'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Payment due date \"\n\t\t\t\t\t\t\t\t\t\t,mindate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,elements.list([\n\t\t\t\t\tm('label.control-label.mb1', 'Received Date')\n\t\t\t\t\t,m.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tselectedInvoices()[0].invoice_received_date()\n\t\t\t\t\t\t\t? moment( selectedInvoices()[0].invoice_received_date() ).format(\"ll\")\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\n\t\t\t\t\t\t\t\telements.dateCheckbox({\n\t\t\t\t\t\t\t\t\tlabel: ''\n\t\t\t\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\t\t\t\ttitle: 'Received payment date'\n\t\t\t\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t\t\t\t(a) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif( a ){\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn selectedInvoices()[0].invoice_received_date()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\t\t\ttitle: \"Received payment date \"\n\t\t\t\t\t\t\t\t\t\t\t,maxdate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,attrs:{\n\t\t\t\t\t\t\t\t\t\ttitle: 'Set ledger to be receipted'\n\t\t\t\t\t\t\t\t\t\t, prop: selectedInvoices()[0].invoice_received\n\t\t\t\t\t\t\t\t\t\t, checked: selectedInvoices()[0].invoice_received_date()\n\t\t\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\t\t\t\tif( e ){\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'receipting'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treceiptedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocussedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& i.created\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'receipting'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treceiptedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocussedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& i.created\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,!invoicesReceipted()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Recipient')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => selectedInvoices().length == 1\n\t\t\t\t\t\t\t\t\t? selectedInvoices()[0].supplier_name()\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tSupplierEntities\n\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\tv.contractrecognitionname\n\t\t\t\t\t\t\t\t\t\t\t, 'supplier_name'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\tv.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t\t, 'supplier_id'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\tdisabled: !SupplierEntities() || SupplierEntities().length == 0\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', `Unable to alter recipients of receipted invoices`)\n\t\t\t\t\t])\n\n\n\t\t\t\t\t/* eslint-enable */\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Description')\n\t\t\t\t\t\t,elements.textInput(\n\t\t\t\t\t\t\t(v) => setOptions(v, 'invoice_description', selectedInvoices())\n\t\t\t\t\t\t\t, {}\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\n\n\t\t\t\t\t/* eslint-disable */\n\t\t\t\t\t,elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', 'Project')\n\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => setOptions(null, 'project_name', selectedInvoices())\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\tprojects\n\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\tv.contractrecognitionname\n\t\t\t\t\t\t\t\t\t\t\t, 'project_name'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\tv.project_id()\n\t\t\t\t\t\t\t\t\t\t\t, 'project_id'\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\tdisabled: projects().length == 0\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t])\n\t\t\t\t\t/* eslint-enable */\n\n\t\t\t\t\t,!invoicesapproved()\n\t\t\t\t\t? [\n\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\tR.none(\n\t\t\t\t\t\t\t\t\t\t\ts => R.pathSatisfies(\n\t\t\t\t\t\t\t\t\t\t\t\tx => x != null\n\t\t\t\t\t\t\t\t\t\t\t\t[s.project_id(), s.contractrecognitionid],\n\t\t\t\t\t\t\t\t\t\t\t\tmultiplierIndex()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\t\t\tselectedInvoices().forEach((s) => {\n\n\t\t\t\t\t\t\t\t\t\t\tconst rateMulitplierName =\n\n\t\t\t\t\t\t\t\t\t\t\t\ts.crews_discipline_rates_id\n\t\t\t\t\t\t\t\t\t\t\t\t? 'disciplines_contractors_crews_contract_multiplier'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'discipline_contract_multiplier'\n\n\t\t\t\t\t\t\t\t\t\t\tconst rateMultiplier =\n\t\t\t\t\t\t\t\t\t\t\t\t!s.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t|| R.pathSatisfies(\n\t\t\t\t\t\t\t\t\t\t\t\t\tx => x != null\n\t\t\t\t\t\t\t\t\t\t\t\t\t[s.project_id(), s.contractrecognitionid],\n\t\t\t\t\t\t\t\t\t\t\t\t\tmultiplierIndex()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: multiplierIndex()\n\t\t\t\t\t\t\t\t\t\t\t\t\t[s.project_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t\t[s.contractrecognitionid]\n\t\t\t\t\t\t\t\t\t\t\t\t\t[rateMulitplierName]()\n\n\t\t\t\t\t\t\t\t\t\t\ts.invoice_rate(\n\t\t\t\t\t\t\t\t\t\t\t\ts.invoice_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ts.invoice_service_rate(\n\t\t\t\t\t\t\t\t\t\t\t\ts.invoice_service_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ts.invoice_depreciation_rate(\n\t\t\t\t\t\t\t\t\t\t\t\ts.invoice_depreciation_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ts.invoice_appreciation_rate(\n\t\t\t\t\t\t\t\t\t\t\t\ts.invoice_appreciation_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\ts.invoice_damages_rate(\n\t\t\t\t\t\t\t\t\t\t\t\ts.invoice_damages_rate()\n\t\t\t\t\t\t\t\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, title: \"Apply Project and Work Multiplers to these invoices\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,'Apply'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m(`label`, 'Project Rate Multipliers')\n\t\t\t\t\t\t])\n\n\n\t\t\t\t\t\t,elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1', 'Working Rate | Amount')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Working Rate'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,noamountedits\n\t\t\t\t\t\t\t? R.head(selectedInvoices())['invoice_amount']()\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Working Amount'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t\t\t,hiddenInvoiceData()['invoice_service_rate']\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1', 'Service Rate | Amount')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_service_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Service Rate'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_service_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,noamountedits\n\t\t\t\t\t\t\t? R.head(selectedInvoices())['invoice_service_amount']()\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_service_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Service Amount'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_service_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t\t\t, hiddenInvoiceData()['invoice_depreciation_rate']\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1', 'Depreciation Rate | Amount')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_depreciation_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Depreciation Rate'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_depreciation_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,noamountedits\n\t\t\t\t\t\t\t? R.head(selectedInvoices())['invoice_depreciation_amount']()\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_depreciation_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Depreciation Amount'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_depreciation_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t\t\t, hiddenInvoiceData()['invoice_appreciation_rate']\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1', 'Appreciation Rate | Amount')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_appreciation_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Appreciation Rate'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_appreciation_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,noamountedits\n\t\t\t\t\t\t\t? R.head(selectedInvoices())['invoice_appreciation_amount']()\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_appreciation_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Appreciation Amount'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_appreciation_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\n\t\t\t\t\t\t, hiddenInvoiceData()['invoice_damages_rate']\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm('label.control-label.mb1', 'Damages Rate | Amount')\n\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_damages_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Damages Rate'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_damages_rate', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,noamountedits\n\t\t\t\t\t\t\t? R.head(selectedInvoices())['invoice_damages_amount']()\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => setOptions(null, 'invoice_damages_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Damages Amount'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tprop: (v) => setOptions(v, 'invoice_damages_amount', selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t]\n\t\t\t\t\t: elements.list([\n\t\t\t\t\t\tm('label.control-label.mb1', `Unable to alter approved invoices`)\n\t\t\t\t\t])\n\n\t\t\t\t,m('label.control-label.mb1', 'Client Reference')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t.map((si, sindex) =>\n\t\t\t\t\t\t\t\tsindex + 1\n\t\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t\t+ si.invoice_items_client_reference()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s))\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(v) => setOptions(v, 'invoice_items_client_reference', selectedInvoices())\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Reference name for the clients item\"\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,m('label.control-label.mb1', 'Payment Reference')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm.component(\n\t\t\t\t\t\tPencil\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t.map((si, sindex) =>\n\t\t\t\t\t\t\t\tsindex + 1\n\t\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t\t+ si.invoice_client_reference()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s))\n\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t(v) => setOptions(v, 'invoice_client_reference', selectedInvoices())\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\ttitle: \"Payment reference from the client\"\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t])\n\n\t\t\t\t,invoicesReceipted()\n\t\t\t\t\t? elements.list([\n\t\t\t\t\t\tm('button.btn.btn-primary', {\n\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t,onclick: () => {\n\t\t\t\t\t\t\t\tcreateReversals()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 'Create Reversals')\n\t\t\t\t\t])\n\t\t\t\t\t: null\n\n\t\t\t\t,m(HarthUppy, {\n\t\t\t\t\tgetFields: () => uploadmetadata({})\n\t\t\t\t\t, data\n\t\t\t\t\t, listOnly: selectedInvoices().length > 1\n\t\t\t\t})\n\n\t\t\t]\n\t\t}\n\n\n\t\treturn activeItem().contract_items_id\n\t\t\t|| route_view_type() != 'Make Ledgers' && selectedInvoices().length >= 1\n\t\t\t|| Object.keys(checkMultipleContracts()).length > 0\n\t\t\t? [\n\t\t\t\telements.list(\n\t\t\t\t\t[\n\t\t\t\t\t\troute_view_type() == 'All Ledgers'\n\t\t\t\t\t\t? elements.action(\n\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t, sendInvoices\n\t\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t, () => invoiceIdenticals() || saveDisabledInvoices(true)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: route_view_type() != 'All Items'\n\t\t\t\t\t\t? elements.action(\n\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t, sendContracts\n\t\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t, () => saveDisabled(true) || checkContractItem(true) || contractIdentical() || !calculated()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: m(\"button.btn.btn-\"\n\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\tcheckMultipleContracts({})\n\t\t\t\t\t\t\t\t\tallSelected(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Done'\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t\t.concat(\n\n\t\t\t\t\t\tObject.keys(checkMultipleContracts()).length == 0\n\t\t\t\t\t\t? elements.undoDiscard({\n\t\t\t\t\t\t\tdiscard:\n\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts()).length > 0\n\t\t\t\t\t\t\t\t|| !active.contract_items().find((i) => i.key == activeItem().key)\n\t\t\t\t\t\t\t\t&& activeItem().contract_items_name\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tlabel: 'Discard'\n\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\t\tactiveItem().contract_items_name\n\t\t\t\t\t\t\t\t\t\t\t? deletetItem()\n\t\t\t\t\t\t\t\t\t\t\t: deletetInvoices()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t,doneUndo: {\n\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts()).length > 0\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: activeItem().contract_items_name && !activeItem().invoice_id\n\t\t\t\t\t\t\t\t\t\t? contractIdentical() && activeItem().contract_items_id()\n\t\t\t\t\t\t\t\t\t\t: invoiceIdenticals() || saveDisabledInvoices(true)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t? 'Done'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\t\t\t\t\tcheckMultiple({})\n\t\t\t\t\t\t\t\t\t\tactiveItem({})\n\t\t\t\t\t\t\t\t\t\t!donerContract()\n\t\t\t\t\t\t\t\t\t\t\t? checkMultipleContracts({})\n\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\tdonerContract(null)\n\n\t\t\t\t\t\t\t\t\t\troute_contract_id()\n\t\t\t\t\t\t\t\t\t\t? contract(\n\t\t\t\t\t\t\t\t\t\t\tfocussedContracts().find(\n\t\t\t\t\t\t\t\t\t\t\t\t(c) => c.contract_id == route_contract_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\t\t\tdeleteInvoiceItems([])\n\t\t\t\t\t\t\t\t\t\tdeleteContractItems([])\n\t\t\t\t\t\t\t\t\t\tselectedInvoices().length >= 1\n\t\t\t\t\t\t\t\t\t\t\t? focussedInvoices(cloneInvoice(originalInvoices()))\n\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\tselectedInvoices([])\n\t\t\t\t\t\t\t\t\t\tallSelected(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,title: `Discard all changes made to these tools since last saving them`\n\t\t\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\t\t\ttransition: '0.5s'\n\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: route_view_type() == \"All Contracts\"\n\t\t\t\t\t\t? elements.confirmDelete(\n\t\t\t\t\t\t\tdeleteContract\n\t\t\t\t\t\t\t,savingProp\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\tObject.keys(checkMultipleContracts()).length == 0\n\t\t\t\t\t\t\t\t|| checkMultipleContracts()[null]\n\t\t\t\t\t\t\t,deleteStateProp\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\t,activeItem().contract_items_name\n\t\t\t\t&& !activeItem().invoice_id\n\t\t\t\t\t? contractItemsDetails()\n\t\t\t\t\t: selectedInvoices().length >= 1\n\t\t\t\t\t\t? invoiceItemsDetails()\n\t\t\t\t\t\t: Object.keys(checkMultipleContracts()).length > 0\n\t\t\t\t\t\t\t? contractDetails()\n\t\t\t\t\t\t\t: []\n\t\t\t]\n\t\t\t: []\n\t}\n\n\tlet detailsPaneOpen = () =>\n\n\t\tactiveItem().contract_items_name\n\t\t&& Object.keys(checkMultiple()).length >= 1\n\t\t&& route_view_type() != 'Make Ledgers'\n\t\t&& route_view_type() != 'All Ledgers'\n\t\t&& editContractPermissions()\n\n\t\t|| \tselectedInvoices().length >= 1\n\t\t&& route_view_type() != 'Make Ledgers'\n\t\t&& editInvoicePermissions()\n\n\t\t|| Object.keys(checkMultipleContracts()).length >= 1\n\n\n\n\tfunction ListAllContractEntities(){\n\n\t\tconst gotfilters =\n\t\t\tgetfilters(null, \"Cross Contracts\")\n\n\t\tconst processedList =\n\t\t\tListProcessing(\n\t\t\t\tviewWindowList()\n\t\t\t\t, filterFunction.allContractItemFilters.filters()\n\t\t\t\t, ''\n\t\t\t\t,filteredOdinItemOptions\n\t\t\t)\n\n\t\tconst odinItemData =\n\t\t\t(e) =>\n\t\t\t\t({\n\t\t\t\t\t'Name': e.contractrecognitionname\n\t\t\t\t\t,'Description': e.contractrecognitiondescription\n\t\t\t\t\t,'Contracts': e.contractList.join(', ')\n\t\t\t\t\t,'Ledgers': invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t: m('a', {\n\t\t\t\t\t\t\t\thref: '/data/contracts/contractitems/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t+ e.contractrecognitionid\n\n\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t, disabled: e.invoicecount == 0 || invoiceDataLoading()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, e.invoicecount || ''\n\t\t\t\t\t\t)\n\t\t\t\t\t,'Profits': !calculated()\n\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t: makeMoney(e.currentProfits)\n\n\t\t\t\t\t,'Final Billing Date': e.lastCalculatedWorkDate\n\t\t\t\t})\n\n\t\tconst getActivateDeleteButton =\n\t\t\t(c) => {\n\t\t\t\tconst keyref = route_view_type() == 'All Items'\n\t\t\t\t\t? 'key'\n\t\t\t\t\t: 'contract_id'\n\n\t\t\t\treturn editContractPermissions()\n\t\t\t\t? {\n\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked',\n\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\tif ( checked) {\n\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c[keyref]] = c\n\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c[keyref]]['created'] = true\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tdelete checkMultipleContracts()[c[keyref]]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t,checked: checkMultipleContracts()[c[keyref]] || false\n\t\t\t\t\t,disabled: !calculated()\n\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t}\n\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t}\n\n\t\tconst largeOdinItemTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((e, eindex) => ({\n\t\t\t\t\t\tkey: e.key\n\t\t\t\t\t\t,selection: getActivateDeleteButton(e)\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\teindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,viewWindow().join(', ')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1.25fr 1.75fr 1.25fr 0.5fr 0.5fr 1fr\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: odinItemData(e)\n\t\t\t\t\t}))\n\t\t\t})\n\n\t\tconst smallOdinItemTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((e) => ({\n\t\t\t\t\t\tkey: e.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,getActivateDeleteButton(e)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t'Ledgers'\n\t\t\t\t\t\t\t\t\t\t,m('a'\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contractitems/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ e.contractrecognitionid\n\n\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t\t\t\t, disabled: e.invoicecount == 0 || invoiceDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, e.invoicecount || ''\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,makeMoney(e.currentProfits)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 1em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,k\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.5fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2.25em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Name'\n\t\t\t\t\t\t\t\t\t\t\t,'Description'\n\t\t\t\t\t\t\t\t\t\t\t,'Final Billing Date'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == e.contractrecognitionname\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], e.contractrecognitionname].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Contracts'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: odinItemData(e)\n\t\t\t\t\t}))\n\t\t\t})\n\n\n\t\tconst OdinItemTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 900\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeOdinItemTable )\n\t\t\t\t\t,desktopOnly( largeOdinItemTable )\n\t\t\t\t\t,mobileOnly( smallOdinItemTable )\n\t\t\t\t\t,tabletOnly( smallOdinItemTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\treturn [\n\n\t\t\tm('br')\n\t\t\t,!calculated()\n\t\t\t\t? elements.alert('warning', `Calculating the monetary value of ` + viewOptions().join(', ') + ` during focus periods.`)\t\t\t\t: null\n\n\t\t\t,elements.list([gotfilters, contractItemsEditAll()])\n\n\t\t\t,elements.selectbuttons(\n\t\t\t\tviewOptions().map( (a) => a )\n\t\t\t\t,(a) => {\n\t\t\t\t\tif(a){\n\t\t\t\t\t\tlet vIndex = viewWindow().findIndex((v) => v == a )\n\t\t\t\t\t\tlet newList = vIndex >= 0\n\t\t\t\t\t\t\t? viewWindow().filter((s) => s != a )\n\t\t\t\t\t\t\t: viewWindow().concat(a)\n\n\t\t\t\t\t\tif( newList.length ){\n\t\t\t\t\t\t\treMapdateChange(false)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tviewWindow(newList)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,{ title: `Show representative items`}\n\t\t\t\t,( notReq, a ) => viewWindow().find((v) => v == a )\n\t\t\t\t, R.F\n\t\t\t\t, () => !calculated()\n\t\t\t)\n\n\t\t\t,elements.alert(\n\t\t\t\t'warning'\n\t\t\t\t,\n\t\t\t\t`Selecting multiple categories might cause an overlap in summations. `\n\t\t\t\t+ `As an example, the expenditures of a project will include the resource expenditure used for that project.\n\t\t\t\tThe expenditures on a resource will include all expenditures used to complete work across all assigned projects.\n\t\t\t\tHence, if projects and resources are selected togther the expenditure calculation will be duplicated as the\n\t\t\t\texpenditure of one will be a subset of the other.`\n\t\t\t)\n\n\n\t\t\t,metaDataIndexing()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: Object.keys(indexedContractEntities()).length > 0\n\t\t\t\t? OdinItemTable()\n\t\t\t\t: elements.alert(`info`, `Create projects, resources, tools and much more around Odin to track their financial gains`)\n\t\t]\n\t}\n\n\n\tfunction ContractSummaryList(){\n\t\tconst gotfilters =\n\t\t\tgetfilters(null, \"Contract\")\n\n\t\tconst processedList =\n\t\t\tListProcessing(\n\t\t\t\tfocussedContracts()\n\t\t\t\t, filterFunction.contractFilters.filters()\n\t\t\t\t, ''\n\t\t\t)\n\n\t\tconst contractData =\n\t\t\t(c) =>\n\t\t\t\t({\n\t\t\t\t\t'Contract Name':\n\t\t\t\t\t\tm('a'\n\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t+ c.contract_id\n\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t, title: \"Edit a contract\"\n\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\tc.contract_name\n\t\t\t\t\t\t\t\t\t== 'Disconnected Ledgers'\n\t\t\t\t\t\t\t\t\t|| !calculated()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, c.contract_name\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Description':\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumber(c.badcontractcount)\n\t\t\t\t\t\t\t\t? '.dark-red.fw6'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,c.contract_description\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Items' : c.contract_items.length\n\t\t\t\t\t,'Payment Term': c.contract_payment_term\n\t\t\t\t\t,'Ledgers': invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t: m('a', {\n\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t+ c.contract_id\n\n\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t, disabled: c.invoicecount == 0 || invoiceDataLoading()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, c.invoicecount || ''\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Start Date': c.contract_name\n\t\t\t\t\t== 'Disconnected Ledgers'\n\t\t\t\t\t\t? ' - '\n\t\t\t\t\t\t: moment(c.contract_start_date).format(\"ll\")\n\n\t\t\t\t\t,'End Date': c.contract_name\n\t\t\t\t\t== 'Disconnected Ledgers'\n\t\t\t\t\t\t? ' - '\n\t\t\t\t\t\t: moment(c.contract_end_date).format(\"ll\")\n\n\t\t\t\t\t,'':\n\t\t\t\t\t\tm('a', {\n\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/clone/'\n\t\t\t\t\t\t\t\t\t+ c.contract_id\n\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t, title: \"Clone an existing contract\"\n\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\tc.contract_name\n\t\t\t\t\t\t\t\t\t== 'Disconnected Ledgers'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Clone'\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Profits': !calculated()\n\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t: makeMoney(c.currentProfits)\n\t\t\t\t})\n\n\t\tconst getActivateDeleteButton =\n\t\t\t(c) => {\n\n\t\t\t\tconst keyref = route_view_type() == 'All Items'\n\t\t\t\t\t? 'key'\n\t\t\t\t\t: 'contract_id'\n\n\t\t\t\treturn editContractPermissions()\n\t\t\t\t? {\n\t\t\t\t\tonchange: m.withAttr(\n\t\t\t\t\t\t\t\t'checked',\n\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\tif ( checked) {\n\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c[keyref]] = c\n\t\t\t\t\t\t\t\t\t\tcheckMultipleContracts()[c[keyref]]['created'] = true\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tdelete checkMultipleContracts()[c[keyref]]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t,checked: checkMultipleContracts()[c[keyref]] || false\n\t\t\t\t\t,disabled: !calculated()\n\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t}\n\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t}\n\n\t\tconst largeContractTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((c, cindex) => ({\n\t\t\t\t\t\tkey: c.key\n\t\t\t\t\t\t,selection: getActivateDeleteButton(c)\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tcindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m(`a.pl2`\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: transparent;\n\t\t\t\t\t\t\t\t\t\t\ttransition: 0.2s;\n\t\t\t\t\t\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\t\t\t\t\t\tcolor: #434aa3;\n\t\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$hover(`\n\t\t\t\t\t\t\t\t\t\t\topacity: 0.8;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t.$active(`\n\t\t\t\t\t\t\t\t\t\t\topacity: 0.5;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/create/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t, disabled: !editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t\t, title: \"Create a new contract\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t, 'Create a New Contract'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 1.75fr 0.5fr 0.5fr 0.5fr 1fr 1fr 0.75fr 0.75fr\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: contractData(c)\n\t\t\t\t\t}))\n\t\t\t})\n\n\t\tconst smallContractTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((c) => ({\n\t\t\t\t\t\tkey: c.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,getActivateDeleteButton(c)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('a', {\n\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/clone/'\n\t\t\t\t\t\t\t\t\t\t\t+ c.contract_id\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t, title: \"Clone an existing contract\"\n\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\tc.contract_name\n\t\t\t\t\t\t\t\t\t\t\t== 'Disconnected Ledgers'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, 'Clone'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t'Ledgers'\n\t\t\t\t\t\t\t\t\t\t,m('a', {\n\t\t\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ c.contract_id\n\n\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t\t\t\t, disabled: c.invoicecount == 0 || invoiceDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t, c.invoicecount || ''\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,makeMoney(c.currentProfits)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 1em\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,k\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2.25em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['Contract Name', 'Description']\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t, x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,['Items', 'Payment Term', 'Start Date', 'End Date']\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: contractData(c)\n\t\t\t\t\t}))\n\t\t\t})\n\n\n\t\tconst contractTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 900\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeContractTable )\n\t\t\t\t\t,desktopOnly( largeContractTable )\n\t\t\t\t\t,mobileOnly( smallContractTable )\n\t\t\t\t\t,tabletOnly( smallContractTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\treturn [\n\n\n\t\t\tm('br')\n\n\t\t\t,!calculated()\n\t\t\t\t? elements.alert('warning',`Calculating the monetary value of all contracts under the focused criteria`)\n\t\t\t\t: null\n\n\t\t\t,gotfilters\n\t\t\t,m('br')\n\n\t\t\t,loading()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: focussedContracts().length > 0\n\t\t\t\t\t? contractTable()\n\t\t\t\t\t: elements.alert(`info`, `Record some contract information to track contract and payments through the business`)\n\n\t\t]\n\t}\n\n\t// https://harth-technologies.slack.com/archives/D06A569EV/p1578489392069100\n\t// eslint-disable-next-line no-unused-vars\n\tfunction invoiceEditAll(){\n\t\treturn elements.checkbox({\n\t\t\tonchange: () => {\n\n\t\t\t\tallSelected() == true\n\t\t\t\t\t? allSelected(false)\n\t\t\t\t\t: allSelected(true)\n\n\t\t\t\tif ( allSelected() ) {\n\n\t\t\t\t\t(\n\t\t\t\t\t\tfilteredInvoiceOptions().length\n\t\t\t\t\t\t\t? filteredInvoiceOptions()\n\t\t\t\t\t\t\t: focussedInvoices()\n\t\t\t\t\t)\n\t\t\t\t\t.forEach(\n\t\t\t\t\t\t(i, index) => {\n\n\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\tindex == 0 ? activeItem(i) : null\n\n\t\t\t\t\t\t\t!selectedInvoices().find((si) => si.key == i.key )\n\t\t\t\t\t\t\t\t? selectedInvoices().push(i)\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\tselectedInvoices(selectedInvoices())\n\t\t\t\t} else {\n\t\t\t\t\tselectedInvoices([])\n\t\t\t\t\tactiveItem({})\n\t\t\t\t}\n\t\t\t}\n\t\t\t, checked: allSelected()\n\t\t\t, disabled: false\n\t\t\t, title: \"Select all invoice items\"\n\t\t})\n\t}\n\n\tfunction contractItemsEditAll(){\n\t\treturn elements.checkbox({\n\t\t\tonchange: () => {\n\n\t\t\t\tallSelected() == true\n\t\t\t\t\t? allSelected(false)\n\t\t\t\t\t: allSelected(true)\n\n\t\t\t\tconst refarray =\n\t\t\t\t\troute_view_type() == 'All Items'\n\t\t\t\t\t\t? filteredOdinItemOptions\n\t\t\t\t\t\t: filteredContractItemOptions\n\n\t\t\t\tconst refcontainer =\n\t\t\t\t\troute_view_type() == 'All Items'\n\t\t\t\t\t\t? checkMultipleContracts\n\t\t\t\t\t\t: checkMultiple\n\n\t\t\t\tif ( allSelected() ) {\n\t\t\t\t\t(\n\t\t\t\t\t\trefarray().length\n\t\t\t\t\t\t\t? refarray()\n\t\t\t\t\t\t\t: active.contract_items()\n\n\t\t\t\t\t).forEach(\n\t\t\t\t\t\t(ci, index) => {\n\t\t\t\t\t\t\t!refcontainer()[ci.key]\n\t\t\t\t\t\t\t\t? refcontainer()[ci.key] = ci\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\tif(route_view_type() != 'All Items'){\n\t\t\t\t\t\t\t\trefcontainer()[ci.key]['created'] = true\n\t\t\t\t\t\t\t\tindex == 0 ? activeItem(ci) : null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t} else {\n\t\t\t\t\trefcontainer({})\n\t\t\t\t\tactiveItem({})\n\t\t\t\t}\n\t\t\t}\n\t\t\t, checked: allSelected()\n\t\t\t, disabled:\n\t\t\t\t!calculated()\n\t\t\t\t|| !editContractPermissions() && !editInvoicePermissions()\n\t\t\t, title: \"Select all contract items\"\n\t\t})\n\t}\n\n\tconst receiveInvoiceBox =\n\t\t(i) =>\n\t\t\tm.component(\n\t\t\t\tPencil\n\t\t\t\t,() =>\n\t\t\t\t\ti.invoice_received_date()\n\t\t\t\t\t? moment( i.invoice_received_date() ).format(\"ll\")\n\t\t\t\t\t: ''\n\t\t\t\t\t,() =>\n\n\t\t\t\t\t\telements.dateCheckbox({\n\t\t\t\t\t\t\tlabel: ''\n\t\t\t\t\t\t\t,date: {\n\t\t\t\t\t\t\t\ttitle: 'Received payment date'\n\t\t\t\t\t\t\t\t, prop:\n\t\t\t\t\t\t\t\t\t(a) => {\n\t\t\t\t\t\t\t\t\t\tif( a ){\n\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received'\n\t\t\t\t\t\t\t\t\t\t\t\t, [i]\n\t\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\ta\n\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_received_date'\n\t\t\t\t\t\t\t\t\t\t\t\t, [i]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn i.invoice_received_date()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\ttitle: \"Received payment date \"\n\t\t\t\t\t\t\t\t\t,maxdate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,attrs:{\n\t\t\t\t\t\t\t\ttitle: 'Set ledger to be receipted'\n\t\t\t\t\t\t\t\t, prop: i.invoice_received\n\t\t\t\t\t\t\t\t, checked: i.invoice_received_date()\n\t\t\t\t\t\t\t\t, attrs: {\n\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\tm.withAttr('checked', function(e){\n\t\t\t\t\t\t\t\t\t\t\tif( e ){\n\n\t\t\t\t\t\t\t\t\t\t\t\ti.receipting = true\n\t\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received(true)\n\t\t\t\t\t\t\t\t\t\t\t\treceiptedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocussedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& i.created\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received_date(new Date().getTime())\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t\t\t\t\t\ti.receipting = false\n\t\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received(false)\n\t\t\t\t\t\t\t\t\t\t\t\treceiptedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocussedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter((i) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& i.created\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_received_date(null)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t)\n\n\tfunction ListInvoicesPOs(){\n\t\tconst gotfilters =\n\t\t\tgetfilters(null, \"Invoices\")\n\n\t\tconst processedList =\n\t\t\tListProcessing(\n\t\t\t\tfocussedInvoices()\n\t\t\t\t, filterFunction.invoiceFilters.filters()\n\t\t\t\t, ''\n\t\t\t\t, filteredInvoiceOptions\n\t\t\t)\n\n\t\tconst applyProjectMultuplier =\n\t\t\t(i) => {\n\t\t\t\tconst rateMulitplierName =\n\t\t\t\t\ti.crews_discipline_rates_id\n\t\t\t\t\t? 'disciplines_contractors_crews_contract_multiplier'\n\t\t\t\t\t: 'discipline_contract_multiplier'\n\n\t\t\t\tconst rateMultiplier =\n\t\t\t\t\t!i.project_id()\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: multiplierIndex()\n\t\t\t\t\t\t[i.project_id()]\n\t\t\t\t\t\t[i.contractrecognitionid]\n\t\t\t\t\t\t[rateMulitplierName]()\n\n\t\t\t\ti.invoice_rate(\n\t\t\t\t\ti.invoice_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_service_rate(\n\t\t\t\t\ti.invoice_service_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_depreciation_rate(\n\t\t\t\t\ti.invoice_depreciation_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_appreciation_rate(\n\t\t\t\t\ti.invoice_appreciation_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_damages_rate(\n\t\t\t\t\ti.invoice_damages_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t}\n\n\n\t\tconst invoiceData =\n\t\t\t(i) =>\n\t\t\t\tR.reduce(\n\t\t\t\t\t(o, i) => {\n\t\t\t\t\t\thiddenInvoiceData()[i]\n\t\t\t\t\t\t? delete o[\n\t\t\t\t\t\t\ti == 'invoice_service_rate'\n\t\t\t\t\t\t\t? 'Service Value'\n\t\t\t\t\t\t\t: i == 'invoice_depreciation_rate'\n\t\t\t\t\t\t\t? 'Depreciation Value'\n\t\t\t\t\t\t\t: i == 'invoice_appreciation_rate'\n\t\t\t\t\t\t\t? 'Appreciation Value'\n\t\t\t\t\t\t\t: i == 'invoice_damages_rate'\n\t\t\t\t\t\t\t? 'Damages Value'\n\t\t\t\t\t\t\t: i == 'invoice_rate'\n\t\t\t\t\t\t\t? 'Working Value'\n\t\t\t\t\t\t\t: i == 'invoice_type'\n\t\t\t\t\t\t\t? 'Payment Type'\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: null\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,{\n\t\t\t\t\t'Date':\n\t\t\t\t\t\t!editInvoicePermissions() || i.invoice_approval()\n\t\t\t\t\t\t? moment( i.invoice_date() ).format(\"ll\")\n\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => i.invoice_date()\n\t\t\t\t\t\t\t\t? moment( i.invoice_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t(a) => setOptions(a, 'invoice_date', [i])\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Created invoice date \"\n\t\t\t\t\t\t\t\t\t\t,mindate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t,'Due Date':\n\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t? i.invoice_due_date()\n\t\t\t\t\t\t\t? moment( i.invoice_due_date() ).format(\"ll\")\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t,() => i.invoice_due_date()\n\t\t\t\t\t\t\t\t? moment( i.invoice_due_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t(a) => setOptions(a, 'invoice_due_date', [i])\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\ttitle: \"Payment due date \"\n\t\t\t\t\t\t\t\t\t\t,mindate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t,'Description': i.invoice_name()\n\t\t\t\t\t,'Project': i.project_name()\n\t\t\t\t\t,'Payment Ref':\n\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t\t? i.invoice_client_reference()\n\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => i.invoice_client_reference()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\t(a) => setOptions(a, 'invoice_client_reference', [i])\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Payment reference from the client\"\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t,'Working Value': i.invoice_amount() + ' x ' + makeMoney( i.invoice_rate() )\n\t\t\t\t\t,'Service Value': i.invoice_service_amount() + ' x ' + makeMoney( i.invoice_service_rate() )\n\t\t\t\t\t,'Depreciation Value': i.invoice_depreciation_amount() + ' x ' + makeMoney( i.invoice_depreciation_rate() )\n\t\t\t\t\t,'Appreciation Value': i.invoice_appreciation_amount() + ' x ' + makeMoney( i.invoice_appreciation_rate() )\n\t\t\t\t\t,'Damages Value': i.invoice_damages_amount() + ' x ' + makeMoney( i.invoice_damages_rate() )\n\t\t\t\t\t,'Total Amount': makeMoney(\n\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,'Received':\n\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t? !i.invoice_approval()\n\t\t\t\t\t\t\t? 'Approval Required'\n\t\t\t\t\t\t\t: moment( i.invoice_received_date() ).format(\"ll\")\n\t\t\t\t\t\t: !i.invoice_approval()\n\t\t\t\t\t\t? 'Approval Required'\n\t\t\t\t\t\t: receiveInvoiceBox(i)\n\t\t\t\t\t,'Approval':\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t!i.invoice_approver()\n\t\t\t\t\t\t\t|| users().find((u) => u.user_id() == i.invoice_approver() )\n\t\t\t\t\t\t) && !i.invoice_approval()\n\t\t\t\t\t\t\t? elements.checkbox({\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_approval(checked)\n\n\t\t\t\t\t\t\t\t\t\t\tif ( checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_due_date(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ Number(i.contract_payment_term)*milliperday\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_approver() == 'Unassigned'\n\t\t\t\t\t\t\t\t\t\t\t\t|| !i.invoice_approver()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? i.invoice_approver(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,checked: i.invoice_approval()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: !users().find((u) => u.user_id() == i.invoice_approver() )\n\t\t\t\t\t\t\t\t? 'Unassigned'\n\t\t\t\t\t\t\t\t: users().find((u) => u.user_id() == i.invoice_approver() ).usersFullName\n\n\t\t\t\t\t,'Recipient': i.supplier_name()\n\t\t\t\t\t,'Client Ref':\n\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t? i.invoice_items_client_reference()\n\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => i.invoice_items_client_reference()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t(a) => setOptions(a, 'invoice_items_client_reference', [i])\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\ttitle: \"Reference name for the clients item\"\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t,'Ledger Ref No.': i.invoice_no() + '|' + (i.invoice_inv_id() || '')\n\t\t\t\t\t,'Payment Type': i.invoice_type()\n\t\t\t\t\t,'Last Modified': (users().find((u) => u.user_id() == i.user_id()) || nullUser).usersFullName\n\t\t\t\t\t}\n\t\t\t\t\t,[\n\t\t\t\t\t\t'invoice_rate'\n\t\t\t\t\t\t,'invoice_service_rate'\n\t\t\t\t\t\t,'invoice_depreciation_rate'\n\t\t\t\t\t\t,'invoice_appreciation_rate'\n\t\t\t\t\t\t,'invoice_damages_rate'\n\t\t\t\t\t\t,'invoice_type'\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tconst largeInvoiceTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((i, iindex) => ({\n\t\t\t\t\t\tkey: i.key\n\t\t\t\t\t\t,selection:\n\t\t\t\t\t\t\teditInvoicePermissions()\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\t\t\tif ( checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices().concat([i])\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\tactiveItem(i)\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices().splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((si) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsi.invoice_id() == i.invoice_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\tactiveItem(selectedInvoices()[0] || {})\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tselectedInvoices(selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t\t\t.find((selected) =>\n\t\t\t\t\t\t\t\t\t\tselected.key == i.key\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t|| false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tiindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1fr 1.25fr 0.75fr 1fr `\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_service_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_depreciation_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_appreciation_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_damages_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ `1fr 1.5fr 0.75fr 1.25fr 0.75fr 0.75fr `\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_type'] ? `0.75fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ `1fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: invoiceData(i)\n\t\t\t\t\t}))\n\t\t\t})\n\n\t\tconst smallInvoiceTable =\n\t\t\t() =>\n\t\t\t\tscrollableTable.advanced({\n\t\t\t\t\tscoped: data.scoped\n\t\t\t\t\t,resize$: data.resize$\n\t\t\t\t\t,alwaysopen: true\n\t\t\t\t\t,rows:\n\t\t\t\t\t\tprocessedList\n\t\t\t\t\t\t.map((i) => ({\n\t\t\t\t\t\t\tkey: i.key\n\t\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,editInvoicePermissions()\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ( checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices().concat([i])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveItem(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices().splice(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.findIndex((si) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsi.invoice_id() == i.invoice_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveItem(selectedInvoices()[0] || {})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices(selectedInvoices())\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t\t\t\t\t\t\t\t,checked:\n\t\t\t\t\t\t\t\t\t\t\t\tselectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t.find((selected) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected.key == i.key\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t|| false\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {style: {opacity:0} , disabled: true}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t, [i.invoice_inv_id(), i.invoice_no()].filter(Boolean).join('|')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2.25em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t'Date'\n\t\t\t\t\t\t\t\t\t\t\t\t,'Due Date'\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_rate'] ? 'Working Value' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,'Total Amount'\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == i.invoice_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], i.invoice_name()].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t, 'Approval'\n\t\t\t\t\t\t\t\t\t\t\t\t, 'Received'\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t'Recipient'\n\t\t\t\t\t\t\t\t\t\t\t\t, 'Client Ref'\n\t\t\t\t\t\t\t\t\t\t\t\t, 'Project'\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t'Payment Ref'\n\t\t\t\t\t\t\t\t\t\t\t\t,'Project Multipliers'\n\t\t\t\t\t\t\t\t\t\t\t\t,'Last Modified'\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Project Multipliers'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!i.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| i.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !multiplierIndex()[i.project_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| !multiplierIndex()[i.project_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[i.contractrecognitionid]\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, onclick: () => applyProjectMultuplier(i)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t, title: \"Apply Project and Work Multiplers to this invoices\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,'Apply'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t!hiddenInvoiceData()['invoice_service_rate'] ? 'Service Value' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_depreciation_rate'] ? 'Depreciation Value' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_appreciation_rate'] ? 'Appreciation Value' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_damages_rate'] ? 'Damages Amount Value' : ''\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,data: invoiceData(i)\n\t\t\t\t\t\t}))\n\t\t\t\t})\n\n\n\t\tconst invoiceTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 1800\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeInvoiceTable )\n\t\t\t\t\t,desktopOnly( largeInvoiceTable )\n\t\t\t\t\t,mobileOnly( smallInvoiceTable )\n\t\t\t\t\t,tabletOnly( smallInvoiceTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\treturn m('div.harth.mb6', [\n\n\t\t\tm('br')\n\t\t\t,!calculated() && loading() || invoiceDataLoading()\n\t\t\t\t? elements.alert('warning',`Calculating the monetary value of your ledgers in the focus criteria`)\n\t\t\t\t: null\n\n\t\t\t,editInvoicePermissions()\n\t\t\t\t? elements.list([\n\n\t\t\t\t\telements.backAnchor(\n\t\t\t\t\t\t`Back to Summary`\n\t\t\t\t\t\t,null\n\t\t\t\t\t\t,{\n\t\t\t\t\t\t\thref: m.route.get().slice(0, m.route.get().indexOf('/ledger/'))\n\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t, title: \"Back to item list\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t\t,elements.action(\n\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t, sendInvoices\n\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t, () => invoiceIdenticals() || saveDisabledInvoices(true)\n\t\t\t\t\t)\n\n\t\t\t\t\t,m('button.btn.btn-warning'\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\tfocussedInvoices(cloneInvoice(originalInvoices()))\n\t\t\t\t\t\t\t\tselectedInvoices([])\n\t\t\t\t\t\t\t\tdeleteInvoiceItems([])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, disabled: invoiceIdenticals()\n\t\t\t\t\t\t\t, title: \"Discard Changes since last save\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Discard Changes'\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t:[]\n\n\t\t\t,saveDisabledInvoices()\n\n\t\t\t,elements.list([\n\t\t\t\tgotfilters\n\t\t\t\t,invoiceEditAll()\n\t\t\t])\n\t\t\t,m('br')\n\t\t\t,loading() || !calculated() || invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t: originalInvoices().length > 0\n\t\t\t\t? [\n\t\t\t\t\tnull\n\t\t\t\t\t,receiptedInvoices().length > 0\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\tm('label.control-label', 'Receipting ledgers')\n\t\t\t\t\t\t\t,receiptedInvoices()\n\t\t\t\t\t\t\t\t.map( (si, sindex) =>\n\t\t\t\t\t\t\t\t\tsindex + 1\n\t\t\t\t\t\t\t\t\t+ '. '\n\t\t\t\t\t\t\t\t\t+ makeMoney(\n\t\t\t\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\t\t\t\tsi.invoice_amount() * si.invoice_rate()\n\t\t\t\t\t\t\t\t\t\t\t+ si.invoice_service_amount() * si.invoice_service_rate()\n\t\t\t\t\t\t\t\t\t\t\t+ si.invoice_depreciation_amount() * si.invoice_depreciation_rate()\n\t\t\t\t\t\t\t\t\t\t\t+ si.invoice_appreciation_amount() * si.invoice_appreciation_rate()\n\t\t\t\t\t\t\t\t\t\t\t+ si.invoice_damages_amount() * si.invoice_damages_rate()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t\t\t+ si.invoice_name()\n\t\t\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t\t\t+ si.invoice_no()\n\t\t\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t\t\t+ (si.invoice_inv_id() || '')\n\t\t\t\t\t\t\t\t\t+ ' | '\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tsi.supplier_name()\n\t\t\t\t\t\t\t\t\t\t\t? si.supplier_name()\n\t\t\t\t\t\t\t\t\t\t\t: `Unassigned`\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map(s => m('p.pv1.ma0', s ))\n\n\t\t\t\t\t\t\t,m('hr')\n\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: null\n\n\n\t\t\t\t\t,invoiceTable()\n\n\t\t\t\t]\n\t\t\t\t: elements.alert(`info`, `Make some ledgers via your contract items to better track finances`)\n\n\t\t])\n\t}\n\n\tfunction CreateInvoicePO(){\n\n\t\tconst processedList =\n\t\t\tListProcessing(\n\t\t\t\tselectedInvoices()\n\t\t\t\t, filterFunction.invoiceFilters.filters()\n\t\t\t\t, ''\n\t\t\t)\n\n\t\tconst applyProjectMultuplier =\n\t\t\t(i) => {\n\t\t\t\tconst rateMulitplierName =\n\t\t\t\t\ti.crews_discipline_rates_id\n\t\t\t\t\t? 'disciplines_contractors_crews_contract_multiplier'\n\t\t\t\t\t: 'discipline_contract_multiplier'\n\n\t\t\t\tconst rateMultiplier =\n\t\t\t\t\t!i.project_id()\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: multiplierIndex()\n\t\t\t\t\t\t[i.project_id()]\n\t\t\t\t\t\t[i.contractrecognitionid]\n\t\t\t\t\t\t[rateMulitplierName]()\n\n\t\t\t\ti.invoice_rate(\n\t\t\t\t\ti.invoice_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_service_rate(\n\t\t\t\t\ti.invoice_service_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_depreciation_rate(\n\t\t\t\t\ti.invoice_depreciation_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_appreciation_rate(\n\t\t\t\t\ti.invoice_appreciation_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t\ti.invoice_damages_rate(\n\t\t\t\t\ti.invoice_damages_rate()\n\t\t\t\t\t* ( rateMultiplier || 1 )\n\t\t\t\t)\n\t\t\t}\n\n\n\t\tconst invoiceData =\n\t\t\t(i) =>\n\t\t\t\tR.reduce(\n\t\t\t\t\t(o, i) => {\n\t\t\t\t\t\thiddenInvoiceData()\n\t\t\t\t\t\t&& hiddenInvoiceData()[i]\n\t\t\t\t\t\t? delete o[\n\t\t\t\t\t\t\ti == 'invoice_service_rate'\n\t\t\t\t\t\t\t? 'Service Amount | Rate'\n\t\t\t\t\t\t\t: i == 'invoice_depreciation_rate'\n\t\t\t\t\t\t\t? 'Depreciation Amount | Rate'\n\t\t\t\t\t\t\t: i == 'invoice_appreciation_rate'\n\t\t\t\t\t\t\t? 'Appreciation Amount | Rate'\n\t\t\t\t\t\t\t: i == 'invoice_damages_rate'\n\t\t\t\t\t\t\t? 'Damages Amount | Rate'\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: null\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,{\n\t\t\t\t\t\t'Payment Type':\n\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t\t\t\t) > 0\n\t\t\t\t\t\t\t\t? i.invoice_received()\n\t\t\t\t\t\t\t\t\t? 'Receipted Revenue'\n\t\t\t\t\t\t\t\t\t: 'Accrued Revenue'\n\t\t\t\t\t\t\t\t: i.invoice_received()\n\t\t\t\t\t\t\t\t\t? 'Receipted Expenditure'\n\t\t\t\t\t\t\t\t\t: 'Accrued Expenditure'\n\n\t\t\t\t\t\t,'Date':\n\t\t\t\t\t\t\t!editInvoicePermissions() || i.invoice_approval()\n\t\t\t\t\t\t\t? moment( i.invoice_date() ).format(\"ll\")\n\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => i.invoice_date()\n\t\t\t\t\t\t\t\t\t? moment( i.invoice_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\t(a) => setOptions(a, 'invoice_date', [i])\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\ttitle: \"Created invoice date\"\n\t\t\t\t\t\t\t\t\t\t\t,mindate: new Date().toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t, 'Set Recipient':\n\t\t\t\t\t\t\t/* eslint-disable */\n\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => i.supplier_name()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\t\tSupplierEntities\n\t\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\n\t\t\t\t\t\t\t\t\t\t\ti.supplier_name(v.contractrecognitionname)\n\t\t\t\t\t\t\t\t\t\t\ti.supplier_id(\n\t\t\t\t\t\t\t\t\t\t\t\tv.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\t\tdisabled: !SupplierEntities() || SupplierEntities().length == 0\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t/* eslint-enable */\n\t\t\t\t\t\t, 'Client Ref':\n\t\t\t\t\t\t\teditInvoicePermissions()\n\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => i.invoice_items_client_reference()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_items_client_reference\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Reference name for the clients item\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t: i.invoice_items_client_reference()\n\t\t\t\t\t\t, 'Ledger Ref No.': i.invoice_no() + '|' + (i.invoice_inv_id() || '')\n\t\t\t\t\t\t, 'Payment Ref':\n\t\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t\t? i.invoice_client_reference()\n\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => i.invoice_client_reference()\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\ti.invoice_client_reference\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Payment reference from the client\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Name': i.invoice_name()\n\t\t\t\t\t\t, 'Description': elements.textInput(i.invoice_description, {})\n\t\t\t\t\t\t, 'Project':\n\t\t\t\t\t\t\t/* eslint-disable */\n\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() => i.project_name()\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\t\tprojects\n\t\t\t\t\t\t\t\t\t\t,R.when( Boolean, function(v){\n\t\t\t\t\t\t\t\t\t\t\ti.project_name(v.contractrecognitionname)\n\t\t\t\t\t\t\t\t\t\t\ti.project_id(\n\t\t\t\t\t\t\t\t\t\t\t\tv.project_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\t\t\t\t\tdisabled: projects().length == 0\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t/* eslint-enable */\n\t\t\t\t\t\t, 'Project Multipliers':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm('button.btn.btn-secondary',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'transparent'\n\t\t\t\t\t\t\t\t\t\t\t,border: 'solid 1px #3380c2'\n\t\t\t\t\t\t\t\t\t\t\t,position: 'relative'\n\t\t\t\t\t\t\t\t\t\t\t,top: '-0.1em'\n\t\t\t\t\t\t\t\t\t\t\t,height: '2.9em'\n\t\t\t\t\t\t\t\t\t\t\t,width: '5em'\n\t\t\t\t\t\t\t\t\t\t\t,color: '#434aa3'\n\t\t\t\t\t\t\t\t\t\t\t,textDecoration: 'underline'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,disabled:\n\t\t\t\t\t\t\t\t\t\t\t!i.project_id()\n\t\t\t\t\t\t\t\t\t\t\t|| i.project_id()\n\t\t\t\t\t\t\t\t\t\t\t\t&& !multiplierIndex()[i.project_id()]\n\t\t\t\t\t\t\t\t\t\t\t\t[i.contractrecognitionid]\n\n\t\t\t\t\t\t\t\t\t\t, onclick: () => applyProjectMultuplier(i)\n\t\t\t\t\t\t\t\t\t\t, title: \"Apply Project and Work Multiplers to this invoices\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,'Apply'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Working Amount | Rate':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Amount'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: i.invoice_amount\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_rate() == 0 || i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => makeMoney( i.invoice_rate() )\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Rate'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: i.invoice_rate\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Service Amount | Rate':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Service Amount'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: i.invoice_service_amount\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_service_rate() == 0 || i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => makeMoney( i.invoice_service_rate() )\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Service Rate'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: i.invoice_service_rate\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Depreciation Amount | Rate':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Depreciation Amount'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: i.invoice_depreciation_amount\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_depreciation_rate() == 0 || i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => makeMoney( i.invoice_depreciation_rate() )\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Depreciation Rate'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: i.invoice_depreciation_rate\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Appreciation Amount | Rate':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Appreciation Amount'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: i.invoice_appreciation_amount\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_appreciation_rate() == 0 || i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => makeMoney( i.invoice_appreciation_rate() )\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Apepreciation Rate'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: i.invoice_appreciation_rate\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Damages Amount | Rate':\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Damage Amount'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\tprop: i.invoice_damages_amount\n\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\t\t\t\t\t\t\t\t\t\t\t,disabled: i.invoice_damages_rate() == 0 || i.invoice_items.length\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m.component(\n\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t,() => makeMoney( i.invoice_damages_rate() )\n\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\tm(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: i.invoice_no() + ' Invoice Damage Rate'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: i.invoice_damages_rate\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 0.01\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t, 'Total Amount':\n\t\t\t\t\t\t\tmakeMoney(\n\t\t\t\t\t\t\t\tNumber(\n\t\t\t\t\t\t\t\t\ti.invoice_amount() * i.invoice_rate()\n\t\t\t\t\t\t\t\t\t+ i.invoice_service_amount() * i.invoice_service_rate()\n\t\t\t\t\t\t\t\t\t+ i.invoice_depreciation_amount() * i.invoice_depreciation_rate()\n\t\t\t\t\t\t\t\t\t+ i.invoice_appreciation_amount() * i.invoice_appreciation_rate()\n\t\t\t\t\t\t\t\t\t+ i.invoice_damages_amount() * i.invoice_damages_rate()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t, 'Approver':\n\t\t\t\t\t\t\tm.component(\n\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tusers().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t== selectedInvoices()[0].invoice_approver()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t|| nullUser\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.usersFullName\n\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\t\t\t\t\tusers\n\t\t\t\t\t\t\t\t\t\t, (v) => {\n\n\t\t\t\t\t\t\t\t\t\t\tif (v){\n\t\t\t\t\t\t\t\t\t\t\t\tsetOptions(\n\t\t\t\t\t\t\t\t\t\t\t\t\tv.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t, 'invoice_approver'\n\t\t\t\t\t\t\t\t\t\t\t\t\t, selectedInvoices()\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\treturn v\n\t\t\t\t\t\t\t\t\t\t\t\t? v.usersFullName\n\t\t\t\t\t\t\t\t\t\t\t\t: users().find((u) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tu.user_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t== selectedInvoices()[0].invoice_approver()\n\t\t\t\t\t\t\t\t\t\t\t\t).usersFullName\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t,'usersFullName'\n\t\t\t\t\t\t\t\t\t\t, () => ({\n\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\theight: '3em'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t, 'Approved':\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t!i.invoice_approver()\n\t\t\t\t\t\t\t\t|| users().find((u) => u.user_id() == i.invoice_approver() )\n\t\t\t\t\t\t\t) && !i.invoice_approval()\n\t\t\t\t\t\t\t\t? elements.checkbox({\n\t\t\t\t\t\t\t\t\tonchange:\n\t\t\t\t\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\t\t\t\t\ti.created = true\n\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_approval(checked)\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_due_date(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew Date().getTime()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ Number(i.contract_payment_term)*milliperday\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\ti.invoice_approver() == 'Unassigned'\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| !i.invoice_approver()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? i.invoice_approver(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.auth.stream().user_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,checked: i.invoice_approval()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: !users().find((u) => u.user_id() == i.invoice_approver() )\n\t\t\t\t\t\t\t\t\t? 'Unassigned'\n\t\t\t\t\t\t\t\t\t: users().find((u) => u.user_id() == i.invoice_approver() ).usersFullName\n\t\t\t\t\t\t, 'Received':\n\n\t\t\t\t\t\t!editInvoicePermissions()\n\t\t\t\t\t\t? !i.invoice_approval()\n\t\t\t\t\t\t\t? 'Approval Required'\n\t\t\t\t\t\t\t: moment( i.invoice_received_date() ).format(\"ll\")\n\t\t\t\t\t\t: !i.invoice_approval()\n\t\t\t\t\t\t? 'Approval Required'\n\t\t\t\t\t\t: receiveInvoiceBox(i)\n\t\t\t\t\t}\n\t\t\t\t\t,[\n\t\t\t\t\t\t'invoice_service_rate'\n\t\t\t\t\t\t,'invoice_depreciation_rate'\n\t\t\t\t\t\t,'invoice_appreciation_rate'\n\t\t\t\t\t\t,'invoice_damages_rate'\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tconst largeInvoiceTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((i, iindex) => ({\n\t\t\t\t\t\tkey: i.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tiindex != 0\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: m('.header'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t,m('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1fr 0.75fr 1fr 1fr 1fr 1fr 1.5fr 1fr 1.25fr `\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_service_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_depreciation_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_appreciation_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenInvoiceData()['invoice_damages_rate'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t+ `0.75fr 0.75fr 0.75fr 1.25fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: R.omit(['Payment Type'], invoiceData(i))\n\t\t\t\t\t}))\n\t\t\t})\n\n\t\tconst smallInvoiceTable = () =>\n\t\t\tscrollableTable.advanced({\n\t\t\t\tscoped: data.scoped\n\t\t\t\t,resize$: data.resize$\n\t\t\t\t,alwaysopen: true\n\t\t\t\t,rows:\n\t\t\t\t\tprocessedList\n\t\t\t\t\t.map((i) => ({\n\t\t\t\t\t\tkey: i.key\n\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, [i.invoice_inv_id(), i.invoice_no()].filter(Boolean).join('|')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2.25em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Name'\n\t\t\t\t\t\t\t\t\t\t\t,'Date'\n\t\t\t\t\t\t\t\t\t\t\t,'Working Amount | Rate'\n\t\t\t\t\t\t\t\t\t\t\t,'Total Amount'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == i.invoice_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], i.invoice_name()].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Description'\n\t\t\t\t\t\t\t\t\t\t\t, 'Approved'\n\t\t\t\t\t\t\t\t\t\t\t, 'Received'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Set Recipient'\n\t\t\t\t\t\t\t\t\t\t\t, 'Client Ref'\n\t\t\t\t\t\t\t\t\t\t\t, 'Approver'\n\t\t\t\t\t\t\t\t\t\t\t, 'Project'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.5fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Project Multipliers'\n\t\t\t\t\t\t\t\t\t\t\t,'Payment Ref'\n\t\t\t\t\t\t\t\t\t\t\t,'Payment Type'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.75fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t!hiddenInvoiceData()['invoice_service_rate'] ? 'Service Amount | Rate' : ''\n\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_depreciation_rate'] ? 'Depreciation Amount | Rate' : ''\n\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_appreciation_rate'] ? 'Appreciation Amount | Rate' : ''\n\t\t\t\t\t\t\t\t\t\t\t,!hiddenInvoiceData()['invoice_damages_rate'] ? 'Damages Amount | Rate' : ''\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,data: invoiceData(i)\n\t\t\t\t\t}))\n\t\t\t})\n\n\n\t\tconst invoiceTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 900\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeInvoiceTable )\n\t\t\t\t\t,desktopOnly( largeInvoiceTable )\n\t\t\t\t\t,mobileOnly( smallInvoiceTable )\n\t\t\t\t\t,tabletOnly( smallInvoiceTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\treturn m('div.harth.mb6', [\n\t\t\teditInvoicePermissions()\n\t\t\t\t? [\n\t\t\t\t\tm('br')\n\t\t\t\t\t,!calculated() || invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\tm('h4', (active.contract_name() || 'Reversal') + ' - Create Ledgers' )\n\t\t\t\t\t\t\t,m('br')\n\n\t\t\t\t\t\t\t,missingPermissions()\n\t\t\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t\t\t`info`\n\t\t\t\t\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t\t\t\t\t+ ' permissions'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t,elements.alert(`info`, `All negative rates are considered to be an expenditure, all positive rates are considered to be revenue streams`)\n\t\t\t\t\t\t\t,elements.list([\n\n\t\t\t\t\t\t\t\telements.backAnchor(\n\t\t\t\t\t\t\t\t\t`Back to ` + active.contract_name() + ` Summary`\n\t\t\t\t\t\t\t\t\t,() => {\n\t\t\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\t\t\troute_view_type('All Contracts')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t\t\t+ route_contract_id()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t, title: \"Back to item list\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t,elements.action(\n\t\t\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t\t\t, sendInvoices\n\t\t\t\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t\t\t, () => saveDisabledInvoices(true)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t,saveDisabledInvoices()\n\t\t\t\t\t\t\t,invoiceTable()\n\t\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t\t: missingPermissions()\n\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t`info`\n\t\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t\t+ ' permissions'\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t])\n\t}\n\n\tfunction contractDatesButton(){\n\t\treturn forecastdateA() == 0 && forecastdateB() == Infinity\n\t\t\t? null\n\t\t\t: m('button.btn.btn'\n\t\t\t\t,{\n\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\tforecastdateA(0)\n\t\t\t\t\t\tforecastdateB(Infinity)\n\t\t\t\t\t}\n\t\t\t\t\t, disabled: forecastdateA() == 0 && forecastdateB() == Infinity || !calculated() || savingProp()\n\t\t\t\t\t, title: \"Set start and end period to contract start periods and periods respectively\"\n\t\t\t\t\t, style:\n\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t, height: '2.5em'\n\t\t\t\t\t\t, width: '12em'\n\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, 'Reset Dates'\n\t\t\t)\n\t}\n\n\tconst debounceDrawChart = debounce(drawChart, 1000)\n\tfunction reCalculateButton({forcereroute, spinner}){\n\t\treturn m('button.btn.btn'\n\t\t\t, {\n\t\t\t\tonclick: () => {\n\n\t\t\t\t\tif (forcereroute){\n\n\t\t\t\t\t\tm.route.set(\n\t\t\t\t\t\t\t\"/data/contracts/overview\" + \"/forecastdateA/\" + forecastdateA() + \"/forecastdateB/\" + forecastdateB()\n\t\t\t\t\t\t)\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t!reMapdateChange()\n\t\t\t\t\t\t\t? reMapdateChange(true)\n\t\t\t\t\t\t\t: reMapdateChange(false)\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t, disabled:\n\t\t\t\t\t!calculated()\n\t\t\t\t\t|| savingProp()\n\t\t\t\t\t|| dateDisabled()\n\t\t\t\t, title: \"Set focus period and schedules calculated statistics\"\n\t\t\t\t, style:\n\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t}\n\t\t\t}\n\t\t\t, spinner ? elements.refresher() : 'Refresh'\n\t\t)\n\t}\n\n\tfunction reChartButton({sv, breakdown, split}){\n\t\treturn !calculated()\n\t\t|| savingProp()\n\t\t|| dateDisabled()\n\t\t? ''\n\t\t: m('button.btn.btn'\n\t\t\t,{\n\t\t\t\tonclick: () => {\n\n\t\t\t\t\tloadchart()[\n\t\t\t\t\t\troute_contract_id()\n\t\t\t\t\t\t? route_contract_id()\n\t\t\t\t\t\t: sv.schedule_version_id\n\t\t\t\t\t] = route_contract_id() ? route_contract_id() : sv.schedule_version_id\n\n\n\t\t\t\t\tif( breakdown ){\n\t\t\t\t\t\tsv.breakdown = breakdown\n\t\t\t\t\t\tsv.makeChart = null\n\t\t\t\t\t}\n\n\t\t\t\t\tif( split ){\n\t\t\t\t\t\tsv.makeChart = null\n\t\t\t\t\t\tsv.split = split\n\t\t\t\t\t\tsv.breakdown = 'breakdown'\n\t\t\t\t\t}\n\n\n\t\t\t\t\tfetchCalculations({\n\t\t\t\t\t\tstartDate: forecastdateA()\n\t\t\t\t\t\t,endDate: forecastdateB()\n\t\t\t\t\t\t,currentRoute: 'financials'\n\t\t\t\t\t\t,scheduleonly:\n\t\t\t\t\t\t\tsv.schedule_version_id == \"Overheads\" ? '' : true\n\t\t\t\t\t\t,getchartdata:\n\t\t\t\t\t\t\trouteParam().viewType == 'overview'\n\t\t\t\t\t\t\t&& loadchart()[sv.schedule_version_id]\n\t\t\t\t\t\t\t? 'getcharts'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,breakdown: sv.breakdown || sv.split\n\t\t\t\t\t\t,nochildren: false\n\t\t\t\t\t\t,scheduleList: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscheduleNameVersion: sv.scheduleNameVersion\n\t\t\t\t\t\t\t\t,schedule_priority: sv.schedule_priority\n\t\t\t\t\t\t\t\t,schedule_version_created: sv.schedule_version_created\n\t\t\t\t\t\t\t\t,schedule_version_id: sv.schedule_version_id\n\t\t\t\t\t\t\t\t,schedule_version_old_id: sv.schedule_version_old_id\n\t\t\t\t\t\t\t\t,schedules_parameters_id: sv.schedules_parameters_id\n\t\t\t\t\t\t\t\t,schedule_id: sv.schedule_id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\n\t\t\t\t}\n\t\t\t\t, disabled: !calculated()\n\t\t\t\t\t|| savingProp()\n\t\t\t\t\t|| dateDisabled()\n\t\t\t\t, title: \"Load chart view\"\n\t\t\t\t, style:\n\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t}\n\t\t\t}\n\t\t\t, split ? 'Split Charts' : breakdown ? 'Show Breakdown' : elements.refresher()\n\t\t)\n\t}\n\n\n\t// todo-james Keeping this because I assume @eja kept it for a reason\n\t// eslint-disable-next-line no-unused-vars\n\tfunction reSetCriteraButton(){\n\t\treturn reMapdateChange()\n\t\t\t? m('button.btn.btn'\n\t\t\t\t, {\n\t\t\t\t\tonclick: () => {\n\n\t\t\t\t\t\tfocussedEntities(\n\t\t\t\t\t\t\trecordedFocus().schedules.map((s) =>\n\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\tfocussedEntities()\n\t\t\t\t\t\t\t\t\t,scheduleList()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.find((sl) => sl.scheduleNameVersion == s.snv)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tforecastdateA(\n\t\t\t\t\t\t\trecordedFocus().dateA\n\t\t\t\t\t\t)\n\t\t\t\t\t\tforecastdateB(\n\t\t\t\t\t\t\trecordedFocus().dateB\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t, disabled: !calculated()\n\t\t\t\t\t\t|| savingProp()\n\t\t\t\t\t\t|| !notCalculated(true)\n\t\t\t\t\t, title: \"Set focus period and schedules to last calculated state\"\n\t\t\t\t\t, style:\n\t\t\t\t\t\t{ backgroundColor: 'transparent'\n\t\t\t\t\t\t, border: 'solid 1px #3380c2'\n\t\t\t\t\t\t, position: 'relative'\n\t\t\t\t\t\t, top: '-0.1em'\n\t\t\t\t\t\t, height: '2.5em'\n\t\t\t\t\t\t, width: '8em'\n\t\t\t\t\t\t, color: '#434aa3'\n\t\t\t\t\t\t, textDecoration: 'underline'\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t, 'Reset Criteria'\n\t\t\t)\n\t\t\t: null\n\t}\n\n\tfunction focusDates(){\n\t\treturn m('h5'\n\t\t\t,elements.list([\n\t\t\t\t'Date Period is between '\n\t\t\t\t,m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() =>\n\n\t\t\t\t\t\t\tforecastdateA() == 0\n\t\t\t\t\t\t\t\t? 'Contract start dates '\n\t\t\t\t\t\t\t\t: moment( forecastdateA() ).format(\"ll\")\n\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t(v) => v ? forecastdateA(new Date(v).getTime()) : forecastdateA()\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: \"Statistic Period Start\"\n\t\t\t\t\t\t\t\t,maxdate: forecastdateB() == Infinity\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: new Date(forecastdateB()).toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t,' and '\n\t\t\t\t,m.component(\n\t\t\t\t\tPencil\n\t\t\t\t\t,() =>\n\n\t\t\t\t\t\t\tforecastdateB() == Infinity\n\t\t\t\t\t\t\t\t? 'Contract end dates '\n\t\t\t\t\t\t\t\t: moment( forecastdateB() ).format(\"ll\")\n\n\t\t\t\t\t,() =>\n\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t(v) => v ? forecastdateB(new Date(v).getTime()) : forecastdateB()\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\ttitle: \"Statistic Period End\"\n\t\t\t\t\t\t\t\t,mindate: new Date(forecastdateA()).toISOString().slice(0,10)\n\t\t\t\t\t\t\t\t,disabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t])\n\t\t)\n\t}\n\n\tfunction focusViewA(){\n\t\treturn [\n\n\t\t\tfocusDates()\n\n\t\t\t,m(`div`\n\t\t\t\t+ css\n\t\t\t\t`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 0.05fr 0.5fr 0.05fr 0.4fr;\n\t\t\t\t\tgap: 0.5em\n\t\t\t\t\talign-items: baseline;\n\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\talign-items: center;\t\t\t`\n\t\t\t\t,[\n\t\t\t\t\tm('h5', 'Focus')\n\t\t\t\t\t,m(autocomplete.Main, {\n\t\t\t\t\t\tlist: scheduleList\n\t\t\t\t\t\t,onselect(v, model){\n\t\t\t\t\t\t\tfocussedEntities(\n\t\t\t\t\t\t\t\tfocussedEntities().concat(\n\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\tmodel.chosen(null)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,field: 'scheduleNameVersion'\n\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\t\t(scheduleList() || []).length == 0\n\t\t\t\t\t\t\t\t|| !calculated()\n\t\t\t\t\t\t\t\t|| dateDisabled()\n\t\t\t\t\t\t\t\t|| savingProp()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t,reCalculateButton({forcereroute: false, spinner: true})\n\t\t\t\t\t,contractDatesButton()\n\t\t\t\t]\n\t\t\t)\n\n\t\t\t,m('br')\n\t\t\t,(\n\t\t\t\t!calculated() || savingProp()\n\t\t\t\t\t? elements.nonStrikeList\n\t\t\t\t\t: elements.strikeList\n\t\t\t)(\n\t\t\t\tfocussedEntities()\n\t\t\t\t\t.map(\n\t\t\t\t\t\tlabel => ({\n\t\t\t\t\t\t\tlabel: label.scheduleNameVersion\n\t\t\t\t\t\t\t,action: () => {\n\t\t\t\t\t\t\t\tfocussedEntities().splice(\n\t\t\t\t\t\t\t\t\tfocussedEntities().findIndex(\n\t\t\t\t\t\t\t\t\t\tR.propEq('scheduleNameVersion', label.scheduleNameVersion)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tfocussedEntities(focussedEntities())\n\t\t\t\t\t\t\t\treMapdateChange(true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\n\t\t\t,route_view_type() != 'All Contracts'\n\t\t\t&& route_view_type() != 'All Items'\n\t\t\t&& initiateContractFetch()\n\t\t\t? [\n\t\t\t\tm('br')\n\t\t\t\t,m('h4','Downloads')\n\t\t\t\t,m('hr')\n\t\t\t\t,elements.list([\n\t\t\t\t\tm(\n\t\t\t\t\t\t'a'\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\ttitle: 'Download imports for Xero'\n\t\t\t\t\t\t\t,href: fetchXeroExport({\n\t\t\t\t\t\t\t\tbills:true\n\t\t\t\t\t\t\t\t,auth_token: data.auth.stream().auth_token\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Imports Bills to Xero'\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t\t,elements.list([\n\t\t\t\t\tm(\n\t\t\t\t\t\t'a'\n\t\t\t\t\t\t, {\n\t\t\t\t\t\t\ttitle: 'Download imports for Xero'\n\t\t\t\t\t\t\t,href: fetchXeroExport({\n\t\t\t\t\t\t\t\tsales:true\n\t\t\t\t\t\t\t\t,auth_token: data.auth.stream().auth_token\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Imports Sales to Xero'\n\t\t\t\t\t)\n\t\t\t\t])\n\t\t\t]\n\t\t\t: null\n\n\t\t\t,notCalculated()\n\t\t]\n\t}\n\n\n\tfunction focusViewB(){\n\t\treturn [\n\t\t\treadContractPermissions()\n\t\t\t\t? m('div',\n\t\t\t\t\t!reMapdateChange()\n\t\t\t\t\t\t? []\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\telements.alert(\n\t\t\t\t\t\t\t\t`info`\n\t\t\t\t\t\t\t\t,elements.details(\n\t\t\t\t\t\t\t\t\t`Quarterly Summary`\n\t\t\t\t\t\t\t\t\t,elements.selectbuttons(\n\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t'Q1 Jul-Sep'\n\t\t\t\t\t\t\t\t\t\t\t,'Q2 Oct-Dec'\n\t\t\t\t\t\t\t\t\t\t\t,'Q3 Jan-Mar'\n\t\t\t\t\t\t\t\t\t\t\t,'Q4 Apr-Jun'\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t,(v) => {if (v){setQuartelyButtonDate(v)}}\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tdisabled: !calculated() || savingProp()\n\t\t\t\t\t\t\t\t\t\t\t, title: \"Set a financial quarter\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t,(notReq, v) => {\n\t\t\t\t\t\t\t\t\t\t\tlet year = new Date().getYear() + 1900\n\t\t\t\t\t\t\t\t\t\t\treturn v == 'Q1 Jul-Sep'\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateA() == new Date(year, 6, 1).getTime() + 1\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateB() == new Date(year, 8, 31).getTime() - 1\n\t\t\t\t\t\t\t\t\t\t\t|| v == 'Q2 Oct-Dec'\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateA() == new Date(year, 9, 1).getTime() + 1\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateB() == new Date(year, 11, 31).getTime() - 1\n\t\t\t\t\t\t\t\t\t\t\t|| v == 'Q3 Jan-Mar'\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateA() == new Date(year, 0, 1).getTime() + 1\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateB() == new Date(year, 2, 31).getTime() - 1\n\t\t\t\t\t\t\t\t\t\t\t|| v == 'Q4 Apr-Jun'\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateA() == new Date(year, 3, 1).getTime() + 1\n\t\t\t\t\t\t\t\t\t\t\t&& forecastdateB() == new Date(year, 5, 30).getTime() - 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t\t: []\n\t\t]\n\t}\n\n\n\t// function StatisticOptions(){\n\t// \treturn elements.selectbuttons(\n\t// \t\t['Total Period', 'Daily Average', 'Work-Day Average']\n\t// \t\t['Total Period', 'Work-Day Average']\n\t// \t\t,dailyAverage\n\t// \t\t,{\n\t// \t\t\tdisabled: !calculated()\n\t// \t\t\t,title: `Calulation representation`\n\t// \t\t}\n\t// \t)\n\t// }\n\n\tfunction mainViewLinks(){\n\t\treturn elements.list([\n\t\t\tm('a', {\n\t\t\t\t\thref: '/data/contracts/overview/forecastdateA/'\n\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t, title: \"Switch views\"\n\t\t\t\t\t, disabled: !calculated()\n\t\t\t\t}\n\t\t\t\t, 'Overview'\n\t\t\t)\n\t\t\t,m('a', {\n\t\t\t\t\thref: '/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t+ forecastdateB()\n\n\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t, title: \"Switch views\"\n\t\t\t\t\t, disabled: !calculated()\n\t\t\t\t}\n\t\t\t\t, 'View all Contracts'\n\t\t\t)\n\n\n\t\t\t,m.component(\n\t\t\t\tPencil\n\t\t\t\t,() =>\n\t\t\t\t\tm('a', {\n\t\t\t\t\t\t\thref: '/data/contracts/contractitems/forecastdateA/'\n\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t, title: \"Switch views\"\n\t\t\t\t\t\t\t, disabled: !calculated()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'View Odin Summaries'\n\t\t\t\t\t)\n\t\t\t\t,() =>\n\t\t\t\t\tautocomplete.strict(\n\t\t\t\t\t\tbaseItemsSelectList\n\t\t\t\t\t\t,(v) => {\n\n\t\t\t\t\t\t\tm.route.set(\n\t\t\t\t\t\t\t\t'/data/contracts/contractitems/forecastdateA/'\n\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t+ v.contractrecognitionid\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tinvoiceWindow(v.contractrecognitionid)\n\t\t\t\t\t\t\tviewWindow([v.tag])\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: !contractItemSelections() || contractItemSelections().length == 0 || !calculated()\n\t\t\t\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tpadding: `0.5em`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t])\n\t}\n\n\tfunction ContractSummary(){\n\t\treturn m('div.harth.mb6', [\n\n\t\t\tm('h4','Financials')\n\n\t\t\t,missingPermissions()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`info`\n\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t+ ' permissions'\n\t\t\t\t)\n\t\t\t\t: m('hr')\n\n\t\t\t,mainViewLinks()\n\n\t\t\t,m('br')\n\t\t\t,elements.splitPane(\n\t\t\t\tfocusViewA()\n\t\t\t\t,[\n\t\t\t\t\telements.list([\n\t\t\t\t\t\tm('h4','Statistics')\n\t\t\t\t\t\t,reCalculateButton({spinner: true, forcereroute: false})\n\t\t\t\t\t])\n\t\t\t\t\t,elements.list(R.intersperse(' | ', financialSummary.map((s) => m('p.tc.b', {style:{width: '10rem'}}, s))))\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,renderSummary(viewStats(), 'Revenue', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,renderSummary(viewStats(), 'Expenditures', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,renderSummary(viewStats(), 'Profits', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t,m('br')\n\t\t\t\t\t,focusViewB()\n\t\t\t\t]\n\t\t\t)\n\n\t\t\t,viewtype()()\n\n\t\t])\n\t}\n\n\tconst ifCharts = (fe, f) => features().Charts && fe && fe.chart && f()\n\n\tfunction Overview(){\n\n\t\tconst fedata =\n\t\t\t(fe, fep) => {\n\n\t\t\t\tconst profits = fe.odinsum ? fe.odinsum.currentProfits : fe.currentProfits\n\t\t\t\tconst fprofits = fe.odinsum ? fe.odinsum.forecastedProfits : fe.forecastedProfits\n\t\t\t\tconst invoicecount = fe.invoicecount || fe.odinsum && fe.odinsum.invoicecount\n\t\t\t\treturn {\n\t\t\t\t\t'Schedule':\n\t\t\t\t\t\tfe.project_name || fe.contractrecognitionname\n\t\t\t\t\t\t? m(`li.pb2.ml4`, fe.project_name && fe.project_name() || fe.contractrecognitionname)\n\t\t\t\t\t\t: fe.scheduleNameVersion || 'Total'\n\t\t\t\t\t,'Items':\n\t\t\t\t\t\t!fe.odincount && (metaDataIndexing() || !calculated() || isNaN(fe.odincount))\n\t\t\t\t\t\t? ``\n\t\t\t\t\t\t: m(`a`\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t;(fe.scheduleNameVersion == '' ? focussedEntities() : [fe])\n\t\t\t\t\t\t\t\t\t\t.forEach((fea) => fea.openchildren = fea.openchildren ? false : true)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t, disabled: !fe.odincount\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, fe.odincount\n\t\t\t\t\t\t)\n\t\t\t\t\t,'Invoices':\n\t\t\t\t\t\t!invoicecount && (metaDataIndexing() || !calculated() || isNaN(invoicecount))\n\t\t\t\t\t\t? ``\n\t\t\t\t\t\t: m('a'\n\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\thref: '/data/contracts/overview/forecastdateA/'\n\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t+ '/focus/'\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\t!fe.scheduleNameVersion\n\t\t\t\t\t\t\t\t\t\t&& fe.schedule_version_id != 'Overheads'\n\t\t\t\t\t\t\t\t\t\t&& !fep\n\t\t\t\t\t\t\t\t\t\t? focussedEntities().map(R.prop('schedule_version_id')).join(',')\n\t\t\t\t\t\t\t\t\t\t: fe.schedule_version_id == 'Overheads' || fep && fep.schedule_version_id == 'Overheads'\n\t\t\t\t\t\t\t\t\t\t? 'Overheads'\n\t\t\t\t\t\t\t\t\t\t: 'Overheads,' + (fe.schedule_version_id || fep.schedule_version_id)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t+ (\n\t\t\t\t\t\t\t\t\t\tfe.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t? fe.contractrecognitionid\n\t\t\t\t\t\t\t\t\t\t: (fe.odinitems || []).map(R.prop('contractrecognitionid')).join(',')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t, disabled: invoiceDataLoading() || !invoicecount\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,invoicecount\n\t\t\t\t\t\t)\n\t\t\t\t\t,'Profits':\n\t\t\t\t\t\t!profits && (metaDataIndexing() || !calculated())\n\t\t\t\t\t\t? ``\n\t\t\t\t\t\t: m('p' + (!profits ? '' : profits < 0 ? '.dark-red.fw6' : '.green.fw6'), makeMoney(profits))\n\t\t\t\t\t,'Chart': !fprofits && !profits ? null : reChartButton({sv: fe})\n\t\t\t\t}\n\t\t\t}\n\n\t\tconst chartToggles =\n\t\t\t(fe) =>\n\t\t\t\tm(`div`\n\t\t\t\t\t+ css\n\t\t\t\t\t`\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-columns: 0.35fr 0.125fr 0.275fr 0.25fr 0.25fr;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\talign-items: baseline;\n\t\t\t\t\tmax-width: 24em;\n\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\tjustify-items: end;\n\t\t\t\t\tjustify-content: right;\n\t\t\t\t\t`\n\t\t\t\t\t, [\n\t\t\t\t\t\tm(\n\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t,errorLabel: 'Margin'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\tprop:\n\t\t\t\t\t\t\t\t\t(v) => {\n\t\t\t\t\t\t\t\t\t\tif( v ){\n\t\t\t\t\t\t\t\t\t\t\tfe.tp(v)\n\t\t\t\t\t\t\t\t\t\t\tdebounceDrawChart({\n\t\t\t\t\t\t\t\t\t\t\t\tfe\n\t\t\t\t\t\t\t\t\t\t\t\t,data: calculatedData()[\n\t\t\t\t\t\t\t\t\t\t\t\t\tfe.schedule_version_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (forecastdateB() || Infinity)\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t,features\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn fe.tp()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\tstep: 0.1\n\t\t\t\t\t\t\t\t\t,min: 1\n\t\t\t\t\t\t\t\t\t,title: `Segreagtion percentage of values`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, m(`p.v-btm.pr2`, `%`)\n\t\t\t\t\t\t, m(`p.v-btm`, 'Margin')\n\t\t\t\t\t\t, m(`p.v-btm`, reChartButton({sv: fe, breakdown: 'breakdown'}))\n\t\t\t\t\t\t, m(`p.v-btm`, reChartButton({sv: fe, split: 'split'}))\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tconst largeSchedulesTable =\n\t\t\t({width}) =>\n\t\t\tfocussedEntities().filter((a) => a.makeChart)\n\t\t\t.concat(focussedEntities().filter((a) => !a.makeChart))\n\t\t\t.concat(totalOverview())\n\t\t\t.map((fe, feindex, fearray) =>\n\t\t\t\t[\n\t\t\t\t\tm('.data'\n\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.175fr 0.075fr 0.1fr 0.3fr;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\tmax-height: 20em;\n\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t` + (feindex != 0 ? `padding-top: 2em;` : ``)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t'Schedule'\n\t\t\t\t\t\t\t,'Profits'\n\t\t\t\t\t\t\t,'Items'\n\t\t\t\t\t\t\t,'Invoices'\n\t\t\t\t\t\t\t,'Chart'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\tfeindex == 0 && k != ' '\n\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 4em;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t\t\t\tm('label.control-label', k)\n\t\t\t\t\t\t\t\t\t\t\t, k != 'Schedule'\n\t\t\t\t\t\t\t\t\t\t\t&& k != 'Chart' && !calculated() && k\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Items' && fearray.some((fea) => isNaN(fea.odincount))\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Invoices'\n\t\t\t\t\t\t\t\t\t\t\t&& fearray.some((fea) =>\n\t\t\t\t\t\t\t\t\t\t\t\tisNaN(\n\t\t\t\t\t\t\t\t\t\t\t\t\t!fea.scheduleNameVersion && fea.invoicecount\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| fea.scheduleNameVersion && fea.odinsum && fea.odinsum.invoicecount\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Profits'\n\t\t\t\t\t\t\t\t\t\t\t&& fearray.some((fea) =>\n\t\t\t\t\t\t\t\t\t\t\t\tisNaN(\n\t\t\t\t\t\t\t\t\t\t\t\t\t!fea.scheduleNameVersion && fea.currentProfits\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| fea.scheduleNameVersion && fea.odinsum && fea.odinsum.currentProfits\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t? elements.spinner()\n\t\t\t\t\t\t\t\t\t\t\t: ' '\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t, m('.data', fedata(fe)[k])\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: m('.data', fedata(fe)[k])\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,fe.openchildren\n\t\t\t\t\t? fe.odinitems.map((oi) =>\n\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.175fr 0.075fr 0.1fr 0.3fr;\n\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t'Schedule'\n\t\t\t\t\t\t\t\t,'Profits'\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t,'Invoices'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.map((k) => m('.data', fedata(oi, fe)[k]))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: m('div', '')\n\n\t\t\t\t\t,m('br')\n\n\t\t\t\t\t,!fe.makeChart && loadchart()[fe.schedule_version_id]\n\t\t\t\t\t? elements.spinner()\n\t\t\t\t\t: ifCharts(loadchart()[fe.schedule_version_id] && fe, () => [\n\t\t\t\t\t\tchartToggles(fe)\n\t\t\t\t\t\t,fe.makeChart && fe.chart({width})\n\t\t\t\t\t])\n\n\t\t\t\t]\n\t\t\t)\n\n\t\tconst smallSchedulesTable =\n\t\t\t({width}) =>\n\t\t\tfocussedEntities().filter((a) => a.makeChart)\n\t\t\t.concat(focussedEntities().filter((a) => !a.makeChart))\n\t\t\t.concat(totalOverview())\n\t\t\t.map((fe, feindex, fearray) =>\n\t\t\t\t[\n\t\t\t\t\tm('.data'\n\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgrid-template-columns: 0.35fr 0.225fr 0.15fr 0.15fr 0.125fr;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t` + (feindex != 0 ? `padding-top: 4em;` : ``)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t'Schedule'\n\t\t\t\t\t\t\t,'Profits'\n\t\t\t\t\t\t\t,'Items'\n\t\t\t\t\t\t\t,'Invoices'\n\t\t\t\t\t\t\t,'Chart'\n\t\t\t\t\t\t]\n\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\tfeindex == 0\n\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.75fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 4em;\n\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t\t\t\tm('label.control-label', k)\n\t\t\t\t\t\t\t\t\t\t\t, k != 'Schedule' && k != 'Chart' && metaDataIndexing()\n\t\t\t\t\t\t\t\t\t\t\t|| k != 'Schedule' && !calculated()\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Items' && fearray.some((fea) => isNaN(fea.odincount))\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Invoices'\n\t\t\t\t\t\t\t\t\t\t\t&& fearray.some((fea) =>\n\t\t\t\t\t\t\t\t\t\t\t\tisNaN(\n\t\t\t\t\t\t\t\t\t\t\t\t\t!fea.scheduleNameVersion && fea.invoicecount\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| fea.scheduleNameVersion && fea.odinsum && fea.odinsum.invoicecount\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t|| k == 'Profits'\n\t\t\t\t\t\t\t\t\t\t\t&& fearray.some((fea) =>\n\t\t\t\t\t\t\t\t\t\t\t\tisNaN(\n\t\t\t\t\t\t\t\t\t\t\t\t\t!fea.scheduleNameVersion && fea.currentProfits\n\t\t\t\t\t\t\t\t\t\t\t\t\t|| fea.scheduleNameVersion && fea.odinsum && fea.odinsum.currentProfits\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t? elements.spinner()\n\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t, m('.data', fedata(fe)[k])\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: m('.data', fedata(fe)[k])\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,fe.openchildren\n\t\t\t\t\t? fe.odinitems.map((oi) =>\n\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgrid-template-columns: 0.35fr 0.225fr 0.15fr 0.15fr 0.125fr;\n\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t, [\n\t\t\t\t\t\t\t\t'Schedule'\n\t\t\t\t\t\t\t\t,'Profits'\n\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t,'Invoices'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.map((k) => m('.data', fedata(oi, fe)[k]))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t: m('div', '')\n\n\t\t\t\t\t,m('br')\n\n\t\t\t\t\t,!fe.makeChart && loadchart()[fe.schedule_version_id]\n\t\t\t\t\t? elements.spinner()\n\t\t\t\t\t: ifCharts(loadchart()[fe.schedule_version_id] && fe, () => [\n\t\t\t\t\t\tchartToggles(fe)\n\t\t\t\t\t\t,fe.makeChart && fe.chart({width})\n\t\t\t\t\t])\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t]\n\t\t\t)\n\n\n\t\tconst scheduleTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 900\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly, width }) => [\n\t\t\t\t\thd( () => largeSchedulesTable({ width }) )\n\t\t\t\t\t,desktopOnly( () => largeSchedulesTable({ width }) )\n\t\t\t\t\t,mobileOnly( () => smallSchedulesTable({ width }) )\n\t\t\t\t\t,tabletOnly( () => smallSchedulesTable({ width }) )\n\t\t\t\t]\n\t\t\t)\n\n\t\treturn m('div.harth.mb6', [\n\n\t\t\tm('h4','Financials')\n\n\t\t\t,missingPermissions()\n\t\t\t\t? elements.alert(\n\t\t\t\t\t`info`\n\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t+ ' permissions'\n\t\t\t\t)\n\t\t\t\t: m('hr')\n\n\t\t\t,mainViewLinks()\n\n\t\t\t// ,elements.list([ focusDates(), reCalculateButton({spinner: false, forcereroute: true})])\n\n\t\t\t,m('br')\n\n\t\t\t,scheduleTable()\n\n\t\t])\n\t}\n\n\n\n\tfunction ContractEditsOrAdditions(){\n\t\tconst gotfilters =\n\t\t\tgetfilters(null, \"Contract Items\")\n\n\t\tconst processedList =\n\t\t\tListProcessing(\n\t\t\t\tactive.contract_items()\n\t\t\t\t, filterFunction.contractItemsFilters.filters()\n\t\t\t\t, ''\n\t\t\t\t,filteredContractItemOptions\n\t\t\t)\n\n\t\tconst itemData =\n\t\t\t(ci) =>\n\t\t\t\tR.reduce(\n\t\t\t\t\t(o, i) => {\n\t\t\t\t\t\thiddenItemData() && hiddenItemData()[i]\n\t\t\t\t\t\t? delete o[\n\t\t\t\t\t\t\ti == 'contract_items_service'\n\t\t\t\t\t\t\t? 'Servicing Rate/UoM'\n\t\t\t\t\t\t\t: i == 'contract_items_depreciation'\n\t\t\t\t\t\t\t? 'Depreciation Rate/UoM'\n\t\t\t\t\t\t\t: i == 'contract_items_appreciation'\n\t\t\t\t\t\t\t? 'Appreciation Rate/UoM'\n\t\t\t\t\t\t\t: i == 'contract_items_damages'\n\t\t\t\t\t\t\t? 'Damages Rate/Day'\n\t\t\t\t\t\t\t: i == 'contract_items_damages_period'\n\t\t\t\t\t\t\t? 'Damages Period'\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t]\n\t\t\t\t\t\t: null\n\t\t\t\t\t\treturn o\n\t\t\t\t\t}\n\t\t\t\t\t,{\n\t\t\t\t\t\t'Item Name': ci.contract_items_name()\n\t\t\t\t\t\t,'Description': ci.contract_items_description()\n\t\t\t\t\t\t,'Client Ref': ci.contract_items_client_reference()\n\t\t\t\t\t\t,'UoM': ci.contract_items_uom()\n\t\t\t\t\t\t,'Recorded References': ci.contract_items_recorded_reference()\n\t\t\t\t\t\t,'Standard Amount':\n\t\t\t\t\t\t\tci.contract_items_recorded_reference() == 'Timesheets'\n\t\t\t\t\t\t\t? ci.contract_items_recorded_reference_standard()\n\t\t\t\t\t\t\t: 1\n\t\t\t\t\t\t,'Ledgers':\n\t\t\t\t\t\t\t!ci.contract_items_id()\n\t\t\t\t\t\t\t? 'Save prior to Invoicing'\n\t\t\t\t\t\t\t: invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t\t\t: m('a', {\n\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t\t+ ci.contract_id()\n\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t\t+ ci.contract_items_id()\n\n\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t!R.propOr(0, 'invoicecount')\n\t\t\t\t\t\t\t\t\t\t(allContractItemsIndexByContractItemId()\n\t\t\t\t\t\t\t\t\t\t[ci.contract_items_id()] || {})\n\t\t\t\t\t\t\t\t\t\t|| invoiceDataLoading()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,R.propOr(0, 'invoicecount')\n\t\t\t\t\t\t\t\t(allContractItemsIndexByContractItemId()\n\t\t\t\t\t\t\t\t[ci.contract_items_id()])\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t,'Rate/UoM': makeMoney( ci.contract_items_rate() )\n\t\t\t\t\t\t,'Servicing Rate/UoM': makeMoney( ci.contract_items_service() )\n\t\t\t\t\t\t,'Depreciation Rate/UoM': makeMoney( ci.contract_items_depreciation() )\n\t\t\t\t\t\t,'Appreciation Rate/UoM': makeMoney( ci.contract_items_appreciation() )\n\t\t\t\t\t\t,'Damages Rate/Day': makeMoney( ci.contract_items_damages_rate() )\n\t\t\t\t\t\t,'Damages Period': ci.contract_items_damages_period() + ' Days'\n\t\t\t\t\t\t,'Budget Rate/UoM': makeMoney( ci.contract_items_budget() )\n\t\t\t\t\t\t,'Applied': ci.contract_items_applied()\n\t\t\t\t\t\t\t? 'Yes'\n\t\t\t\t\t\t\t: 'No'\n\t\t\t\t\t\t,'Profits': makeMoney(ci.currentProfits)\n\t\t\t\t\t}\n\t\t\t\t\t,[\n\t\t\t\t\t\t'contract_items_service'\n\t\t\t\t\t\t,'contract_items_depreciation'\n\t\t\t\t\t\t,'contract_items_appreciation'\n\t\t\t\t\t\t,'contract_items_damages'\n\t\t\t\t\t\t,'contract_items_damages_period'\n\t\t\t\t\t]\n\t\t\t\t)\n\n\t\tconst getActivateDeleteButton =\n\t\t\t(ci) =>\n\t\t\t\teditContractPermissions() || editInvoicePermissions()\n\t\t\t\t? {\n\t\t\t\t\tonchange:\n\t\t\t\t\t\tm.withAttr('checked',\n\t\t\t\t\t\t\t(checked) => {\n\t\t\t\t\t\t\t\tif ( checked) {\n\t\t\t\t\t\t\t\t\tcheckMultiple()[ci.key] = ci\n\t\t\t\t\t\t\t\t\tcheckMultiple()[ci.key]['created'] = true\n\t\t\t\t\t\t\t\t\tactiveItem(ci)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete checkMultiple()[ci.key]\n\t\t\t\t\t\t\t\t\tactiveItem( checkMultiple()[ Object.keys(checkMultiple())[0]] || {} )\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t,checked: checkMultiple()[ci.key] || false\n\t\t\t\t\t,disabled: !calculated()\n\t\t\t\t\t,type: 'checkbox'\n\t\t\t\t}\n\t\t\t\t: {style: {opacity:0} , disabled: true}\n\n\t\tconst contractAdditions =\n\t\t\t[\n\t\t\t\teditContractPermissions()\n\t\t\t\t\t? m('label.control-label.w-100.pa2', 'Add ')\n\t\t\t\t\t: ''\n\n\t\t\t\t,editContractPermissions()\n\t\t\t\t\t? autocomplete.strict(\n\t\t\t\t\t\tctypes\n\t\t\t\t\t\t,coption\n\t\t\t\t\t\t,'cname'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tkey: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tpadding: `0.5em`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,(value, element) => { element.value = \"\" }\n\t\t\t\t\t)\n\t\t\t\t\t: ''\n\n\t\t\t\t,editContractPermissions()\n\t\t\t\t\t? autocomplete.strict(\n\t\t\t\t\t\tcontractItemSelections\n\t\t\t\t\t\t,(v, model) => {\n\t\t\t\t\t\t\tlet newItem =\n\t\t\t\t\t\t\t\tmakeContractItem(\n\t\t\t\t\t\t\t\t\tv\n\t\t\t\t\t\t\t\t\t,contractItemSelections()\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tactiveItem(newItem)\n\n\t\t\t\t\t\t\tcheckMultiple()[activeItem().key] = activeItem()\n\n\t\t\t\t\t\t\t;!active.contract_items()\n\t\t\t\t\t\t\t.find((i) => i.key == activeItem().key )\n\t\t\t\t\t\t\t&& activeItem().key\n\t\t\t\t\t\t\t\t? active.contract_items(\n\t\t\t\t\t\t\t\t\t[].concat(\n\t\t\t\t\t\t\t\t\t\tactiveItem()\n\t\t\t\t\t\t\t\t\t\t,active.contract_items()\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\tmodel.input('')\n\t\t\t\t\t\t\tmodel.chosen(null)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,'contractrecognitionname'\n\t\t\t\t\t\t,() => ({\n\t\t\t\t\t\t\tdisabled: !contractItemSelections() || contractItemSelections().length == 0 || !calculated()\n\t\t\t\t\t\t\t,key: Math.random().toString(15).slice(2, 8)\n\t\t\t\t\t\t\t,style: {\n\t\t\t\t\t\t\t\tpadding: `0.5em`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t,(value, element) => {\n\t\t\t\t\t\t\telement.value = \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t: ''\n\t\t\t]\n\n\t\tconst largeItemsTable =\n\t\t\t() => [\n\n\t\t\t\tm('.data'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\tgrid-template-columns: 0.1fr 1fr 1fr;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\tmargin-right: 30%;\n\t\t\t\t\t\tmargin-left: 30%;\n\t\t\t\t\t`\n\t\t\t\t\t,contractAdditions\n\t\t\t\t)\n\n\t\t\t\t,scrollableTable.advanced({\n\t\t\t\t\tscoped: data.scoped\n\t\t\t\t\t,resize$: data.resize$\n\t\t\t\t\t,alwaysopen: true\n\t\t\t\t\t,rows:\n\t\t\t\t\t\tprocessedList\n\t\t\t\t\t\t.map((ci, _cindex) => ({\n\t\t\t\t\t\t\tkey: ci.key\n\t\t\t\t\t\t\t,selection: getActivateDeleteButton(ci)\n\t\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\t\texpanded: ({ x, headers, i }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css(\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1.25fr 1.75fr 1fr 1fr 1.25fr 1fr 1fr 1fr `\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenItemData()['contract_items_service'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenItemData()['contract_items_depreciation'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenItemData()['contract_items_appreciation'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenItemData()['contract_items_damages'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (!hiddenItemData()['contract_items_damages_period'] ? `1fr ` : ``)\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ `1fr 1fr 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\t\talign-content: start;\n\t\t\t\t\t\t\t\t\t\t\t`)\n\t\t\t\t\t\t\t\t\t\t\t, headers\n\t\t\t\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\tk => [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ti == 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: m('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t,x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,data: itemData(ci)\n\t\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t]\n\n\t\tconst smallItemsTable =\n\t\t\t() => [\n\n\t\t\t\tm('.data'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\tgrid-template-columns: 0.1fr 1fr 1fr;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t`\n\t\t\t\t\t,contractAdditions\n\t\t\t\t)\n\n\t\t\t\t,scrollableTable.advanced({\n\t\t\t\t\tscoped: data.scoped\n\t\t\t\t\t,resize$: data.resize$\n\t\t\t\t\t,alwaysopen: true\n\t\t\t\t\t,rows:\n\t\t\t\t\t\tprocessedList\n\t\t\t\t\t\t.map((ci) => ({\n\t\t\t\t\t\t\tkey: ci.key\n\t\t\t\t\t\t\t,header:\n\t\t\t\t\t\t\t\tm('span'\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\tpadding-bottom: 0.5em;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t,m('input'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\t\t\t\t\t\tmargin: 0px;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t.$media('(hover: hover)',\n\t\t\t\t\t\t\t\t\t\t\tcss`\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t,getActivateDeleteButton(ci)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\talign-items: start;\n\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t'Ledgers'\n\t\t\t\t\t\t\t\t\t\t\t,!ci.contract_items_id()\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Save prior to Invoicing'\n\t\t\t\t\t\t\t\t\t\t\t\t: invoiceDataLoading() || metaDataIndexing()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? ` ... `\n\t\t\t\t\t\t\t\t\t\t\t\t\t: m('a', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/edit/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ ci.contract_id()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '/ledger/'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ ci.contract_items_id()\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, title: \"View Invoices\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, disabled:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!R.propOr(0, 'invoicecount')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(allContractItemsIndexByContractItemId()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ci.contract_items_id()] || {})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| invoiceDataLoading()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t,R.propOr(0, 'invoicecount')\n\t\t\t\t\t\t\t\t\t\t\t\t\t(allContractItemsIndexByContractItemId()\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ci.contract_items_id()])\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,makeMoney(ci.currentProfits)\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 1em\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,k\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,layouts: {\n\t\t\t\t\t\t\t\texpanded: ({ x }) =>\n\t\t\t\t\t\t\t\t\tm('.expanded'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.5fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 2.25em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Item Name', 'Description', 'Client Ref']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.25em\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tm('label.control-label.f4', k)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, k != 'Description'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: x[k] == ci.contract_items_name()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? x[k]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: [x[k], ci.contract_items_name()].filter(R.identity).join(' - ')\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,['Applied', 'Rate/UoM', 'Budget Rate/UoM', 'UoM']\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t'Standard Amount'\n\t\t\t\t\t\t\t\t\t\t\t\t,'Recorded References'\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenItemData()['contract_items_damages_period'] ? 'Damages Period' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,''\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t\t\t\t, m('.data'\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.25fr 0.25fr 0.25fr 0.25fr;\n\t\t\t\t\t\t\t\t\t\t\t\tpadding-bottom: 1em;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t!hiddenItemData()['contract_items_service'] ? 'Servicing Rate/UoM' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenItemData()['contract_items_depreciation'] ? 'Depreciation Rate/UoM' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenItemData()['contract_items_appreciation'] ? 'Appreciation Rate/UoM' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t,!hiddenItemData()['contract_items_damages'] ? 'Damages Rate/Day' : ''\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t.map((k) =>\n\t\t\t\t\t\t\t\t\t\t\t\tm('.data'\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding-right: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,[m('label.control-label.f4', k), x[k]]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,data: itemData(ci)\n\t\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t]\n\n\t\tconst itemTable = () =>\n\t\t\tm(Responsive\n\t\t\t\t,\n\t\t\t\t{\n\t\t\t\t\tbreakpoints: {\n\t\t\t\t\t\tmobile: 0\n\t\t\t\t\t\t,desktop: 900\n\t\t\t\t\t\t,tablet: 700\n\t\t\t\t\t\t,hd: 1800\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t,({ hd, desktopOnly, mobileOnly, tabletOnly }) => [\n\t\t\t\t\thd( largeItemsTable )\n\t\t\t\t\t,desktopOnly( largeItemsTable )\n\t\t\t\t\t,mobileOnly( smallItemsTable )\n\t\t\t\t\t,tabletOnly( smallItemsTable )\n\t\t\t\t]\n\t\t\t)\n\n\t\tconst textinput = ({t, p, a}) =>\n\t\t\t!editContractPermissions()\n\t\t\t\t? elements.plainTxt(active[p]())\n\t\t\t\t: m(''+ css`\n\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\tgap: 0.25em;\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\tactive[p]\n\t\t\t\t\t\t\t\t, R.merge(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdisabled: !calculated()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, a\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t,m('label.control-label.mb1.o-70', a, t )\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\n\t\tconst invoiceinfo =\n\t\t\t() => {\n\t\t\tfunction openInvoiceDetailPaymentModal(){\n\n\t\t\t\tmodalStack.add({\n\t\t\t\t\ttitle: 'Client Details'\n\t\t\t\t\t, view: () =>\n\t\t\t\t\t\tm('.idetails'\n\t\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\t\tpadding: 2em;\n\n\t\t\t\t\t\t\t\t& h1,& h2,& h3,& h4,& h5,& h6 {\n\t\t\t\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.55fr 0.45fr;\n\t\t\t\t\t\t\t\t\t\t\tgap: 2em 5em;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t\ttextinput({\n\t\t\t\t\t\t\t\t\t\t\tt: `Client's Name`\n\t\t\t\t\t\t\t\t\t\t\t, p: 'client_organization_name'\n\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\tt: 'Incorporation (ABN No.)'\n\t\t\t\t\t\t\t\t\t\t\t, p: 'client_incorporation_no'\n\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\tt: 'Email'\n\t\t\t\t\t\t\t\t\t\t\t, p: 'client_email'\n\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\tt: 'Phone'\n\t\t\t\t\t\t\t\t\t\t\t, p: 'client_phone'\n\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgap: 5em;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.55fr 0.45fr;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\ttextinput({\n\t\t\t\t\t\t\t\t\t\t\t\tt: 'Address'\n\t\t\t\t\t\t\t\t\t\t\t\t, p: 'client_address'\n\t\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 1em\n\t\t\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.5fr 0.5fr;\n\t\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextinput({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tt: 'State / Province'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, p: 'client_state'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tt: 'Post / Zip Code'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, p: 'client_postcode'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t, a: ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 3em;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('h4.tc.mb1', 'Deposit Details')\n\n\n\t\t\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\t\t\tgrid-template-columns: 1fr 1fr 1fr;\n\t\t\t\t\t\t\t\t\t\t\tjustify-items: center;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\t\t\ttextinput({\n\t\t\t\t\t\t\t\t\t\t\t\tt: 'Bank'\n\t\t\t\t\t\t\t\t\t\t\t\t, p: 'account_bank'\n\t\t\t\t\t\t\t\t\t\t\t\t, a: {style: {\"text-align\": \"center\"}}\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\t\tt: 'BSB'\n\t\t\t\t\t\t\t\t\t\t\t\t, p: 'account_bsb'\n\t\t\t\t\t\t\t\t\t\t\t\t, a: {style: {\"text-align\": \"center\"}}\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t,textinput({\n\t\t\t\t\t\t\t\t\t\t\t\tt: 'Account'\n\t\t\t\t\t\t\t\t\t\t\t\t, p: 'account_no'\n\t\t\t\t\t\t\t\t\t\t\t\t, a: {style: {\"text-align\": \"center\"}}\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\n\n\t\t\t\t\t\t\t,m(''\n\t\t\t\t\t\t\t\t+ H.css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgap: 3em;\n\n\t\t\t\t\t\t\t\t\t& .form-control {\n\t\t\t\t\t\t\t\t\t\tmax-width: unset;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\n\t\t\t\t\t\t\t\t\tm('h4.tc.mb1', 'Terms and Conditions')\n\n\t\t\t\t\t\t\t\t\t,m('label.control-label.mb1.tc.o-70', 'Conditions')\n\t\t\t\t\t\t\t\t\t,elements.textArea(\n\t\t\t\t\t\t\t\t\t\tactive.contract_terms\n\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\tplaceholder: \"Descriptions of the terms of agreement\"\n\t\t\t\t\t\t\t\t\t\t\t,disabled: !editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,editContractPermissions()\n\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\tm('label.control-label.mb1.tc.o-70','Payment Term ( Days )')\n\t\t\t\t\t\t\t\t\t\t,m(\n\t\t\t\t\t\t\t\t\t\t\tNumberInput\n\t\t\t\t\t\t\t\t\t\t\t,R.merge(\n\t\t\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\terrors\n\t\t\t\t\t\t\t\t\t\t\t\t\t,errorLabel: 'Payment Term'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tprop: active.contract_payment_term\n\t\t\t\t\t\t\t\t\t\t\t\t,attrs: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstep: 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t,min: 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t,title: `Terms of payment measure in days from date of invoice`\n\t\t\t\t\t\t\t\t\t\t\t\t\t,style: {\"text-align\": \"center\"}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t: elements.list([\n\t\t\t\t\t\t\t\t\t\tm('label.control-label.mb1.tc.o-70','Payment Term ( Days )')\n\t\t\t\t\t\t\t\t\t\t,active.contract_payment_term() || 0\n\t\t\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\t\t\t,editContractPermissions()\n\t\t\t\t\t\t\t\t\t? m('label.control-label.mb1.tc.o-70'\n\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\t\tgrid-auto-flow: row;\n\t\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t,active.contract_count_invoices()\n\t\t\t\t\t\t\t\t\t\t? 'Count Invoices Forward'\n\t\t\t\t\t\t\t\t\t\t: 'Use Structured Identifier'\n\n\n\t\t\t\t\t\t\t\t\t\t,m(`button`\n\t\t\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\t\t\tborder-radius: 0.5em;\n\t\t\t\t\t\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\t\t\t\t\t\tbackground-color: inherit;\n\t\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\tonclick:\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactive.contract_count_invoices(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!active.contract_count_invoices()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t,active.contract_count_invoices()\n\t\t\t\t\t\t\t\t\t\t\t\t? elements.switchiconNeuLeft()\n\t\t\t\t\t\t\t\t\t\t\t\t: elements.switchiconNeuRight()\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null\n\n\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t, type: 'example'\n\t\t\t\t\t, dismissable: true\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet showModal = !loading()\n\n\t\t\treturn showModal && m('.payment-read-only-summary'\n\t\t\t\t,elements.mobileButtonStack(\n\t\t\t\t\t{\n\t\t\t\t\t\tcontainer: {\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\tonclick: () => openInvoiceDetailPaymentModal()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t,[\n\t\t\t\t\t\telements.mobileButtonStack.item({\n\t\t\t\t\t\t\tlabel: [\n\t\t\t\t\t\t\t\tm(''\n\t\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t.tablet`\n\t\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t, 'Enter Payment Details'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t,onclick(){\n\t\t\t\t\t\t\t\topenInvoiceDetailPaymentModal()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\treturn m('div.harth.mb6', [\n\n\t\t\tm('br')\n\t\t\t,route_view_type() == 'Make Ledgers'\n\t\t\t|| route_view_type() == 'All Ledgers'\n\t\t\t\t? viewtype()()\n\t\t\t\t: [\n\t\t\t\t\tm('h4'\n\t\t\t\t\t\t,(\n\t\t\t\t\t\t\tloading()\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: editContractPermissions()\n\t\t\t\t\t\t\t\t\t? 'Edit - '\n\t\t\t\t\t\t\t\t\t: 'View - '\n\t\t\t\t\t\t)\n\t\t\t\t\t\t+ ( active.contract_name() || '' )\n\t\t\t\t\t)\n\n\t\t\t\t\t,missingPermissions()\n\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t`info`\n\t\t\t\t\t\t\t,'Detailed functionality requires '\n\t\t\t\t\t\t\t+ missingPermissions()\n\t\t\t\t\t\t\t+ ' permissions'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t\t,mainViewLinks()\n\n\t\t\t\t\t,elements.splitPane(focusViewA(), focusViewB())\n\n\t\t\t\t\t,!calculated()\n\t\t\t\t\t\t? elements.alert('warning', `Calculating the monetary value of ` + active.contract_name() + ` under the focused criteria`)\n\t\t\t\t\t\t: null\n\n\t\t\t\t\t,m('hr')\n\n\t\t\t\t\t,elements.list([\n\n\t\t\t\t\t\tactive.contract_id()\n\t\t\t\t\t\t\t? elements.backAnchor(\n\t\t\t\t\t\t\t\t`Back to Contract List`\n\t\t\t\t\t\t\t\t,null\n\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t, disabled: !calculated()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: m('a.btn.btn-warning', {\n\t\t\t\t\t\t\t\t\thref: '/data/contracts/contracts/view/forecastdateA/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateA()\n\t\t\t\t\t\t\t\t\t\t+ '/forecastdateB/'\n\t\t\t\t\t\t\t\t\t\t+ forecastdateB()\n\t\t\t\t\t\t\t\t\t, oncreate: m.route.link\n\t\t\t\t\t\t\t\t\t, title: \"Discard creation\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Discard'\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t,editContractPermissions()\n\t\t\t\t\t\t\t? elements.action(\n\t\t\t\t\t\t\t\t'Save'\n\t\t\t\t\t\t\t\t, sendContracts\n\t\t\t\t\t\t\t\t, savingProp\n\t\t\t\t\t\t\t\t, 'primary'\n\t\t\t\t\t\t\t\t, () => saveDisabled(true) || checkContractItem(true) || contractIdentical() || !calculated()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t,editContractPermissions() && active.contract_id()\n\t\t\t\t\t\t\t? m('button.btn.btn-warning'\n\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\tonclick: () => {\n\t\t\t\t\t\t\t\t\t\terrors({})\n\t\t\t\t\t\t\t\t\t\tcontract(\n\t\t\t\t\t\t\t\t\t\t\tfocussedContracts().find((c) =>\n\t\t\t\t\t\t\t\t\t\t\t\tc.contract_id == route_contract_id()\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tdeleteContractItems([])\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t, disabled: contractIdentical() || !calculated()\n\t\t\t\t\t\t\t\t\t, title: \"Discard Changes since last save\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t, 'Discard Changes'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t])\n\n\t\t\t\t\t,saveDisabled()\n\n\t\t\t\t\t,elements.splitPane(\n\t\t\t\t\t\t[\n\n\t\t\t\t\t\t\tm('br')\n\t\t\t\t\t\t\t,m(''+css`\n\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\tgap: 2em;\n\t\t\t\t\t\t\t\tmargin-bottom: 3em;\n\t\t\t\t\t\t\t\tflex-direction: column;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,[\n\t\t\t\t\t\t\t\t\tm('label.control-label.mb1.tc','Contract Name'\n\t\t\t\t\t\t\t\t\t\t,!editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t? elements.plainTxt(active.contract_name())\n\t\t\t\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t\t\t,() => active.contract_name()\n\t\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive.contract_name\n\t\t\t\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: !calculated()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t,m('label.control-label.mb1.tc','Contract Description'\n\t\t\t\t\t\t\t\t\t\t,!editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t? elements.plainTxt(active.contract_description())\n\t\t\t\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t\t\t,() => active.contract_description()\n\t\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\telements.textInput(\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive.contract_description\n\t\t\t\t\t\t\t\t\t\t\t\t\t, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: !calculated()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,m('label.control-label.mb1.tc','Contract Start Date'\n\t\t\t\t\t\t\t\t\t\t,!editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t? elements.plainTxt( moment( active.contract_start_date() ).format(\"ll\"))\n\t\t\t\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t\t\t,() => moment( active.contract_start_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive.contract_start_date\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: `Start date of the contract`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disabled: !calculated()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t,m('label.control-label.mb1.tc','Contract End Date'\n\t\t\t\t\t\t\t\t\t\t,!editContractPermissions()\n\t\t\t\t\t\t\t\t\t\t? elements.plainTxt(moment( active.contract_end_date() ).format(\"ll\"))\n\t\t\t\t\t\t\t\t\t\t: m.component(\n\t\t\t\t\t\t\t\t\t\t\tPencil\n\t\t\t\t\t\t\t\t\t\t\t,() => moment( active.contract_end_date() ).format(\"ll\")\n\t\t\t\t\t\t\t\t\t\t\t,() =>\n\t\t\t\t\t\t\t\t\t\t\t\telements.dateInput(\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive.contract_end_date\n\t\t\t\t\t\t\t\t\t\t\t\t\t,{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: `End date of the contract`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t,disabled: !calculated()\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t,m(''+css`\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t, invoiceinfo()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t]\n\t\t\t\t\t\t,[\n\t\t\t\t\t\t\telements.list([\n\t\t\t\t\t\t\t\tm('h4','Statistics')\n\t\t\t\t\t\t\t\t,reCalculateButton({spinner: false, forcereroute: true})\n\t\t\t\t\t\t\t\t// ,StatisticOptions()\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(contractItemSums() || {}, 'Revenue', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(contractItemSums() || {}, 'Expenditures', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,renderSummary(contractItemSums() || {}, 'Profits', dailyAverage, null, 'tabled', true, {style:{width: '10rem'}})\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,elements.list(R.intersperse(' | ', financialSummary.map((s) => m('p.tc', {style:{width: '10rem'}}, s))))\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\n\t\t\t\t\t,m('hr')\n\t\t\t\t\t,m('h4','Contract Items')\n\n\t\t\t\t\t,!contract()\n\t\t\t\t\t|| contract().contract_items.length\n\t\t\t\t\t&& !active.contract_items().length\n\t\t\t\t\t&& !deleteContractItems.length\n\t\t\t\t\t\t? elements.centeredSpinner()\n\t\t\t\t\t\t: [\n\n\t\t\t\t\t\t\tactive.contract_items().length\n\t\t\t\t\t\t\t? elements.list([\n\t\t\t\t\t\t\t\tgotfilters\n\t\t\t\t\t\t\t\t,contractItemsEditAll()\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t: null\n\n\t\t\t\t\t\t\t,!active.contract_items().length\n\t\t\t\t\t\t\t? m('.data'\n\t\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\t\tgrid-template-rows: 0.25fr 0.5fr;\n\t\t\t\t\t\t\t\t\tgrid-template-columns: 0.1fr 1fr 1fr;\n\t\t\t\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t\t\t\tmargin-right: 30%;\n\t\t\t\t\t\t\t\t\tmargin-left: 30%;\n\t\t\t\t\t\t\t\t\tmargin-top: 5em\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t,contractAdditions\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: checkContractItem()\n\n\t\t\t\t\t\t\t,m('br')\n\t\t\t\t\t\t\t,duplicatedContractItem(true)\n\t\t\t\t\t\t\t? elements.alert(\n\t\t\t\t\t\t\t\t`warning`\n\t\t\t\t\t\t\t\t,elements.details(\n\t\t\t\t\t\t\t\t\t`Duplicated Items`\n\t\t\t\t\t\t\t\t\t,duplicatedContractItem(true)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: m('br')\n\n\t\t\t\t\t\t\t,active.contract_items().length > 0\n\t\t\t\t\t\t\t\t? itemTable()\n\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t]\n\n\n\t\t\t\t]\n\t\t])\n\t}\n\n\n\n\n\tconst baseStats = {\n\t\tcurrentRevenue: 0\n\t\t,currentExpenditures: 0\n\t\t,currentProfits: 0\n\t\t,forecastedRevenue: 0\n\t\t,forecastedExpenditures: 0\n\t\t,forecastedProfits: 0\n\t\t,outstandingRevenue: 0\n\t\t,outstandingExpenditures: 0\n\t\t,outstandingProfits: 0\n\t\t,currentDailyPeriodRevenue: 0\n\t\t,currentDailyPeriodExpenditures: 0\n\t\t,forecastedDailyPeriodRevenue: 0\n\t\t,forecastedDailyPeriodExpenditures: 0\n\t\t,currentDailyPeriodProfits: 0\n\t\t,forecastedDailyPeriodProfits: 0\n\t\t,outstandingDailyPeriodRevenue: 0\n\t\t,outstandingDailyPeriodExpenditures: 0\n\t\t,outstandingDailyPeriodProfits: 0\n\t\t,currentDailyRevenue: 0\n\t\t,currentDailyExpenditures: 0\n\t\t,forecastedDailyRevenue: 0\n\t\t,forecastedDailyExpenditures: 0\n\t\t,currentDailyProfits: 0\n\t\t,forecastedDailyProfits: 0\n\t\t,outstandingDailyRevenue: 0\n\t\t,outstandingDailyExpenditures: 0\n\t\t,outstandingDailyProfits: 0\n\t\t,contractedDailyPeriodProgress: 0\n\t\t,contractedProgress: 0\n\t\t,contractedDailyProgress: 0\n\t\t,accruedExpenditures: 0\n\t\t,accruedRevenue: 0\n\t\t,accruedProfits: 0\n\t\t,accruedDailyRevenue: 0\n\t\t,accruedDailyExpenditures: 0\n\t\t,accruedDailyPeriodRevenue: 0\n\t\t,accruedDailyPeriodExpenditures: 0\n\t\t,accruedDailyProfits: 0\n\t\t,accruedDailyPeriodProfits: 0\n\t\t,budget: 0\n\t}\n\tvar filterFunction = {\n\t\tchangeNames: [\n\t\t\t{ugly_name: 'contractrecognitionname', better_name: \"Name\"}\n\t\t\t,{ugly_name: 'contractrecognitiondescription', better_name: \"Description\"}\n\t\t\t,{ugly_name: 'currentRevenue', better_name: 'Current Revenue'}\n\t\t\t,{ugly_name: 'forecastedRevenue', better_name: 'Forecasted Revenue'}\n\t\t\t,{ugly_name: 'forecastedExpenditures', better_name: 'Forecasted Expenditures'}\n\t\t\t,{ugly_name: 'currentExpenditures', better_name: 'Current Expenditures'}\n\t\t\t,{ugly_name: 'currentProfits', better_name: 'Current Revenue'}\n\t\t\t,{ugly_name: 'forecastedProfits', better_name: 'Forecasted Revenue'}\n\t\t\t,{ugly_name: 'contractedProgress', better_name: 'Contracted Progress'}\n\t\t\t,{ugly_name: 'outstandingRevenue', better_name: \"Requisition Revenue\"}\n\t\t\t,{ugly_name: 'outstandingExpenditures', better_name: \"Requisition Expenditures\"}\n\t\t\t,{ugly_name: 'outstandingProfits', better_name: \"Requisition Profits\"}\n\t\t\t,{ugly_name: 'currentDailyPeriodRevenue', better_name: 'Current Daily (Total) Revenue'}\n\t\t\t,{ugly_name: 'currentDailyPeriodExpenditures', better_name: 'Current Daily (Total) Expenditures'}\n\t\t\t,{ugly_name: 'forecastedDailyPeriodRevenue', better_name: 'Forecasted Daily (Total) Revenue'}\n\t\t\t,{ugly_name: 'forecastedDailyPeriodExpenditures', better_name: 'Forecasted Daily (Total) Expenditures'}\n\t\t\t,{ugly_name: 'currentDailyPeriodProfits', better_name: 'Current Daily (Total) Revenue'}\n\t\t\t,{ugly_name: 'forecastedDailyPeriodProfits', better_name: 'Forecasted Daily (Total) Revenue'}\n\t\t\t,{ugly_name: 'contractedDailyPeriodProgress', better_name: 'Contracted Daily (Total) Progress'}\n\t\t\t,{ugly_name: 'outstandingDailyPeriodRevenue', better_name: \"Requisition Daily (Total) Revenue\"}\n\t\t\t,{ugly_name: 'outstandingDailyPeriodExpenditures', better_name: \"Requisition Daily (Total) Expenditures\"}\n\t\t\t,{ugly_name: 'outstandingDailyPeriodProfits', better_name: \"Requisition Daily (Total) Profits\"}\n\t\t\t,{ugly_name: 'currentDailyRevenue', better_name: 'Current Daily (Working) Revenue'}\n\t\t\t,{ugly_name: 'currentDailyExpenditures', better_name: 'Current Daily (Working) Expenditures'}\n\t\t\t,{ugly_name: 'forecastedDailyRevenue', better_name: 'Forecasted Daily (Working) Revenue'}\n\t\t\t,{ugly_name: 'forecastedDailyExpenditures', better_name: 'Forecasted Daily (Working) Expenditures'}\n\t\t\t,{ugly_name: 'currentDailyProfits', better_name: 'Current Daily (Working) Revenue'}\n\t\t\t,{ugly_name: 'forecastedDailyProfits', better_name: 'Forecasted Daily (Working) Revenue'}\n\t\t\t,{ugly_name: 'contractedDailyProgress', better_name: 'Contracted Daily (Working) Progress'}\n\t\t\t,{ugly_name: 'outstandingDailyRevenue', better_name: \"Requisition Daily (Working) Revenue\"}\n\t\t\t,{ugly_name: 'outstandingDailyExpenditures', better_name: \"Requisition Daily (Working) Expenditures\"}\n\t\t\t,{ugly_name: 'outstandingDailyProfits', better_name: \"Requisition Daily (Working) Profits\"}\n\t\t\t,{ugly_name: 'invoice_client_reference', better_name: \"Payment Reference\"}\n\t\t\t,{ugly_name: 'accruedExpenditures', better_name: \"Accrued Expenditures\" }\n\t\t\t,{ugly_name: 'accruedRevenue', better_name: \"Accrued Revenue\" }\n\t\t\t,{ugly_name: 'accruedProfits', better_name: \"Accrued Profits\" }\n\t\t\t,{ugly_name: 'accruedDailyRevenue', better_name: \"Accrued Daily (Working) Revenue\" }\n\t\t\t,{ugly_name: 'accruedDailyExpenditures', better_name: \"Accrued Daily (Working) Expenditures\" }\n\t\t\t,{ugly_name: 'accruedDailyProfits', better_name: \"Accrued Daily (Working) Profits\" }\n\t\t\t,{ugly_name: 'accruedDailyPeriodRevenue', better_name: \"Accrued Daily (Total) Revenue\" }\n\t\t\t,{ugly_name: 'accruedDailyPeriodExpenditures', better_name: \"Accrued Daily (Total) Expenditures\" }\n\t\t\t,{ugly_name: 'accruedDailyPeriodProfits', better_name: \"Accrued Daily (Total) Profits\" }\n\t\t]\n\t\t,uniqueArrays: [\n\t\t\t{array_name: 'contract_items', unique: \"contract_items_id\"}\n\t\t]\n\t\t,template:\n\t\t\tR.merge(\n\t\t\t\t{\n\t\t\t\t\tcontract_name: \"\"\n\t\t\t\t\t,supplier_name: \"\"\n\t\t\t\t\t,contract_description: \"\"\n\t\t\t\t\t,contract_payment_term: 0\n\t\t\t\t\t,contract_count_invoices: true\n\t\t\t\t\t,contract_start_date: \"date\"\n\t\t\t\t\t,contract_end_date: \"date\"\n\t\t\t\t\t,client_organization_name: \"\"\n\t\t\t\t\t,client_incorporation_no: \"\"\n\t\t\t\t\t,client_email: \"\"\n\t\t\t\t\t,client_phone: \"\"\n\t\t\t\t\t,client_address: \"\"\n\t\t\t\t\t,client_state: \"\"\n\t\t\t\t\t,client_postcode: \"\"\n\t\t\t\t\t,account_bsb: \"\"\n\t\t\t\t\t,account_no: \"\"\n\t\t\t\t\t,account_bank: \"\"\n\t\t\t\t\t,contract_terms: \"\"\n\t\t\t\t\t,contract_items: [\n\t\t\t\t\t\tR.merge(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontract_items_name: \"\"\n\t\t\t\t\t\t\t\t,contract_items_description: \"\"\n\t\t\t\t\t\t\t\t,contract_items_client_reference: \"\"\n\t\t\t\t\t\t\t\t,contract_items_budget: 0\n\t\t\t\t\t\t\t\t,contract_items_rate: 0\n\t\t\t\t\t\t\t\t,contract_items_service: 0\n\t\t\t\t\t\t\t\t,contract_items_depreciation: 0\n\t\t\t\t\t\t\t\t,contract_items_appreciation: 0\n\t\t\t\t\t\t\t\t,contract_items_uom: \"\"\n\t\t\t\t\t\t\t\t,contract_items_damages_rate: 0\n\t\t\t\t\t\t\t\t,contract_items_damages_period: 0\n\t\t\t\t\t\t\t\t,contract_items_applied: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t,baseStats\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\t,baseStats\n\t\t\t)\n\t\t,baseTemplate:\n\t\t\tR.merge(\n\t\t\t\t{\n\t\t\t\t\tcontractrecognitionname: \"\"\n\t\t\t\t\t,contractrecognitiondescription: \"\"\n\t\t\t\t}\n\t\t\t\t,baseStats\n\t\t\t)\n\t\t,invoiceTemplate: {\n\t\t\tsupplier_name: \"\"\n\t\t\t,invoice_type: \"\"\n\t\t\t,invoice_date: \"date\"\n\t\t\t,invoice_received_date: \"date\"\n\t\t\t,invoice_due_date: \"date\"\n\t\t\t,project_name: \"\"\n\t\t\t,invoice_no: \"\"\n\t\t\t,invoice_inv_id:\"\"\n\t\t\t,invoice_received: true\n\t\t\t,invoice_name: \"\"\n\t\t\t,invoice_description: \"\"\n\t\t\t,invoice_client_reference: \"\"\n\t\t\t,invoice_items_client_reference: \"\"\n\t\t\t,invoice_uom: \"\"\n\t\t\t,invoice_amount_total: 0\n\t\t\t,invoice_total: 0\n\t\t\t,invoice_reversal: true\n\t\t\t,invoice_amount: 0\n\t\t\t,invoice_service_amount: 0\n\t\t\t,invoice_depreciation_amount: 0\n\t\t\t,invoice_appreciation_amount: 0\n\t\t\t,invoice_damages_amount: 0\n\t\t\t,invoice_rate: 0\n\t\t\t,invoice_service_rate: 0\n\t\t\t,invoice_depreciation_rate: 0\n\t\t\t,invoice_appreciation_rate: 0\n\t\t\t,invoice_damages_rate: 0\n\t\t\t,invoice_approval: true\n\t\t\t,invoice_approver: \"\"\n\t\t},\n\t}\n\n\n\tvar getfilters = function(button, marker){\n\t\tlet datainput =\n\t\t\tmarker == \"Contract\"\n\t\t\t\t? filterFunction.contractFilters\n\t\t\t\t: marker == \"Contract Items\"\n\t\t\t\t\t? filterFunction.contractItemsFilters\n\t\t\t\t\t: marker == \"Cross Contracts\"\n\t\t\t\t\t\t? filterFunction.allContractItemFilters\n\t\t\t\t\t\t: filterFunction.invoiceFilters\n\n\t\tif (datainput == null){\n\t\t\tfilterFunction.allContractItemFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.baseTemplate\n\t\t\t\t,disabled: () => contractEntities().length == 0\n\t\t\t},\n\t\t\tfilterFunction.contractFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template\n\t\t\t\t,disabled: () => focussedContracts().length == 0\n\t\t\t},\n\t\t\tfilterFunction.contractItemsFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.template.contract_items[0]\n\t\t\t\t,disabled: () =>\n\t\t\t\t\t!active.contract_items()\n\t\t\t\t\t|| active.contract_items && !active.contract_items().length\n\t\t\t}\n\t\t\tfilterFunction.invoiceFilters = {\n\t\t\t\tfilters: m.prop([])\n\t\t\t\t,operationalFilters: m.prop([])\n\t\t\t\t,changeNames: filterFunction.changeNames\n\t\t\t\t,uniqueArrays: filterFunction.uniqueArrays\n\t\t\t\t,template: filterFunction.invoiceTemplate\n\t\t\t\t,disabled: () => !focussedInvoices() || focussedInvoices().length == 0\n\t\t\t}\n\t\t\tdatainput =\n\t\t\t\tmarker == \"Contract\"\n\t\t\t\t\t? filterFunction.contractFilters\n\t\t\t\t\t: marker == \"Contract Items\"\n\t\t\t\t\t\t? filterFunction.contractItemsFilters\n\t\t\t\t\t\t: marker == \"Cross Contracts\"\n\t\t\t\t\t\t\t? filterFunction.allContractItemFilters\n\t\t\t\t\t\t\t: filterFunction.invoiceFilters\n\t\t}\n\t\tlet gotfilters = datainput == null ? null : datainput.operationalFilters(\n\t\t\tfilterView( datainput.template, datainput.filters(), datainput.changeNames, datainput.uniqueArrays, datainput.disabled, marker, data.scoped )\n\t\t)\n\t\tdatainput != null ? datainput.filters( gotfilters.filters ) : null\n\t\treturn gotfilters.generatedElements\n\t}\n\n\tprop.merge(\n\t\t[\n\t\t\tcurrentVersion\n\t\t]\n\t)\n\t.map(function([sv]){\n\t\tif ( !recordedFocus().schedules.length ){\n\t\t\tconst initFocus =\n\t\t\t\tsv && sv.schedule_version_id\n\t\t\t\t? schedules().map((s) => s.schedule_versions[0]).filter(R.identity)\n\t\t\t\t: []\n\n\t\t\tfocussedEntities(\n\t\t\t\t[].concat(\n\t\t\t\t\toverHEadVersion\n\t\t\t\t\t,initFocus\n\t\t\t\t)\n\t\t\t)\n\n\t\t\treturn recordedFocus({\n\t\t\t\tschedules: focussedEntities()\n\t\t\t\t\t.map((a) => ({\n\t\t\t\t\t\tsnv: a.scheduleNameVersion\n\t\t\t\t\t\t,dReceived: {\n\t\t\t\t\t\t\tcoalatedSelectedVersion: false\n\t\t\t\t\t\t\t,possibleContractEntities: false\n\t\t\t\t\t\t\t,focussedInvoices: false\n\t\t\t\t\t\t\t,allContractItems: false\n\t\t\t\t\t\t\t,allContracts: false\n\t\t\t\t\t\t}\n\t\t\t\t\t\t,schedule_version_id: a.schedule_version_id\n\t\t\t\t\t}))\n\t\t\t\t,dateA: forecastdateA()\n\t\t\t\t,dateB: forecastdateB()\n\t\t\t})\n\t\t}\n\t\treturn true\n\t})\n\n\n\t/* eslint-disable */\n\tprop.merge(\n\t\t[\n\t\t\tinitiateContractFetch\n\t\t]\n\t)\n\t.map(function([i]){\n\n\t\tconst redirection =\n\t\t\t!data.routeInitialized()['financials']\n\t\t\t&& !i.ochange\n\t\t\t&& !i.schange\n\n\t\tconst schange = i.schange || !data.routeInitialized()['financials']\n\t\tconst ochange = i.ochange || !data.routeInitialized()['financials']\n\t\tconst firstLoad = currentRoute() == 'Nothing'\n\n\t\tif( ochange || schange || redirection){\n\n\t\t\trecordedFocus().schedules = []\n\t\t\tloading(true)\n\t\t\tmetaDataIndexing(true)\n\t\t\tmetaDataLoading(true)\n\t\t\tinvoiceDataLoading(false)\n\t\t\trouteids({\n\t\t\t\trouteids: []\n\t\t\t\t, getledgers: false\n\t\t\t\t, financialsubsets: []\n\t\t\t\t, ledgerdetails:false\n\t\t\t\t, getmatdata: false\n\t\t\t\t, specificproject: null\n\t\t\t})\n\t\t\tcurrentRoute('financials')\n\t\t}\n\n\n\t\tif(\n\t\t\trouteParam().viewType == 'overview'\n\t\t\t|| (routeParam().viewType == 'contractitems' && (redirection || firstLoad))\n\t\t\t|| !viewWindow().length\n\t\t){\n\t\t\tviewWindow(\n\t\t\t\trouteParam().viewType == 'overview'\n\t\t\t\t? [\n\t\t\t\t\t'Projects'\n\t\t\t\t\t,'Resources'\n\t\t\t\t\t// ,'Teams'\n\t\t\t\t\t// ,'Team Capabilities'\n\t\t\t\t\t,'Tools'\n\t\t\t\t\t,'Users'\n\t\t\t\t\t,'Warehouses'\n\t\t\t\t\t,'Odin Modules'\n\t\t\t\t]\n\t\t\t\t: []\n\t\t\t)\n\t\t}\n\n\n\t\tif( ochange ){\n\t\t\tdata.focussedContracts([])\n\t\t\tdata.contractEntities([])\n\t\t\tdata.contracts([])\n\t\t}\n\n\n\t\t(\n\t\t\tredirection || firstLoad\n\t\t\t|| (routeParam().viewType == 'overview' && !routeParam().invoiceType)\n\t\t\t? Promise.all(\n\t\t\t\t[overHEadVersion]\n\t\t\t\t.concat(\n\t\t\t\t\tscheduleData\n\t\t\t\t\t.schedules().map((s) => s.schedule_versions[0])\n\t\t\t\t\t.filter(R.identity)\n\t\t\t\t)\n\t\t\t\t.map((sv) =>\n\t\t\t\t\tfetchCalculations({\n\t\t\t\t\t\tstartDate: forecastdateA()\n\t\t\t\t\t\t,endDate: forecastdateB()\n\t\t\t\t\t\t,currentRoute: 'financials'\n\t\t\t\t\t\t,scheduleonly: sv.schedule_version_id == \"Overheads\" ? '' : true\n\t\t\t\t\t\t,getchartdata:\n\t\t\t\t\t\t\trouteParam().viewType == 'overview'\n\t\t\t\t\t\t\t&& loadchart()[sv.schedule_version_id]\n\t\t\t\t\t\t\t? 'getcharts'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t,nochildren: true\n\t\t\t\t\t\t,scheduleList: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscheduleNameVersion: sv.scheduleNameVersion\n\t\t\t\t\t\t\t\t,schedule_priority: sv.schedule_priority\n\t\t\t\t\t\t\t\t,schedule_version_created: sv.schedule_version_created\n\t\t\t\t\t\t\t\t,schedule_version_id: sv.schedule_version_id\n\t\t\t\t\t\t\t\t,schedule_version_old_id: sv.schedule_version_old_id\n\t\t\t\t\t\t\t\t,schedules_parameters_id: sv.schedules_parameters_id\n\t\t\t\t\t\t\t\t,schedule_id: sv.schedule_id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t\t: Promise.resolve([])\n\t\t)\n\t\t.then(function(){\n\n\t\t\tloading(false)\n\t\t\tm.redraw()\n\t\t\tif( ochange || schange ){\n\t\t\t\terrors({})\n\t\t\t\tdeleteInvoiceItems([])\n\t\t\t\tdeleteContractItems([])\n\t\t\t\treMapdateChange(false)\n\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tochange\n\t\t\t\t? fetchContracts({})\n\t\t\t\t: Promise.resolve(contracts())\n\t\t\t)\n\t\t\t.then(function(res){\n\t\t\t\tdata.contracts(R.concat(res, [disconnectedcontract]))\n\t\t\t\tdata.focussedContracts(res)\n\t\t\t\tcalculated(true)\n\t\t\t\tloading(false)\n\n\t\t\t\treturn Promise.all([\n\t\t\t\t\t!ochange ? [] : fetchResource({\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t\t'contractor_id'\n\t\t\t\t\t\t\t\t,'contractor_name'\n\t\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t,teams: [\n\t\t\t\t\t\t\t\t'crew_id'\n\t\t\t\t\t\t\t\t,'crew_name'\n\t\t\t\t\t\t\t\t,'contractor_id'\n\t\t\t\t\t\t\t\t,'user_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t,rates: [\n\t\t\t\t\t\t\t\t'crews_discipline_rates_id'\n\t\t\t\t\t\t\t\t,'crews_discipline_rates_name'\n\t\t\t\t\t\t\t\t,'crews_discipline_rates_uom'\n\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t,'crew_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(resources)\n\t\t\t\t\t,(i.schange || ochange)\n\t\t\t\t\t&& i.schedule_id\n\t\t\t\t\t? fetchProjects({\n\t\t\t\t\t\tcompletedProjects: \"notcompleted\"\n\t\t\t\t\t\t, depth: 1\n\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\tprojects: [\n\t\t\t\t\t\t\t\t'project_id'\n\t\t\t\t\t\t\t\t,'project_name'\n\t\t\t\t\t\t\t\t,'schedule_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t,disciplines: [\n\t\t\t\t\t\t\t\t'discipline_id'\n\t\t\t\t\t\t\t\t,'discipline_name'\n\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t,'project_id'\n\t\t\t\t\t\t\t\t,'discipline_contract_multiplier'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(projects)\n\t\t\t\t\t: []\n\t\t\t\t\t,!ochange ? [] : fetchUsers()\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tR.concat([ nullUser ])\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then(users)\n\t\t\t\t\t,!ochange ? [] : fetchWarehouses({\n\t\t\t\t\t\tdepth: 1\n\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\twarehouses: [\n\t\t\t\t\t\t\t\t'warehouse_id'\n\t\t\t\t\t\t\t\t,'warehouse_name'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(warehouses)\n\t\t\t\t\t,!ochange ? [] : fetchTools({\n\t\t\t\t\t\tdepth: 1\n\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\ttools: [\n\t\t\t\t\t\t\t\t'tools_name'\n\t\t\t\t\t\t\t\t,'tools_id'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(tools)\n\t\t\t\t\t, []\n\t\t\t\t\t,!ochange ? [] : fetchOrganizationsDisciplines({\n\t\t\t\t\t\tdepth: 1\n\t\t\t\t\t\t, props: {\n\t\t\t\t\t\t\torganizations_disciplines: [\n\t\t\t\t\t\t\t\t'organizations_disciplines_name'\n\t\t\t\t\t\t\t\t,'organizations_disciplines_id'\n\t\t\t\t\t\t\t\t,'organizations_disciplines_uom'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(organizations_disciplines)\n\t\t\t\t])\n\t\t\t\t.then(function(data){\n\t\t\t\t\ti.ochange = false\n\t\t\t\t\ti.schange = false\n\n\t\t\t\t\tif(ochange || redirection || firstLoad){\n\t\t\t\t\t\treMapdateChange(false)\n\t\t\t\t\t\tmetaDataLoading(false)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true\n\t\t\t\t})\n\n\t\t\t})\n\t\t})\n\t})\n\n\tconst forceRedraw =\n\t\tasyncMergeAll(\n\t\t\t[\n\t\t\t\tviewStats\n\t\t\t\t,dailyAverage\n\t\t\t\t,calculated\n\t\t\t\t,errors\n\t\t\t\t,editContractPermissions\n\t\t\t\t,editInvoicePermissions\n\t\t\t\t,contractItemSums\n\t\t\t\t,checkMultiple\n\t\t\t\t,focussedInvoices\n\t\t\t\t,focussedContracts\n\t\t\t\t,route_original_contract_id\n\t\t\t\t,metaDataIndexing\n\t\t\t\t,invoiceDataLoading\n\t\t\t\t,loading\n\t\t\t\t,hiddenInvoiceData\n\t\t\t]\n\t\t).map(function(){\n\t\t\tsetTimeout(function(){\n\t\t\t\tm.redraw()\n\t\t\t}, 0)\n\t\t})\n\n\n\tconst dataProcessing = asyncMergeAll(\n\t\t[\n\t\t\tindexedContractEntities\n\t\t\t,focussedInvoices\n\t\t\t,focussedContracts\n\t\t\t,allContractItemsIndexByContractItemId\n\t\t\t,loading\n\t\t]\n\t).map(([e, c, s, l]) => {\n\n\t\tconst done =\n\t\t\trecordedFocus().schedules.every((sch) => {\n\t\t\t\tconst loaded =\n\t\t\t\t\troute_view_type() == 'All Items'\n\t\t\t\t\t|| route_view_type() == 'Overview'\n\t\t\t\t\t? sch.dReceived['possibleContractEntities']\n\t\t\t\t\t: route_view_type() == 'All Ledgers'\n\t\t\t\t\t? sch.dReceived['focussedInvoices']\n\t\t\t\t\t: route_view_type() == 'All Contracts'\n\t\t\t\t\t&& (\n\t\t\t\t\t\tm.route.param('contract_id')\n\t\t\t\t\t\t|| m.route.get().indexOf('create') > - 1\n\t\t\t\t\t\t|| m.route.get().indexOf('clone') > -1\n\t\t\t\t\t)\n\t\t\t\t\t? sch.dReceived['allContractItems']\n\t\t\t\t\t: sch.dReceived['allContracts']\n\n\t\t\t\tsch.loaded = loaded\n\n\t\t\t\treturn loaded\n\t\t\t})\n\t\t\t\t? calculated(true)\n\t\t\t\t: calculated(false)\n\n\t\tif (done){\n\n\t\t\ttotalOverview({\n\t\t\t\tscheduleNameVersion: ''\n\t\t\t\t,currentProfits: R.sum(focussedEntities().map(R.path(['odinsum', 'currentProfits'])))\n\t\t\t\t,odincount: R.sum(focussedEntities().map(R.path(['odinitems', 'length'])))\n\t\t\t\t,invoicecount: R.sum(focussedEntities().map(R.path(['odinsum', 'invoicecount'])))\n\t\t\t\t,odinitems: R.unnest(focussedEntities().map(R.path(['odinitems'])))\n\t\t\t})\n\n\t\t\treMapdateChange(true)\n\t\t}\n\n\t\treturn done\n\t})\n\n\n\t/* eslint-enable */\n\n\ttry {\n\n\t\tlet {\n\t\t\tviewType\n\t\t\t,modeType\n\t\t\t,invoiceType\n\t\t\t,contractId\n\t\t\t,focus\n\t\t} = routeParam()\n\n\n\t\terrors({})\n\t\t// reMapSelectedVersion(false)\n\n\t\t// var fdateA = m.route.param('forecastdateA')\n\t\t// var fdateB = m.route.param('forecastdateB')\n\n\t\t// if(fdateA){\n\t\t// \tforecastdateA(Number(fdateA))\n\t\t// }\n\n\t\t// if(fdateB){\n\t\t// \tforecastdateB(Number(fdateB))\n\t\t// }\n\n\t\tif(viewType != route_view_type()){\n\t\t\tselectedInvoices([])\n\t\t\tactiveItem({})\n\t\t\tcheckMultiple({})\n\t\t\tcheckMultipleContracts({})\n\t\t\terrors({})\n\t\t}\n\n\t\tif ( modeType == 'create' ) {\n\t\t\tactive.contract_id(null)\n\t\t\tactive.contract_name(null)\n\t\t\tactive.contract_description(null)\n\t\t\tactive.contract_payment_term(42)\n\t\t\tactive.contract_count_invoices(true)\n\t\t\tactive.contract_start_date( new Date().getTime() )\n\t\t\tactive.contract_end_date( new Date().getTime() + 365 * milliperday )\n\t\t\tactive.client_organization_name(null)\n\t\t\tactive.client_incorporation_no(null)\n\t\t\tactive.client_email(null)\n\t\t\tactive.client_phone(null)\n\t\t\tactive.client_address(null)\n\t\t\tactive.client_state(null)\n\t\t\tactive.client_postcode(null)\n\t\t\tactive.account_bsb(null)\n\t\t\tactive.account_no(null)\n\t\t\tactive.account_bank(null)\n\t\t\tactive.account_bic(null)\n\t\t\tactive.account_iban(null)\n\t\t\tactive.account_swift_code(null)\n\t\t\tactive.contract_terms(null)\n\t\t\troute_original_contract_id( null )\n\t\t} else if (modeType == 'clone') {\n\t\t\troute_original_contract_id( contractId )\n\t\t} else if (modeType == 'edit') {\n\t\t\troute_contract_id( contractId )\n\t\t\troute_original_contract_id( null )\n\t\t} else {\n\t\t\troute_contract_id( null )\n\t\t\troute_original_contract_id( null )\n\t\t}\n\n\t\tfocus_schedules(focus.split(','))\n\n\t\tif ( invoiceType ){\n\t\t\tinvoiceDataLoading(false)\n\t\t\troute_view_type('All Ledgers')\n\t\t\tinvoiceWindow(R.uniq(invoiceType.split(',')))\n\t\t\tfocussedInvoices([])\n\t\t\tprevview(viewType)\n\t\t\tm.redraw()\n\t\t} else if ( viewType == 'contracts' ){\n\t\t\troute_view_type('All Contracts')\n\t\t\tinvoiceWindow('')\n\t\t\tfocussedInvoices([])\n\t\t\tprevview(viewType)\n\t\t\treMapdateChange(false)\n\t\t\tm.redraw()\n\t\t} else if ( viewType == 'contractitems' ) {\n\t\t\t// route_view_type() != 'All Ledgers'\n\t\t\t// || prevview() == 'overview'\n\t\t\t// \t? viewWindow(['Projects'])\n\t\t\t// \t: null\n\n\t\t\troute_view_type('All Items')\n\t\t\tinvoiceWindow('')\n\t\t\tfocussedInvoices([])\n\t\t\tprevview(viewType)\n\t\t\t// reMapdateChange(false)\n\t\t\tm.redraw()\n\t\t} else if ( viewType == 'overview') {\n\t\t\tinvoiceWindow('')\n\t\t\tif( !metaDataLoading() ){\n\t\t\t\tviewWindow([\n\t\t\t\t\t'Projects'\n\t\t\t\t\t,'Resources'\n\t\t\t\t\t,'Teams'\n\t\t\t\t\t,'Team Capabilities'\n\t\t\t\t\t,'Tools'\n\t\t\t\t\t,'Users'\n\t\t\t\t\t,'Warehouses'\n\t\t\t\t\t,'Odin Modules'\n\t\t\t\t])\n\t\t\t\treMapdateChange(false)\n\t\t\t}\n\t\t\troute_view_type('Overview')\n\t\t\tfocussedInvoices([])\n\t\t\tprevview(viewType)\n\t\t\tm.redraw()\n\t\t}\n\n\n\t} catch (e) {\n\t\tdebugger\n\t}\n\n\n\treturn {\n\t\tview(){\n\t\t\treturn m('div', [\n\t\t\t\troute_contract_id()\n\t\t\t\t|| m.route.get().indexOf('create') > - 1\n\t\t\t\t|| m.route.get().indexOf('clone') > -1\n\t\t\t\t\t? ContractEditsOrAdditions()\n\t\t\t\t\t: m.route.get().indexOf('overview') > -1\n\t\t\t\t\t&& m.route.get().indexOf('ledger') <= -1\n\t\t\t\t\t? Overview()\n\t\t\t\t\t: ContractSummary()\n\t\t\t\t,DetailsPane(\n\t\t\t\t\tdetailsPaneOpen\n\t\t\t\t\t,Object.keys(checkMultiple()).length > 1\n\t\t\t\t\t|| selectedInvoices().length > 1 && route_view_type() != 'Make Ledgers'\n\t\t\t\t\t\t? 'Edit Multiple Items'\n\t\t\t\t\t\t: route_view_type() == 'All Contracts' && activeItem().contract_items_name\n\t\t\t\t\t\t\t? activeItem().contract_items_name()\n\t\t\t\t\t\t\t: activeItem().invoice_name && route_view_type() == 'All Ledgers'\n\t\t\t\t\t\t\t\t? activeItem().invoice_name()\n\t\t\t\t\t\t\t\t: route_view_type() == 'All Contracts'\n\t\t\t\t\t\t\t\t\t? 'Value Summation of Selected Contracts'\n\t\t\t\t\t\t\t\t\t: 'Value Summation of Selected Items'\n\t\t\t\t\t,() => detailPaneInputs()\n\t\t\t\t)\n\t\t\t])\n\t\t}\n\t}\n}\n\n\n\nexport default contractsRoute\n","/* globals process, location, window */\nimport css from 'bss'\nimport * as elements from '../components/elements'\nimport m from 'bacta'\nimport * as R from 'ramda'\nimport NotificationBar from '../components/notification'\nimport Form from '../components/form'\n\nconst alert = NotificationBar.Notifications.alertError\n\nconst glow = css\n\t.$keyframes({\n\t\tfrom: {\n\t\t\t'box-shadow': '0px 0px 10px 2px rgba(255,255,255,0.5)'\n\t\t\t,'transform': 'translateY(0px)'\n\t\t}\n\t\t,to: {\n\t\t\t'box-shadow': '0px 0px 20px 2px rgba(255,255,255,0.1)'\n\t\t\t,'transform': 'translateY(0px)'\n\t\t}\n\t})\n\nconst fadeIn = css\n\t.$keyframes({\n\t\tfrom: 'opacity: 0'\n\t\t,to: 'opacity: 1'\n\t})\n\nconst formLayout = (...children) =>\n\tm('.form-layout'\n\t\t+ css`\n\t\t\tdisplay: grid;\n\t\t\tjustify-content: center;\n\t\t\talign-content: center;\n\t\t`\n\t\t.$nest('*', `\n\t\t\tmax-width: 40em;\n\t\t`)\n\t\t, children\n\t)\n\nconst modalForm = (selector, ...children) =>\n\tm('.modal-form'\n\t\t+ css`\n\t\t\tbackground-color: white;\n\n\t\t\tdisplay: grid;\n\t\t\tmin-width: 21em;\n\t\t\tgap: 3em;\n\t\t\tpadding: 2em;\n\t\t\tjustify-content: normal;\n\t\t\tanimation ${fadeIn} 1s, ${glow} 5s ease-in-out alternate infinite;\n\t\t`\n\t\t.desktop(`\n\t\t\tborder-radius: 0.25em;\n\t\t\tmin-width: 32em;\n\t\t\tpadding: 3em;\n\t\t`)\n\t\t.$nest('input', `\n\t\t\t--size: 2em;\n\t\t`)\n\t\t+ selector\n\t\t, children\n\t)\n\nconst fatButton = (\n\tselector\n\t, ...args\n) =>\n\tm(\n\t\t( selector || 'button.btn.btn-primary' )\n\t\t+ fatButton.css\n\t\t,...args\n\t)\n\nfatButton.css =\n\tcss`\n\t\tborder: none;\n\t\tpadding: 0.7em;\n\t\tcolor: white;\n\t\tbackground-color: var(--theme, blue);\n\t\tfont-size: 1.2em;\n\t\tborder-radius: 0.2em;\n\t\ttransition: 0.5s;\n\t`\n\t.$hover(`\n\t\tcolor: var(--theme);\n\t\tbox-shadow: 0 0 0px 1px var(--theme) inset;\n\t\tbackground-color: white;\n\t`)\n\t.$disabled(`\n\t\tcolor: white;\n\t`)\n\nfunction NavBar(){\n\tconst link =\n\t\tcss\n\t\t\t.c('white')\n\t\t\t.textDecoration('none')\n\t\t\t.$visited(css.c('white'))\n\n\treturn {\n\t\tview(){\n\t\t\t// @ts-ignore\n\t\t\treturn m('nav'\n\t\t\t\t+ css`\n\t\t\t\t\tbackground-color: #030207;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\theight: 3.5em;\n\t\t\t\t\talign-content: center;\n\t\t\t\t\tborder-bottom: solid 2px #140927;\n\t\t\t\t\tpadding: 0em 0.5em;\n\t\t\t\t\tpadding-right: 0.8em;\n\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\ttransform: translateY(-100%);\n\t\t\t\t`\n\t\t\t\t.$animate('ease-in-out 0.2s 1s forwards', {\n\t\t\t\t\tto: {\n\t\t\t\t\t\ttransform: 'translateY(0%)'\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t, m('img'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tmax-height: 2.5em;\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t`\n\t\t\t\t\t.$animate('ease-in-out 0.5s 1.2s forwards', {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\topacity: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t, { src: 'https://odin.harth.io/assets/android-icon-192x192.png' })\n\t\t\t\t, m('ul'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tlist-style: none;\n\t\t\t\t\t\talign-content: center;\n\t\t\t\t\t\tjustify-content: end;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t\ttransform: translateX(100%);\n\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t`\n\t\t\t\t\t.$animate('ease-in-out 0.5s 1.4s forwards', {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\ttransform: `translateX(0%)`\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t, location.href.includes('/access/login')\n\t\t\t\t\t|| m('li'\n\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\tlist-style: none;\n\t\t\t\t\t\t`\n\t\t\t\t\t\t, m('a' + link\n\t\t\t\t\t\t\t, { href: '/access/login', oncreate: m.route.link }\n\t\t\t\t\t\t\t, 'Login'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t, m('li'\n\t\t\t\t\t\t, m('a' + link\n\t\t\t\t\t\t\t, { href: process.env.HARTH_MARKETING_URL + '/odin/signup/' }\n\t\t\t\t\t\t\t, 'Sign up'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t,m('li'\n\t\t\t\t\t\t, m('a' + link\n\t\t\t\t\t\t\t, { href: process.env.HARTH_MARKETING_URL }\n\t\t\t\t\t\t\t, 'About'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunction Login({ attrs: {data} }){\n\n\tconst loading = m.prop(false)\n\tconst success = m.prop(false)\n\tconst error = m.prop(false)\n\n\tconst user_username = m.prop(null)\n\tconst form = {\n\t\tuser_username\n\t\t,user_email: user_username\n\t}\n\n\tasync function onsubmit(){\n\t\tloading(true)\n\n\t\tlet payload = JSON.parse(JSON.stringify(form))\n\n\t\ttry {\n\n\t\t\tawait data.api.auths.magicLink(payload)\n\t\t\tloading(false)\n\t\t\tsuccess(true)\n\t\t} catch (e) {\n\t\t\tloading(false)\n\t\t\talert( e.message )\n\t\t\terror('Try Again')\n\t\t}\n\t}\n\n\tfunction view(){\n\t\treturn formLayout(\n\t\t\tmodalForm(\n\t\t\t\tcss``\n\t\t\t\t, m('h3'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-weight: 700;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t`\n\t\t\t\t\t, success() ? 'Thank you!' : 'Welcome to Odin'\n\t\t\t\t)\n\t\t\t\t,success()\n\t\t\t\t? m('p'+ css`text-align: center;`, 'Please check your email for a login link')\n\t\t\t\t: m(Form, { onsubmit: onsubmit },\n\t\t\t\t\t() => [\n\t\t\t\t\t\telements.formInput([\n\t\t\t\t\t\t\t'Username or Email'\n\t\t\t\t\t\t\t, form.user_username\n\t\t\t\t\t\t\t,{ type: 'text'\n\t\t\t\t\t\t\t, autofocus: true\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t, m('.btns'\n\t\t\t\t\t\t\t+ css`\n\t\t\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\t\t\tgap: 0.5em;\n\t\t\t\t\t\t\t\t--theme: ${ error() ? 'red' : 'inherit' }\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t, fatButton(\n\t\t\t\t\t\t\t\t'button[type=submit]'\n\n\t\t\t\t\t\t\t\t, {disabled: loading()}\n\t\t\t\t\t\t\t\t, error() || 'Login via Email'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction Verify({ attrs: { data } }){\n\tlet vm = {\n\t\tmessage: m.prop(\"Please wait while we verify your account\")\n\t}\n\tlet id = m.route.param('user_id')\n\tlet token = m.route.param('user_verification_token')\n\n\tdata.api.users.patch.verification_token(token, id)\n\t\t.then(function(){\n\t\t\tvm.message([\n\t\t\t\t'Your Account has been validated, please '\n\t\t\t\t,m('a', { style: { textDecoration: 'underline' }, href: '/access/login', oncreate: m.route.link }, 'Log In')\n\t\t\t\t,' to complete the verification process.'\n\t\t\t])\n\t\t\tm.redraw()\n\t\t})\n\t\t.catch(function(){\n\t\t\tvm.message('Sorry, your verification token does not seem to be valid. It may have expired.')\n\t\t\tm.redraw()\n\t\t})\n\n\tconst ctrl = {vm}\n\n\treturn {\n\t\tview(){\n\t\t\treturn formLayout(\n\t\t\t\tmodalForm(''\n\t\t\t\t\t, m(''\n\t\t\t\t\t\t, m('h4', 'Welcome to Odin!')\n\t\t\t\t\t\t, m('.message', ctrl.vm.message())\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t}\n}\n\nfunction SignUp({ attrs: {data} }){\n\n\tconst pending = data.scoped(false)\n\n\tfunction submit(){\n\t\tpending(true)\n\t\treturn data.api.users.create.signup(payload())\n\t\t\t.then(function(){\n\t\t\t\tm.route.set('/access/checkEmail/verify')\n\t\t\t})\n\t\t\t.catch(function(error){\n\t\t\t\talert( error.message )\n\t\t\t})\n\t\t\t.finally( () => pending( false ))\n\t}\n\n\tconst form = data.scoped({\n\t\tuser_email: ''\n\t\t,user_username: ''\n\t\t,user_name: ''\n\t\t,user_password: ''\n\t\t,user_password2: ''\n\t})\n\n\tconst errors = data.scoped({})\n\tconst values = data.scoped({})\n\n\tconst validate = ({ user_password: a, user_password2: b }) =>\n\t\ta != b\n\t\t? {\n\t\t\t'user_password2': 'Passwords do not match!'\n\t\t}\n\t\t: {}\n\n\tconst payload = R.pipe(\n\t\t() => values()\n\t\t,R.omit(['user_password2'])\n\t\t,JSON.stringify\n\t\t,JSON.parse\n\t)\n\n\tconst view = () =>\n\t\tformLayout(\n\t\t\tmodalForm(\n\t\t\t\tcss.desktop(\n\t\t\t\t\tcss`\n\t\t\t\t\t\tmin-width: 30em;\n\t\t\t\t\t\tpadding 2em 3em;\n\t\t\t\t\t`\n\t\t\t\t)\n\t\t\t\t, m('h3'\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tfont-weight: 700\n\t\t\t\t\t`\n\t\t\t\t\t, 'Welcome to Odin'\n\t\t\t\t)\n\t\t\t\t, m(Form\n\t\t\t\t\t,\n\t\t\t\t\t{ onsubmit: submit\n\t\t\t\t\t, initialValues: form\n\t\t\t\t\t, values\n\t\t\t\t\t, errors\n\t\t\t\t\t, validate\n\t\t\t\t\t}\n\n\t\t\t\t\t, ({ values, changed, errored }) => [\n\t\t\t\t\t\telements.formInput([\n\t\t\t\t\t\t\t'Email Address'\n\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t,{ type: 'email'\n\t\t\t\t\t\t\t, placeholder: \"admin@yourorganization.com\"\n\t\t\t\t\t\t\t, autofocus: true\n\t\t\t\t\t\t\t, title: 'The email address we will use to reset your password and to notify you of alerts relating to your Odin data.'\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t, name: 'user_email'\n\t\t\t\t\t\t\t, value: values.user_email\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,elements.formInput([\n\t\t\t\t\t\t\t'Username'\n\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t,{ type: 'text'\n\t\t\t\t\t\t\t, placeholder: 'JGreenwood'\n\t\t\t\t\t\t\t, title: 'Used to assign you to tasks and refer to you throughout Odin'\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t, name: 'user_username'\n\t\t\t\t\t\t\t, value: values.user_username\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,elements.formInput([\n\t\t\t\t\t\t\t'Name'\n\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t,{ type: 'text'\n\t\t\t\t\t\t\t, placeholder: 'Jonny Greenwood'\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t, name: 'user_name'\n\t\t\t\t\t\t\t, value: values.user_name\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,elements.formInput([\n\t\t\t\t\t\t\t'Password'\n\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t,{ type: 'password'\n\t\t\t\t\t\t\t, minlength: 6\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t, name: 'user_password'\n\t\t\t\t\t\t\t, value: values.user_password\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t,elements.formInput([\n\t\t\t\t\t\t\t'Re-enter Password'\n\t\t\t\t\t\t\t, null\n\t\t\t\t\t\t\t,{ type: 'password'\n\t\t\t\t\t\t\t, title: 'Confirm your password by entering it again.'\n\t\t\t\t\t\t\t, required: true\n\t\t\t\t\t\t\t, name: 'user_password2'\n\t\t\t\t\t\t\t, value: values.user_password2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t\t, fatButton(\n\t\t\t\t\t\t\t'input[type=submit]'\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t{ disabled:\n\t\t\t\t\t\t\t\t!changed()\n\t\t\t\t\t\t\t\t|| errored()\n\t\t\t\t\t\t\t\t|| pending()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t, 'Create Account'\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\n\treturn { view }\n}\n\n\nfunction Forgot({ attrs: {data} }){\n\tlet form = { user_username: m.prop() }\n\tform.user_email = form.user_username\n\n\tlet submit = function(){\n\t\tdata.api.mail.create.forgottenPassword(form)\n\t\t\t.then(function(){\n\t\t\t\tm.route.set('/access/checkEmail/forgot')\n\t\t\t})\n\t\t\t.catch(function(e){\n\t\t\t\talert( e.message )\n\t\t\t})\n\t}\n\n\tconst ctrl = {form, submit}\n\n\tfunction view(){\n\t\treturn formLayout(\n\t\t\tmodalForm(\n\t\t\t\tcss`\n\t\t\t\t\t& * {\n\t\t\t\t\t\tmargin: 0em;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t,m('h4', 'Password Reset')\n\t\t\t\t,elements.formInput(['Username or Email', ctrl.form.user_username, { type: 'text' } ])\n\t\t\t\t,m('.info'\n\t\t\t\t\t,m('p', 'After you hit reset a verification email will be set to the email account you used to create your Harth account.')\n\t\t\t\t\t,m('p', 'The link in that email will re-direct you to a secure screen to create a new password.')\n\t\t\t\t)\n\t\t\t\t,m('button.btn.btn-primary', { onclick: ctrl.submit }, 'Reset'),\n\t\t\t)\n\t\t)\n\t}\n\n\treturn {\n\t\tview\n\t}\n}\n\nfunction Invite({ attrs: { data } }){\n\n\tconst omit = R.omit\n\tconst redraw = () => m.redraw()\n\tconst routeParam= k => m.route.param(k)\n\tconst form =\n\t\t{ user_email: m.prop( routeParam('user_email') )\n\t\t, invite_id: m.prop( routeParam('invite_id') )\n\t\t, user_id: m.prop( routeParam('user_id') )\n\t\t, user_name: m.prop('')\n\t\t, user_username: m.prop('')\n\t\t, user_password: m.prop('')\n\t\t, user_password2: m.prop('')\n\t\t}\n\n\t/**\n\t * @typedef $State\n\t * @property {function} VerifyingURL\n\t * @property {function} VerifiedExistingUser\n\t * @property {function} InvalidURL\n\t * @property {function} SavingForm\n\t * @property {function} EditingSignUpForm\n\t * @property {function} UnexpectedError\n\t */\n\n\t/**\n\t * @type {$State}\n\t */\n\tconst State =\n\t\t{ VerifyingURL: () => [State.VerifyingURL]\n\t\t, VerifiedExistingUser:\n\t\t\t(organization_name) =>\n\t\t\t\t[State.VerifiedExistingUser, organization_name]\n\t\t, InvalidURL: (why) => [State.InvalidURL, why]\n\t\t, SavingForm: () => [State.SavingForm]\n\t\t, EditingSignUpForm: () => [State.EditingSignUpForm]\n\t\t, UnexpectedError: () => [State.UnexpectedError]\n\t\t}\n\n\tconst model =\n\t\t{ verifyURL(){\n\t\t\tdata.api.invites.ok(\n\t\t\t\tform.user_id()\n\t\t\t\t? { invite_email: form.user_email()\n\t\t\t\t, invite_id: form.invite_id()\n\t\t\t\t, user_id: form.user_id()\n\t\t\t\t}\n\t\t\t\t: {invite_email: form.user_email()\n\t\t\t\t, invite_id: form.invite_id()\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then(function({ ok, message, organization_name }){\n\t\t\t\treturn state$(\n\t\t\t\t\tok\n\t\t\t\t\t? form.user_id()\n\t\t\t\t\t\t? State.VerifiedExistingUser(organization_name)\n\t\t\t\t\t\t: State.EditingSignUpForm()\n\t\t\t\t\t: State.InvalidURL( message )\n\t\t\t\t)\n\t\t\t})\n\t\t\t.catch(function(e){\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconsole.error(e)\n\n\t\t\t\tstate$( State.UnexpectedError() )\n\t\t\t})\n\n\t\t\treturn State.VerifyingURL()\n\t\t}\n\t\t, urlInterpreter(){\n\t\t\treturn form.user_email()\n\t\t\t\t&& form.invite_id()\n\t\t\t\t? model.verifyURL()\n\t\t\t\t: State.InvalidURL()\n\t\t}\n\t\t, invalid(){\n\n\t\t\tconst all_filled =\n\t\t\t\tObject.keys(form)\n\t\t\t\t.filter( k => k != 'user_id')\n\t\t\t\t.every( k => form[k]() )\n\n\t\t\tconst matching_passwords =\n\t\t\t\tform.user_password() == form.user_password2()\n\n\t\t\tconst atLeast6 =\n\t\t\t\tform.user_password().length > 6\n\n\t\t\tconst valid_email =\n\t\t\t\t/.+@.+\\..{2,3}/.test(form.user_email() || \"\")\n\n\t\t\treturn {\n\t\t\t\tvalid_email\n\t\t\t\t,matching_passwords\n\t\t\t\t,all_filled\n\t\t\t\t,atLeast6\n\t\t\t\t,invalid: !(\n\t\t\t\t\tvalid_email\n\t\t\t\t\t&& atLeast6\n\t\t\t\t\t&& matching_passwords\n\t\t\t\t\t&& all_filled\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t, submitSignUp(){\n\n\t\t\tstate$(State.SavingForm())\n\n\t\t\tPromise.resolve(form)\n\t\t\t\t.then( JSON.stringify )\n\t\t\t\t.then( JSON.parse )\n\t\t\t\t.then( omit(['user_password2']) )\n\t\t\t\t.then( data.api.invites.accept )\n\t\t\t\t.then(function(response){\n\t\t\t\t\tdata.auth.stream(\n\t\t\t\t\t\tdata.auth.type.LoggedInOf(\n\t\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\t\tJSON.stringify(response)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\tdata.reroute(data.auth.stream())\n\t\t\t\t})\n\t\t\t\t.catch(function(error){\n\t\t\t\t\tstate$( State.EditingSignUpForm() )\n\t\t\t\t\talert(error.message)\n\t\t\t\t})\n\t\t}\n\t\t}\n\n\tconst state$ =\n\t\tdata.scoped(model.urlInterpreter())\n\n\tstate$.map( () => redraw() )\n\n\tconst vw =\n\t\t{ form(){\n\n\t\t\tconst {\n\t\t\t\tall_filled\n\t\t\t\t, matching_passwords\n\t\t\t\t, valid_email\n\t\t\t\t, invalid\n\t\t\t} = model.invalid()\n\n\t\t\treturn [\n\t\t\t\tm(\n\t\t\t\t\t'' + css`\n\t\t\t\t\t\tmax-width: 40em;\n\t\t\t\t\t\tmax-height: 56vh;\n\t\t\t\t\t\toverflow-y: auto;\n\t\t\t\t\t`\n\t\t\t\t\t,[[ 'Email'\n\t\t\t\t\t, form.user_email\n\t\t\t\t\t, { type: 'email'\n\t\t\t\t\t, className: valid_email\n\t\t\t\t\t\t? 'validate'\n\t\t\t\t\t\t: 'validate invalid'\n\t\t\t\t\t, onupdate: ({ dom }) =>\n\t\t\t\t\t\tdom.setCustomValidity(\n\t\t\t\t\t\t\tvalid_email\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: 'An email must have a domain'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t\t,[ 'Name'\n\t\t\t\t\t, form.user_name\n\t\t\t\t\t, { type: 'text'\n\t\t\t\t\t, className:\n\t\t\t\t\t\t'validate'\n\t\t\t\t\t, required: true\n\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t\t, ['Username'\n\t\t\t\t\t, form.user_username\n\t\t\t\t\t,{ type: 'text'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, className: 'validate'\n\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t\t,[ 'Password'\n\t\t\t\t\t, form.user_password\n\t\t\t\t\t, { type: 'password'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, className: 'validate'\n\t\t\t\t\t, onupdate: ({ dom }) =>\n\t\t\t\t\t\tdom.setCustomValidity(\n\t\t\t\t\t\t\t!matching_passwords\n\t\t\t\t\t\t\t? 'Both passwords fields must be equal.'\n\t\t\t\t\t\t\t: form.user_password().length < 6\n\t\t\t\t\t\t\t? 'The password must be at least 6 characters'\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t\t,[ 'Retype Password'\n\t\t\t\t\t, form.user_password2\n\t\t\t\t\t,{ type:'password'\n\t\t\t\t\t, required: true\n\t\t\t\t\t, className: 'validate'\n\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t\t].map(elements.formInput)\n\t\t\t\t)\n\t\t\t\t,m(''\n\t\t\t\t\t+ css`\n\t\t\t\t\t\tdisplay: grid;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tgrid-auto-flow: column;\n\t\t\t\t\t\tgap: 1em;\n\t\t\t\t\t`\n\t\t\t\t\t,m(\n\t\t\t\t\t\t'button.btn.btn-primary'\n\t\t\t\t\t\t, { onclick: model.submitSignUp\n\t\t\t\t\t\t, title:\n\t\t\t\t\t\t\tall_filled\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: 'Please fill in all form fields'\n\t\t\t\t\t\t, disabled: invalid\n\t\t\t\t\t\t}\n\t\t\t\t\t\t, 'Sign up'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t]\n\t\t}\n\n\t\t, saving_form(){\n\t\t\treturn elements.centeredSpinner()\n\t\t}\n\n\t\t, unexpected_state(){\n\t\t\treturn m(''\n\t\t\t\t,['We are very sorry, but the app has entered '\n\t\t\t\t, 'an unexpected state and we do not know how to '\n\t\t\t\t, 'recover. '\n\t\t\t\t,m('br')\n\t\t\t\t, 'Please contact '\n\t\t\t\t, m('a[href=mailto:support@harth.io]',\n\t\t\t\t\t\t'support@harth.io'\n\t\t\t\t)\n\t\t\t\t, ' for assistance.'\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\n\t\t, invalid_url(){\n\t\t\treturn m(''\n\t\t\t\t,[ 'I cannot interpret the URL used to load this page.'\n\t\t\t\t, ' Please contact '\n\t\t\t\t, m('a[href=mailto:support@harth.io]'\n\t\t\t\t\t, 'support@harth.io'\n\t\t\t\t)\n\t\t\t\t, ' for assistance.'\n\t\t\t\t]\n\t\t\t)\n\t\t}\n\n\t\t, verifiying_url(){\n\t\t\treturn elements.centeredSpinner()\n\t\t}\n\t\t, verifiedExisting([ _, organization_name]){\n\n\t\t\treturn m(\n\t\t\t\t'p.vw_verifiedExisting', [\n\t\t\t\t\t'Your invite has been verified. '\n\t\t\t\t\t, 'You are now a member of the'\n\t\t\t\t\t, organization_name\n\t\t\t\t\t, 'organization.'\n\t\t\t\t]\n\t\t\t\t.join(' ')\n\t\t\t)\n\t\t}\n\t\t, view(){\n\t\t\tconst [$State] = state$()\n\n\t\t\treturn formLayout(\n\t\t\t\tmodalForm(css`\n\t\t\t\t\tgap: 1em;\n\t\t\t\t`,\n\t\t\t\t\tm('h4', 'Welcome to Odin!')\n\t\t\t\t\t,{ [ State.EditingSignUpForm.name ]:\n\t\t\t\t\t\tvw.form()\n\t\t\t\t\t, [ State.InvalidURL.name ]:\n\t\t\t\t\t\tvw.invalid_url()\n\t\t\t\t\t, [ State.SavingForm.name ]:\n\t\t\t\t\t\tvw.saving_form()\n\t\t\t\t\t, [ State.VerifyingURL.name ]:\n\t\t\t\t\t\tvw.verifiying_url()\n\t\t\t\t\t, [ State.UnexpectedError.name ]:\n\t\t\t\t\t\tfalse\n\t\t\t\t\t, [ State.VerifiedExistingUser.name ]:\n\t\t\t\t\t\tvw.verifiedExisting( state$() )\n\t\t\t\t\t}[ $State.name ]\n\t\t\t\t\t|| vw.unexpected_state()\n\t\t\t\t)\n\n\t\t\t)\n\t\t}\n\t\t}\n\n\treturn {\n\t\tview: vw.view\n\t}\n}\n\nfunction CheckEmail(){\n\n\tfunction view(){\n\t\tlet message_type = m.route.param('message_type') || 'generic'\n\n\t\tlet message = {\n\t\t\tverify: \"We've sent a verification email to the address you provided.\"\n\t\t\t,forgot: \"If your email exists in our system we will send you an email to reset your password. It will arrive at the email address you provided when you created your account.\"\n\t\t\t,generic: \"Please check your inbox. We've sent you some something.\"\n\t\t}[message_type]\n\n\t\treturn formLayout(\n\t\t\tmodalForm('', m('h4.dib', message ))\n\t\t)\n\t}\n\n\treturn { view }\n}\n\n\nfunction Reset({ attrs: {data} }){\n\n\tlet form = {\n\t\tuser_password: m.prop(\"\")\n\t\t,auth_token: m.prop(m.route.param('auth_token'))\n\t}\n\n\tlet user_id = m.route.param('user_id')\n\n\tif( !form.auth_token || !user_id ){\n\t\tm.route.set('/access/forgot')\n\t}\n\tlet vm = { user_password2: m.prop(\"\") }\n\n\tlet success = m.prop(false)\n\n\tlet submit = function(){\n\t\tlet all_filled = Object.keys(form).every( k => form[k]() )\n\t\tlet matching_passwords = vm.user_password2() == form.user_password()\n\n\t\tif(!all_filled) {\n\t\t\talert('Please fill in all the form fields')\n\t\t\treturn;\n\t\t}\n\t\tif(!matching_passwords) {\n\t\t\talert('The passwords you entered do not match')\n\t\t\treturn;\n\t\t}\n\n\t\tdata.api.users.patch.password(\n\t\t\tform.auth_token()\n\t\t\t, user_id\n\t\t\t, form.user_password()\n\t\t)\n\t\t\t.then(function(){\n\t\t\t\tsuccess(true)\n\t\t\t\tm.redraw()\n\t\t\t})\n\t\t\t.catch(function(e){\n\t\t\t\talert( e.message )\n\t\t\t\tm.redraw()\n\t\t\t})\n\t}\n\n\tfunction formView(){\n\t\treturn [\n\t\t\tm('h4', 'Please enter a new password')\n\t\t\t,m('br')\n\t\t\t,elements.formInput(['Password', form.user_password, { type: 'password' } ])\n\t\t\t,elements.formInput(['Confirm Password', vm.user_password2, { type: 'password' } ])\n\t\t\t,m('button.btn.btn-primary', { onclick: submit }, 'Reset Password')\n\t\t]\n\t}\n\n\tfunction loginView(){\n\t\tm.route.set('/access/login')\n\t\treturn m('',\n\t\t\t'You have succesfully reset your password.'\n\t\t\t,m('p', m('a', { style: {color: 'white', textDecoration: 'underline' }, href: '/access/login', oncreate: m.route.link }, 'Log In'))\n\t\t)\n\n\n\t}\n\n\tfunction view(){\n\t\treturn formLayout(\n\t\t\tmodalForm(''\n\t\t\t\t,success()\n\t\t\t\t? loginView()\n\t\t\t\t: formView()\n\t\t\t)\n\t\t)\n\t}\n\n\treturn { view }\n}\n\nfunction Access(){\n\n\tconst night = css.$keyframes({\n\t\tfrom: {\n\t\t filter: `brightness(0)`\n\t\t}\n\n\t\t,to: {\n\t\t filter: `brightness(1)`\n\t\t}\n\t})\n\n\tconst fadeInBg = css.$keyframes({\n\t\tfrom: {\n\t\t opacity: `0`\n\t\t}\n\t\t,to: {\n\t\t opacity: `1`\n\t\t}\n\t})\n\n\tconst res = Math.max(1000, Math.floor(window.innerWidth / 300) * 300)\n\t// todo-james self host\n\tconst workers_on_site = `https://images.unsplash.com/photo-1541888946425-d81bb19240f5?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=${res}&q=80`\n\tconst workers_orange_bg = `https://images.unsplash.com/photo-1563257764-ec4bd2983cbe?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=${res}&q=80`\n\tconst workers_aerial_mesh = `https://images.unsplash.com/photo-1533378890784-b2a5b0a59d40?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=${res}&q=80`\n\tconst purple_sky=`https://images.unsplash.com/photo-1485083269755-a7b559a4fe5e?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=${res}&q=80`\n\tconst complex_architecture=`https://images.unsplash.com/photo-1603909417128-a6214fdea26c?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=${res}&q=80`\n\tconst orange_windows_city=`https://images.unsplash.com/photo-1578088369622-b26f899a016e?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=${res}&q=80`\n\n\tconst urls = [\n\t\tworkers_on_site, workers_orange_bg, workers_aerial_mesh\n\t\t,purple_sky, complex_architecture, orange_windows_city\n\t]\n\tconst i = Math.floor(Date.now() / 10000 % urls.length )\n\tconst url = urls[i]\n\tconst bgImage = css`\n\t\tbackground-image: url(\"${url}\");\n\t\tbackground-size: cover;\n\t\tbackground-position: bottom;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100vw;\n\t\theight: 100vh;\n\t\topacity: 0;\n\t\tz-index: 0;\n\t\tanimation: ${fadeInBg} 1s 1s forwards, ${night} 10s 1s;\n\t`\n\n\treturn {\n\t\tonbeforeremove: css.$animate.out('ease-in-out 1s forwards', {\n\t\t\t'0%': {\n\t\t\t\tposition: 'absolute'\n\t\t\t\t,top: '0px'\n\t\t\t\t,left: '0px'\n\t\t\t\t,width: '100vw'\n\t\t\t\t,height: '100vh'\n\t\t\t\t,opacity: 1\n\t\t\t\t,zIndex: 1\n\t\t\t}\n\t\t\t,'1%': {\n\t\t\t\tposition: 'absolute'\n\t\t\t\t,opacity: 1\n\n\t\t\t}\n\t\t\t,'100%': {\n\t\t\t\topacity: 0\n\t\t\t\t,zIndex: 1\n\t\t\t}\n\t\t})\n\t\t,view: ({ attrs }) =>\n\t\t\tm('.whatever'\n\t\t\t\t+ css`\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tdisplay: grid;\n\t\t\t\t\tgrid-template-rows: auto 1fr;\n\t\t\t\t\t--theme: #643fea;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 0px;\n\t\t\t\t\tleft: 0px;\n\t\t\t\t\twidth: 100vw;\n\t\t\t\t\theight: 100vh;\n\t\t\t\t`\n\t\t\t\t,m('.bg-image'\n\t\t\t\t\t+ bgImage\n\t\t\t\t)\n\t\t\t\t, m(NavBar)\n\t\t\t\t, attrs.mode == 'Login'\n\t\t\t\t\t? m(Login, R.omit(['key'], attrs))\n\t\t\t\t: attrs.mode == 'Verify'\n\t\t\t\t\t? m(Verify, R.omit(['key'], attrs))\n\t\t\t\t: attrs.mode == 'SignUp'\n\t\t\t\t\t? m(SignUp, R.omit(['key'], attrs ))\n\t\t\t\t: attrs.mode == 'Forgot'\n\t\t\t\t\t? m(Forgot, R.omit(['key'], attrs ))\n\t\t\t\t: attrs.mode == 'CheckEmail'\n\t\t\t\t\t? m(CheckEmail, R.omit(['key'], attrs ))\n\t\t\t\t: attrs.mode == 'Reset'\n\t\t\t\t\t? m(Reset, R.omit(['key'], attrs ))\n\t\t\t\t: attrs.mode == 'Invite'\n\t\t\t\t\t? m(Invite, R.omit(['key'], attrs ))\n\t\t\t\t\t: null\n\t\t\t)\n\t}\n}\n\nexport default Access","/* global document addEventListener window, localStorage, Promise */\nimport {} from './env-setup'\nimport {} from './polyfills'\nimport {} from './mithril-compat'\nimport m from 'bacta'\nimport * as H from '../../how'\nimport css from 'bss'\nimport SQL from './modules/sql'\nimport * as R from 'ramda'\nimport API from './modules/api'\nimport auth from './modules/auth'\nimport AuthPermissions from './modules/auth_permissions'\nimport { prop } from '../../stream'\nimport ScheduleModel from './models/schedules'\nimport ContractModel from './models/contracts'\nimport traverse from 'traverse'\nimport * as Loadable from '../../types/loadable'\nimport assign from 'lodash/assign'\nimport Features from './models/features'\nimport * as details from './components/detailspane2'\nimport * as ContextBar from './components/context-bar'\nimport * as topnav from './components/topnav'\nimport Modal from './components/modal'\nimport renderStream from './utils/render-stream'\nimport modalStream from './utils/modal-stream'\n\nimport * as ModalStack from './components/modal-stack'\n\nimport request from './request'\n\nimport consentModalService from './services/consents'\nimport authExpiry from './services/auth-expiry'\nimport onFirstAuthSuccess from './services/on-first-auth-success'\n\nimport ContractorsRoute from './modules/contractors'\nimport ProjectsRoute from './modules/projects'\nimport FlowsRoute from './modules/flows'\nimport InterruptionsRoute from './modules/interruptions'\nimport WarehousesRoute from './modules/warehouses'\nimport ToolsRoute from './modules/tools'\nimport UpdatesRoute from './modules/updates'\nimport ExportsRoute from './modules/exports'\nimport PaymentsRoute from './modules/payments'\n\nimport OrganizationsRoute2 from './modules/organizations2'\nimport Files from './modules/files'\nimport Dashboard from './modules/dashboard'\nimport Schedules from './modules/schedule'\nimport Contracts from './modules/contracts'\nimport NotificationBar from './components/notification'\nimport Access from './modules/access2'\nimport colors from './utils/colors'\nimport Organizations from './models/organizations'\n\n\ncss.setDebug(true)\ncss.$animate.out = (time, styles) => ({ dom }) => new Promise(res => {\n\tdom.addEventListener('animationend', res, { once: true })\n\tdom.classList.add(css.$animate(time, styles))\n})\ncss.helper('hd', x =>\n\tcss.$media('(min-width: 1800px)', x)\n)\ncss.helper('desktop', x =>\n\tcss.$media('(min-width: 1000px)', x)\n)\ncss.helper('tablet', x =>\n css.$media('(min-width: 700px)', x)\n)\ncss.helper('thinTablet', x =>\n css.$media('(min-width: 600px)', x)\n)\ncss.helper('mouse', x =>\n\tcss.$media('(hover:hover)', x)\n)\ncss.helper('touch', x =>\n\tcss.$media('(hover:none)', x)\n)\n\ncss.thinTablet(\n\tcss.$nest('body', `\n\t\t--context-bar-height: 10em;\n\t`)\n)\n\ncss.css({\n\t'body': `\n\t\t--top-nav-alert: 0em;\n\t\t--color-dark: #24394b;\n\n\t\t--color-light: #e6eefa;\n\t\t--color-selected: #f1f9ff;\n\t\t--color-muted: #f1f9ff;\n\t\t--color-empty: #577288;\n\t\t--color-github-selected: #4078C0;\n\t\t--top-nav-height: calc(6.5em + var(--top-nav-alert));\n\t\t--color-mid: rgb(12, 15, 39);\n\t\t--color-blackboard: hsl(254, 72%, 5%);\n\t\t--top-nav-alert: 0em;\n\t\t--context-bar-height: 7em;\n\t\tposition: fixed;\n\t\theight: 100%;\n\t`\n\t,'body.alerted': `\n\t\t--top-nav-alert: 4em;\n\t`\n})\n\n\nNotificationBar.component(\n\tdocument.querySelector('#notification-bar-container')\n)\n\n{\n\t// migrate from old url scheme\n\tconst firstHash = window.location.hash.replace('#', '')\n\n\t// todo-james could this just be `startsWith('/')`?\n\tif(\n\t\tfirstHash.startsWith('/dashboard')\n\t\t|| firstHash.startsWith('/data')\n\t\t|| firstHash.startsWith('/access')\n\t){\n\t\twindow.location.href = firstHash\n\t}\n}\n\nPromise.resolve().then(\n\t() => {\n\t\tmodalStream.map(\n\t\t\tx => {\n\t\t\t\t// duplicate history so back button dismisses modal\n\t\t\t\tif( x && x.dismissable ) {\n\t\t\t\t\twindow.history.pushState(null, '', window.location.href)\n\t\t\t\t\tm.redraw()\n\t\t\t\t} else {\n\t\t\t\t\tm.redraw()\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t)\n\t\twindow.addEventListener('popstate', () => {\n\t\t\tif( modalStream() && modalStream().dismissable ) {\n\t\t\t\tmodalStream(null)\n\t\t\t}\n\t\t})\n\t}\n)\n\naddEventListener('resize', () => m.redraw())\n\nconst GANTT_PREFERENCES = {\n\thidden: 'rgba(0,0,0,0.5)'\n\t,middle: colors.mid\n\t,dark: colors.dark\n\t,font: colors.light\n\t,muted: colors.muted\n\t,link: colors.light\n}\n\nconst DEFAULT_PREFERENCES = {\n\thidden: 'white'\n\t,middle: 'rgb(246, 246, 246)'\n\t,dark: 'white'\n\t,font: 'black'\n\t,muted: 'black'\n\t,link: '#212d39'\n}\n\nconst preferences = prop(DEFAULT_PREFERENCES)\nfunction Scoped(ends){\n\tfunction scoped(...args){\n\t\tconst s = prop(...args)\n\n\t\tif(ends){\n\t\t\tends.push(s)\n\t\t}\n\t\treturn s\n\t}\n\n\n\tscoped['clone'] = function(stream){\n\n\n\t\tconst n = stream.map(function(i){\n\t\t\treturn i\n\t\t})\n\n\t\tn.map(function(v){\n\t\t\tif( R.equals(stream(), n()) ){\n\t\t\t} else {\n\t\t\t\tstream(v)\n\t\t\t}\n\n\t\t\treturn null\n\n\t\t})\n\n\t\tif(ends){\n\t\t\tends.push(n)\n\t\t}\n\n\t\treturn n\n\t}\n\n\treturn scoped\n}\n\nconst resize$ = prop()\n{\n\twindow.addEventListener( 'resize', onresize )\n\tfunction onresize(){\n\t\tresize$( Date.now() )\n\t}\n\tonresize()\n}\nwindow.resize$ = resize$\n\nconst onRouteChange = function({ Route }, originalData){\n\n\tconst route = Route.toURL(Route.get())\n\n\tif( route.indexOf('/dashboard') > -1 ){\n\t\tpreferences(GANTT_PREFERENCES)\n\t} else {\n\t\tpreferences(DEFAULT_PREFERENCES)\n\t}\n\n\tconst matchesOne = R.any( part => route.indexOf(part) > - 1)\n\n\t// routes that don't need an auth token\n\tconst accessRoutes = [\n\t\t\"/access/login\"\n\t\t,\"/access/verify\"\n\t\t,\"/access/forgot\"\n\t\t,\"/access/reset\"\n\t\t,\"/access/checkEmail\"\n\t\t,'/access/invite'\n\t,]\n\n\t// routes that trigger a logout\n\tconst logoutRoutes = [\n\t\t\"/access/login\"\n\t\t,\"/access/forgot\"\n\t]\n\n\tconst isAccessRoute = matchesOne(accessRoutes)\n\tconst isLogoutRoute = matchesOne(logoutRoutes)\n\n\tconst loggedOut =\n\t\toriginalData.auth.stream().case({\n\t\t\tLoggedIn: () => false\n\t\t\t,LoggedOut: () => true\n\t\t\t,Refresh: () => false\n\t\t})\n\n\tconst loggedIn =\n\t\toriginalData.auth.stream().case({\n\t\t\tLoggedIn: () => true\n\t\t\t,LoggedOut: () => false\n\t\t\t,Refresh: () => false\n\t\t})\n\n\tconst redirect = !isAccessRoute && loggedOut\n\n\tif(redirect){\n\t\tlocalStorage.setItem('route-before-logout', m.route.get())\n\t\tm.route.set('/access/login')\n\t}\n\n\tif(!redirect && !isLogoutRoute && loggedIn ){\n\n\t\t// test if the token has expired on every route change\n\t\t// users is just an endpoint that would need an auth token\n\t\t// and would fail if their token had expired\n\n\t\t;( originalData.organizations.organization_id()\n\t\t\t? originalData.api.auths.get()\n\t\t\t\t.then(async function(response){\n\n\t\t\t\t\tauth.stream(\n\t\t\t\t\t\tauth.type.LoggedInOf(response)\n\t\t\t\t\t)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { sql } = originalData\n\n\t\t\t\t\t\t// destructured expression works\n\t\t\t\t\t\tconst users = await sql`\n\t\t\t\t\t\t\tselect user_username, user_id, user_email from users\n\t\t\t\t\t\t`\n\n\t\t\t\t\t\t// member expression works\n\t\t\t\t\t\tconst orgs = await originalData.sql`\n\t\t\t\t\t\t\tselect organization_name from organizations\n\t\t\t\t\t\t`\n\n\t\t\t\t\t\t// and fetching projects for good measure\n\t\t\t\t\t\tconst projects = await sql`\n\t\t\t\t\t\t\tselect project_name from projects\n\t\t\t\t\t\t`\n\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\tconsole.log({ users, orgs, projects })\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t: originalData.api.auths.ping()\n\t\t)\n\t\t\t.catch(function(error){\n\t\t\t\tNotificationBar.Notifications.alertError(error)\n\t\t\t\tm.route.set('/access/login')\n\t\t\t})\n\t}\n\n\tlet ends = []\n\tconst scoped = Scoped(ends)\n\n\n\t// parameterize component with data object\n\n\n\tfunction scopeStreams (a){\n\t\tif( a === modalStream ){\n\t\t\treturn modalStream\n\t\t} else if( prop.isStream(a) ){\n\n\t\t\treturn scoped.clone(a)\n\n\t\t} else {\n\t\t\treturn a\n\t\t}\n\t}\n\n\tconst componentData =\n\t\ttraverse(originalData)\n\t\t\t.map( scopeStreams )\n\n\tcomponentData.scoped = scoped;\n\n\tif(isLogoutRoute){\n\t\toriginalData.auth.stream( originalData.auth.type.LoggedOutOf({}) )\n\t\toriginalData.organizations.organization_id(null)\n\t\toriginalData.organizations.organization_name(null)\n\t}\n\n\twindow.addEventListener('touchmove', function(e){\n\t\tif ( e.touches.length > 1 ){\n\t\t\te.preventDefault()\n\t\t}\n\t}, { passive: false })\n\n\treturn {\n\t\tview({ attrs: { attrs, render } }){\n\t\t\treturn auth.isRefresh()\n\t\t\t\t? null\n\t\t\t\t: render({ ...attrs, data: componentData })\n\t\t}\n\t\t, onbeforeremove(){\n\t\t\tends.forEach(\n\t\t\t\ts => prop.end(s)\n\t\t\t)\n\n\t\t\t// clear the ends list\n\t\t\tends.splice(0, ends.length)\n\t\t}\n\t}\n}\n\nconst layout = component => attrs => {\n\n\tconst features = () =>\n\t\tattrs.data.getState().features\n\n\tconst contentManager =\n\t\tx => m('.content-manager'\n\t\t\t+ css`\n\t\t\t\tmargin: 0em;\n\t\t\t\tbackground-color: white;\n\t\t\t\tmax-height: calc( 100vh - var(--top-nav-height) );\n\t\t\t\tmin-height: calc( 100vh - var(--top-nav-height) );\n\t\t\t\toverflow-y: auto;\n\t\t\t\toverflow-x: hidden;\n\t\t\t\tborder-radius: 0em;\n\t\t\t\tpadding: 1em;\n\t\t\t`\n\t\t\t// only use this once, for the top level component of a route\n\t\t\t// it allows a route to opt into grid, which is only\n\t\t\t// necessary because not all components render correctly\n\t\t\t// with a grid parent right now\n\t\t\t.$nest('.grid-content-full-height', `\n\t\t\t\tdisplay: grid;\n\t\t\t\tmin-height: calc(100vh - var(--top-nav-height) - 2em )\n\t\t\t\tpadding-bottom: var(--context-bar-height);\n\t\t\t`)\n\t\t\t,x\n\t\t)\n\n\tconst nav =\n\t\tm(topnav.component, attrs)\n\n\trenderStream(Date.now())\n\n\treturn m('.app' + css`\n\t\t\tposition: relative;\n\t\t\toverflow: hidden;\n\t\t\topacity: 0;\n\t\t`\n\t\t.$animate('ease-in-out 1s 0.2s forwards', {\n\t\t\t'0%': 'opacity: 0;'\n\t\t\t,'1%': 'opacity: 0;'\n\t\t\t,'100%': 'opacity: 1;'\n\t\t})\n\t\t,m('.layout'+css`\n\t\t\t--harth-blue: rgb(19, 15, 60);\n\t\t\theight: 100vh;\n\t\t\tbackground-color: #1b1a26;\n\t\t`\n\t\t\t,nav\n\t\t\t,contentManager(m(component, attrs))\n\t\t\t,m('.details'\n\t\t\t\t// // todo-james this span magically stops mithril from\n\t\t\t\t// // remounting the details pane when cloning in updates\n\t\t\t\t// // not sure why, but I think it's related to our misuse of\n\t\t\t\t// // arrays as fragments when migrating from 0.2x\n\t\t\t\t// // could totally disappear when going to mithril v2\n\t\t\t\t// // so retest then\n\t\t\t\t// ,m('span')\n\t\t\t\t,details.stream() ( features() )\n\n\t\t\t)\n\t\t\t,m(ContextBar.Portal)\n\t\t)\n\t\t,m('.overlay' + css`\n\t\t\tbackground-color: #110b17;\n\t\t\ttransition: 0.2s;\n\t\t\ttransform: translate3d(0,0,0);\n\t\t\tposition: absolute;\n\t\t\ttop: 0px;\n\t\t\tleft: 0px;\n\t\t\twidth: 100vw;\n\t\t\theight: 100vh;\n\t\t\tz-index: 2;\n\t\t`\n\t\t+ css`\n\t\t\topacity: ${ modalStream() ? '0.85' : '0' };\n\t\t\tpointer-events: ${ modalStream() ? 'inherit' : 'none' };\n\t\t`\n\t\t, {\n\t\t\tonclick() {\n\t\t\t\tif( modalStream() && modalStream().dismissable ) {\n\t\t\t\t\twindow.history.back()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t)\n\t\t,modalStream() && typeof modalStream().content === 'function'\n\t\t\t? m(Modal,\n\t\t\t\tR.mergeAll([\n\t\t\t\t\t{ content: modalStream().content }\n\t\t\t\t\t,modalStream().offset ? { offset: modalStream().offset } : {}\n\t\t\t\t])\n\t\t\t)\n\t\t\t: null\n\t\t, m(ModalStack.Overlay)\n\t\t, m(ModalStack.Main)\n\t)\n}\n\nconst remountOnHrefChange = Component => {\n\treturn function(){\n\t\treturn {\n\t\t\tview({ attrs }){\n\t\t\t\treturn m(Component\n\t\t\t\t\t, Object.assign({}, attrs, {key: m.route.get()})\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n\nH.start({\n\tdefaultRoute: x => x.Autodirect()\n\t,container: window.container\n\t,routes: {\n\t\tResources: [\n\t\t\t'/data/resources', () => layout(ContractorsRoute)\n\t\t]\n\t\t,Projects: [\n\t\t\t'/data/projects',() => layout(ProjectsRoute)\n\t\t]\n\t\t,Workflows: [\n\t\t\t'/data/workflows',() => layout(FlowsRoute)\n\t\t]\n\t\t,Interruptions: [\n\t\t\t'/data/interruptions',() => layout(InterruptionsRoute)\n\t\t]\n\t\t,Financials: [\n\t\t\t'/data/contracts/',() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsCreate: [\n\t\t\t'/data/contracts/contracts/create/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsClone: [\n\t\t\t'/data/contracts/contracts/clone/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsView: [\n\t\t\t'/data/contracts/contracts/view/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsViewLedgers: [\n\t\t\t'/data/contracts/contracts/view/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB/ledger/:contract_id'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsEdit: [\n\t\t\t'/data/contracts/contracts/edit/:contract_id/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsEditLedgers: [\n\t\t\t'/data/contracts/contracts/edit/:contract_id/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB/ledger/:contract_items_id'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsItems: [\n\t\t\t'/data/contracts/contractitems/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsItemsLedgers: [\n\t\t\t'/data/contracts/contractitems/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB/ledger/:contractrecognitionid'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsOverviewLedgers: [\n\t\t\t'/data/contracts/overview/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB/'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,FinancialsFocussedLedgers: [\n\t\t\t'/data/contracts/overview/forecastdateA/:forecastdateA/forecastdateB/:forecastdateB/focus/:focus/ledger/:contractrecognitionid'\n\t\t\t,() => layout(remountOnHrefChange(Contracts))\n\t\t]\n\t\t,Materials: [\n\t\t\t'/data/materials',() => layout(WarehousesRoute)\n\t\t]\n\t\t,Tools: [\n\t\t\t'/data/tools',() => layout(ToolsRoute)\n\t\t]\n\t\t,Updates: [\n\t\t\t'/data/updates',() => layout(UpdatesRoute)\n\t\t]\n\t\t,ScheduleVersion: [\n\t\t\t'/data/exports/:schedule_id/schedule_versions/:schedule_version_id'\n\t\t\t, () => layout(ExportsRoute)\n\t\t]\n\t\t,Exports: [\n\t\t\t'/data/exports'\n\t\t\t, () => layout(ExportsRoute)\n\t\t]\n\t\t,Payments: [\n\t\t\t'/data/payments'\n\t\t\t, () => layout(PaymentsRoute)\n\t\t]\n\t\t,Organizations2: [\n\t\t\t'/admin/organizations'\n\t\t\t, () => layout(OrganizationsRoute2)\n\t\t]\n\t\t,Invites: [\n\t\t\t'/access/invite', () => attrs => m(Access, { ...attrs, mode: 'Invite', key: 'access-2' })\n\t\t]\n\t\t,Login: [\n\t\t\t'/access/login', () => attrs => m(Access, { ...attrs, mode: 'Login', key: 'access-2' })\n\t\t]\n\t\t,Verify: [\n\t\t\t'/access/verify', () => attrs => m(Access, { ...attrs, mode: 'Verify', key: 'access-2' })\n\t\t]\n\t\t,Forgot: [\n\t\t\t'/access/forgot', () => attrs => m(Access, { ...attrs, mode: 'Forgot', key: 'access-2' })\n\t\t]\n\t\t,Reset: ['/access/reset', () => attrs => m(Access, { ...attrs, mode: 'Reset', key: 'access-2' })]\n\n\t\t,CheckEmailType: [\n\t\t\t'/access/checkEmail/:message_type'\n\t\t\t, () => attrs => m(Access, { ...attrs, mode: 'CheckEmail', key: 'access-2' })\n\t\t]\n\n\t\t,CheckEmail: [\n\t\t\t'/access/checkEmail'\n\t\t\t, () => attrs => m(Access, { ...attrs, mode: 'CheckEmail', key: 'access-2' })\n\t\t]\n\n\t\t,ScheduleClone: [\n\t\t\t'/data/schedules/clone/schedule_parent/:schedule_parent'\n\t\t\t,() => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,Schedule: [\n\t\t\t'/data/schedules/:schedule_id'\n\t\t\t,() => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,ScheduleCreate: [\n\t\t\t'/data/schedules/create'\n\t\t\t,() => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,Schedules: [\n\t\t\t'/data/schedules', () => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,ScheduleParameter: [\n\t\t\t'/data/schedules_parameters/:schedules_parameters_id'\n\t\t\t,() => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,ScheduleParameters: [\n\t\t\t'/data/schedules_parameters', () => layout(remountOnHrefChange(Schedules))\n\t\t]\n\t\t,Autodirect: [\n\t\t\t'/autodirect', () => layout(Dashboard)\n\t\t]\n\t\t,HomeEmpty: [\n\t\t\t'/dashboard', () => layout(Dashboard)\n\t\t]\n\t\t,HomeVersion: [\n\t\t\t'/dashboard/:organization_id/:schedule_id/:schedule_version_id'\n\t\t\t, () => layout(Dashboard)\n\t\t]\n\t\t,HomeSchedule: [\n\t\t\t'/dashboard/:organization_id/:schedule_id', () => layout(Dashboard)\n\t\t]\n\t\t,HomeOrganization: [\n\t\t\t'/dashboard/:organization_id', () => layout(Dashboard)\n\t\t]\n\t\t,Files: [\n\t\t\t'/data/files', () => (attrs) => m(Files, attrs)\n\t\t]\n\t}\n\t,services({ $, Route }){\n\n\t\tconst organizations = Organizations(auth, $)\n\n\t\torganizations.organization_name.map(function(organization_name){\n\n\t\t\tif( typeof trackJs != 'undefined' ){\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\ttrackJs.addMetadata(\n\t\t\t\t\t\"organization_name\", organization_name\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn null\n\t\t})\n\n\t\tconst organization = organizations.organization\n\t\tconst organization_id = organizations.organization_id\n\n\t\tconst auth_permissions =\n\t\t\tAuthPermissions(auth.stream, organization_id)\n\n\t\t\torganization_id(null)\n\n\t\tconst api = API(auth.stream, organization_id)\n\n\t\tconst permissions = prop.dropRepeats(auth_permissions)\n\n\t\tconst initial = {\n\t\t\tapi\n\t\t\t, organization\n\t\t\t, organization_id\n\t\t\t, permissions\n\t\t}\n\n\t\twindow['expose'] = function expose(){\n\t\t\twindow['prop'] = prop\n\t\t\twindow['R'] = R\n\t\t\twindow['m'] = m\n\t\t\twindow['H'] = H\n\t\t\twindow['css'] = css\n\t\t\twindow['data'] = originalData\n\t\t\twindow['initial'] = initial\n\t\t}\n\n\t\tconst scheduleData = ScheduleModel(initial)\n\n\t\t// todo-james this is a hack to ensure the schedule version is cleared\n\t\t// when an org is deleted. We should instead make the schedule model\n\t\t// clear the version if the schedule is loaded and empty\n\t\torganization_id.map(function(id){\n\t\t\tif( id == null ){\n\t\t\t\tscheduleData.schedulesLoadable(Loadable.Loaded([]))\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\n\n\t\tconst sql = SQL({\n\t\t\torganization_id: organizations.organization_id,\n\t\t\tschedule_id: scheduleData.schedule_id,\n\t\t\tauth_token: auth.stream.map( x => x.auth_token ),\n\t\t})\n\n\t\tlet originalData = assign(\n\t\t\tinitial\n\t\t\t,scheduleData\n\t\t\t,ContractModel(\n\t\t\t\tapi\n\t\t\t\t,scheduleData\n\t\t\t\t,auth_permissions\n\t\t\t\t,organization_id\n\t\t\t\t,permissions\n\t\t\t\t,api.buildRequest\n\t\t\t)\n\t\t\t,{\n\t\t\t\tauth\n\t\t\t\t,preferences: prop.dropRepeats(preferences)\n\t\t\t\t,organizations\n\t\t\t\t,auth_permissions\n\t\t\t\t,permissions\n\t\t\t\t,modal: modalStream\n\t\t\t\t,topNavBanner: prop()\n\t\t\t\t,requests: request.requestStream\n\t\t\t\t,responses: request.responseStream\n\t\t\t\t, sql\n\t\t\t}\n\t\t)\n\n\t\toriginalData.resize$ = resize$\n\n\t\tRoute.isLogin =\n\t\t\tRoute.fold({\n\t\t\t\tLogin: () => true\n\t\t\t\t, Updates: () => false\n\t\t\t\t, HomeEmpty: () => false\n\t\t\t\t, Autodirect: () => false\n\t\t\t\t, HomeVersion: () => false\n\t\t\t\t, HomeSchedule: () => false\n\t\t\t\t, HomeOrganization: () => false\n\t\t\t\t, Files: () => false\n\t\t\t\t, Projects: () => false\n\t\t\t\t, Resources: () => false\n\t\t\t\t, Workflows: () => false\n\t\t\t\t, Tools: () => false\n\t\t\t\t, Financials: () => false\n\t\t\t\t, FinancialsItems: () => false\n\t\t\t\t, FinancialsCreate: () => false\n\t\t\t\t, FinancialsClone: () => false\n\t\t\t\t, FinancialsView: () => false\n\t\t\t\t, FinancialsViewLedgers: () => false\n\t\t\t\t, FinancialsEdit: () => false\n\t\t\t\t, FinancialsEditLedgers: () => false\n\t\t\t\t, FinancialsItemsLedgers: () => false\n\t\t\t\t, FinancialsOverviewLedgers: () => false\n\t\t\t\t, FinancialsFocussedLedgers: () => false\n\t\t\t\t, Materials: () => false\n\t\t\t\t, Exports: () => false\n\t\t\t\t, Organizations2: () => false\n\t\t\t\t, Reset: () => false\n\t\t\t\t, Interruptions: () => false\n\t\t\t\t, ScheduleVersion: () => false\n\t\t\t\t, Payments: () => false\n\t\t\t\t, Invites: () => false\n\t\t\t\t, Verify: () => false\n\t\t\t\t, Forgot: () => false\n\t\t\t\t, CheckEmailType: () => false\n\t\t\t\t, CheckEmail: () => false\n\t\t\t\t, ScheduleClone: () => false\n\t\t\t\t, ScheduleCreate: () => false\n\t\t\t\t, Schedule: () => false\n\t\t\t\t, Schedules: () => false\n\t\t\t\t, ScheduleParameter: () => false\n\t\t\t\t, ScheduleParameters: () => false\n\t\t\t})\n\n\t\tRoute.isDataRoute =\n\t\t\tRoute.fold({\n\t\t\t\tLogin: () => false\n\t\t\t\t, Updates: () => true\n\t\t\t\t, HomeEmpty: () => true\n\n\t\t\t\t// true because autodirect assumes they are logged in\n\t\t\t\t// if you are logged in, it is a data route\n\t\t\t\t, Autodirect: () => true\n\n\t\t\t\t, HomeVersion: () => true\n\t\t\t\t, HomeSchedule: () => true\n\t\t\t\t, HomeOrganization: () => true\n\t\t\t\t, Files: () => true\n\n\t\t\t\t, Projects: () => true\n\t\t\t\t, Resources: () => true\n\t\t\t\t, Workflows: () => true\n\t\t\t\t, Tools: () => true\n\t\t\t\t, Financials: () => true\n\t\t\t\t, FinancialsItems: () => true\n\t\t\t\t, FinancialsCreate: () => true\n\t\t\t\t, FinancialsClone: () => true\n\t\t\t\t, FinancialsView: () => true\n\t\t\t\t, FinancialsViewLedgers: () => true\n\t\t\t\t, FinancialsEdit: () => true\n\t\t\t\t, FinancialsEditLedgers: () => true\n\t\t\t\t, FinancialsItemsLedgers: () => true\n\t\t\t\t, FinancialsOverviewLedgers: () => true\n\t\t\t\t, FinancialsFocussedLedgers: () => true\n\t\t\t\t, Materials: () => true\n\t\t\t\t, Exports: () => true\n\t\t\t\t, Organizations2: () => true\n\t\t\t\t, Reset: () => false\n\t\t\t\t, Interruptions: () => true\n\t\t\t\t, ScheduleVersion: () => true\n\t\t\t\t, Payments: () => true\n\t\t\t\t, Invites: () => false\n\t\t\t\t, Verify: () => false\n\t\t\t\t, Forgot: () => false\n\t\t\t\t, CheckEmailType: () => false\n\t\t\t\t, CheckEmail: () => false\n\t\t\t\t, ScheduleClone: () => true\n\t\t\t\t, ScheduleCreate: () => true\n\t\t\t\t, Schedule: () => true\n\t\t\t\t, Schedules: () => true\n\t\t\t\t, ScheduleParameter: () => true\n\t\t\t\t, ScheduleParameters: () => true\n\t\t\t})\n\n\t\tRoute.isAccessRoute =\n\t\t\tRoute.fold({\n\t\t\t\tLogin: () => true\n\t\t\t\t, Updates: () => false\n\t\t\t\t, HomeEmpty: () => false\n\t\t\t\t, Autodirect: () => false\n\t\t\t\t, HomeVersion: () => false\n\t\t\t\t, HomeSchedule: () => false\n\t\t\t\t, HomeOrganization: () => false\n\t\t\t\t, Files: () => false\n\t\t\t\t, Projects: () => false\n\t\t\t\t, Resources: () => false\n\t\t\t\t, Workflows: () => false\n\t\t\t\t, Tools: () => false\n\t\t\t\t, Financials: () => false\n\t\t\t\t, FinancialsItems: () => false\n\t\t\t\t, FinancialsCreate: () => false\n\t\t\t\t, FinancialsClone: () => false\n\t\t\t\t, FinancialsView: () => false\n\t\t\t\t, FinancialsViewLedgers: () => false\n\t\t\t\t, FinancialsEdit: () => false\n\t\t\t\t, FinancialsEditLedgers: () => false\n\t\t\t\t, FinancialsItemsLedgers: () => false\n\t\t\t\t, FinancialsOverviewLedgers: () => false\n\t\t\t\t, FinancialsFocussedLedgers: () => false\n\t\t\t\t, Materials: () => false\n\t\t\t\t, Exports: () => false\n\t\t\t\t, Organizations2: () => false\n\t\t\t\t, Reset: () => true\n\t\t\t\t, Interruptions: () => false\n\t\t\t\t, ScheduleVersion: () => false\n\t\t\t\t, Payments: () => false\n\t\t\t\t, Invites: () => true\n\t\t\t\t, Verify: () => true\n\t\t\t\t, Forgot: () => true\n\t\t\t\t, CheckEmailType: () => true\n\t\t\t\t, CheckEmail: () => true\n\t\t\t\t, ScheduleClone: () => false\n\t\t\t\t, ScheduleCreate: () => false\n\t\t\t\t, Schedule: () => false\n\t\t\t\t, Schedules: () => false\n\t\t\t\t, ScheduleParameter: () => false\n\t\t\t\t, ScheduleParameters: () => false\n\t\t\t})\n\n\t\tRoute.requiresAuth =\n\t\t\troute => !Route.isAccessRoute(route)\n\n\t\tconst setState = f => $(f)\n\t\tconst getState = $.$stream()\n\t\tm.route.Route = Route\n\t\tm.route.setState = setState\n\t\tm.route.getState = getState\n\n\t\tsetState(\n\t\t\tR.merge({\n\t\t\t\tfeatures: {}\n\t\t\t})\n\t\t)\n\n\t\tFeatures.service({ getState, auth: auth.stream })\n\t\t\t.map(setState)\n\n\t\t// do GPU styles only when resizing\n\t\t// e.g opacity 0 on context bar when resizing ✅\n\t\t// and changing dimensions, fonts, layout when resizing ❌\n\t\tresize$\n\t\t\t.map( () => {\n\t\t\t\tdocument\n\t\t\t\t\t.body\n\t\t\t\t\t.classList\n\t\t\t\t\t.add('resizing')\n\t\t\t\treturn null\n\t\t\t})\n\n\t\t// after resizing has ceased for 1/2 second\n\t\t// update a viewport height css var\n\t\t// other components can use this to know the current\n\t\t// visible height\n\t\tresize$\n\t\t\t.afterSilence(500)\n\t\t\t.map( () => {\n\n\t\t\t\tdocument\n\t\t\t\t\t.body\n\t\t\t\t\t.classList\n\t\t\t\t\t.remove('resizing')\n\t\t\t\treturn null\n\t\t\t})\n\n\t\tconst features = prop.dropRepeats(getState.map( x => x.features ))\n\n\t\toriginalData.features = features\n\t\toriginalData.getState = getState\n\t\toriginalData.setState = setState\n\t\toriginalData.Route = Route\n\n\t\tprop.dropRepeats(getState.map( x => x.route.value )).map(\n\t\t\tx => {\n\t\t\t\tif(\n\t\t\t\t\t'organization_id' in x\n\t\t\t\t\t&& x.organization_id != organization_id()\n\t\t\t\t){\n\t\t\t\t\torganization_id(x.organization_id || null)\n\t\t\t\t}\n\n\t\t\t\tif(\n\t\t\t\t\t'schedule_id' in x\n\t\t\t\t\t&& x.schedule_id\n\t\t\t\t\t\t!= scheduleData.actual.schedule_id()\n\t\t\t\t){\n\t\t\t\t\tscheduleData.actual.schedule_id(\n\t\t\t\t\t\tx.schedule_id || null\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tif(\n\t\t\t\t\t'schedule_version_id' in x\n\t\t\t\t\t&& x.schedule_version_id\n\t\t\t\t\t\t!= scheduleData.actual.schedule_version_id()\n\t\t\t\t){\n\t\t\t\t\tscheduleData.actual.schedule_version_id(\n\t\t\t\t\t\tx.schedule_version_id || null\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn null\n\t\t\t}\n\t\t)\n\n\t\t// Picker services\n\t\tconst PickerService = ({readId, preferredId, id, list}) => {\n\t\t\tconst out = prop()\n\t\t\tlist.map(\n\t\t\t\txs => {\n\t\t\t\t\tif( xs && xs.length && readId() == null ){\n\n\t\t\t\t\t\tconst next =\n\t\t\t\t\t\t\tpreferredId\n\t\t\t\t\t\t\t? xs.find( x => id(x) == preferredId ) || xs[0]\n\t\t\t\t\t\t\t: xs[0]\n\n\t\t\t\t\t\tout(id(next))\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t)\n\t\t\treturn out\n\t\t}\n\n\t\tPickerService({\n\t\t\treadId: originalData.organization_id\n\t\t\t, preferredId: localStorage.previousOrganizationId\n\t\t\t, id: x => x.organization_id\n\t\t\t, list: originalData.organizations.organizations\n\t\t})\n\t\t.map( id =>\n\t\t\toriginalData.organization_id(id)\n\t\t)\n\n\t\toriginalData.organization_id.map(\n\t\t\tx => x\n\t\t\t? localStorage.previousOrganizationId = x\n\t\t\t: null\n\t\t)\n\n\t\tPickerService({\n\t\t\treadId: originalData.actual.schedule_id\n\t\t\t, preferredId: localStorage.previousScheduleId\n\t\t\t, id: x => x.schedule_id\n\t\t\t, list: originalData.schedules\n\t\t})\n\t\t.map(\n\t\t\tid => {\n\t\t\t\tif( originalData.schedules().length ) {\n\t\t\t\t\toriginalData.actual.schedule_id(id)\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t)\n\n\t\toriginalData.actual.schedule_id.map(\n\t\t\tx => x\n\t\t\t? localStorage.previousScheduleId = x\n\t\t\t: null\n\t\t)\n\n\t\toriginalData.versions.map(\n\t\t\t() => {\n\t\t\t\tif( originalData.versions().length\n\t\t\t\t\t&& (\n\t\t\t\t\t\t!originalData.actual.schedule_version_id()\n\t\t\t\t\t\t|| !originalData.versions().find(\n\t\t\t\t\t\t\tx => x.schedule_version_id\n\t\t\t\t\t\t\t\t== originalData.actual.schedule_version_id()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\toriginalData.actual.schedule_version_id(\n\t\t\t\t\t\toriginalData.versions()[0].schedule_version_id\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn null\n\t\t\t}\n\t\t)\n\n\t\tfeatures.map(\n\t\t\t() => m.redraw()\n\t\t)\n\n\t\tasync function auth_refresh(){\n\t\t\tif( Route.isAccessRoute( Route.get() ) ) {\n\t\t\t\treturn auth.stream(auth.type.LoggedOut())\n\t\t\t}\n\t\t\treturn api.auths.refresh()\n\t\t\t\t.then(function(r){\n\t\t\t\t\tauth.stream(auth.type.LoggedInOf(r))\n\t\t\t\t})\n\t\t\t\t.catch(function(e){\n\t\t\t\t\tauth.stream(auth.type.LoggedOut())\n\t\t\t\t\tthrow e\n\t\t\t\t})\n\t\t}\n\t\toriginalData.auth_refresh = auth_refresh\n\n\t\toriginalData.organizations.services({ auth_refresh })\n\n\t\tauth.stream\n\t\t\t.dropRepeats()\n\t\t\t.filter( () => auth.isRefresh() )\n\t\t\t.throttle(1000)\n\t\t\t.map( auth_refresh )\n\n\t\tauth.stream\n\t\t\t.dropRepeats()\n\t\t\t.filter( () => auth.isLoggedOut() )\n\t\t\t.throttle(1000)\n\t\t\t.map( async () => {\n\t\t\t\tif ( Route.isDataRoute(Route.get()) ) {\n\t\t\t\t\tm.route.set('/access/login')\n\t\t\t\t}\n\n\t\t\t\tawait api.auths.logout()\n\t\t\t\treturn null\n\t\t\t} )\n\n\t\t// A BIG HACK\n\t\t// There's a bug in the state-router where it diffs values\n\t\t// And decides for some unknown reason not to re-emit a change\n\t\t// I'm going to make the state router more explicit in the future\n\t\t// but this hack simply check if the schedule_version_id is invalid and\n\t\t// sets it to null.\n\t\t// Once it's null the Picker will set it to the first available id in\n\t\t// the versions list\n\t\tprop.afterSilence(0, originalData.schedule_id).map(function(){\n\t\t\tconst s_id = originalData.schedule_id()\n\t\t\tconst sv_id = originalData.schedule_version_id()\n\t\t\tconst vs = originalData.versions()\n\n\t\t\tif (\n\t\t\t\ts_id != null\n\t\t\t\t&& sv_id != null\n\t\t\t\t&& vs.length > 0\n\t\t\t\t&& vs.find( s => s.schedule_version_id == sv_id ) == null\n\t\t\t){\n\t\t\t\toriginalData.schedule_version_id( null )\n\t\t\t}\n\n\t\t\treturn null\n\t\t})\n\n\t\t{\n\t\t\tconst topNavBanner = prop()\n\t\t\tconst {\n\t\t\t\tauth\n\t\t\t\t, api\n\t\t\t} = originalData\n\n\t\t\t// const topNavBanner = prop()\n\n\t\t\tconsentModalService({\n\t\t\t\tauth, modal: modalStream, api, auth_permissions\n\t\t\t})\n\t\t\t.map( decision =>\n\t\t\t\tdecision.map(modalStream)\n\t\t\t)\n\n\t\t\toriginalData.topNavBanner = topNavBanner\n\t\t\t// cloning the stream would delete this\n\t\t}\n\n\t\t{\n\t\t\tconst { responses, auth } = originalData\n\t\t\tauthExpiry({ responses, auth }).map( x => {\n\t\t\t\tif ( x ) {\n\t\t\t\t\tlocalStorage.setItem('route-before-logout', m.route.get())\n\t\t\t\t\tm.route.set('/access/login')\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t})\n\n\t\t\tonFirstAuthSuccess({ auth })\n\t\t}\n\n\t\t// Route away based on permissions\n\t\t// controlled by contract model\n\t\toriginalData.routeChangeCommands.map( x => {\n\t\t\tif( x && auth.stream().auth_token ) {\n\t\t\t\tm.route.set(x)\n\t\t\t}\n\t\t\treturn null\n\t\t})\n\n\t\treturn attrs => {\n\t\t\treturn onRouteChange(attrs, originalData)\n\t\t}\n\t}\n})\n","export default function Organizations(auth, $){\n\n\tauth.stream.map( $.auth )\n\n\t$.organizations = []\n\tconst organizations = $.organizations.$stream().map(\n\t\txs => xs || []\n\t)\n\n\t$.auth.auth_permissions\n\t\t.$map(\n\t\t\txs => xs.map( x => ({\n\t\t\t\torganization_id: x.organization_id\n\t\t\t\t, organization_name: x.organization_name\n\t\t\t\t, organization_incorporation_no: x.organization_incorporation_no\n\t\t\t}))\n\t\t)\n\t\t.$stream()\n\t\t.map( xs => {\n\t\t\t$.organizations(xs)\n\t\t\treturn null\n\t\t})\n\n\t$.organization_id = null\n\n\tconst organization_id =\n\t\t$.organization_id.$stream()\n\n\tconst organization =\n\t\t$.organizations.$values\n\t\t.$filter( (x,y) => {\n\t\t\tconst out = x.organization_id == y\n\t\t\treturn out\n\t\t}, organization_id )\n\n\n\tfunction services({ auth_refresh }){\n\t\torganization_id.map($.organization_id)\n\t\t// organizations.map($.organizations)\n\t}\n\n\n\treturn {\n\t\torganizations\n\t\t,organization: organization.$stream()\n\t\t,organization_id\n\t\t,organization_name: organization.organization_name.$stream()\n\t\t,services\n\t}\n}","//eslint-disable-next-line no-undef\n\nimport { prop as stream } from '../../../stream'\n\nexport default function AuthPermissions(auths, organization_id){\n\treturn stream.merge([auths, organization_id])\n\t\t.map(function([a, o]){\n\t\t\tconst noAccess =\n\t\t\t\t{ auth_permissions_read: 0\n\t\t\t\t, auth_permissions_write: 0\n\t\t\t\t, organization_id: null\n\t\t\t\t}\n\n\t\t\treturn a.case({\n\t\t\t\tLoggedIn: () => {\n\t\t\t\t\treturn a.auth_permissions.find(\n\t\t\t\t\t\tap => ap.organization_id == o\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t,LoggedOut: () => null\n\t\t\t\t,Refresh: () => null\n\t\t\t}) || noAccess\n\n\t\t})\n}","/* globals window */\n\nexport default function SQL({ auth_token, organization_id, schedule_id }){\n\n\tasync function sql(query, args){\n\t\treturn window.fetch('/api/sql/select', {\n\t\t\tmethod: 'POST'\n\t\t\t,headers: {\n\t\t\t\t'content-type': 'application/json'\n\t\t\t\t,authorization: 'Bearer ' + auth_token()\n\t\t\t}\n\t\t\t,body: JSON.stringify({\n\t\t\t\tquery, args, organization_id: organization_id(), schedule_id: schedule_id()\n\t\t\t})\n\t\t})\n\t\t.then( async x => x.ok ? x.json() : Promise.reject(new Error(await x.text())))\n\t}\n\n\treturn sql\n}","import Request from '../request'\n\nexport default function service({ responses, auth }){\n\treturn responses.map( x => {\n\t\tif ( auth.stream()._name != 'LoggedIn' ) return false;\n\t\tconst [errorType] =\n\t\t\t[x].flatMap(\n\t\t\t\tx => Request.Response.isN(x) ? [x.value] : []\n\t\t\t)\n\t\t\t.map( x => x.response.body.type )\n\n\t\treturn x.value.request.url.startsWith('/auth') && errorType == 'AuthExpiredError'\n\t})\n}"],"names":["window","process","env","ENV","F","T","__","_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","add","Number","_concat","set1","set2","idx","len1","len2","result","_arity","n","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","Error","_curryN","received","combined","argsIdx","left","combinedIdx","curryN","addIndex","origFn","list","args","Array","prototype","slice","call","_curry3","f3","c","_c","adjust","_idx","_list","isArray","val","Object","toString","_isTransformer","obj","_dispatchable","methodNames","xf","pop","_isArray","transducer","_reduced","x","_xfBase$3","init","XAll","f","all","_xfBase","input","_xall","max","_map","functor","len","_isString","_isArrayLike","nodeType","hasOwnProperty","XWrap","acc","_xwrap","bind","thisObj","_iterableReduce","iter","step","next","done","value","_methodReduce","methodName","symIterator","Symbol","iterator","_reduce","_arrayReduce","reduce","TypeError","XMap","_xmap","_has","prop","_isArguments","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","hasArgsEnumBug","contains","item","keys","nIdx","ks","checkArgsLength","map","key","isInteger","nth","offset","charAt","paths","pathsArray","p","_isInteger","path","pathAr","pluck","allPass","preds","always","and","XAny","any","_xany","anyPass","ap","applyF","applyX","_aperture","limit","XAperture","pos","full","store","getCopy","_xaperture","aperture","append","el","values","props","vals","mapValues","applySpec","spec","v","applyTo","ascend","aa","bb","assoc","isNil","assocPath","nextObj","arr","concat","nAry","binary","_isFunction","type","liftN","arity","lifted","lift","both","g","curry","_makeFlat","recursive","flatt","jlen","j","ilen","_flatCat","rxf","ret","_forceReduced","preservingReduced","_xchain","chain","monad","clamp","min","_cloneRegExp","pattern","RegExp","source","global","ignoreCase","multiline","sticky","unicode","undefined","_clone","refFrom","refTo","deep","copy","copiedValue","Date","valueOf","clone","comparator","pred","not","complement","_pipe","_checkForMethod","methodname","fromIndex","toIndex","tail","Infinity","pipe","reverse","split","join","compose","composeK","last","_pipeP","ctx","then","pipeP","head","_identity","identity","pipeWith","headList","tailList","composeWith","_arrayFromIterator","push","_includesWith","_objectIs$1","is","_uniqContentEquals","aIterator","bIterator","stackA","stackB","eq","_equals","aItem","_objectIs","typeA","equals","constructor","match","String","_functionName","name","message","size","entries","keysA","extendedStackA","extendedStackB","_indexOf","inf","indexOf","_includes","_quote","s","replace","pad","_toISOString","toISOString","d","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","_complement","_filter","_isObject","XFilter","_xfilter","filter","filterable","reject","_toString","seen","recur","y","xs","mapPairs","k","sort","test","isNaN","NaN","repr","cond","pairs","pair","constructN","Fn","$0","$1","$2","$3","$4","$5","$6","$7","$8","$9","construct","converge","after","fns","context","XReduceBy","valueFn","valueAcc","keyFn","inputs","reduceBy","elt","countBy","elem","dec","defaultTo","descend","_Set","_nativeSet","Set","_items","hasOrAdd","has","shouldAdd","set","prevSize","bIdx","difference","first","second","out","firstLen","secondLen","toFilterOut","i","differenceWith","dissoc","remove","start","count","splice","update","dissocPath","divide","XDrop","_xdrop","drop","Math","XTake","_xtake","take","dropLast","XDropLast","_xdropLast","_dropLast","dropLastWhile","XDropLastWhile","retained","retain","flush","_dropLastWhile","XDropRepeatsWith","lastValue","seenFirstValue","sameAsLast","_xdropRepeatsWith","dropRepeatsWith","dropRepeats","XDropWhile","_xdropWhile","dropWhile","or","either","empty","takeLast","endsWith","suffix","eqBy","eqProps","obj1","obj2","evolve","transformations","object","transformation","XFind","found","_xfind","find","XFindIndex","_xfindIndex","findIndex","XFindLast","_xfindLast","findLast","XFindLastIndex","lastIdx","_xfindLastIndex","findLastIndex","flatten","flip","forEach","forEachObjIndexed","keyList","fromPairs","groupBy","groupWith","res","nextidx","gt","gte","hasPath","_path","hasIn","identical","ifElse","condition","onTrue","onFalse","inc","includes","indexBy","target","innerJoin","ys","insert","insertAll","elts","uniqBy","appliedItem","uniq","intersection","list1","list2","lookupList","filteredList","intersperse","separator","_objectAssign$1","assign","output","nextKey","objOf","_stepCatArray","_stepCatString","_stepCatObject","_objectAssign","into","_stepCat","invert","invertObj","invoker","method","Ctor","isEmpty","juxt","keysIn","lastIndexOf","_isNumber","lens","getter","setter","toFunctorFn","focus","lensIndex","lensPath","lensProp","lt","lte","mapAccum","tuple","mapAccumRight","mapObjIndexed","rx","str","mathMod","m","maxBy","sum","mean","median","width","memoizeWith","mFn","cache","merge","l","r","mergeAll","mergeWithKey","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepLeft","mergeDeepRight","mergeDeepWith","mergeLeft","mergeRight","mergeWith","_","_l","_r","minBy","modulo","move","from","to","positiveFrom","positiveTo","multiply","negate","none","nthArg","o","_of","of","omit","names","index","once","called","_assertPromise","otherwise","Identity","over","fst","snd","_createPartialApplicator","partial","partialRight","partition","pathEq","pathOr","pathSatisfies","propPath","pick","pickAll","pickBy","prepend","product","useWith","transformers","project","propEq","propIs","propOr","propSatisfies","ps","range","reduceRight","reduceWhile","reduced","times","RangeError","repeat","regex","replacement","scan","sequence","traversable","sortBy","sortWith","splitAt","array","splitEvery","splitWhen","prefix","startsWith","subtract","symmetricDifference","symmetricDifferenceWith","takeLastWhile","XTakeWhile","_xtakeWhile","takeWhile","XTap","_xtap","tap","_isRegExp","andThen","toLower","toPairs","toPairsIn","toUpper","transduce","transpose","outerlist","innerlist","traverse","ws","trim","beginRx","endRx","tryCatch","tryer","catcher","e","unapply","unary","uncurryN","depth","endIdx","currentDepth","unfold","seed","union","uniqWith","unionWith","unless","whenFalseFn","unnest","until","valuesIn","vs","Const","view","when","whenTrueFn","where","testObj","whereEq","without","xor","Boolean","xprod","zip","rv","zipObj","zipWith","thunkify","fnArgs","R","flatMap","defineProperty","varArgs","nextSource","writable","configurable","ownProps","resArray","search","rawPos","substring","this_len","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","document","ownerDocument","querySelectorAll","Vnode","tag","attrs","children","text","dom","domSize","state","events","instance","normalize","node","normalizeChildren","isKeyed","module","require","hasOwn","hyperscriptVnode","selectorParser","selectorCache","compileSelector","selector","classes","exec","id","attrValue","className","execSelector","vnode","hasClass","class","newAttrs","hyperscript","trust","html","fragment","PromisePolyfill","executor","self","resolvers","rejectors","resolveCurrent","handler","rejectCurrent","_instance","callAsync","setImmediate","setTimeout","shouldAbsorb","execute","console","error","retry","executeOnce","runs","run","onerror","onFulfilled","onRejection","resolveNext","rejectNext","handle","callback","promise","resolve","catch","finally","reason","total","consume","race","render","$window","currentRedraw","$doc","nameSpace","svg","math","getNameSpace","xmlns","checkState","original","callHook","activeElement","createNodes","parent","vnodes","end","hooks","nextSibling","ns","createNode","initLifecycle","createTextNode","insertNode","createText","createHTML","createDocumentFragment","firstChild","childNodes","createFragment","element","createElementNS","createElement","setAttribute","isFileInput","setAttr","setAttrs","maybeSetContentEditable","selectedIndex","normalized","setLateSelectAttrs","sentinel","create","$$reentrantLock$$","initComponent","createComponent","possibleParents","caption","thead","tbody","tfoot","tr","th","td","colgroup","col","temp","innerHTML","child","appendChild","updateNodes","old","removeNodes","isOldKeyed","oldStart","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveNodes","lisIndices","originalNextSibling","vnodesLength","oldIndices","li","matched","getKeyMap","oldIndex","u","il","lisTemp","makeLisIndices","commonLength","removeNode","oldTag","force","onbeforeupdate","shouldNotUpdate","updateLifecycle","nodeValue","updateText","removeHTML","updateHTML","updateFragment","warn","removeAttr","updateAttrs","updateElement","updateComponent","frag","moveChildToFrag","parentNode","insertBefore","contenteditable","contentEditable","content","stateResult","attrsResult","mask","onbeforeremove","reallyRemove","onremove","removeChild","isLifecycleMethod","attr","isFormAttribute","updateEvent","setAttributeNS","updateStyle","hasPropertyKey","removeAttribute","nsLastIndex","currentDOM","uppercaseRegex","toLowerCase","capital","normalizeKey","style","cssText","setProperty","removeProperty","EventDict","removeEventListener","addEventListener","oninit","oncreate","onupdate","handleEvent","ev","currentTarget","redraw","preventDefault","stopPropagation","prevRedraw","prevDOM","active","namespace","namespaceURI","textContent","Promise","exports","schedule","subscriptions","pending","sync","mount","root","component","requestAnimationFrame","build","destructure","encodeURIComponent","buildQueryString","template","params","SyntaxError","queryIndex","hashIndex","queryEnd","pathEnd","query","resolved","variadic","newQueryIndex","newHashIndex","newQueryEnd","newPathEnd","querystring","buildPathname","oncompletion","callbackCount","PromiseProxy","makeRequest","factory","url","data","background","complete","wrap","hasHeader","headers","__proto__","request","replacedAbort","toUpperCase","body","assumeJSON","serialize","JSON","FormData","URLSearchParams","responseType","extract","xhr","XMLHttpRequest","aborted","isTimeout","abort","open","async","user","password","setRequestHeader","deserialize","withCredentials","timeout","onreadystatechange","readyState","success","status","response","parse","responseText","completeErrorResponse","code","ontimeout","config","send","stringify","jsonp","callbackName","round","random","script","src","callbackKey","documentElement","decodeURIComponentSave","decodeURIComponent","err","string","counters","entry","levels","cursor","level","nextLevel","isNumber","parseInt","desc","getOwnPropertyDescriptor","parseQueryString","parsePathname","compileTemplate","templateData","templateKeys","regexp","extra","magic","extras","mountRedraw","Fragment","route","censor","compiled","fallbackRoute","currentPath","lastUpdate","scheduled","ready","currentResolver","RouterRoot","fireAsync","resolveRoute","SKIP","location","hash","pathname","setPath","history","loop","check","payload","matchedRoute","localComp","comp","onmatch","options","title","replaceState","pushState","href","defaultRoute","routes","defaultData","some","ReferenceError","get","Link","onclick","disabled","defaultPrevented","button","which","ctrlKey","metaKey","shiftKey","altKey","param","querySelector","_document","globalThis","warnedHalt","StreamConstructor","dependentStreams","dependentFns","stream","_changing","_state","createEnd","Stream","_parents","_unregisterChild","createGet","newValue","valueOrFunction","prev","_original","afterSilence","ms","clearTimeout","default","log","throttle","wasNull","now","dt","predicate","awaitAll","visitor","onError","awaitLatest","localPending","skip","ignoreInitial","toJSON","combine","s1","s2","childIndex","streams","every","changed","mappers","dep","ended","endStream","mapper","origin","scanMerge","tuples","callable","strings","streamValues","Function","inject","xet","referenceIds","WeakMap","ids","notify","useStore","stateStream","write","storeCache","Map","createChildStore","parentStore","isStatic","rawRead$","getAllEvents","getAll","results","row","read$","compareResultSetReferences","addField","filterResult","delete","for","property","newPath","updated","filtered","arrayRow","unnestedRow","fieldName","childStore","visited","valueIds","wrapComponents","upgradeAttrs","onCreates","onRemoves","event","V","S","StreamChild","mapped","parentEl","firstRender","parentElement","ThunkChild","thunk","legacyRenderProps","mithril","tagC","wrapper","makeStream","local","effect","cleanup","BactaError","Cancellation","useStream","useEffect","restartTimeoutId","it","running","requestRestart","return","deps","Y","throw","useResource","fetcher","refetch","signal","latest","loading","resourceStream","updateValue","routeUpdate$","routeUnique$","theirComponentOriginal","theirComponent","onCreate","onRemove","upgradeComponent","$children","list$","keyProperty","viewFn","sheets","styleEl","css","charCodeAt","Uint32Array","simpleHash","responseIfNotStream","varName","classList","App","wrapped","fromEntries","raw","watch","fromFlydStream","flydStream","t","isStream","withAttr","attribute","Route","getState","getRandomValues","matchOr","link","hrefToURL","toURL","rnds8","Uint8Array","rng","crypto","msCrypto","REGEX","validate","uuid","byteToHex","substr","v35","version","hashfunc","generateUUID","buf","unescape","bytes","stringToBytes","DNS","URL","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","q","num","cnt","md5ff","md5gg","md5hh","md5ii","v4","rnds","z","ROTL","msg","length32","hexTab","hex","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","bytesToWords","K","H","N","ceil","M","_i","pow","floor","_i2","W","_t","_t2","defaultStream","getVal","hasVal","subscribe","unsubscribe","defaultHashCode","ServerEnv","varDeclarations","insertSheet","renderSelector","sheet","updateVars","varDeclaration","getVarVal","getSheet","BrowserEnv","doc","raf","inserted","streamVarUpdates","scheduleF","remaining","els","getElementsByClassName","scheduleStream","ref","varNames","css$3","renders","Value","Var","Animation","reference","AnimationReference","Static","Chain","chained","fold","Pair","infer","Sheet","renderId","originalPairs","theirStrings","theirValues","stack","placeholder","shift","unshift","processComments","line","vars","animations","isAtRule","isBlock","isComment","opens","closes","braceInserted","animationReferences","indented","fill","indent","unformattedV","formattedV","lines","re_braces","lineStack","originalOpens","originalCloses","opensDelta","lineWithoutBracingAndSpacing","lineHasRules","continuingLine","_class","classname","hashSheet","replacedSheet","api","$nest","theirSelector","definition","$media","$animate","timing","definitionInstance","CSS","setNamespace","getItem","getItemOr","setItem","localStorage","op","getItemOrSet","unsetItem","localStorage$1","Proxy","deleteProperty","h","routed","patterns","theirOptions","Comp","$","subroute","destroy","$type","$end","ParentRoute","$$","J","stream2","setVal","NestedMirrorIndex","mirror","outer","inner","getOuter","getMirror","getMirrorOuter","mirrorDelete","mirrorKey","removeNested","Z3","initial","_defaultGetState","setState","updateState","$delete","dev","enforceArrowUsage","operations","queryStreams","seenStreams","streamId","seeStream","theirId","staggeredCache","stale","parents","propParents","nonPropParents","rank","updateRequirements","propagationRequirements","propagating","propagatingStreamEmits","deferredStreamEmits","ignoreNotification","updates","stopPropagationLoop","propagationMemory","proxies","$prop","depKey","dependencies","$filter","$map","$values","getDependencyValue","compile","noOtherwise","injectOtherwise","keywords","operation","select","previous","allDepsReady","kw","composedUpdate","composedParentUpdate","D","Q","theirCompile","isDynamic","subscribeToStreamDependencies","nonQueryDeps","parentPropKey","compilation","_propParents","_nonPropParents","queryDeps","prevPropParent","instigator","reactor","computePropagationNodesCache","orgQuery","instigators","uncached","thisXS","staggeredCompile","staggeredSelect","streamUpdates","isStale","parentValue","prevResults","newResults","valueRep","propagateFrom","$stream","keySort","computePropagationNodes","updateRequirementsList","isParentPropagation","entryPropagationValue","nodes","nodeKeys","parentKey","ProxyResponse","$get","$set","$update","$key","$all","$remove","$throttled","$afterSilence","$operations","$filterValues","$mapValues","proxy","toPrimitive","newKey","pendingRemoval","instigatorKey","tagNames","sublist","excess","repeatStr","annotate","notPrimative","isObject","isFunction","isPrimative","isStag","valueStag","emptyStag","isString","isPojo","isDate","isError","indentation","annotation","tab","tabLess","tab2","newLine","boundToString","typeName","tagName","proto","inspect","valueInstance","emptyInstance","StaticSumTypeError","tags","traits","getTags","ErrMessageTags","ExtraTags","extraKeys","MissingTags","InstanceNull","InstanceWrongType","InstanceShapeInvalid","VisitorNotAFunction","NotAType","TagsShapeInvalid","foldT","getT","assertValidType","handleError","Err","assertValidCata","tKeys","xKeys","missingKeys","beforeFoldEval","errMessage","_fold","assertValidVisitor","assertValidTag","mapAll","foldTags","Ma","chainAll","nestedValue","Either","_bifold","$fold","right","leftF","rightF","bifold","bimap","_mapAll","_bimap","getOr","_getOr","concatWith","A","B","_concatWith","trait","getWith","tagBy","encase","toBoolean","fromNullable","Ms","bad","mapT","chainT","fnName","wrapFnName","externalEither","decorate","bifunctor","chainAllT","externalMaybe","oldN","externalTags","decoratedEither","Ebifold","EgetOr","EgetWith","Ebimap","Emap","mapY","EmapY","mapN","EmapN","assertY","EassertY","assertN","EassertN","chainN","EchainN","chainY","EchainY","EtagBy","Echain","EtoBoolean","Eencase","EfromNullable","Eall","Eany","isY","EisY","isN","EisN","Eys","Ens","EconcatWith","Valid","case","PatternToken","Path","Part","groupSpecificity","tokens","URLToken","specificity","segment","groupValidations","duplicateDef","allTokensPairs","toPattern","patternStrDupeSearch","caseName","caseDupes","patternStr","caseNames","DuplicateDef","singleValidations","duplicatePart","dupeParts","DuplicatePart","invalids","validateGroup","allTokensGroup","validTokensGroup","Variadic","Unmatched","expected","actual","token","toArgs","fromPattern","validations","excessPatterns","patternTokens","urlTokens","numSegments","ExcessPattern","unmatchedPaths","UnmatchedPaths","tokenizePattern","tokenizeURL","theirURL","segments","numPatterns","completeTokens","formatArgs","type$safe","cases","tokenized","validated","groupInvalids","routeValidator","safeRouteType","theirO","foundKeys","matchedO","missing","SafeRouteType","routeType","RouteType","patternMatches","invalid","valid","PatternMatches","Matches","routeCase","safe","typename","errs","Search","defaults","usp","existing","service","SubRoute","$root","Root","Parent","searchOptions","searchInstance","defaultOptions","affixesCache","ends","_affixes","rootHREF","affixes","Type","superouter","fromURL","asRootRoute","rootRoute","back","got","setValue","gotValue","routeValue","getValue","_back","EventMock","replaceValue","WindowMock","router","theirWindow","getPathName","onpopstate","subRoute","refresh","defaulted","routeAndComps","Home","defaultRender","services","container","Z","session_id","device_id","comps","RouteComponent","currentWrapperRouteComponent","currentRender","prevRenderResolved","prevRender","currentAttrs","prevRoute","loadingRouteComp","staticWrapper","_view","onRouteChange","loadRouteComp","Main","main","lifeCycleComponent","swap","currentRoute","hookCallback","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","arrLen","extend","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_f","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","number","targetLength","forceSign","absNumber","abs","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","func","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","p1","p2","p3","p4","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","getFullYear","setFullYear","createUTCDate","UTC","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","other","prototypeMax","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","setTime","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","keepOffset","toDate","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","Traverse","walk","cb","immutable","alive","walker","node_","modifiers","keepGoing","isRoot","circular","stopHere","before","pre","post","stop","block","objectKeys","isLeaf","notLeaf","notRoot","isLast","isFirst","dst","toS","isRegExp","isBoolean","getPrototypeOf","requests","requestStream","responseStream","Request","baseURL","Response","buildRequest","queryMerge","bodyMerge","buildParams","buildBody","request$1","transportProp","transport","requestObject","normalizeErrorFormat","MetadataTracker","requestedAt","removeMetaData","addMetaData","__requestedAt","exposer","I","API","auth","organization_id","HARTH_API_URL","baseHeaders","theirOrgId","auth_token","Authorization","someOrgId","GET","LIST","inURL","LIST_ATTRS","_baseURL","_baseHeaders","outURL","paramHash","unsafeURL","toParamHash","LIST_TRANSPORT_ATTRS","POST","requestParser","responseParser","PATCH_MANY","DELETE","APIOrganizationsDisciplineToOrganizationsDiscipline","organizations_disciplines_id","organizations_disciplines_name","organizations_disciplines_description","organizations_disciplines_nominal_rate","organizations_disciplines_uom","contractrecognitionid","contractrecognitionname","contractrecognitiondescription","orgDisciplineNameDescription","organizations_disciplines_nominal_expenditure_rate","organizations_disciplines_nominal_revenue_rate","completedcount","completedsum","scheduledsum","applicablecontracts","applytoteams","OrganizationsDisciplineToAPIOrganizationsDiscipline","APIDisciplinesContractorsCrewtoDisciplinesContractorsCrew","cid","dcc","crew_id","contractor_id","disciplines_contractors_crews_common","disciplines_contractors_crews_excess","disciplines_contractors_crews_invalid","disciplines_contractors_crews_id","disciplines_contractors_crews_name","disciplines_contractors_crews_contract_multiplier","disciplines_contractors_crews_rating","disciplines_contractors_crews_utilized","disciplines_contractors_crews_work_completed","disciplines_contractors_id","user_id","crews_discipline_rates_id","APIDisciplineToDiscipline","project_name","project_id","discipline_name","discipline_description","discipline_order","discipline_contract_multiplier","discipline_priority","discipline_work","discipline_planned","discipline_combination_limit","discipline_combine","discipline_custom","discipline_completed","discipline_harshness","discipline_percent","discipline_id","discipline_flow","discipline_start_date","timestampToIsoUnsafe","discipline_end_date","discipline_uom","discipline_recovery","discipline_auto_assign_tasks","discipline_strict_end","discipline_strict_start","discipline_consistency","discipline_consolidate_start","disciplines_contractors","APIDisciplinesContractorToDisciplinesContractor","contract_items_client_reference","contract_items_rate","CommonRecognition","ParentRecognition","ParentRecognitionID","disciplineName","discplineNameDescription","discplinenamedescription","eotSum","eotsum","nodSum","nodsum","varSum","varsum","lastAllocationDate","lastallocationdate","workdayeffort","badeffortteams","taskcount","users","ProjectDetailsToAPIProjectDetails","ProjectContactsToAPIProjectContacts","project_contacts_name","project_contacts_type","project_contacts_id","project_contacts_phone","project_contacts_email","ProjectToAPIProject","project_parent","project_template_id","project_draft_at","project_tendered_at","project_rejected_at","project_accepted_at","project_site_type","project_start_date","project_dead_date","project_final_acceptance","project_commissioning_date","project_completion_comments","project_completion_marker","project_documents","project_documents_href","project_documents_label","project_documents_is_deliverable","project_documents_id","project_suburb","project_material_suburb","project_priority","disciplines","DisciplineToAPIDiscipline","project_extras","schedule_id","contract_id","project_contacts","dc","disciplines_contractors_name","disciplines_contractors_common","disciplines_contractors_mixed_crews","disciplines_contractors_quality_rating","disciplines_contractors_total_rating","disciplines_contractors_utilized","disciplines_contractors_crews","timestampToIsoSafe","timestamp","isoToTimeStampUnsafe","isoToTimeStampSafe","APIProjectDetailsToProjectDetails","allocation_id","invite_id","invite_email","project_extras_planned_amount","project_extras_custom","project_extras_actual_amount","project_extras_id","project_extras_type","project_extras_frequency","project_extras_description","project_extras_notes","project_extras_address","project_extras_priority","project_extras_date_assigned","project_extras_date_completed","project_extras_date_verified","project_extras_date_invalid","relatedDiscipline","relateddiscipline","username","costinvoices","revenueinvoices","filecount","APIProjectContactsToProjectContacts","nameRole","APIProjectToProject","contract_name","incompletetaskcount","zip_url","latest_zip_url","latest_zip_date","is_zip_processing","workdays","worksummaries","ContractToAPIContract","contract_description","contract_payment_term","contract_count_invoices","contract_start_date","contract_end_date","supplier_id","supplier_name","contract_items","ContractItemToAPIContractItem","contract_terms","accounts","account_bsb","account_no","account_bank","account_bic","account_iban","account_swift_code","account_id","clients","client_organization_name","client_incorporation_no","client_email","client_phone","client_address","client_state","client_postcode","client_id","modules_id","tools_id","warehouse_id","contract_items_id","contract_items_name","contract_items_description","contract_items_budget","contract_items_service","contract_items_depreciation","contract_items_appreciation","contract_items_uom","contract_items_damages_rate","contract_items_damages_period","contract_items_applied","contract_items_recorded_reference","contract_items_recorded_reference_standard","APIContractToContract","created","APIContractItemToContractItem","badcontractcount","goodcontractcount","contract","contractStart","contractEnd","damagesEnd","contracts","patch","many","fetch","getorganizationoh","one","APIInvoiceItemsToInvoiceItems","invoice_items_id","invoice_items_amount","invoice_items_received_amount","timesheets_id","invoice_id","APIInvoiceToInvoice","invoice_type","invoice_inv_id","invoice_date","invoice_received_date","invoice_due_date","invoice_no","invoice_received","invoice_name","invoice_description","invoice_client_reference","invoice_items_client_reference","invoice_uom","invoice_amount","invoice_reversal","invoice_service_amount","invoice_depreciation_amount","invoice_appreciation_amount","invoice_damages_amount","invoice_rate","invoice_service_rate","invoice_depreciation_rate","invoice_appreciation_rate","invoice_damages_rate","invoice_approval","invoice_approver","invoice_amount_total","invoice_items","InvoiceItemsToAPIInvoiceItems","InvoiceToAPIInvoice","invoices","disableList","itemsremove","generateqi","chargeDetails","contacts","generateOnly","phones","emails","DisciplinesContractorToAPIDisciplinesContractor","DisciplinesContractorsCrewToAPIDisciplinesContractorsCrew","APIScheduleToSchedule","schedule_shared_resources","schedule_name","schedules_parameters_id","schedule_versions","schedule_version_id","schedule_version_created","schedule_version_old_id","schedule_priority","scheduleNameVersion","moment","ScheduleToAPISchedule","schedule_parent","APISchedulesParametersToUI","schedules_parameters_name","schedules_parameters_forward_limit","schedules_parameters_consolidate_limit","schedules_parameters_skip_consolidate_ratio","schedules_parameters_skip_consolidate_saving","schedules_parameters_mobilisation_limit","schedules_parameters_start_date_weighting","schedules_parameters_mobilisation_distance_weighting","schedules_parameters_discipline_level_weighting","schedules_parameters_business_level_weighting","schedules_parameters_quality_rating_weighting","schedules_parameters_comfort_zone_weighting","schedules_parameters_work_rates_weighting","schedules_parameters_team_required_25","schedules_parameters_team_required_5","schedules_parameters_team_required_75","schedules_parameters_team_required_10","schedules_parameters_team_required_125","schedules_parameters_team_required_100","schedules_parameters_team_required_recovery_25","schedules_parameters_team_required_recovery_5","schedules_parameters_team_required_recovery_75","schedules_parameters_team_required_recovery_10","schedules_parameters_team_required_recovery_125","schedules_parameters_team_required_recovery_100","SchedulesParametersToAPISchedulesParameters","schedules","allStats","schedules_parameters","SchedulesParameters","projects","completedProjects","gettemplates","bySchedule","one_shallow","EventSource","onmessage","close","transfer","APIUserToUser","auth_permissions_read","auth_permissions_write","role_id","user_country","user_email","user_name","user_permissions","user_username","auth_permissions","usersFullName","users2","byOrganization","by_search","without_group_id","permissions","role_permissions","endpoint","user_password","verification_token","user_verification_token","signup","APICrewsDisciplineRatesToCrewsDiscipineRates","crews_discipline_rates_feedback_rate","crews_discipline_rates_name","crews_discipline_rates_rate","crews_discipline_rates_uom","crews_discipline_rates_description","createcontracts","APIContractorToContractor","contractor_comfortable_work_zone","contractor_common","contractor_first_onsite_start_date","contractor_mixed_crews","contractor_name","contractor_quality_rating","contractor_total_rating","contractor_utilized","contractor_yard","crews","teamresourcename","crew_common","crew_excess","crew_invalid","crew_name","crew_rating","crew_utilized","crew_work_completed","crews_discipline_rates","ContractorToAPIContractor","contractors","organizations_disciplines","exclusive","workList","schedule_versions_id","contractor","APIToolToTool","tools_name","tools_condition","tools_location","tools_description","tools_ownership","tools_type","assigneduser","contractrecognitionnametype","ToolToAPITool","latitude","longitude","tools","presets","tps","perorganizatond","suggested","ar","geographies","geography","suburbs","byTextInput","here","APIInterruptionToInterruption","interruptions_weather","interruptions_start_date","interruptions_end_date","interruptions_name","interruptions_repetition_mode","interruptions_duration","interruptions_id","interruptions_affected","APIInterruptionsAffectedToInterruptionsAffected","interruptions_affected_id","interruptions_affected_entity_id","interruptions_affected_entity_name","InterruptionToAPIInterruption","InterruptionsAffectedToAPIInterruptionsAffected","interruptions","interruption_id","APIAllocationsVarToAllocationsVar","allocations_vars_amount","allocations_vars_clause","allocations_vars_description","allocations_vars_escalated","allocations_vars_id","allocations_vars_approved","AllocationsVarToAPIAllocationVar","APIAllocationsNODToAllocationsNOD","allocations_nods_id","allocations_nods_clause","allocations_nods_description","allocations_nods_escalated","allocations_nods_approved","AllocationsNODToAPIAllocationsNOD","APIAllocationsEOTtoAllocationsEOT","allocations_eots_clause","allocations_eots_description","allocations_eots_escalated","allocations_eots_id","allocations_eots_approved","AllocationsEOTtoAPIAllocationsEOT","APIACCToACC","allocations_contractors_crews_crew_common","allocations_contractors_crews_crew_rating","allocations_contractors_crews_excess","allocations_contractors_crews_id","allocations_contractors_crews_invalid","allocations_contractors_crews_name","allocations_contractors_crews_contract_multiplier","allocations_contractors_crews_utilized","allocations_contractors_crews_work_completed","allocations_contractors_crews_work_forecasted","allocations_contractors_crews_work_application","allocations_contractors_id","teamratemultiplier","ACCToAPIACC","APIAllocationsContractorToAllocationsContractor","allocations_contractors_common","allocations_contractors_mixed_crews","allocations_contractors_name","allocations_contractors_quality_rating","allocations_contractors_total_rating","allocations_contractors_utilized","allocations_contractors_crews","AllocationsContractorToAPIAllocationsContractor","APIAllocationToAllocation","allocations_work_name","allocations_crew_required","allocations_project_harshness","allocations_custom_status","allocations_allocation_complete","allocations_allocation_forecast","allocations_allocation_date","allocations_version_key","allocations_completion_comments","allocations_bad_day","allocations_day_status","allocations_weather_status","allocations_vars","allocations_nods","allocations_eots","allocations_contractors","allocations_transposes","disciplineratemultiplier","AllocationToAPIAllocation","allocations","byAllocationScheduleVersionKey","shallow","breadth","startDate","endDate","shallowUniq","pcomplete","byProjectAndScheduleVersion","byScheduleVersion","tasklist","typesObj","shallowQuery","typeparams","completed","verified","assigned","WarehouseToAPIWarehouse","warehouse_delivery","warehouse_email","warehouse_location","warehouse_name","warehouse_operating_hours_public_holiday","warehouse_operating_hours_regular","warehouse_operating_hours_weekend","warehouse_phone","warehouse_items","MaterialToAPIMaterial","APIWarehouseToWarehouse","APIMaterialToMaterial","distribution_amount","distribution_batch","distribution_container_id","distribution_container_name","distribution_entity_name","distribution_float","distribution_material_description","distribution_material_name","distribution_ordered","distribution_silo","distribution_stocked","distribution_entity_id","distribution_id","supplier_items_id","supplier_items_cost","supplier_items_batch_cost","autoorder","autoreceived","transfers","order_eta","order_name","order_received","requiredby","fmgroupedbyitem","currentqty","requiredqty","wastediff","warehouses","APISupplierItemToSupplierItem","supplier_items_supply_time","supplier_items_available","supplier_items_batch","supplier_items_description","supplier_items_minimum_order","supplier_items_name","supplier_items_uom","APISupplierLocationToSupplierLocation","supplier_locations_email","supplier_locations_id","supplier_locations_location","supplier_locations_phone","supplier_locations_public_holiday_operating_hours","supplier_locations_regular_operating_hours","supplier_locations_weekend_operating_hours","APISupplierToSupplier","supplier_delivery","supplier_items","supplier_locations","SupplierItemToAPISupplierItem","SupplierLocationToAPISupplierLocation","SupplierToAPISupplier","suppliers","PresetToAPIPreset","presets_name","presets_id","APIPresetToPreset","materials","tasks","OrderToAPIOrder","order_items_name","order_items_description","order_amount","order_notes","order_items_cost","order_supplier_name","order_stock_location","order_submission_date","order_id","APIOrderToOrder","orders","ContainerToAPIContainer","container_name","container_silo","container_id","APIContainerToContainer","holdings","capacity","containerIsFull","containers","APIRoleToRole","role_name","role_description","groups2","group","group_id","roles","reqParser","resParser","role","InviteToAPIInvite","invite_creation_time","invite_groups","APIInviteToInvite","invites","ok","invite","accept","TimesheetToAPITimesheet","crew_hours","crew_work","crew_performance","work_conditions","APITimesheetToTimesheet","owner_id","sharedtimesheet","timesheets","byAllocationId","byProjectId","byScheduleVersionId","aligntimesheets","organizations","organization_name","organization_incorporation_no","organizations_details_id","organizations_details_phone","organizations_details_address","organizations_details_state","organizations_details_postcode","_organization_id","organizations_details","auths","magicLink","ping","mail","forgottenPassword","APIFlowDependentsToFlowDependents","flow_id","flows_dependent_activity_id","flow_dependent_activity_name","FlowDependentsToAPIFlowDependents","APIFlowPrimarysToFlowPrimarys","flows_primary_activity_id","flow_primary_activity_name","FlowPrimarysToAPIFlowPrimarys","APIFlowToFlow","flow_delay_in_days","flow_delay_type","flow_dependency_relationship","flow_dependent_activity","flow_primary_activity","flow_safety_ratio","flow_name","FlowToAPIFlow","flows","getOptions","xero","xeroexport","sales","bills","xero_auths_fetch","xero_tenants_fetch","xero_tenants_import","tenantName","tenantId","imports","files","SIGN","filename","filetype","associations","getTransLoaditSignature","file_id","urls_only","file_error","file_processed","UNDELETE","Session","DONE","interruptionsAffected","contractoruserid","crewuserid","flows_dependent_activities","flows_primary_activities","template_schedules","templates_type","contracts_invoices_calculations","paramObj","financialsubsets","ledgerdetails","getmatdata","specificproject","scheduleList","items","viewwindow","nochildren","sumtype","scheduleonly","getchartdata","breakdown","HARTH_API_CALC_URL","$$type","concat_","constant","iterationNext","iterationDone","TypeClass","Constructor","_funcPath","allowInheritedProps","_x","funcPath","implPath","implementations","_name","requirements","getBoundMethod","typeRep","typeClass","methods","Setoid","Semigroup","Monoid","Functor","Bifunctor","Profunctor","promap","Apply","Applicative","ChainRec","chainRec","Monad","Alt","alt","Plus","zero","Alternative","Foldable","Traversable","Extend","Comonad","Null$prototype$toString","Null$prototype$equals","Undefined$prototype$toString","Undefined$prototype$equals","Boolean$prototype$toString","Boolean$prototype$equals","Number$prototype$toString","Number$prototype$equals","Date$prototype$toString","Date$prototype$equals","RegExp$prototype$equals","String$empty","String$prototype$toString","String$prototype$equals","String$prototype$concat","Array$empty","Array$of","Array$chainRec","$todo","$done","$more","Array$zero","Array$prototype$toString","reprs","Array$prototype$equals","Array$prototype$concat","Array$prototype$map","Array$prototype$ap","fs","idx2","Array$prototype$chain","Array$prototype$reduce","Array$prototype$traverse","go","lift2","Array$prototype$extend","Arguments$prototype$toString","Arguments$prototype$equals","Error$prototype$toString","Error$prototype$equals","Object$empty","Object$zero","Object$prototype$toString","Object$prototype$equals","Object$prototype$concat","Object$prototype$map","Object$prototype$reduce","Function$of","Function$chainRec","Function$prototype$equals","Function$prototype$map","Function$prototype$promap","profunctor","Function$prototype$ap","Function$prototype$chain","$pairs","Null","Undefined","Arguments","$seen","xType","lift3","apFirst","apSecond","chain_","filterM","foldable","extend_","comonad","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","isLeft","isRight","Left","Right","always2","isPrefix","candidate","memberOf","strRepeat","stripOutermostParens","trimTrailingSpaces","bool","stripNamespace","_Type","types","_test","extractor","BINARY","FUNCTION","INCONSISTENT","NULLARY","RECORD","UNARY","UNKNOWN","VARIABLE","Inconsistent","typeEq","typeofEq","typeof_","functionUrl","NullaryTypeWithUrl","NullaryType","EnumTypeWithUrl","members","EnumType","UnaryTypeWithUrl","_1","UnaryType","BinaryTypeWithUrl","_2","BinaryType","applyParameterizedTypes","Unknown","Any","AnyFunction","Array_","Boolean_","Date_","Error_","FiniteNumber","ValidNumber","Function_","parenthesize","$keys","$types","GlobalRegExp","RegExp_","Integer","NegativeFiniteNumber","NegativeInteger","NegativeNumber","Number_","NonGlobalRegExp","NonZeroFiniteNumber","NonZeroInteger","NonZeroValidNumber","Nullable","nullable","Object_","PositiveFiniteNumber","PositiveInteger","PositiveNumber","RegexFlags","StrMap","strMap","String_","ValidDate","Unchecked","def","_create","checkTypes","numArgs","_determineActualTypes","loose","refine","seen$","fromUnaryType","rejectInconsistent","determineActualTypesStrict","determineActualTypesLoose","updateTypeVarMap","typeVarMap","typeVar","$typeVarMap","typeVarName","$entry","valuesByPath","underlineTypeVars","typeInfo","underline","indexedPropPath","satisfactoryTypes","expType","invalidValue","constraints","typeClasses","typeClassConstraintViolation","typeVarMap$","okTypes","typeVarConstraintViolation","innerValues","$1s","$2s","_env","CheckedNullaryType","CheckedUnaryType","CheckedBinaryType","specialize","CheckedEnumType","RecordType","fields","CheckedRecordType","TypeVariable","CheckedTypeVariable","UnaryTypeVariable","CheckedUnaryTypeVariable","BinaryTypeVariable","CheckedBinaryTypeVariable","checkValue","$typeVarMapBox","wrapFunction","numArgsExpected","invalidArgumentsLength","checkValue$","wrapFunctions","tooManyArguments","numArgsReceived","typeSignature","constraintsRepr","$reprs","label","delta","showType","showTypeQuoted","showValuesAndTypes","_underline","formatType3","underlineConstraint","formatType5","st","formatType4","counter","carets","numbers","resolvePropPath","formatType6","index_","propPath_","indexedPropPath_","tvn","tc","values_","$valuesByPath","assertRight","opts","_typeVarMap","_values","_indexes","impl","curried","indexes","returnValue","expTypes","fromUncheckedUnaryType","typeConstructor","fromUncheckedBinaryType","_slice","isArrayLike","_contains","BuiltInType","constr","AutoPredicate","createIterator","_keys","CreateCaseConstructor","objConstructorOf","ObjConstructorOf","recordType","CreateUnionType","rawCases","staticCase","staticCaseT","boundStaticCase","processRawCases","createCaseConstructor","constructors","caseRecordType","enums","CaseRecordType","instanceCaseDef","staticCaseDef","caseOn","Named","Anonymous","Class","UUID_PATTERN","$UUID","CHECK_TYPES","SumType","$T","$AuthPermission","$Auth","LoggedOut","LoggedIn","Refresh","auth$1","isRefresh","isLoggedOut","isLoggedIn","Manager","readState","writeState","identifier","streamFromPath","reducerIntendedToChangeValue","streamIsOutOfDateWithReducer","never","action","toMaybe","Sum","NominalMaybe","Just","Nothing","$Type","discard","assert","Na","Maybe","toNullable","nominal","Fac","Fbc","FbEc","swapToMaybe","NominalEither","Loadable","Loaded","Loading","ScheduleTask","task_message","task_progress","task_failed","task_cancelled","TaskState","TaskComplete","task","TaskFailed","TaskRunning","TaskStarted","TaskCancelled","NotificationButton","Notification","buttons","NotificationRequest","Task","delay","RedirectGantt","Sources","responses","Sinks","taskPrefix","taskMessage","Started","Failed","Complete","Cancelled","taskRoute","processNotificationRequest","processTask","processResponse","taskState","extractProgress","_dereq_","SomePromiseArray","_SomePromiseArray","promises","setHowMany","setUnwrap","firstLineError","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","receiver","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","_drainQueue","queue","_drainQueueStep","_settlePromises","setScheduler","hasCustomScheduler","haveItemsQueued","fatalError","isNode","stderr","exit","throwLater","invokeLater","invoke","settlePromises","_reset","INTERNAL","tryConvertToPromise","debug","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","thisArg","_bitField","_resolveCallback","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_target","_setBoundTo","_setOnCancel","_boundTo","_isBound","noConflict","bluebird","cr","callerCache","getterCache","getGetter","util","canEvaluate","ensureMethod","classString","caller","namedGetter","indexedGetter","isIdentifier","propertyName","maybeGetter","PromiseArray","apiRejection","errorObj","_async","cancel","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","NEXT_FILTER","getKeys","catchFilter","instances","boundTo","predicateLoop","matchesPredicate","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","createContext","_promiseCreated","_pushContext","_popContext","_peekContext","trace","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","enableAsyncHooks","disableAsyncHooks","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","deferUnhandledRejectionCheck","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","unhandledRejectionCheck","_notifyUnhandledRejection","unhandledRejectionClear","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","_getContext","contextBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","legacyHandlers","unhandledrejection","onunhandledrejection","rejectionhandled","onrejectionhandled","fireDomEvent","dispatch","legacy","dispatchEvent","CustomEvent","domEvent","detail","cancelable","Event","createEvent","initCustomEvent","fireGlobalEvent","emit","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","warning","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","branchesRemainingToCancel","bindingPropagateFrom","warningsOption","_clearCancellationData","_execute","monitoring","_fireEvent","nodeSupportsAsyncResource","asyncHooks","cur","isFulfilled","ignoreSelf","_parent","attachExtraTrace","__stackCleaned__","parsed","parseStackAndMessage","notEnumerableProp","checkForgottenReturns","handlerLine","creatorLine","traceLines","cleanStack","lineMatches","firstUserLine","deprecated","formatAndLogError","reconstructStack","stacks","removeDuplicateOrEmptyJumps","removeCommonRoots","current","currentLastIndex","currentLastLine","commonRootMeetPoint","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","localHandler","localEventFired","formatNonError","snip","maxChars","captureStackTrace","parseLineInfoRegex","parseLineInfo","fileName","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","info","_promisesCreated","uncycle","inherits","stackToIndex","cycleEdgeNode","currentChildLength","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isTTY","color","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","_value","PromiseReduce","PromiseAll","promiseAllThis","PromiseMapSeries","each","mapSeries","_TypeError","_RangeError","Objectfreeze","freeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","AggregateError","enumerable","OperationalError","cause","errorTypes","RejectionError","isES5","getDescriptor","propertyIsWritable","descriptor","ObjectKeys","ObjectGetDescriptor","ObjectDefineProperty","ObjectFreeze","ObjectGetPrototypeOf","ArrayIsArray","PromiseMap","PassThroughHandlerContext","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","lastly","tapCatch","handlerOrPredicate","catchInstances","Proxyable","yieldHandlers","promiseFromYieldHandler","traceParent","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","bitField","_proxy","PromiseSpawn$","generator","spawn","addYieldHandler","spread","MappingPromiseArray","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_init","preservedValues","_totalResolved","_resolve","booleans","_resolveFromSyncValue","attempt","maybeWrapAsError","isUntypedError","rErrorKey","wrapAsOperationalError","markAsOriginatingFromRejection","nodebackForPromise","multiArgs","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","adapter","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","setReflectHandler","getDomain","domain","getContextDefault","getContextDomain","AsyncResource","getContextAsyncHooks","getContext","errors","APPLY","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","fulfilled","rejected","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_setNoAsyncGuarantee","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","toStringTag","defer","toFastProperties","async_hooks","toResolutionValue","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","getActualLength","shouldCopyValues","isResolved","THIS","withAppended","defaultSuffix","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","getDataPropertyOrDefault","checkValid","suffixRegexp","keyWithoutAsyncSuffix","promisifiableMethods","inheritedDataKeys","passesDefaultFilter","makeNodePromisifiedEval","escapeIdentRegex","makeNodePromisifiedClosure","defaultThis","promisified","makeNodePromisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","isClass","Es6Map","mapToEntries","extractEntry","entriesToMap","PropertiesPromiseArray","isMap","_isMap","castValue","keyOffset","arrayMove","srcIndex","dstIndex","_capacity","_front","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","raceLater","ReductionPromiseArray","initialValue","_each","_fn","_initialValue","_currentCancellable","_eachValues","valueOrReason","gotAccum","accum","_gotAccum","_eachComplete","sender","_resultCancelled$","noAsyncScheduler","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","nextTick","isRecentNode","nativePromise","navigator","standalone","cordova","div","attributes","toggleScheduled","div2","toggle","observe","scheduleToggle","disconnect","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","settle","allSettled","CANCELLATION","_howMany","_unwrap","_initialized","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","__isCancelled","getThen","isAnyBluebirdPromise","doThenable","doGetThen","hasProp","HandleWrapper","afterValue","afterTimeout","successClear","failureClear","handleWrapper","NULL","castPreservingDisposable","thenable","_isDisposable","_getDisposer","_setDisposable","dispose","resources","tryDispose","Disposer","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","resource","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_disposer","tryCatchTarget","globalObject","tryCatcher","Child","isPrimitive","maybeError","safeToString","appendee","defaultValue","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","ic","foo","rident","filledRange","ignore","ArrayFrom","itResult","hasEnvVariables","runInAsyncScope","versions","supportsAsync","P","transform","transformX","notifications","notification","thinRoundSolidWhiteBorder","buttonHash","backgroundColor","minWidth","transition","fontSize","standardNotification","baseNotification","errorNotification","notificationHash","top","minHeight","pointerEvents","containerHash","notificationContentHash","paddingLeft","busyWhile","busy","Notifications","ScheduleGenerated","ErrorNotification","alert","alertError","NotificationBar","elContent","elMessage","elButtons","clearNotificationHTML","innerText","newNotification","showBar","manuallyRenderNotification","notificationRemoved","renderError","hideBar","timeoutID","MoveBarY","vh","transformY","animating","notification_removed","notification_added","notification_queued","transitions","zIndex","Tasks","processTaskRequest","organization","max_time","lastResponseTime","Auth","inProgress","setInterval","pollScheduleTasks","processRequests","Interpreter","flagon","nameIndex","permission_name","Permissions","hasRead","permission","permission_flag","hasWrite","fromMaybe","$SortedScheduleVersionList","$ScheduleVersion","$Schedule","Empty","Id","$Labelled","$Model","schedule_version","schedule_names","schedule_params","$and","progress","$ServerScheduleVersion","$Action","formatLabel","versionsFromSchedule","LoadedOf","kit","sv","LoadableType","IdOf","EmptyOf","LoadableRecord","$or","findLoaded","scheduleVersionFromSchedule","$action","schedule$schedule_id","fromLoadable","schedule$schedule_name","schedule_version$schedule_version_id","schedule_version$schedule_priority","schedule_version$label","processServerScheduleVersion","processServerSchedules","Model","world","read","Streams","fetchSchedulesLocal","fetchSchedulesParameters","obj$","Progress","selectedVersion","schedulesLoadable","scheduleModel","createStatsStream","deleteSchedule","byProp","singleTag","getElementsByTagName","styleSheet","insertAdjacentElement","t2","ShadowRoot","ShadyCSS","nativeShadow","Document","CSSStyleSheet","t3","e4","n5","_$cssResult$","s5","replaceSync","e5","n6","t4","cssRules","e2","r2","trustedTypes","emptyScript","o2","reactiveElementPolyfillSupport","n2","toAttribute","i3","fromAttribute","converter","hasChanged","HTMLElement","super","_$Ei","isUpdatePending","hasUpdated","_$El","static","finalize","observedAttributes","elementProperties","_$Ep","_$Ev","noAccessor","getPropertyDescriptor","r4","requestUpdate","finalized","getOwnPropertySymbols","createProperty","elementStyles","finalizeStyles","styles","flat","i4","_$E_","enableUpdating","_$AL","_$Eg","addController","_$ES","renderRoot","isConnected","hostConnected","removeController","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","o5","litNonce","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$EO","h3","getPropertyOptions","_$EC","_$Ej","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","_$Ek","_$AE","hostUpdated","firstUpdated","updateComplete","getUpdateComplete","mode","ReactiveElement","reactiveElementVersions","i2","s3","e3","createPolicy","o3","n3","l2","h2","r3","createComment","d2","_$litType$","createTreeWalker","C","l4","d3","u2","c3","v2","s6","u3","g2","y2","currentNode","nextNode","hasAttributes","getAttributeNames","t5","getAttribute","i5","ctor","S2","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","_$AH","_$AN","_$AA","_$AB","_$AM","_$Cm","_$AU","startNode","endNode","_$AI","_$AR","c2","O","_$AC","_$AD","creationScope","importNode","_$AP","setConnected","capture","passive","host","litHtmlPolyfillSupport","litHtmlVersions","l3","o4","s4","renderOptions","_$Dt","renderBefore","_$litPart$","_$litElement$","litElementHydrateSupport","LitElement","n4","litElementPolyfillSupport","litElementVersions","textarea_styles_default","_$Ct","_$Ci","hasAttribute","__defProp","__defProps","defineProperties","__getOwnPropDesc","__getOwnPropDescs","getOwnPropertyDescriptors","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","__decorateClass","decorators","kind","decorator","formCollections","reportValidityOverloads","userInteractedControls","interactions","validValidityState","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing","nt","resolvedOptions","waitUntilFirstUpdate","decoratedFnName","watchedProperties","changedProps","oldValue","finisher","placement","originalKey","initializer","e6","HTMLSlotElement","assignedElements","ShoelaceElement","bubbles","composed","SlTextarea","formControlController","form","getRootNode","formId","getElementById","closest","reportValidity","assumeInteractionOn","handleFormData","handleFormSubmit","handleFormReset","reportFormValidity","handleInteraction","attachForm","detachForm","setValidity","validity","isButton","formData","noValidate","control","setUserInteracted","stopImmediatePropagation","emittedEvents","elements","hasInteracted","doAction","position","height","clipPath","whiteSpace","click","getForm","reset","submit","required","toggleAttribute","updateValidity","emitInvalidEvent","originalInvalidEvent","slInvalidEvent","hasSlotController","slotNames","handleSlotChange","hasDefaultSlot","TEXT_NODE","ELEMENT_NODE","hasNamedSlot","slotName","slot","hasFocus","filled","helpText","rows","resize","readonly","spellcheck","validationMessage","resizeObserver","ResizeObserver","setTextareaHeight","unobserve","handleBlur","handleChange","handleFocus","handleInput","handleInvalid","scrollHeight","handleDisabledChange","handleRowsChange","blur","scrollPosition","scrollTop","scrollLeft","setSelectionRange","selectionStart","selectionEnd","selectionDirection","setRangeText","selectMode","checkValidity","setCustomValidity","hasLabelSlot","hasHelpTextSlot","hasLabel","hasHelpText","textarea","minlength","maxlength","autocapitalize","autocorrect","autofocus","enterkeyhint","inputmode","customElements","define","renderStream","modalStream","prevVTree","prevVTreeTime","Portal","innerWidth","channel","Channel","originalMessage","actions","dismissable","desktop","mobile","icon","rel","infoModalButton","truncation","thinTablet","tablet","verbose","silly","Content","iconWrapperCSS","Responsive","breakpoints","hd","useDisplayNone","sorted_breakpoints","selectors","combinators","breakpoint","vtree","listener","debounce","$visited","icons","box","tool","truck","mapPin","invoice","greenTick","redCross","$hover","$active","$focus","plainTxt","trashBin","switchiconNeuLeft","switchiconNeuRight","refresher","guardedInput","setGuard","getGuard","oninput","headingSeparators","errorAlert","prologue","conjunction","postlogue","errorArray","returnBoolean","symmetric","alertType","statPlacement","additionalChecks","errorString","eindex","errorStringAdd","invisible","displayederrorstring","unstyledIconLeft","iconStyle","unstyledIconRight","unstyledIconLeftButton","unstyledIconRightButton","unstyledIconLeftAnchor","unstyledIconRightAnchor","iconLeftButton","iconRightButton","iconLeftAnchor","iconRightAnchor","backAnchor","forwardAnchor","forward","ensureList","padding","listNoPadding","strikeItem","tachyons","fstyle","strikeItemRow","strikeObject","meta","inlinestrikeList","strikeList","strikeTable","nonStrikeList","splitPane","HorizontalForm","HorizontalAlignment","table","headings","selectbuttons","saving","dateCheckbox","border","checkbox","checked","dateInput","dateCheckboxLabel","actionEvent","confirmDelete","actionFn","initalLabel","confirmedLabel","recoveryFunction","forceRender","skipConfirm","discardButoon","undoDiscard","doneUndo","spinner","custom","spinnerdimensions","userSelect","formInput","telephoneInput","textArea","textInput","valueAsDate","onchange","xRemoval","undo","usePlaceholder","selected","hidden","option","labelCheckbox","ContextBar","tabset","tabnames","details","centeredSpinner","normalizeInfoPillValue","infoPills","infoPill","mobileButtonStack","mobileOnly","tabletOnly","truncate","uniqPattern","moneyPattern","nFormatter","digits","forceFromat","si","symbol","money","financialprops","currentRevenue","currentExpenditures","currentProfits","forecastedRevenue","forecastedExpenditures","forecastedProfits","outstandingRevenue","outstandingExpenditures","outstandingProfits","currentDailyPeriodRevenue","currentDailyPeriodExpenditures","forecastedDailyPeriodRevenue","forecastedDailyPeriodExpenditures","currentDailyPeriodProfits","forecastedDailyPeriodProfits","outstandingDailyPeriodRevenue","outstandingDailyPeriodExpenditures","outstandingDailyPeriodProfits","currentDailyRevenue","currentDailyExpenditures","forecastedDailyRevenue","forecastedDailyExpenditures","currentDailyProfits","forecastedDailyProfits","outstandingDailyRevenue","outstandingDailyExpenditures","outstandingDailyProfits","accruedExpenditures","accruedRevenue","accruedProfits","accruedDailyRevenue","accruedDailyExpenditures","accruedDailyPeriodRevenue","accruedDailyPeriodExpenditures","accruedDailyProfits","accruedDailyPeriodProfits","budget","contractList","totalScheduleData","chartdata","totalDayData","invoicecount","materialActual","materialForecasted","coalatorAccumulator","propIndex","financialReduce","asyncMergeAll","overHEadVersion","accumulator","checkprop","freeGlobal","freeSelf","objectProto","nativeObjectToString","symToStringTag","isOwn","unmasked","getRawTag","objectToString","baseGetTag","uid","coreJsData","maskSrcKey","IE_PROTO","funcToString","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","baseIsNative","getNative","baseAssignValue","objValue","assignValue","customizer","isNew","nativeMax","otherArgs","baseSetToString","nativeNow","lastCalled","stamp","setToString","overRest","isLength","reIsUint","isIndex","baseRest","isIterateeCall","assigner","sources","guard","iteratee","isObjectLike","baseIsArguments","stubFalse","freeExports","freeModule","Buffer","isBuffer","typedArrayTags","freeProcess","nodeUtil","binding","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","baseTimes","isArguments","inherited","isArr","isArg","isBuff","isType","skipIndexes","nativeKeys","isPrototype","arrayLikeKeys","baseKeys","copyObject","createAssigner","Features","client","splitio","startup","requestTimeoutBeforeReady","retriesOnFailureBeforeReady","readyTimeout","eventsFirstPushWindow","core","authorizationKey","SPLIT_IO_BROWSER","trafficType","topnav","uppy","uppyDropbox","uppyGoogleDrive","uppyWebcam","payments","paymentsNav","paymentsEnforced","paymentsBanner","quickStartProject","Charts","localOverrides","features","respond","treatments","getTreatments","on","SDK_READY","SDK_UPDATE","Container","ContentPane","HeaderPane","fade","openWatch","Unstyled","header","Light","Dark","links","HomeEmpty","Updates","Projects","Resources","Schedules","Workflows","Interruptions","Tools","Financials","Materials","return_url","Exports","Organizations2","Login","Reset","link_css","trunc_css","isActive","logo","hideScrollbars","modal","advancedView","topNavBanner","isDataRoute","isAccessRoute","validLinks","auth_check","toLi","org","onwheel","deltaX","deltaY","scroll","behavior","endDelay","easing","isEasingList","mix","noop","noopReturn","fillOffset","offsetProgress","interpolate","defaultOffset","remainder","progressInRange","segmentEasing","rangeSize","getEasingForSegment","isCubicBezier","isEasingGenerator","createAnimation","calcBezier","cubicBezier","mX1","mY1","mX2","mY2","getTForX","aX","lowerBound","upperBound","currentX","currentT","binarySubdivide","namedEasings","ease","functionArgsRegex","getEasingFunction","argsArray","steps","expanded","rounded","keyframes","initialDuration","startTime","rate","cancelTimestamp","totalDuration","playState","finished","updateDuration","interpolate$1","tick","pauseTime","currentIteration","iterationProgress","iterationIsOdd","frameRequestId","play","performance","pause","finish","cancelAnimationFrame","commitStyles","currentTime","playbackRate","MotionValue","setAnimation","animation","clearAnimation","getAnimationData","transforms","axes","transformAlias","rotation","syntax","toDefaultUnit","baseTransformProperties","translate","rotate","scale","skew","transformDefinitions","asTransformCssVar","axis","compareTransformOrder","transformLookup","isTransform","buildTransformTemplate","transformListToString","isCssVar","registeredProperties","testAnimation","animate","featureTests","cssRegisterProperty","waapi","partialKeyframes","opacity","linearEasing","supports","convertEasing","points","numPoints","generateLinearEasingPoints","cubicBezierAsString","getStyleName","getPropertyValue","getComputedStyle","stopAnimation","needsCommit","animateStyle","keyframesDefinition","AnimationPolyfill","record","__MOTION_DEV_TOOLS_RECORD","isRecording","allowWebkitAcceleration","valueIsTransform","canAnimateNatively","addTransformToElement","motionValue","motionValues","getMotionValue","readInitialValue","hydrateKeyframes","keyframesList","toUnit","finalKeyframe","getUnitConverter","registerProperty","registerCssVariable","animationOptions","iterations","thisEasing","onfinish","oncancel","resolveElements","withControls","animationFactory","controls","activeAnimation","selectFinished","resolveOption","AnimatePolyfill","numElements","animationFactories","valueOptions","NODE_ENV","dispatchPointerEvent","originalEvent","dispatchViewEvent","originalEntry","inView","enable","disable","inViewOptions","viewOptions","__rest","elementOrSelector","onStart","margin","rootMargin","amount","IntersectionObserver","activeIntersections","observer","onEnd","isIntersecting","newOnEnd","inView$1","enterEntry","leaveEntry","mouseEvent","pointerType","gestures","hover","onEnter","onLeave","press","onPointerUp","onPointerDown","animateProgress","keyframesOrOptions","animate$1","modals","minimized","onnext","ModalItem","isOpen","ModalItemView","$lastChild","scaleX","scaleY","Overlay","modalStack","minimize","marketingURL","HARTH_MARKETING_URL","external","APP_VERSION","parseFloatDec","NumberInput","scoped","errorLabel","rawTextValue","valueAsNumber","keyStroke","desiredElValue","errorOutput","inputErrors","novalidate","initializeHTML","humanList","prettyKey","removeKeysFromJSON","removeSpecialCharactersFromJSON","formatSearchList","numberOperators","stringOperators","Contains","Blank","dateOperators","allOperators","numberInequalities","stringInequalities","dateInequalities","renderTimeout","listPotentiallyStale","traversePaths","selectedPaths","comparison","totalReturned","totalSearched","filterView","filters","changeNames","uniqueArrays","intialDisabled","marker","generatedElements","newFilter","objProp","propName","propValue","propType","propCondition","equality","unique","propInclusive","sortName","sortobjProp","sortActivate","Afilter","filterTitle","filterOptions","upgrade","better_name","ugly","ugly_name","strip","makeFilterOption","Ddisabled","setObjProp","newfilter","generatedFilterView","modifyHandler","oldChange","validValue","words","phrase","searchingObjects","itemValues","filterValue","filterWords","itemValue","itemWords","filterWord","itemWord","searchingObject","checkSpinItem","operator","uniqurArray","array_name","uniqueCondition","templatePath","uniqueConditionKey","callIfProp","getProp","itemPath","setHours","spinCycle","partitionActiveFilters","ListProcessing","sortfield","returnContainer","searchFilter","spinFilters","searchResult","checkSearchItem","ands","ors","andResult","orResult","FilterInterface","tableHeadings","resourceView","sortField","FilterInputs","getFilters","TRANSLOADIT_TEMPLATE","TRANSLOADIT_AUTH_KEY","Uppy","Transloadit","transloaditOptions","UppyDashboard","dashboardOptions","domNodeRendered","Core","use","Dashboard","Webcam","facingMode","GoogleDrive","companionUrl","Dropbox","onload","Uppy$1","getFields","autoProceed","allowMultipleUploads","restrictions","maxNumberOfFiles","waitForEncoding","waitForMetadata","getAssemblyOptions","expires","template_id","metaFields","trigger","inline","proudlyDisplayPoweredByUppy","showProgressDetails","thumbnailWidth","image_exts","MiniGallery","listOnly","readOnly","embedded","download","zipRequest","file_ext","zip_error","file_date","file_url","file_thumbnail_url","file_thumb_url","mithrilKey","backgroundImage","file_deleted_at","_loading","prevFields","syncFiles","fks","nextFields","fieldsChanged","diffFields","_uppy","editing","Pencil","toggleable","viewOutput","tabindex","onfocus","onfocusout","relatedTarget","compat","DEV","IDENTICAL_LOGS","callProp","exclusions","timeoutId","deBounceTraverse","moreExclusions","returnKeys","identicalProp","traverseCheck","refObj","checkObj","parentPath","bParent","bprop","bprophas","aVal","bVal","ckey","resize$","preventBlurSelectors","alwaysopen","activeRow","colCount","incriment","slicepostiona","slicepostionb","globalBlur","renderedRows","selection","srcElement","layouts","ourHeaders","ourRows","$ul","scrollableTable","advanced","regExpEscape","sortByLength","assignPair","keyboard","highlighted","dismiss","navigate","showingDrawer","renderedList","NO_MATCH","UPPER_BOUND","NEXT","BaseAutocomplete","framework","nullableOverrides","overrides","chosen","getList","getInput","getChosen","getOpen","minChars","maxItems","eventNames","onblur","onkeydown","onmousedown","choose","clickItem","PATTERN_INPUT","mark","highlight","buffer","processed","renderInput","itemClassNames","renderItem","renderItems","classNames","keyboardSubmit","keyboardDismiss","keyboardNavigate","new_chosen","keyCode","new_highlighted","queries","listItems","ul","defaultStyle","defaultInputStyle","onselect","throttleSearch","manuelConfig","inputStyle","rootStyle","inputClassName","processedList","byLabel","computedList","lastRequestTime","delayAmount","autocomplete","manuel","addBSS","addInputClass","theirAttrs","addAttrs","nullUser","filteredRateOptions","metaDataLoading","teamWorkList","resourceWorkList","loadingMeta","availableDisciplineSelections","availableUOMS","deleteRates","deleteDisciplinesTeamsArrays","deleteDisciplinesResourceArrays","disciplinesResources","missingPermissions","initiateContractFetch","CONSTANTdisciplines","restrictedOrgDisc","prop2","organizationDisciplines","calculated","deleteStateProp","deleteWorkProp","placeLong","suburbsInput","editResourcePermissions","editAssignedToolPermissions","editToolPermissions","tools_vm","crew_form","capability","deleteProjectResource","makeAPICalls","deleteProjectTeam","coalatedSelectedVersion","cloningResourceCapability","clonemarker","pedit","crew_clone","resetCrewForm","crew_vm","showWork","cloningResourceCapabilityRate","newDR","resetDRateForm","newcdr","vm","discipline_vm","setOptionsMark","savingProp","checkMultiple","check_dnames","chr","resetForm","crew_edit","contractor_edit","stillWorking","team","crew","indexArray","Dindex","Tindex","Cindex","cd","getUser","userObj","viewtype","ListResource","baseFilterFunction","resourceFilters","makeMoney","readProjectPermissions","totalcount","fetchWorkList","reinstateWork","workMapping","crewFilters","crewratesFilters","getFilterInputs","datainput","masterLIST","mcreate","cloningTools","newList","setOptions","adjustPercenageValue","adjustPercenage","dataObject","aitem","iRate","createContractsCheckbox","ctrl","indexing","modelProp","mapList","resUnnest","resReducer","resID","teamID","unWrapper","newIndex","wObject","deleteBay","rObject","dArray","di","createNewWorkRate","newD","getActivateDeleteButton","activated","vmDetail","ratedata","Discipline","Performance","Expenditure","largeRatesTable","rindex","smallRatesTable","discardChangesButton","tooldata","Description","Ownership","Condition","Location","largeToolsTable","tindex","smallToolsTable","deleteCapability","deleteResource","deleteDisciplineR","discipline","cloningResource","reAPPLYC","check_cnames","check_crew_names","DeleteDisabled","DeleteDisabledCapability","SaveRDisabled","SaveCDisabled","process_geo","geo_name","geo_item","new_geography","geography_depot","geography_latitude","geography_longitude","deleteTeams","detailPaneInputs","rateItem","intent","sendResource","deleteDisciplineRate","cdr","ReturnedAutocompleteObj","editContractPermissions","readContractPermissions","textDecoration","ods","detailsPaneOpen","ratesTable","desktopOnly","editAllButton","toolsTable","uploadmetadata","only","fetchOrganizationsDisciplines","prepareResources","comparisonProp","newResource","routeids","getledgers","updated_crew","fetchResource","ochange","routeInitialized","fetchUsers","fetchGeographies","fetchTools","toolList","schange","resourceList","geoy","geolist","newcrews","newrates","newcrew","newcontractor","toolschange","contractorchange","EditResource","Intent","activeTeamTab","DetailsPane","readSchedulePermissions","ResourceHeader","HarthUppy","EditCapabilities","rc","CapabilityHeader","WorkRatesTab","ToolsTab","downArrow","rootNode","defaultOption","align","dragging","__selector","__unformat","__formatNatural","__formatDecimal","__validate","unformat","theirUnformat","formatNatural","theirFormatNatural","formatDecimal","theirFormatDecimal","prevPropValue","natural","decimal","rootEl","refreshInputs","preferSkipSelectionChange","proposal","updateTargetValue","padEnd","diffValue","updateSelection","lastPaste","selectableMode","oncopy","clipboardData","setData","isPropValid","selectionModeScenario","scenarioA","scenarioB","scenarioBAutoFocus","manageSelectionModeFromFocusEvent","selectionchange","prefixed","suffixed","lastValidValue","onmouseup","getSelection","onfocusin","tabIndex","onpaste","getData","inputType","_update","scheduledValue","newDecimal","unformatted","NumberInput2","visit","newPaths","resultFn","octagonAlert","abbreviations","cvc","__toRamdaPath","proceedTimer","initialValues","theirErrors","touched","changes","errored","toRamdaPath","mergedErrors","pathCache","onsubmit","initialSnapShot","saved","merged","clearStorage","removeItem","nextInputOriginName","nextInputDelay","nextInputRevision","nextInputImmediate","getNextInputOriginName","validateTimeoutId","_changes","_errors","_touched","setTouch","setError","isSaveDisabled","saveWith","childrenArgs","errorInfo","theirKeys","checkTouched","nextInput","validateDelay","isModel","nextInputProgress","clearNextInputTimer","mapping","Form","modelKeys","setTitle","scanFormElements","oldTitle","inputHandler","pathStr","getValidValue","recordError","originalValues","showFocused","discardProjectButton","saveProjectButton","pdata","Name","editPermissions","Contract","Autocomplete","cobj","addDisplinePlus","addNewDiscipline","removeDiscipline","deleteDiscipline","inlineHeader","disciplineTable2","bigMobile","big","smallMobile","assignSomeone","assignees","workAmount","uom","payRate","chargeRate","totalPay","totalCharge","disciplineSelectAutocomplete","moneyMode","userSelectionIndex","du","od","ds","disciplineChargeRate","smallMobileOnly","bigMobileOnly","gtMobile","subdesc","addon","uploadbox","SaveDisabled","checkTaskDates","ProjectDocument","toStringDeliverable","toTitle","toVTree","editProjectPermissions","Chartist","globalRoot","namespaces","xhtml","xlink","ct","alphaNumerate","fromCharCode","sourceProp","replaceAll","subStr","newSubStr","ensureUnit","quantity","Node","mapMultiply","factor","mapAdd","addend","serialMap","roundWithPrecision","precision","escapingMap","createSvg","getAttributeNS","Svg","addClass","_node","normalizeData","multi","labelCount","series","getDataArray","labels","reverseData","safeHasProperty","isDataHoleValue","recursiveConvert","multiValue","getNumberOrUndefined","normalizePadding","fallback","bottom","getMetaData","orderOfMagnitude","LN10","projectLength","axisLength","bounds","getAvailableHeight","chartPadding","axisX","getHighLow","dimension","highLow","high","MAX_VALUE","low","findHigh","findLow","recursiveHighLow","referenceValue","isNumeric","isFalseyButZero","isMultiValue","getMultiValue","rho","gcd","x1","x2","getBounds","scaleMinSpace","onlyInteger","newMin","newMax","optimizationCounter","valueRange","oom","numberOfSteps","scaleUp","smallestFactor","EPSILON","safeIncrement","increment","polarToCartesian","centerX","centerY","radius","angleInDegrees","angleInRadians","PI","cos","sin","createChartRect","fallbackPadding","hasAxis","axisY","yAxisOffset","xAxisOffset","normalizedPadding","chartRect","y1","createGrid","eventEmitter","positionalData","counterUnits","gridElement","createGridBackground","gridGroup","gridBackground","createLabel","axisOffset","labelOffset","useForeignObject","labelElement","foreignObject","getSeriesOption","seriesOptions","optionsProvider","responsiveOptions","currentOptions","baseOptions","mediaQueryListeners","updateCurrentOptions","mediaEvent","previousOptions","matchMedia","mql","addListener","removeMediaQueryListeners","removeListener","getCurrentOptions","splitIntoSegments","pathCoordinates","valueData","increasingX","fillHoles","hole","Interpolation","currX","currY","currData","simple","prevX","prevY","prevData","curve","cardinal","tension","iLen","monotoneCubic","dys","dxs","postpone","EventEmitter","handlers","addEventHandler","removeEventHandler","starHandler","listToArray","superProtoOverride","superProto","cloneDefinitions","initialize","resizeListener","plugins","plugin","createChart","initializeTimeoutId","Base","supportsForeignObject","isSupported","supportsAnimations","__chartist__","detach","override","off","insertFirst","namespacedAttribute","SVGElement","nodeName","foundNode","foundNodes","List","getNode","fnObj","newElement","replaceChild","removeClass","removedClasses","removeAllClasses","getBoundingClientRect","guided","createAnimate","animationDefinition","attributeProperties","Easing","begin","dur","calcMode","keySplines","keyTimes","attributeName","beginElement","feature","implementation","hasFeature","easeInSine","easeOutSine","easeInOutSine","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","nodeList","svgElements","prototypeProperty","elementDescriptions","accuracy","command","pathElements","relative","pathElement","forEachParam","pathElementIndex","paramName","paramIndex","arc","ry","xAr","lAf","sf","transformFnc","transformed","chunks","chunk","description","spliceArgs","accuracyMultiplier","splitByCommand","joinedPath","axisUnits","rectStart","rectEnd","rectOffset","Axis","ticks","gridOffset","createGridAndLabels","labelGroup","chartOptions","axisOptions","projectedValues","projectValue","labelValues","labelInterpolationFnc","projectedValue","labelLength","showGrid","grid","showLabel","AutoScaleAxis","axisUnit","FixedScaleAxis","stepLength","StepAxis","calc","stretch","showLine","showPoint","showArea","areaBase","lineSmooth","showGridBackground","fullWidth","chart","point","area","vertical","horizontal","Line","seriesGroup","seriesIndex","seriesElement","pathData","valueIndex","seriesMeta","areaBaseProjected","pathSegment","solidPathSegments","firstElement","lastElement","areaPath","seriesBarDistance","stackBars","stackMode","horizontalBars","distributeSeries","bar","Bar","serialSums","curr","valueAxis","labelAxisTicks","labelAxis","zeroPoint","stackedBarValues","periodHalfLength","biPol","projected","previousStack","labelAxisValueIndex","positions","metaData","chartPie","chartDonut","slicePie","sliceDonut","sliceDonutSolid","startAngle","donut","donutSolid","donutWidth","labelPosition","labelDirection","ignoreEmptyValues","determineAnchorPosition","center","toTheRight","Pie","labelsGroup","labelRadius","totalDataSum","seriesGroups","previousValue","currentValue","hasSingleValInSeries","endAngle","overlappigStartAngle","innerStart","innerEnd","donutSolidRadius","pathClassName","strokeWidth","rawValue","interpolatedValue","dx","dy","spreader","objVal","segmentSeries","cumulative","nameappendage","seriesdata","cumulativevalue","transitionIndex","splitArray","drawChart","fe","sdata","os","actualChartData","forecastChartData","financialposition","ftypeActual","ft","ftypeForecast","vadd","enddate","startdate","spreaddate","adata","fdata","bdata","chartname","addColours","defaultv","odinsum","tp","sortedValues","getChartData","makeSingleChart","tvalue","feChart","renderyear","getYear","chartElements","fec","oauths","settings","connected","oauthIndex","Xero","settingsView","settingsFetch","authsFetch","authfetch","og","auth_count","clearInterval","authpoll","documentLabel","defaultErrors","documentLink","documentCheckbox","documentWarningList","documentSaveCancel","mergeInDocumentValidationProps","fetchAllocations","schedule_index","most_recent_version","LatestVerionIndex","fetchAllocationsbyProjectAndScheduleVersion","workname","thiscomment","sliceINDEX","workdisplay","commentREF","fetchProjects","fetchProjectsBySchedule","resetView","projectList","np","newProject","onProjectList","checkMultipleProjects","contractPatchIndex","checkMultipleProjectExtras","cloningProject","masterPELIST","fetchedExtras","activeTab","edit","forcereq","newUser","deletetInvoices","deleteInvoiceItemsHash","deleteInvoiceHash","sendNewInvites","inviteIndex","baseProjectDetailsHash","newInvites","inviteExists","newid","groups","group_name","sendProjects","projectPatch","teamAmount","findidealUOM","uomrate","newinvoicelist","newapprovedORrecevedinvoices","baseInvoiceRender","forcesplit","newuidforcesplit","spliteitems","ratiosplit","recqty","newinvoice","cloneInvoice","newpaymentrefenceinvoices","approved","iiindex","iiarray","newuuid","refinvoice","bii","receiveddate","paymentref","paymentrefIndex","newamount","splitInvoices","firstproject","templateClone","projectlist","founduser","geop","currentContract","newitemspatch","milliperday","newContracts","sendContractItems","newInvoices","extraContractObligationData","clonedContracts","pa","deleteDisciplines","deleteProjectExtra","deleteProjectContacts","pe","deleteProjectExtras","newdiscipline","resetPEForm","newtask","splitasks","pe_vm","tuser","cloningProjectE","cloning","relatedd","projectExtraArray","dprops","pArray","pres","deleteDisciplineC","deleteDisciplinesCrews","deleteDisciplinesContractors","viewType","InitialProject","EditProject","createIdealResource","projectOptions","pExtra","spreading","disciplineSpread","sendOrganizationsDisciplines","orgDList","sendResources","teams","rates","resources_available","inverseProjectsList","ListProject","usersIndex","projectTemplates","resetPForm","disciplineList","refDisciplines","theTime","theTimeString","compromisedTime","dtindex","dgroups","cons","teamMultiple","teamcount","idealResourceName","trate","newresource","dc_mapping","reOrganizeProjects","projectSortRequired","projectsSortedResult","pindex","sIndex","showComments","commentArray","pencilEdit","notesexpanded","deleteProject","bulkDisciplineAddition","orgDiscipline","newOrganizationDiscipline","existingD","cloningProjectD","updatedProjects","bulkDisciplineDeletion","dIndex","sendQI","reconloading","qiSelection","requestedItems","newqi","qiContactList","modules","rList","projectPercentComplete","projectDisciplines","projectExtrasIndex","filteredTaskOptions","filteredDisciplineOptions","seperateTasks","reconArray","showUpload","selectedInvoices","allResourceTypes","resList","pIndex","psr","resRatesAvailable","ratesIByOrgD","projectSummary","listAllocations","lastProjectDate","alist","disciplineLastDateIndex","allocationIndex","aList","fetchTimesheetsByProject","contractItems","editInvoicePermissions","materialloading","forceMaterialFetch","fetchSuggestedMaterials","fetchMaterials","itemsindex","ditemsindex","suggestedmaterial","totalqty","dispersion","allocated","dindex","editquantity","editentity","materialist","itemdetailarray","pd","itemchoicearray","parentproject","timesheetsIndex","totalRecon","materialvalue","expenditurevalue","revenuevalue","reconRender","invoiceRender","baseInvoiceIndex","calculatedData","ts","mdl","invoicelist","focussedInvoices","ogd","materiallist","totalmaterialData","dconnection","pconnection","contractuserid","timeInvoiceList","taskInvoiceList","materialitems","timeitems","ti","taskitems","disciplineitems","ogditems","kkey","pitem","iiamount","mvalue","contractprojectid","moneyvalue","qty","subitems","tlist","cList","midfix","contractDate","CONSTANTProjectExtras","odinItems","ci","existingoption","coption","editContractRecognitions","fetchedcontacts","projectExtrasStat","projectContactOptions","projectExtrasSum","pE","onlyprop","theprops","fc","fetchProjectContacts","pclist","pc","projectExtrasTypes","getTasks","peT","fetchProjectExtras","projectExtras","resetLoaders","restrictedOrgTask","processedTasksSelected","chartview","cv","chartobject","possibleContractEntities","sumSchedule","debounceDrawChart","loadchart","ifCharts","peIndex","pe_clone","templateclone","newproject","project_completion","discipline_clone","resetDForm","newodg","DeleteProjectMode","DeleteDisciplineMode","aMonth","extraChecks","PercentComplete","dperc","discipline_portions","discipline_portion","nResList","nTeamList","nr","ratesList","teamRate","working_crews","crew_list","reConnectDisciplines","arrayValues","dprop","filterFunction","getfilters","projectFilters","projectExtrasFilters","disciplineFilters","operationalFilters","gotfilters","refContainter","dateEdit","nullIdEdit","dtype","diffState","underlinedHeader","appliedrate","ac","disciplineSelect","orgdref","nominalrate","timepush","incrimentTimeButton","forwardtime","fd","dtableControl","disciplineViewSet","objectName","refVM","errorFunction","sameProperty","sameContractorId","sameCrewId","entity","disciplineSpecific","newTeamResource","disciplineEdits","contractorIndex","crewIndex","moneytype","Accrued","Received","Forecasted","Outstanding","moneydtype","moneycycle","disciplinedata","Amount","Completed","readResourcePermissions","Teams","Budget","largeDisciplinesTable","smallDisciplinesTable","disciplinesTable","addNewTask","discardAllTaskChanges","nonEditedExtras","discardAllDisciplineChanges","unapprovedinvoicecount","destinationSchedule","availableSchedules","ieview","irview","qieqProp","qis","reflist","inv","revoptions","ri","expoptions","qicheck","invoiceSelections","ie","ir","iv","check_pnames","focusArray","contractorEntity","resourceMapped","ni","taskErrors","taskErrorMessage","invoiceErrors","checkInvoiceDates","invoiceErrorMessage","geography_id","getDisciplines","checkallocatedResources","updateInvoiceItems","oitems","states","subitemk","itemk","tii","itemsum","invoiceitem","mp","detailsPaneSave","transferProjects","taskDiff","newt","updateCompletedDate","updateInvalidDate","taskCloneButton","checkedorgds","maxHeight","overflowY","linkCompeltion","editList","orgdisciplineId","theDiscipline","exisingTeamResource","totalRates","taskDetails","updateMultipliers","disciplineCloneButton","abvalue","disciplineView","originalArray","filteredContainer","disciplineTabEditArray","disciplineTabReadArray","ActiveContractsFeature","ActiveDetailsFeature","getActivateContractDeleteButton","checkUserTaskMatch","removeContactForm","editLink","setactiveTab","scrollIntoView","cloneLink","addNewTaskLink","itemDetails","toLocaleDateString","newOrder","idref","objtref","switchProjectsButton","expandNotes","projectCompleted","sendp","autoSend","viewprops","checkInvoiceDeletion","renderChart","refresheronly","chartonly","reChartButton","Overheads","currentVersion","zip_processed","created_at","InitialProjectView","createProjectButton","DropdownButton","createProjectAction","editableEndDate","ResourceTab","exposeSublist","sk","refitem","rendername","itemname","rendernameapp","qtymatch","expansionRender","oi","oArray","returnsubitems","formator","subcount","aii","aarray","removals","oik","oii","MaterialsTab","addInvoice","invoiceData","xremove","relatedContract","itype","cobji","makeContractItem","projectPrefill","invmeta","approval","maxdate","largeInvoiceTable","smallInvoiceTable","ReconTab","fetchXeroExport","itemcounter","osk","oski","oskarray","newpos","so","theitem","rectotal","savetotal","saveqty","ditems","peindex","ContractualTab","quoteModal","openQuoteModal","itemssum","ExtraDetailTab","taskTableHeader","largeProjectDetailsTable","Address","Invalid","Verified","Actual","Planned","Files","Ledgers","Notes","mediumProjectDetailsTable","smallProjectDetailsTable","Assigned","Tasked","notReq","nowids","forecastdateA","forecastdateB","OAuthConnector","ex","display","gridTemplateColumns","MiniTable","deleteFlowStateProp","deleteOrganizationDisciplineStateProp","deleteObjective","deleteDependent","getflow_dependent_activity","flow","showing","dependant","getflow_projects","appliedProjects","getflow_primary_activity","primary","deleteFlow","deleteOrganizationDisciplines","ldlist","dlist","baseOrganizationsDisciplines","deleteFlowPriDep","FlowRelation","fetchFlows","fetchFlowsByScheduleId","updatedogds","newcdrs","deleteToolPresets","sendToolPresets","newtoolPresets","toolPresetDeletions","tools_presets_id","sendFlows","updated_res","cloningFlow","getAvailableOptions","FlowsFilters","OrganizationDisciplineFilters","cloningOrganizationDisciplines","cloneItem","resetOrganizationDisciplinesForm","listindex","neworgd","cloningFlowDep","cloningFlowPri","editOrganizationPermissions","matchingID","discipline_selection_list","restrictedDisciplines","restrictedDep","restrictedPri","foundnewLinks","flowArrays","newLinkcount","AddHiddenLinks","FlowsObjCantBeDep","FlowsDepCantBeObj","reverseHidden","forwardHidden","available_disciplines","dependants","primaries","primaryOptions","dependentOptions","editOption","addORsub","flowRelation","check_fnames","true","check_onames","apt","linkedFlowDisciplines","flowList","linkedDisciplines","disconnectedDisciplines","flowPrimaries","flowDependants","valueList","discplineflowPri","discplineflowDep","projectString","bo","toolsets","toolPresetOptions","orgds","cp","indexby","saveDiscardButtons","appliedFlows","flow_list","priInter","secInter","fname","activeRelation","ListFlow","delaytypemessageblock","orgddata","largeOrgdTable","oindex","smallOrgdTable","EditFlow","headerHeight","safety","delaytypeti","insindex","newitems","Desc","NWR","UoM","alreadyadded","newpreset","tools_presets_quantity","InterruptionAffected","deleteInterruptionsAffected","entity_id","deleteAffected","interruption","removeModelAffected","updateInterruptionsList","partitionedList","resourceProjectTotal","resourceProjectList","resourceProjectInterrupted","ListInterruption","fetchInterruptions","sendInterruptions","cloningInterruptions","EditInterruption","deleteInterruptions","currentSchedule","resourceProject","oList","iaffected","WholePeriod","nextdate","lastdate","check_Inames","checked_crews","interruptionFilters","affectedFilters","multilineHeader","exposeObject","setDebug","uniqItem","uniqPItem","uniqTItem","uniqDItem","activeDTab","activeWTab","activeOTab","activeMTab","projects_tasks","originalOrders","containerIndex","supplierItemIndex","originalMaterialIndex","uniqcontIndex","MaterialIndex","errorsMessage","originalPresets","originalMaterials","presetsIndexByDiscipline","projectIndex","projectPresetsIndexByDiscipline","pmaterials","dmaterials","outstandingMaterials","preset","alreadySetArray","alreadySet","entitledAmount","DeleteDItems","DeletePItems","DeleteSItems","DeleteSLocations","availableYardSelections","deleteWStateProp","deleteSStateProp","editWarehousePermissions","editSupplierPermissions","editOrdersPermissions","editMaterialsPermissions","refreshList","SelectedProject","SelectedDiscipline","selected_pt","selected_preset","preset_vm","project_vm","warehouse_vm","transfer_object","new_material","d_item_vm","item_vm","location_vm","SelectedProjectDisciplines","projectOption","copiedOrders","cancelledOrders","orderedOrders","lostOrders","presetOptions","presetCloneOptions","order_vm","order","orderUpdates","transfer_vm","container_vm","resetIForm","resetLForm","resetNewMaterial","supplier_items_unique_recognition","resetWForm","makePreset","check_new_material","readSupplierPermissions","SItemDelete","check_wnames","check_preset","FilteredMaterialspt","useList","mlist","transfer_name","transfer_id","tranfer_location","transfersFrom","transferList","selectedTransfer","transfersTo","copy_items","copyList","creatNewOrCopy","copies","copy_item","getUniqueContainerName","yard","container_list","container_count","container_plausible","storage_location","word","regExes","container_check","consolidate","ItemList","material","notordered","unsorted_common_yards","unsorted_common_description","allitemscount","sumOnDrum","TotAllo","Remainders","intervals","fitsOnDrum","ItemConsolidation","uselist","subids","transferToMaterialIndex","setnew_material","cloneSupplier","supplier","newSupplier","slocation","newSLocations","sitem","newSItems","cloneWarehouse","warehouse","newWarehouse","MainList","activeMainTab","DeletePending","transferItems","ProjectItems","WarehouseItems","PresetItems","pr","baseProjectString","baseWarehouseString","basePresetString","stockedMaterials","wList","cancelledMaterials","supplierItemsSide","setSide","Ptemplate","project_deliverables","project_items","Mtemplate","Stemplate","Wtemplate","Otemplate","CONSTANTitems","masterILIST","warehouseIFilters","projectIFilters","supplierIFilters","CONSTANTlocations","masterLLIST","supplierLFilters","standard","deleteWarehouse","check_lnames","SaveSupplierDisabled","DeleteSDisabled","check_inames","DeleteWDisabled","check_ordered","available_yards","yards","make_items","listed_item","check_order_vm","selected_container_item","removal_item","deleteSupplier","assessContainers","cContainers","nContainers","check_float","warehouse_amount","witem","updatefloats","newMaterialList","releventItems","selectedFilter","warehouseFilters","supplierFilters","orderFilters","statProjectMaterials","sumDollars","mlistOrdered","orderedStat","orderedValue","materialValue","transferCheck","WarehouseView","ProjectView","PresetView","applyPreset","sendAllDistriution","deleteDitem","deletePreset","indexObj","supplierdetailPaneInputs","locationView","itemView","deleteLocation","deleteItem","supplierdetailsPaneOpen","validOrder","tabProp","setTab","EditWarehouse","EditSupplier","addMaterialsButton","fetchWarehouses","prepWarehouse","fetchContainers","containerDesignation","prepSupplier","suppliersList","fetchSuppliers","supplierList","fetchPresets","materialPrep","fetchOrders","warehouseList","newWarhouse","makeOrders","newmaterials","supplierObj","filter_list","pot_order_No","order_No","supplier_itemObj","OrderItem","orderdetail","sendContainer","updateList","orderList","deleteContainer","lindex","sindex","orderIndex","pA","presetlist","sendSupplier","supplierlist","sendWarehouse","warehouselist","om","damount","ditem","sendOrders","oitem","updateItem","anorder","mat","item_mitosis","base_material","edit_material","keepqty","tranferqty","originalOrder","sendPreset","SupplierLocationsButton","returnSTATE","SupplierItemsButton","clonePreset","newEntityID","new_preset","PresetItemsButton","DistributionItemsButton","WarehouseItemsButton","deleteOrder","orderid","readWarehousePermissions","EditDistribution","isReceived","noAlerts","readOrderPermissions","addFiles","EditPreset","TransferView","newL","sLocation","newI","Availability","Supplier","Order","another_container_item","Units","Silo","readMaterialPermissions","iIndex","iT","Total","Float","deleteTools","filteredToolOptions","toolDetail","newTool","userResCrew","ListTools","ToolsFilters","toolsIdentical","toolTypeOptions","CONSTANTtools","cloningTool","sendTools","deleteTool","newT","getLocation","createNewTool","tO","ttindex","workingarray","returnTRUE","autouidContracts","dateProjects","projectDocumentsView","documents","forecastedWorkAmount","contractItem","fAmount","accruedAmount","allocatioCrewOldData","allocation","OldDollarsArray","userDayContracts","crewDayContracts","crewWorkContracts","disciplineContract","todaysInvoices","workDifference","allocatioCrewnData","criteriaBasedCalculation","cItems","forecastedDamagesAmount","dollarsArrayWhenAllocated","deleteInvoiceItems","allocationsHash","allProjects","dbp_vm","disciplineExtraOptions","disciplineOptions","allDisciplines","discipline_box","activeLandingTab","retrieveAllocations","dateframeprojects","SelectedResource","selectedProjectExtra","initialfetch","fetchAllocationsbyScheduleVersion","fetchAllocationsbyScheduleVersionShallow","getProjectExtras","totres","dp","uniqDisciplines","today","pd_allocation","current_index","previous_index","default_nod","processProjectDisciplineNods","fetchedInv","fetchedTime","timesheetlist","eotDeletions","nodDeletions","varDeletions","contractvm","fullView","allocationChange","baseProjectDetails","forecastedWork","editMaterialPermissions","editTimePermissions","editUpdatePermissions","editAssignedTimesheetsPermissions","editOwnedInvoicesPermissions","organizationsDisciplines","rpp","resfetch","projectMetaDataLoading","projectMetaData","FAKE_ORG_D","intasks","photosids","restrictedorganizationsDisciplines","spe","sp","newSelectedValue","detailsPaneKey","nullCrew","revert","childResUsers","mchildResUsers","tu","allResources","fectchedResources","fectchedTeams","resourceOptions","rlist","contractOptions","setContractOptions","consolidateContractList","timesheet_vm","timesheet","originalInvoices","aChange","invoiceList","invList","crewsIndexedByAID","crewWorkers","currAllocationDate","c_list","project_box","viewWindow","localToday","setMinutes","localTodayStart","localTodayEnd","shortDates","dateA","dateB","projectDetails","fetchProjectsByProjectId","md","uids","SelectedDate","SelectedSecondDate","sortedAllocations","curentAllocations","makeTimesheetCrew","realContractor","realCrew","subjectContractor","subjectCrew","crate","cloningTimesheet","t_clone","new_timesheet","cloningAllocation","a_clone","new_ac","new_acc","cloningACC","contract_item","new_n","new_e","new_v","DisableEmptySave","counteots","countnods","countvars","DisableDuplicateSave","uniqAllocation","STRING","ERROR","DUPLICATED_COMPLETED_WORK_DATE","fetchTimesheetsByAllocation","crewlist","con","completedWork","cWork","addSpecificWork","focusCrew","ContractAddButton","contractType","contractIndex","descriptionprop","idprop","descriptionSelected","idSelected","ContractDeleteButton","totalValue","averageWork","timeUpdate","toolContracts","allContractItems","disciplineCalculated","projectCalculated","allUserContractItems","allContractItemsIndexByItemID","acd","resourceContracts","currentProject","DisciplineWork","DisciplineCompleted","currentDiscipline","cloningProjectExtra","allocationD","fView","gettasks","peList","prevtasks","eView","sView","beView","masterTaskList","projectNotes","repDate","localrepDate","DisableProjectExtraSave","projectContracts","contractInvoiceables","contractData","newDollarsArray","oldDollars","iArray","newDollars","differenceDollars","pDollars","dDollars","Ttemplate","updateFilters","newtools","createTask","disciplineId","organizationDisciplineId","dName","newTask","saveButton","sendAllocations","discardButton","contractorObj","crewObjindex","cre","remindex","timesheetIndex","TITLE","DISCARD_DATES","timesheetAddView","autocompleteBox","uniqueCrews","make_timesheet","AddMineButton","new_user_timesheet","Pencil2","contractAddView","taskSaveDiscardButton","discardTaskButton","connectedAllocation","refAllocation","connectedTeams","taskReports","newtypes","readOnlyFiles","filteredAllocationOptions","toolloading","forceToolfetch","returnquantity","takequantity","transferqty","transferid","returnWarehouse","transfername","transfernotes","requiredTools","ff","fft","tassksid","readToolPermissions","rt","atools","stools","returnable","frequired","taskrequiredqty","mogroupedbyitem","takeItemButton","fancyButton","suggestedMaterialItems","suggestedActions","headerContent","suggestions","numberInput","complexSummary","suggestedToolItems","iindex","Tool","assignAToolPencil","transferItemsButton","stateChanger","returnactive","toolItemDetails","colourstate","colorfun","Release","toolItemSuggestions","materialItemDetails","Stocked","suggestion","statechanger","returnForm","materialItemSuggestions","saidItem","statuses","OK","WARN","ERR","worstStatus","qtyfun","openModal","selectedId","loaders","suggestedActionsView","showModal","contextSelection","allocationdata","Project","largeAllocationsTable","completedCheckboxAttrs","smallAllocationsTable","layout","ListAllocations","INFO","SAVE_OR_DISCARD_TO_UPDATE_OTHERS","WARNING","TEAM_CONNECTION","NO_RECORDED_TIMESHEETS","NOTICE_OF_DELAY","NO_CONTRACT_OBLIGATIONS","WORKS_MODULE_ACTIVATION","CHANGE_COMPLETED_WORK_DATE","NO_TOOLS_AGAINST_SCHEDULES_AND_TEAMS","ALLOCATION_COMPLETION_COMMENTS","CONTRACT_DESCRIPTION","CONTRACT_CLAUSE","ALLOCATION_DATE","TOTAL_WORK_COMPLETED","WORK_COMPLETE_DATE","markTaskCompleted","changeCompletedDate","taskdata","tableSize","markCompletedDate","markInvalidDate","markTestDate","projectExtrasPencil","modules_name","modules_active","toggleWorkDetail","workCompletedOfForecasted","importantNotes","EditAllocations","aDate","allocationDate","readTimesheetPermissions","readAssignedTimesheetsPermissions","raeteMultiplier","acr","preFillAmount","rateMultiplier","iapprover","assignedUser","sendInvoices","sendTimesheets","timesheet_list","fetchResourceWork","updateAllocations","patchTasks","splitTasks","aclanding","sendArray","getChildusers","applicableUsers","au","ra","sr","scheduleVersions","checkFunction","current_user","addRemoveWork","allocationsContractDescription","contractClause","workCompletedByTeam","hoursWorked","performanceNotes","contractUpdates","tArray","sharedtimesheets","editT","timesheetUpdates","musers","assigners","oldusers","heading","organization_tables","schedule_tables","getExportHref","cc","cross","visa","mastercard","amex","propAdapter","card","VISA","MASTERCARD","AMEX","card_number","yyyy","card_expiry_year","max_expiry","validYear","card_expiry","card_expiry_month","setDate","isAMEX","card_cvc","EMAIL","card_email","card_address","card_address_city","card_address_country","card_address_line1","card_address_postcode","card_address_state","primary_card_id","cards","charges","activities","credit","next_payment_due","tab$","mode$","pathField","CardForm","card_id","card_name","card_address_line2","card_address_unit","card_token","addressSearchChosen","address","houseNumber","street","city","postalCode","countryName","creditCardNumber","naive","creditCardInput","cardExpiry","$month","$year","monthInput","hadSlash","yearInput","addressUnit","ctas","lt_desktop","CardList","payment","plans","ConfirmDeleteOrg","confirmed","diffOrg","auth_refresh","unsaved","ConfirmDeleteGroup","ConfirmDeleteRole","saveDone","EditOrg","answer","GroupUsers","GroupInvites","GroupRoles","EditGroup","_invites","_users","_roles","PermissionsList","permission_id","permission_name_pretty","selectPermission","role_permissions_write","EditRole","_permission","_permissions","permissionLabel","OrganizationsRoute2","Organization","Group","Role","isEdit","definedEquals","permission_selectable","detailsPaneTitle","formView","formTitle","globalOrgId","_role","isOrganization","Resource","extensions","dwg","preview","docx","xls","xlsx","eml","dat","webm","heic","mov","png","jpg","jpeg","gif","csv","pdf","contentType","txt","lnk","Redirect","View","isRedirect","Autodirect","id$","file","LoadedView","ext","file_upname","Unit","unitType","__value","__unitType","otherUnit","Func","argKeys","__name","__argKeys","__args","otherFunc","textAlign","colors","white","black","absolute","fixed","fontWeight","lighter","em","percent","px","vw","degrees","funcs","rgb","rgba","translateX","translateY","translate3d","boxShadow","scale3d","hsl","trueFn","inStream","toUpdate","orderNextIdx","flushingUpdateQueue","flushingStreamValue","flyd","depEndStreams","createDependentStream","depsChanged","listeners","addListeners","updateStream","boundMap","operator_pipe","boundChain","flatEnd","internalEnded","flatStream","own","newS","endsOn","boundAp","fantasy_land_ap","streamToString","createStream","updateStreamValue","updaters","queued","depsMet","isEnded","initialDependenciesMet","dependenciesAreMet","returnVal","flushUpdate","listenersNeedUpdating","updateLaterUsing","findDeps","updater","nextUpdateFn","updateListeners","lists","markListeners","detachDeps","StreamTransformer","immediate","endS","xform","fromPromise","flattenPromise","endsOn_","initialCoords","onscale_mousewheel","wheeling","zoompoint","pageX","pageY","nextScale","onscale","initialPinchScale","innerHeight","viewports","coords","ratios","zoomDrift","movement","mousedown","selectingText","touches","pinching","onmousemove","hypot","touchRadius","newScale","onscale_fingers","ignoreTextSelect","polarity","Pointer","manualActivation","activateListeners","disable_mousewheel","eventName","streamFromEvent","mapObj","PointerStream","disableEvent","pointAsBounds","intersects","outside","TOP","LEFT","BOTTOM","RIGHT","AABB","selectedProject","selectedAllocationDiscipline","fieldView","hashToFieldViews","completionPercentage","localDate","forecastEnd","byProject","dailyAverage","selectedAllocation","disciplineCalculatedView","projectCalculatedView","allocationDollarsArray","todaysProfits","projectView","pProfits","allocationView","tProfits","dProfits","Md","disciplineCompletion","disciplinePercentage","Variations","dataView","newDetailsPane","onscroll","ontouchdown","ontouchend","ontouchmove","shape","svg$1","dashLine","circle","cx","cy","svgShape","svgPath","Color","DEG2RAD","LAB_CONSTANTS","PITHIRD","RAD2DEG","TWOPI","_average_lrgb","_guess_formats","_guess_formats_sorted","_input","_interpolators","atan2","bezier","blend","blend_f","brewer","burn","chroma","clip_rgb","cmyk2rgb","css2rgb","darken","dodge","hcg2rgb","hex2rgb","hsi2rgb","hsl2css","hsl2rgb","hsv2rgb","interpolate_hsx","interpolate_lab","interpolate_lrgb","interpolate_num","interpolate_rgb","lab2lch","lab2rgb","lab_xyz","lch2lab","lch2rgb","lighten","luminance_x","normal","num2rgb","overlay","rgb2cmyk","rgb2css","rgb2hcg","rgb2hex","rgb2hsi","rgb2hsl","rgb2hsv","rgb2lab","rgb2lch","rgb2luminance","rgb2num","rgb2temperature","rgb2xyz","rgb_xyz","rnd","screen","sqrt","temperature2rgb","unpack","w3cx11","xyz_lab","xyz_rgb","classToType","strType","_clipped","_unclipped","chk","me","_rgb","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflower","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","Yn","Xn","Zn","t1","t0","Kn","ref1","lab","I0","I1","lab0","lab1","lab2","lab3","ref2","cubehelix","rotations","hue","gamma","lightness","dh","dl","fract","amp","cos_a","sin_a","col1","col2","interpol","alpha","lrgb","xyz0","xyz1","xyz","average","xyz2","channels","hxa","ref3","ref4","ref5","hsv","_g","hcg","ab","named","lch","hcl","cmyk","gl","luminance","lum","cur_lum","eps","max_iter","lm","kelvin","maxTemp","minTemp","temperature","contrast","l1","distance","sum_sq","deltaE","L1","L2","b1","b2","c1","c4","delA","delB","delC","h1","sc","sl","v1","v3","modechan","clipped","brighten","darker","brighter","saturate","desaturate","premultiply","c0","analyze","limits","_classes","_colorCache","_colors","_correctLightness","_domain","_gamma","_max","_min","_mode","_nacol","_out","_padding","_pos","_spread","_useCache","getClass","getColor","resetCache","setColors","tmap","bypassMap","_m","_o","correctLightness","L0","L_actual","L_diff","L_ideal","pol","numColors","dm","samples","nodata","scales","cool","hot","ad","ae","af","ag","ah","ai","aj","ak","al","am","assignments","best","centroids","cluster","clusterSizes","dist","kClusters","max_log","min_log","mindist","nb_iters","newCentroids","pb","ref10","ref11","ref12","ref13","ref14","ref6","ref7","ref8","ref9","tmpKMeansBreaks","LOG10E","acos","hsi","hue0","hue1","lbv0","lbv1","sat","sat0","sat1","n1","double","Gantt$1","pointer","DAY_MILLIS","clicks","resizes","getWindowDimensions","windowSize","xScale","ganttScale","timeAsX","transformOrigin","contractorKey","byProjectByContractor","contractorLabel","contractorKeys","byContractor","allContractors","byProjectByDiscipline","byProjectByWorkname","allWorknames","indexToColour","colour","worknameColours","contractorColours","sortedProjectIds","projectCompletions","earliestCompleteAllocation","earliestAllocation","earliestAllocationWorkDate","earliestAllocationDate","latestAllocationDate","forecastStart","actualStart","actualEnd","sortedProjectDisciplines","byDiscipline","disciplineIndexes","discipline_margin","scaleSettings","projectScale","shiftAfterScale","projectStyle","scaleMax","ProjectStyle","metadataSize","allocationCoordsByProject","byProjectDiscipline","discipline_i","projectAllocations","disciplineAllocations","headerPadding","getAllocationCoords","containerKey","childKey","pointerWasDragging","contractorView","onclickAllocation","doubleMargin","calcWidth","calcHeight","lineHeight","paddingRight","amountShrunk","completion","atLeast","onclickProject","completionDiagramWidth","onScreenWidth","onScreen","early","late","onTime","isStart","stroke","columns","positionWidth","spacing","forecast","xAxis","forecastStyle","forecastLine","actualLine","permutations","completionDiagram","scaleChange","coordsChange","viewportBounds","dateBar","cutoffRatio","ChronologicalLayout","yOffset","sumUnits","projectViewBox","chronologicalLayout","lost","someOnScreen","localRouteState","chronologicalView","isDragging","earliestProjectID","earliestProject","timeAsPx","routeState","nullableAllocation","fetchAllocationsbyDiscipline","Gantt","universe","dateContainer","routeParams","datebar","containerDimensions","daysWidth","itemsRequired","borderTop","boxSizing","lessThan","monthVisible","dayVisible","Visibility","offY","onY","toggleOpacity","visible","monthVisibility","dayVisibility","Labels","dayLabels","monthLabels","Dates","gantt","oncontextmenu","pathKeys","pathValues","newPathObj","qs","manager","createPathStream","$href","sets","statePreview","Router","requested","session","touchAction","schedule_id_no_repeats","statsIndex","scheduleTaskCompletionChange","pDelete","generating","deleting","loadingTemplate","route_schedule_id","canGenerate","checkobj","originalSchedule","latestVersion","intersectdisciplinescount","scheduleCreation","saveSchedule","forcedPayload","realPayload","checkErrors","propValues","scheduleId","sname","spriority","stats","crewcount","projectcount","sccount","spcount","sdicount","canEdit","cloneHref","resourcecount","daycountsum","financialSummary","contractProps","contractsRoute","focussedContracts","contractEntities","focussedEntities","fetchContracts","viewWindowList","reMapdateChange","recordedFocus","readFlowPermissions","readInterruptionsPermissions","readInvoicePermissions","readUpdatePermissions","readUserPermissions","readModulePermissions","readPaymentPermissions","readContractObligationPermissions","renderSummary","allContractItemsIndexByContractItemId","indexedContractEntities","baseItems","contractEntitiesIndexedById","invoiceWindow","multiplierIndex","invoiceDataLoading","metaDataIndexing","progressCalculation","baseItemsList","ctypes","hiddenInvoiceData","disconnectedcontract","focus_schedules","route_contract_id","route_original_contract_id","route_view_type","summation","routeParam","prevview","fetchCalculations","scheduleData","chartCreation","baseItemsSelectList","sendContracts","fload","deletetItem","deleteContractItems","checkMultipleContracts","currentcontract","deleteContract","removed","citem","selectedInvoice","filteredInvoiceOptions","allSelected","filteredContractItemOptions","filteredOdinItemOptions","adjustPercenageOption","donerContract","breakdownIndex","groupings","rseries","makeGroupings","ContractSummaryList","ListAllContractEntities","ListInvoicesPOs","CreateInvoicePO","activeItem","invoicesReceipted","invoicesapproved","SupplierEntities","routeContractID","routeOriginalContractID","fArray","matchID","selectedContract","contractedDailyPeriodProgress","contractedProgress","contractedDailyProgress","cloneContractItems","hiddenItemData","av","contract_items_damages","totalOverview","odincount","odinitems","contractItemSums","activeItems","receiptedInvoices","receipting","selectedInvoiceStats","invoiceLists","stateOptions","propStart","propEnd","statArray","statObject","ifilter","iList","invoiceDays","sInvoices","fInvoices","viewStats","contractIdentical","invoiceIdenticals","saveDisabledInvoices","dateDisabled","notCalculated","snv","dReceived","allContracts","saveDisabled","checkContractItem","statistic","duplicatedContractItem","contractItemSelections","co","cname","forceset","structure","SelectedValue","contractItemsDetails","noamountedits","reCalculateButton","forcereroute","firstUser","mindate","rateMulitplierName","reversal","createReversals","invoiceItemsDetails","nameProp","descriptionProp","itemsIndex","donerItem","uContract","newContractId","newStartDateArray","newFinishDateArray","contractDetails","allContractItemFilters","odinItemData","Contracts","Profits","lastCalculatedWorkDate","keyref","largeOdinItemTable","smallOdinItemTable","contractItemsEditAll","vIndex","contractFilters","Items","largeContractTable","cindex","smallContractTable","refarray","refcontainer","receiveInvoiceBox","invoiceFilters","Approval","Recipient","applyProjectMultuplier","Approver","Approved","makeChart","focusViewA","focusViewB","dayA","monthA","dayB","monthB","setQuartelyButtonDate","mainViewLinks","Overview","fedata","fep","profits","fprofits","Schedule","fea","openchildren","Invoices","Chart","chartToggles","largeSchedulesTable","feindex","fearray","smallSchedulesTable","ContractEditsOrAdditions","contractItemsFilters","itemData","Applied","contractAdditions","newItem","largeItemsTable","_cindex","smallItemsTable","textinput","openInvoiceDetailPaymentModal","invoiceinfo","baseStats","baseTemplate","invoiceTemplate","invoice_total","initFocus","redirection","firstLoad","invoiceType","sch","loaded","modeType","contractId","glow","$keyframes","fadeIn","formLayout","modalForm","fatButton","NavBar","Verify","SignUp","user_password2","Forgot","Invite","State","VerifyingURL","VerifiedExistingUser","InvalidURL","why","SavingForm","EditingSignUpForm","UnexpectedError","verifyURL","state$","urlInterpreter","all_filled","matching_passwords","atLeast6","valid_email","submitSignUp","LoggedInOf","reroute","saving_form","unexpected_state","invalid_url","verifiying_url","verifiedExisting","$State","CheckEmail","message_type","verify","forgot","generic","Access","night","fadeInBg","urls","bgImage","$disabled","helper","firstHash","GANTT_PREFERENCES","middle","dark","font","muted","DEFAULT_PREFERENCES","preferences","onresize","originalData","matchesOne","part","isLogoutRoute","loggedOut","loggedIn","redirect","sql","orgs","Scoped","componentData","LoggedOutOf","nav","contentManager","Modal","ModalStack","remountOnHrefChange","Component","ContractorsRoute","ProjectsRoute","FlowsRoute","InterruptionsRoute","FinancialsCreate","FinancialsClone","FinancialsView","FinancialsViewLedgers","FinancialsEdit","FinancialsEditLedgers","FinancialsItems","FinancialsItemsLedgers","FinancialsOverviewLedgers","FinancialsFocussedLedgers","WarehousesRoute","ToolsRoute","UpdatesRoute","ScheduleVersion","ExportsRoute","Payments","PaymentsRoute","Invites","CheckEmailType","ScheduleClone","ScheduleCreate","ScheduleParameter","ScheduleParameters","HomeVersion","HomeSchedule","HomeOrganization","Organizations","trackJs","addMetadata","AuthPermissions","ScheduleModel","authorization","json","SQL","authPermissions","organizationID","readOwnedInvoicesPermissions","readAssignedToolsPermissions","readAssignedContractsPermissions","readOwnedResourcePermissions","routeChangeCommands","permissionsArray","currentPermissions","financials","aPermissions","opsum","psumm","clist","ilist","userID","baseContract","prefillObject","amountMultiplier","invoiceItems","sType","PreFillProjectId","PreFillProjectName","PreFillAllocationId","supplierID","supplierName","theArray","contractItemInfo","toLocaleString","scopedURL","modeURL","cparams","paramObjUpdated","calculationID","processingItem","summaryType","dAverage","summaryPeriod","sversion","svs","cI","coalator","subSetFilter","subSetFilterValue","groupByProp","focusSchedules","findBaseBy","mergeBase","bi","itemIndex","pobjects","dobjects","finalObject","contractListName","afocusObject","rF","routeChange","reMapCalculated","load","chartBreakdown","invdata","sortedata","fetchInvoices","originalObjects","baseObject","modules_rate","ratingCriteria","criteriaResults","periodRatedAdjustment","damageRatedAdjustment","periodAccruedAdjustment","accruedValue","overwriteProgress","progressOption","renderArray","fetchSchedules","fetchScheduleParameters","dfci","dfii","disableSave","postRequest","setlatlong","geolocation","getCurrentPosition","ContractModel","isLogin","requiresAuth","PickerService","readId","preferredId","previousOrganizationId","previousScheduleId","logout","s_id","sv_id","authData","consented","consentModal","consentModalService","decision","errorType","authExpiry","configure","userId","routeBeforeLogout","onFirstAuthSuccess"],"mappings":"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"}