{"version":3,"file":"vendor-536eaa00.js","mappings":"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","sources":["webpack://@twenty20solutions/app/./node_modules/dragula/dist/dragula.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/alert/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/alert/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builder/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builder/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderComponent/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderComponent/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderComponents/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderComponents/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderEditForm/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderEditForm/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderPlaceholder/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderPlaceholder/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderSidebar/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderSidebar/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderSidebarGroup/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/builderSidebarGroup/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/columns/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/columns/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/cssClasses.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/datagrid/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/datagrid/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/datagrid/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/day/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/day/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/dialog/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/dialog/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/editgrid/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/editgrid/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/editgrid/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/errorsList/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/errorsList/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/field/align.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/field/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/field/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/file/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/file/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/icon/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/icon/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/iconClass.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/input/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/input/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/input/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/label/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/label/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/message/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/message/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/modaldialog/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/modaldialog/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/modaledit/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/modaledit/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/multiValueRow/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/multiValueRow/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/multiValueTable/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/multiValueTable/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/panel/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/panel/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/radio/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/radio/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/radio/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/resourceAdd/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/resourceAdd/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/signature/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/signature/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/signature/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/survey/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/survey/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/survey/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/tab/flat.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/tab/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/tab/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/table/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/table/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/well/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/well/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizard/builder.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizard/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizard/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeader/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeader/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeaderClassic/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeaderClassic/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeaderVertical/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardHeaderVertical/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardNav/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/bootstrap3/wizardNav/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/bootstrap3/lib/templates/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/choices.js/public/assets/scripts/choices.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/alert/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/alert/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builder/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builder/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderComponent/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderComponent/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderComponents/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderComponents/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderEditForm/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderEditForm/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderPlaceholder/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderPlaceholder/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderSidebar/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderSidebar/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderSidebarGroup/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderSidebarGroup/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderWizard/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/builderWizard/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/button/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/button/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/button/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/checkbox/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/checkbox/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/checkbox/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/columns/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/columns/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/component/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/component/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/cssClasses.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/datagrid/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/datagrid/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/datagrid/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/day/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/day/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/editgrid/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/editgrid/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/editgrid/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/errorsList/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/errorsList/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/field/align.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/field/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/field/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/fieldset/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/fieldset/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/file/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/file/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/icon/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/icon/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/iconClass.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/input/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/input/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/input/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/label/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/label/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/loader/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/loader/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/loading/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/loading/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/message/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/message/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/multiValueRow/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/multiValueRow/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/multiValueTable/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/multiValueTable/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/panel/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/panel/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/radio/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/radio/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/radio/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/resourceAdd/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/resourceAdd/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/select/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/select/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/select/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/selectOption/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/selectOption/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/selectOption/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/signature/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/signature/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/signature/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/survey/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/survey/html.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/survey/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tab/flat.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tab/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tab/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/table/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/table/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tree/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tree/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tree/partials/edit.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tree/partials/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/tree/partials/view.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/webform/builder.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/webform/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/webform/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/well/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/well/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizard/builder.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizard/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizard/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeader/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeader/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeaderClassic/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeaderClassic/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeaderVertical/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardHeaderVertical/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardNav/form.ejs.js","webpack://@twenty20solutions/app/./node_modules/@formio/semantic/lib/templates/semantic/wizardNav/index.js","webpack://@twenty20solutions/app/./node_modules/@formio/text-mask-addons/dist/textMaskAddons.js","webpack://@twenty20solutions/app/./node_modules/@formio/vanilla-text-mask/dist/vanillaTextMask.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/index.es5.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/bars-custom.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/bars-error.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/bars-fractions.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/bars.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/datahandler.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/default-fractions.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/datahandler/default.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-canvas.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-default-attrs.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-gviz.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-interaction-model.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-layout.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-options-reference.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-options.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-tickers.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph-utils.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/dygraph.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/iframe-tarp.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/annotations.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/axes.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/chart-labels.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/grid.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/legend.js","webpack://@twenty20solutions/app/./node_modules/dygraphs/src-es5/plugins/range-selector.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/index.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/socket.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transport.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transports/index.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transports/polling-jsonp.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transports/polling-xhr.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transports/polling.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/transports/websocket.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/lib/xmlhttprequest.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/debug/src/browser.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/debug/src/debug.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/engine.io-parser/lib/browser.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/engine.io-parser/lib/keys.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/engine.io-parser/lib/utf8.js","webpack://@twenty20solutions/app/./node_modules/engine.io-client/node_modules/ms/index.js","webpack://@twenty20solutions/app/./node_modules/eventemitter3/index.js","webpack://@twenty20solutions/app/./node_modules/fetch-ponyfill/build/fetch-browser.js","webpack://@twenty20solutions/app/./node_modules/file-saver/src/FileSaver.js","webpack://@twenty20solutions/app/./node_modules/@formio/angular/fesm2020/formio-angular-grid.mjs","webpack://@twenty20solutions/app/./node_modules/@formio/angular/fesm2020/formio-angular.mjs","webpack://@twenty20solutions/app/./node_modules/fast-json-patch/module/helpers.mjs","webpack://@twenty20solutions/app/./node_modules/fast-json-patch/module/core.mjs","webpack://@twenty20solutions/app/./node_modules/fast-json-patch/module/duplex.mjs","webpack://@twenty20solutions/app/./node_modules/fast-json-patch/index.mjs"],"sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.dragula = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 0 ? revert : o.revertOnSpill;\n var item = _copy || _item;\n var parent = getParent(item);\n var initial = isInitialPlacement(parent);\n if (initial === false && reverts) {\n if (_copy) {\n if (parent) {\n parent.removeChild(_copy);\n }\n } else {\n _source.insertBefore(item, _initialSibling);\n }\n }\n if (initial || reverts) {\n drake.emit('cancel', item, _source, _source);\n } else {\n drake.emit('drop', item, parent, _source, _currentSibling);\n }\n cleanup();\n }\n\n function cleanup () {\n var item = _copy || _item;\n ungrab();\n removeMirrorImage();\n if (item) {\n classes.rm(item, 'gu-transit');\n }\n if (_renderTimer) {\n clearTimeout(_renderTimer);\n }\n drake.dragging = false;\n if (_lastDropTarget) {\n drake.emit('out', item, _lastDropTarget, _source);\n }\n drake.emit('dragend', item);\n _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;\n }\n\n function isInitialPlacement (target, s) {\n var sibling;\n if (s !== void 0) {\n sibling = s;\n } else if (_mirror) {\n sibling = _currentSibling;\n } else {\n sibling = nextEl(_copy || _item);\n }\n return target === _source && sibling === _initialSibling;\n }\n\n function findDropTarget (elementBehindCursor, clientX, clientY) {\n var target = elementBehindCursor;\n while (target && !accepted()) {\n target = getParent(target);\n }\n return target;\n\n function accepted () {\n var droppable = isContainer(target);\n if (droppable === false) {\n return false;\n }\n\n var immediate = getImmediateChild(target, elementBehindCursor);\n var reference = getReference(target, immediate, clientX, clientY);\n var initial = isInitialPlacement(target, reference);\n if (initial) {\n return true; // should always be able to drop it right back where it was\n }\n return o.accepts(_item, target, _source, reference);\n }\n }\n\n function drag (e) {\n if (!_mirror) {\n return;\n }\n e.preventDefault();\n\n var clientX = getCoord('clientX', e) || 0;\n var clientY = getCoord('clientY', e) || 0;\n var x = clientX - _offsetX;\n var y = clientY - _offsetY;\n\n _mirror.style.left = x + 'px';\n _mirror.style.top = y + 'px';\n\n var item = _copy || _item;\n var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n var changed = dropTarget !== null && dropTarget !== _lastDropTarget;\n if (changed || dropTarget === null) {\n out();\n _lastDropTarget = dropTarget;\n over();\n }\n var parent = getParent(item);\n if (dropTarget === _source && _copy && !o.copySortSource) {\n if (parent) {\n parent.removeChild(item);\n }\n return;\n }\n var reference;\n var immediate = getImmediateChild(dropTarget, elementBehindCursor);\n if (immediate !== null) {\n reference = getReference(dropTarget, immediate, clientX, clientY);\n } else if (o.revertOnSpill === true && !_copy) {\n reference = _initialSibling;\n dropTarget = _source;\n } else {\n if (_copy && parent) {\n parent.removeChild(item);\n }\n return;\n }\n if (\n (reference === null && changed) ||\n reference !== item &&\n reference !== nextEl(item)\n ) {\n _currentSibling = reference;\n dropTarget.insertBefore(item, reference);\n drake.emit('shadow', item, dropTarget, _source);\n }\n function moved (type) { drake.emit(type, item, _lastDropTarget, _source); }\n function over () { if (changed) { moved('over'); } }\n function out () { if (_lastDropTarget) { moved('out'); } }\n }\n\n function spillOver (el) {\n classes.rm(el, 'gu-hide');\n }\n\n function spillOut (el) {\n if (drake.dragging) { classes.add(el, 'gu-hide'); }\n }\n\n function renderMirrorImage () {\n if (_mirror) {\n return;\n }\n var rect = _item.getBoundingClientRect();\n _mirror = _item.cloneNode(true);\n _mirror.style.width = getRectWidth(rect) + 'px';\n _mirror.style.height = getRectHeight(rect) + 'px';\n classes.rm(_mirror, 'gu-transit');\n classes.add(_mirror, 'gu-mirror');\n o.mirrorContainer.appendChild(_mirror);\n touchy(documentElement, 'add', 'mousemove', drag);\n classes.add(o.mirrorContainer, 'gu-unselectable');\n drake.emit('cloned', _mirror, _item, 'mirror');\n }\n\n function removeMirrorImage () {\n if (_mirror) {\n classes.rm(o.mirrorContainer, 'gu-unselectable');\n touchy(documentElement, 'remove', 'mousemove', drag);\n getParent(_mirror).removeChild(_mirror);\n _mirror = null;\n }\n }\n\n function getImmediateChild (dropTarget, target) {\n var immediate = target;\n while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n immediate = getParent(immediate);\n }\n if (immediate === documentElement) {\n return null;\n }\n return immediate;\n }\n\n function getReference (dropTarget, target, x, y) {\n var horizontal = o.direction === 'horizontal';\n var reference = target !== dropTarget ? inside() : outside();\n return reference;\n\n function outside () { // slower, but able to figure out any position\n var len = dropTarget.children.length;\n var i;\n var el;\n var rect;\n for (i = 0; i < len; i++) {\n el = dropTarget.children[i];\n rect = el.getBoundingClientRect();\n if (horizontal && (rect.left + rect.width / 2) > x) { return el; }\n if (!horizontal && (rect.top + rect.height / 2) > y) { return el; }\n }\n return null;\n }\n\n function inside () { // faster, but only available if dropped inside a child element\n var rect = target.getBoundingClientRect();\n if (horizontal) {\n return resolve(x > rect.left + getRectWidth(rect) / 2);\n }\n return resolve(y > rect.top + getRectHeight(rect) / 2);\n }\n\n function resolve (after) {\n return after ? nextEl(target) : target;\n }\n }\n\n function isCopy (item, container) {\n return typeof o.copy === 'boolean' ? o.copy : o.copy(item, container);\n }\n}\n\nfunction touchy (el, op, type, fn) {\n var touch = {\n mouseup: 'touchend',\n mousedown: 'touchstart',\n mousemove: 'touchmove'\n };\n var pointers = {\n mouseup: 'pointerup',\n mousedown: 'pointerdown',\n mousemove: 'pointermove'\n };\n var microsoft = {\n mouseup: 'MSPointerUp',\n mousedown: 'MSPointerDown',\n mousemove: 'MSPointerMove'\n };\n if (global.navigator.pointerEnabled) {\n crossvent[op](el, pointers[type], fn);\n } else if (global.navigator.msPointerEnabled) {\n crossvent[op](el, microsoft[type], fn);\n } else {\n crossvent[op](el, touch[type], fn);\n crossvent[op](el, type, fn);\n }\n}\n\nfunction whichMouseButton (e) {\n if (e.touches !== void 0) { return e.touches.length; }\n if (e.which !== void 0 && e.which !== 0) { return e.which; } // see https://github.com/bevacqua/dragula/issues/261\n if (e.buttons !== void 0) { return e.buttons; }\n var button = e.button;\n if (button !== void 0) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575\n return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n }\n}\n\nfunction getOffset (el) {\n var rect = el.getBoundingClientRect();\n return {\n left: rect.left + getScroll('scrollLeft', 'pageXOffset'),\n top: rect.top + getScroll('scrollTop', 'pageYOffset')\n };\n}\n\nfunction getScroll (scrollProp, offsetProp) {\n if (typeof global[offsetProp] !== 'undefined') {\n return global[offsetProp];\n }\n if (documentElement.clientHeight) {\n return documentElement[scrollProp];\n }\n return doc.body[scrollProp];\n}\n\nfunction getElementBehindPoint (point, x, y) {\n point = point || {};\n var state = point.className || '';\n var el;\n point.className += ' gu-hide';\n el = doc.elementFromPoint(x, y);\n point.className = state;\n return el;\n}\n\nfunction never () { return false; }\nfunction always () { return true; }\nfunction getRectWidth (rect) { return rect.width || (rect.right - rect.left); }\nfunction getRectHeight (rect) { return rect.height || (rect.bottom - rect.top); }\nfunction getParent (el) { return el.parentNode === doc ? null : el.parentNode; }\nfunction isInput (el) { return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el); }\nfunction isEditable (el) {\n if (!el) { return false; } // no parents were editable\n if (el.contentEditable === 'false') { return false; } // stop the lookup\n if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain\n return isEditable(getParent(el)); // contentEditable is set to 'inherit'\n}\n\nfunction nextEl (el) {\n return el.nextElementSibling || manually();\n function manually () {\n var sibling = el;\n do {\n sibling = sibling.nextSibling;\n } while (sibling && sibling.nodeType !== 1);\n return sibling;\n }\n}\n\nfunction getEventHost (e) {\n // on touchend event, we have to use `e.changedTouches`\n // see http://stackoverflow.com/questions/7192563/touchend-event-properties\n // see https://github.com/bevacqua/dragula/issues/34\n if (e.targetTouches && e.targetTouches.length) {\n return e.targetTouches[0];\n }\n if (e.changedTouches && e.changedTouches.length) {\n return e.changedTouches[0];\n }\n return e;\n}\n\nfunction getCoord (coord, e) {\n var host = getEventHost(e);\n var missMap = {\n pageX: 'clientX', // IE8\n pageY: 'clientY' // IE8\n };\n if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n coord = missMap[coord];\n }\n return host[coord];\n}\n\nmodule.exports = dragula;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./classes\":1,\"contra/emitter\":5,\"crossvent\":6}],3:[function(require,module,exports){\nmodule.exports = function atoa (a, n) { return Array.prototype.slice.call(a, n); }\n\n},{}],4:[function(require,module,exports){\n'use strict';\n\nvar ticky = require('ticky');\n\nmodule.exports = function debounce (fn, args, ctx) {\n if (!fn) { return; }\n ticky(function run () {\n fn.apply(ctx || null, args || []);\n });\n};\n\n},{\"ticky\":10}],5:[function(require,module,exports){\n'use strict';\n\nvar atoa = require('atoa');\nvar debounce = require('./debounce');\n\nmodule.exports = function emitter (thing, options) {\n var opts = options || {};\n var evt = {};\n if (thing === undefined) { thing = {}; }\n thing.on = function (type, fn) {\n if (!evt[type]) {\n evt[type] = [fn];\n } else {\n evt[type].push(fn);\n }\n return thing;\n };\n thing.once = function (type, fn) {\n fn._once = true; // thing.off(fn) still works!\n thing.on(type, fn);\n return thing;\n };\n thing.off = function (type, fn) {\n var c = arguments.length;\n if (c === 1) {\n delete evt[type];\n } else if (c === 0) {\n evt = {};\n } else {\n var et = evt[type];\n if (!et) { return thing; }\n et.splice(et.indexOf(fn), 1);\n }\n return thing;\n };\n thing.emit = function () {\n var args = atoa(arguments);\n return thing.emitterSnapshot(args.shift()).apply(this, args);\n };\n thing.emitterSnapshot = function (type) {\n var et = (evt[type] || []).slice(0);\n return function () {\n var args = atoa(arguments);\n var ctx = this || thing;\n if (type === 'error' && opts.throws !== false && !et.length) { throw args.length === 1 ? args[0] : args; }\n et.forEach(function emitter (listen) {\n if (opts.async) { debounce(listen, args, ctx); } else { listen.apply(ctx, args); }\n if (listen._once) { thing.off(type, listen); }\n });\n return thing;\n };\n };\n return thing;\n};\n\n},{\"./debounce\":4,\"atoa\":3}],6:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar customEvent = require('custom-event');\nvar eventmap = require('./eventmap');\nvar doc = global.document;\nvar addEvent = addEventEasy;\nvar removeEvent = removeEventEasy;\nvar hardCache = [];\n\nif (!global.addEventListener) {\n addEvent = addEventHard;\n removeEvent = removeEventHard;\n}\n\nmodule.exports = {\n add: addEvent,\n remove: removeEvent,\n fabricate: fabricateEvent\n};\n\nfunction addEventEasy (el, type, fn, capturing) {\n return el.addEventListener(type, fn, capturing);\n}\n\nfunction addEventHard (el, type, fn) {\n return el.attachEvent('on' + type, wrap(el, type, fn));\n}\n\nfunction removeEventEasy (el, type, fn, capturing) {\n return el.removeEventListener(type, fn, capturing);\n}\n\nfunction removeEventHard (el, type, fn) {\n var listener = unwrap(el, type, fn);\n if (listener) {\n return el.detachEvent('on' + type, listener);\n }\n}\n\nfunction fabricateEvent (el, type, model) {\n var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();\n if (el.dispatchEvent) {\n el.dispatchEvent(e);\n } else {\n el.fireEvent('on' + type, e);\n }\n function makeClassicEvent () {\n var e;\n if (doc.createEvent) {\n e = doc.createEvent('Event');\n e.initEvent(type, true, true);\n } else if (doc.createEventObject) {\n e = doc.createEventObject();\n }\n return e;\n }\n function makeCustomEvent () {\n return new customEvent(type, { detail: model });\n }\n}\n\nfunction wrapperFactory (el, type, fn) {\n return function wrapper (originalEvent) {\n var e = originalEvent || global.event;\n e.target = e.target || e.srcElement;\n e.preventDefault = e.preventDefault || function preventDefault () { e.returnValue = false; };\n e.stopPropagation = e.stopPropagation || function stopPropagation () { e.cancelBubble = true; };\n e.which = e.which || e.keyCode;\n fn.call(el, e);\n };\n}\n\nfunction wrap (el, type, fn) {\n var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);\n hardCache.push({\n wrapper: wrapper,\n element: el,\n type: type,\n fn: fn\n });\n return wrapper;\n}\n\nfunction unwrap (el, type, fn) {\n var i = find(el, type, fn);\n if (i) {\n var wrapper = hardCache[i].wrapper;\n hardCache.splice(i, 1); // free up a tad of memory\n return wrapper;\n }\n}\n\nfunction find (el, type, fn) {\n var i, item;\n for (i = 0; i < hardCache.length; i++) {\n item = hardCache[i];\n if (item.element === el && item.type === type && item.fn === fn) {\n return i;\n }\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./eventmap\":7,\"custom-event\":8}],7:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar eventmap = [];\nvar eventname = '';\nvar ron = /^on/;\n\nfor (eventname in global) {\n if (ron.test(eventname)) {\n eventmap.push(eventname.slice(2));\n }\n}\n\nmodule.exports = eventmap;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],8:[function(require,module,exports){\n(function (global){\n\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],9:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],10:[function(require,module,exports){\n(function (setImmediate){\nvar si = typeof setImmediate === 'function', tick;\nif (si) {\n tick = function (fn) { setImmediate(fn); };\n} else {\n tick = function (fn) { setTimeout(fn, 0); };\n}\n\nmodule.exports = tick;\n}).call(this,require(\"timers\").setImmediate)\n\n},{\"timers\":11}],11:[function(require,module,exports){\n(function (setImmediate,clearImmediate){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n\n},{\"process/browser.js\":9,\"timers\":11}]},{},[2])(2)\n});\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJjbGFzc2VzLmpzIiwiZHJhZ3VsYS5qcyIsIm5vZGVfbW9kdWxlcy9hdG9hL2F0b2EuanMiLCJub2RlX21vZHVsZXMvY29udHJhL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvbnRyYS9lbWl0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nyb3NzdmVudC9zcmMvY3Jvc3N2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2Nyb3NzdmVudC9zcmMvZXZlbnRtYXAuanMiLCJub2RlX21vZHVsZXMvY3VzdG9tLWV2ZW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy90aWNreS90aWNreS1icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FjaGUgPSB7fTtcbnZhciBzdGFydCA9ICcoPzpefFxcXFxzKSc7XG52YXIgZW5kID0gJyg/OlxcXFxzfCQpJztcblxuZnVuY3Rpb24gbG9va3VwQ2xhc3MgKGNsYXNzTmFtZSkge1xuICB2YXIgY2FjaGVkID0gY2FjaGVbY2xhc3NOYW1lXTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIGNhY2hlZC5sYXN0SW5kZXggPSAwO1xuICB9IGVsc2Uge1xuICAgIGNhY2hlW2NsYXNzTmFtZV0gPSBjYWNoZWQgPSBuZXcgUmVnRXhwKHN0YXJ0ICsgY2xhc3NOYW1lICsgZW5kLCAnZycpO1xuICB9XG4gIHJldHVybiBjYWNoZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzIChlbCwgY2xhc3NOYW1lKSB7XG4gIHZhciBjdXJyZW50ID0gZWwuY2xhc3NOYW1lO1xuICBpZiAoIWN1cnJlbnQubGVuZ3RoKSB7XG4gICAgZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICB9IGVsc2UgaWYgKCFsb29rdXBDbGFzcyhjbGFzc05hbWUpLnRlc3QoY3VycmVudCkpIHtcbiAgICBlbC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJtQ2xhc3MgKGVsLCBjbGFzc05hbWUpIHtcbiAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobG9va3VwQ2xhc3MoY2xhc3NOYW1lKSwgJyAnKS50cmltKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGQ6IGFkZENsYXNzLFxuICBybTogcm1DbGFzc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVtaXR0ZXIgPSByZXF1aXJlKCdjb250cmEvZW1pdHRlcicpO1xudmFyIGNyb3NzdmVudCA9IHJlcXVpcmUoJ2Nyb3NzdmVudCcpO1xudmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL2NsYXNzZXMnKTtcbnZhciBkb2MgPSBkb2N1bWVudDtcbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXG5mdW5jdGlvbiBkcmFndWxhIChpbml0aWFsQ29udGFpbmVycywgb3B0aW9ucykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGluaXRpYWxDb250YWluZXJzKSA9PT0gZmFsc2UpIHtcbiAgICBvcHRpb25zID0gaW5pdGlhbENvbnRhaW5lcnM7XG4gICAgaW5pdGlhbENvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICB2YXIgX21pcnJvcjsgLy8gbWlycm9yIGltYWdlXG4gIHZhciBfc291cmNlOyAvLyBzb3VyY2UgY29udGFpbmVyXG4gIHZhciBfaXRlbTsgLy8gaXRlbSBiZWluZyBkcmFnZ2VkXG4gIHZhciBfb2Zmc2V0WDsgLy8gcmVmZXJlbmNlIHhcbiAgdmFyIF9vZmZzZXRZOyAvLyByZWZlcmVuY2UgeVxuICB2YXIgX21vdmVYOyAvLyByZWZlcmVuY2UgbW92ZSB4XG4gIHZhciBfbW92ZVk7IC8vIHJlZmVyZW5jZSBtb3ZlIHlcbiAgdmFyIF9pbml0aWFsU2libGluZzsgLy8gcmVmZXJlbmNlIHNpYmxpbmcgd2hlbiBncmFiYmVkXG4gIHZhciBfY3VycmVudFNpYmxpbmc7IC8vIHJlZmVyZW5jZSBzaWJsaW5nIG5vd1xuICB2YXIgX2NvcHk7IC8vIGl0ZW0gdXNlZCBmb3IgY29weWluZ1xuICB2YXIgX3JlbmRlclRpbWVyOyAvLyB0aW1lciBmb3Igc2V0VGltZW91dCByZW5kZXJNaXJyb3JJbWFnZVxuICB2YXIgX2xhc3REcm9wVGFyZ2V0ID0gbnVsbDsgLy8gbGFzdCBjb250YWluZXIgaXRlbSB3YXMgb3ZlclxuICB2YXIgX2dyYWJiZWQ7IC8vIGhvbGRzIG1vdXNlZG93biBjb250ZXh0IHVudGlsIGZpcnN0IG1vdXNlbW92ZVxuXG4gIHZhciBvID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKG8ubW92ZXMgPT09IHZvaWQgMCkgeyBvLm1vdmVzID0gYWx3YXlzOyB9XG4gIGlmIChvLmFjY2VwdHMgPT09IHZvaWQgMCkgeyBvLmFjY2VwdHMgPSBhbHdheXM7IH1cbiAgaWYgKG8uaW52YWxpZCA9PT0gdm9pZCAwKSB7IG8uaW52YWxpZCA9IGludmFsaWRUYXJnZXQ7IH1cbiAgaWYgKG8uY29udGFpbmVycyA9PT0gdm9pZCAwKSB7IG8uY29udGFpbmVycyA9IGluaXRpYWxDb250YWluZXJzIHx8IFtdOyB9XG4gIGlmIChvLmlzQ29udGFpbmVyID09PSB2b2lkIDApIHsgby5pc0NvbnRhaW5lciA9IG5ldmVyOyB9XG4gIGlmIChvLmNvcHkgPT09IHZvaWQgMCkgeyBvLmNvcHkgPSBmYWxzZTsgfVxuICBpZiAoby5jb3B5U29ydFNvdXJjZSA9PT0gdm9pZCAwKSB7IG8uY29weVNvcnRTb3VyY2UgPSBmYWxzZTsgfVxuICBpZiAoby5yZXZlcnRPblNwaWxsID09PSB2b2lkIDApIHsgby5yZXZlcnRPblNwaWxsID0gZmFsc2U7IH1cbiAgaWYgKG8ucmVtb3ZlT25TcGlsbCA9PT0gdm9pZCAwKSB7IG8ucmVtb3ZlT25TcGlsbCA9IGZhbHNlOyB9XG4gIGlmIChvLmRpcmVjdGlvbiA9PT0gdm9pZCAwKSB7IG8uZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJzsgfVxuICBpZiAoby5pZ25vcmVJbnB1dFRleHRTZWxlY3Rpb24gPT09IHZvaWQgMCkgeyBvLmlnbm9yZUlucHV0VGV4dFNlbGVjdGlvbiA9IHRydWU7IH1cbiAgaWYgKG8ubWlycm9yQ29udGFpbmVyID09PSB2b2lkIDApIHsgby5taXJyb3JDb250YWluZXIgPSBkb2MuYm9keTsgfVxuXG4gIHZhciBkcmFrZSA9IGVtaXR0ZXIoe1xuICAgIGNvbnRhaW5lcnM6IG8uY29udGFpbmVycyxcbiAgICBzdGFydDogbWFudWFsU3RhcnQsXG4gICAgZW5kOiBlbmQsXG4gICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBjYW5Nb3ZlOiBjYW5Nb3ZlLFxuICAgIGRyYWdnaW5nOiBmYWxzZVxuICB9KTtcblxuICBpZiAoby5yZW1vdmVPblNwaWxsID09PSB0cnVlKSB7XG4gICAgZHJha2Uub24oJ292ZXInLCBzcGlsbE92ZXIpLm9uKCdvdXQnLCBzcGlsbE91dCk7XG4gIH1cblxuICBldmVudHMoKTtcblxuICByZXR1cm4gZHJha2U7XG5cbiAgZnVuY3Rpb24gaXNDb250YWluZXIgKGVsKSB7XG4gICAgcmV0dXJuIGRyYWtlLmNvbnRhaW5lcnMuaW5kZXhPZihlbCkgIT09IC0xIHx8IG8uaXNDb250YWluZXIoZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXZlbnRzIChyZW1vdmUpIHtcbiAgICB2YXIgb3AgPSByZW1vdmUgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIHRvdWNoeShkb2N1bWVudEVsZW1lbnQsIG9wLCAnbW91c2Vkb3duJywgZ3JhYik7XG4gICAgdG91Y2h5KGRvY3VtZW50RWxlbWVudCwgb3AsICdtb3VzZXVwJywgcmVsZWFzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBldmVudHVhbE1vdmVtZW50cyAocmVtb3ZlKSB7XG4gICAgdmFyIG9wID0gcmVtb3ZlID8gJ3JlbW92ZScgOiAnYWRkJztcbiAgICB0b3VjaHkoZG9jdW1lbnRFbGVtZW50LCBvcCwgJ21vdXNlbW92ZScsIHN0YXJ0QmVjYXVzZU1vdXNlTW92ZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZW1lbnRzIChyZW1vdmUpIHtcbiAgICB2YXIgb3AgPSByZW1vdmUgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGNyb3NzdmVudFtvcF0oZG9jdW1lbnRFbGVtZW50LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50R3JhYmJlZCk7IC8vIElFOFxuICAgIGNyb3NzdmVudFtvcF0oZG9jdW1lbnRFbGVtZW50LCAnY2xpY2snLCBwcmV2ZW50R3JhYmJlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICgpIHtcbiAgICBldmVudHModHJ1ZSk7XG4gICAgcmVsZWFzZSh7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2ZW50R3JhYmJlZCAoZSkge1xuICAgIGlmIChfZ3JhYmJlZCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdyYWIgKGUpIHtcbiAgICBfbW92ZVggPSBlLmNsaWVudFg7XG4gICAgX21vdmVZID0gZS5jbGllbnRZO1xuXG4gICAgdmFyIGlnbm9yZSA9IHdoaWNoTW91c2VCdXR0b24oZSkgIT09IDEgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleTtcbiAgICBpZiAoaWdub3JlKSB7XG4gICAgICByZXR1cm47IC8vIHdlIG9ubHkgY2FyZSBhYm91dCBob25lc3QtdG8tZ29kIGxlZnQgY2xpY2tzIGFuZCB0b3VjaCBldmVudHNcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSBlLnRhcmdldDtcbiAgICB2YXIgY29udGV4dCA9IGNhblN0YXJ0KGl0ZW0pO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfZ3JhYmJlZCA9IGNvbnRleHQ7XG4gICAgZXZlbnR1YWxNb3ZlbWVudHMoKTtcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgaWYgKGlzSW5wdXQoaXRlbSkpIHsgLy8gc2VlIGFsc286IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8yMDhcbiAgICAgICAgaXRlbS5mb2N1cygpOyAvLyBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vYmV2YWNxdWEvZHJhZ3VsYS9pc3N1ZXMvMTc2XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8xNTVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydEJlY2F1c2VNb3VzZU1vdmVkIChlKSB7XG4gICAgaWYgKCFfZ3JhYmJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAod2hpY2hNb3VzZUJ1dHRvbihlKSA9PT0gMCkge1xuICAgICAgcmVsZWFzZSh7fSk7XG4gICAgICByZXR1cm47IC8vIHdoZW4gdGV4dCBpcyBzZWxlY3RlZCBvbiBhbiBpbnB1dCBhbmQgdGhlbiBkcmFnZ2VkLCBtb3VzZXVwIGRvZXNuJ3QgZmlyZS4gdGhpcyBpcyBvdXIgb25seSBob3BlXG4gICAgfVxuXG4gICAgLy8gdHJ1dGh5IGNoZWNrIGZpeGVzICMyMzksIGVxdWFsaXR5IGZpeGVzICMyMDcsIGZpeGVzICM1MDFcbiAgICBpZiAoKGUuY2xpZW50WCAhPT0gdm9pZCAwICYmIE1hdGguYWJzKGUuY2xpZW50WCAtIF9tb3ZlWCkgPD0gKG8uc2xpZGVGYWN0b3JYIHx8IDApKSAmJlxuICAgICAgKGUuY2xpZW50WSAhPT0gdm9pZCAwICYmIE1hdGguYWJzKGUuY2xpZW50WSAtIF9tb3ZlWSkgPD0gKG8uc2xpZGVGYWN0b3JZIHx8IDApKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvLmlnbm9yZUlucHV0VGV4dFNlbGVjdGlvbikge1xuICAgICAgdmFyIGNsaWVudFggPSBnZXRDb29yZCgnY2xpZW50WCcsIGUpIHx8IDA7XG4gICAgICB2YXIgY2xpZW50WSA9IGdldENvb3JkKCdjbGllbnRZJywgZSkgfHwgMDtcbiAgICAgIHZhciBlbGVtZW50QmVoaW5kQ3Vyc29yID0gZG9jLmVsZW1lbnRGcm9tUG9pbnQoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICBpZiAoaXNJbnB1dChlbGVtZW50QmVoaW5kQ3Vyc29yKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGdyYWJiZWQgPSBfZ3JhYmJlZDsgLy8gY2FsbCB0byBlbmQoKSB1bnNldHMgX2dyYWJiZWRcbiAgICBldmVudHVhbE1vdmVtZW50cyh0cnVlKTtcbiAgICBtb3ZlbWVudHMoKTtcbiAgICBlbmQoKTtcbiAgICBzdGFydChncmFiYmVkKTtcblxuICAgIHZhciBvZmZzZXQgPSBnZXRPZmZzZXQoX2l0ZW0pO1xuICAgIF9vZmZzZXRYID0gZ2V0Q29vcmQoJ3BhZ2VYJywgZSkgLSBvZmZzZXQubGVmdDtcbiAgICBfb2Zmc2V0WSA9IGdldENvb3JkKCdwYWdlWScsIGUpIC0gb2Zmc2V0LnRvcDtcblxuICAgIGNsYXNzZXMuYWRkKF9jb3B5IHx8IF9pdGVtLCAnZ3UtdHJhbnNpdCcpO1xuICAgIHJlbmRlck1pcnJvckltYWdlKCk7XG4gICAgZHJhZyhlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhblN0YXJ0IChpdGVtKSB7XG4gICAgaWYgKGRyYWtlLmRyYWdnaW5nICYmIF9taXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzQ29udGFpbmVyKGl0ZW0pKSB7XG4gICAgICByZXR1cm47IC8vIGRvbid0IGRyYWcgY29udGFpbmVyIGl0c2VsZlxuICAgIH1cbiAgICB2YXIgaGFuZGxlID0gaXRlbTtcbiAgICB3aGlsZSAoZ2V0UGFyZW50KGl0ZW0pICYmIGlzQ29udGFpbmVyKGdldFBhcmVudChpdGVtKSkgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoby5pbnZhbGlkKGl0ZW0sIGhhbmRsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbSA9IGdldFBhcmVudChpdGVtKTsgLy8gZHJhZyB0YXJnZXQgc2hvdWxkIGJlIGEgdG9wIGVsZW1lbnRcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBzb3VyY2UgPSBnZXRQYXJlbnQoaXRlbSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG8uaW52YWxpZChpdGVtLCBoYW5kbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1vdmFibGUgPSBvLm1vdmVzKGl0ZW0sIHNvdXJjZSwgaGFuZGxlLCBuZXh0RWwoaXRlbSkpO1xuICAgIGlmICghbW92YWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtOiBpdGVtLFxuICAgICAgc291cmNlOiBzb3VyY2VcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuTW92ZSAoaXRlbSkge1xuICAgIHJldHVybiAhIWNhblN0YXJ0KGl0ZW0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFudWFsU3RhcnQgKGl0ZW0pIHtcbiAgICB2YXIgY29udGV4dCA9IGNhblN0YXJ0KGl0ZW0pO1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBzdGFydChjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydCAoY29udGV4dCkge1xuICAgIGlmIChpc0NvcHkoY29udGV4dC5pdGVtLCBjb250ZXh0LnNvdXJjZSkpIHtcbiAgICAgIF9jb3B5ID0gY29udGV4dC5pdGVtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGRyYWtlLmVtaXQoJ2Nsb25lZCcsIF9jb3B5LCBjb250ZXh0Lml0ZW0sICdjb3B5Jyk7XG4gICAgfVxuXG4gICAgX3NvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuICAgIF9pdGVtID0gY29udGV4dC5pdGVtO1xuICAgIF9pbml0aWFsU2libGluZyA9IF9jdXJyZW50U2libGluZyA9IG5leHRFbChjb250ZXh0Lml0ZW0pO1xuXG4gICAgZHJha2UuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIGRyYWtlLmVtaXQoJ2RyYWcnLCBfaXRlbSwgX3NvdXJjZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZhbGlkVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBlbmQgKCkge1xuICAgIGlmICghZHJha2UuZHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSBfY29weSB8fCBfaXRlbTtcbiAgICBkcm9wKGl0ZW0sIGdldFBhcmVudChpdGVtKSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmdyYWIgKCkge1xuICAgIF9ncmFiYmVkID0gZmFsc2U7XG4gICAgZXZlbnR1YWxNb3ZlbWVudHModHJ1ZSk7XG4gICAgbW92ZW1lbnRzKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZSAoZSkge1xuICAgIHVuZ3JhYigpO1xuXG4gICAgaWYgKCFkcmFrZS5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaXRlbSA9IF9jb3B5IHx8IF9pdGVtO1xuICAgIHZhciBjbGllbnRYID0gZ2V0Q29vcmQoJ2NsaWVudFgnLCBlKSB8fCAwO1xuICAgIHZhciBjbGllbnRZID0gZ2V0Q29vcmQoJ2NsaWVudFknLCBlKSB8fCAwO1xuICAgIHZhciBlbGVtZW50QmVoaW5kQ3Vyc29yID0gZ2V0RWxlbWVudEJlaGluZFBvaW50KF9taXJyb3IsIGNsaWVudFgsIGNsaWVudFkpO1xuICAgIHZhciBkcm9wVGFyZ2V0ID0gZmluZERyb3BUYXJnZXQoZWxlbWVudEJlaGluZEN1cnNvciwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgaWYgKGRyb3BUYXJnZXQgJiYgKChfY29weSAmJiBvLmNvcHlTb3J0U291cmNlKSB8fCAoIV9jb3B5IHx8IGRyb3BUYXJnZXQgIT09IF9zb3VyY2UpKSkge1xuICAgICAgZHJvcChpdGVtLCBkcm9wVGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKG8ucmVtb3ZlT25TcGlsbCkge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyb3AgKGl0ZW0sIHRhcmdldCkge1xuICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoaXRlbSk7XG4gICAgaWYgKF9jb3B5ICYmIG8uY29weVNvcnRTb3VyY2UgJiYgdGFyZ2V0ID09PSBfc291cmNlKSB7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoX2l0ZW0pO1xuICAgIH1cbiAgICBpZiAoaXNJbml0aWFsUGxhY2VtZW50KHRhcmdldCkpIHtcbiAgICAgIGRyYWtlLmVtaXQoJ2NhbmNlbCcsIGl0ZW0sIF9zb3VyY2UsIF9zb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcmFrZS5lbWl0KCdkcm9wJywgaXRlbSwgdGFyZ2V0LCBfc291cmNlLCBfY3VycmVudFNpYmxpbmcpO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUgKCkge1xuICAgIGlmICghZHJha2UuZHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSBfY29weSB8fCBfaXRlbTtcbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGl0ZW0pO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChpdGVtKTtcbiAgICB9XG4gICAgZHJha2UuZW1pdChfY29weSA/ICdjYW5jZWwnIDogJ3JlbW92ZScsIGl0ZW0sIHBhcmVudCwgX3NvdXJjZSk7XG4gICAgY2xlYW51cCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsIChyZXZlcnQpIHtcbiAgICBpZiAoIWRyYWtlLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByZXZlcnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgPyByZXZlcnQgOiBvLnJldmVydE9uU3BpbGw7XG4gICAgdmFyIGl0ZW0gPSBfY29weSB8fCBfaXRlbTtcbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGl0ZW0pO1xuICAgIHZhciBpbml0aWFsID0gaXNJbml0aWFsUGxhY2VtZW50KHBhcmVudCk7XG4gICAgaWYgKGluaXRpYWwgPT09IGZhbHNlICYmIHJldmVydHMpIHtcbiAgICAgIGlmIChfY29weSkge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKF9jb3B5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3NvdXJjZS5pbnNlcnRCZWZvcmUoaXRlbSwgX2luaXRpYWxTaWJsaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluaXRpYWwgfHwgcmV2ZXJ0cykge1xuICAgICAgZHJha2UuZW1pdCgnY2FuY2VsJywgaXRlbSwgX3NvdXJjZSwgX3NvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWtlLmVtaXQoJ2Ryb3AnLCBpdGVtLCBwYXJlbnQsIF9zb3VyY2UsIF9jdXJyZW50U2libGluZyk7XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXAgKCkge1xuICAgIHZhciBpdGVtID0gX2NvcHkgfHwgX2l0ZW07XG4gICAgdW5ncmFiKCk7XG4gICAgcmVtb3ZlTWlycm9ySW1hZ2UoKTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgY2xhc3Nlcy5ybShpdGVtLCAnZ3UtdHJhbnNpdCcpO1xuICAgIH1cbiAgICBpZiAoX3JlbmRlclRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoX3JlbmRlclRpbWVyKTtcbiAgICB9XG4gICAgZHJha2UuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBpZiAoX2xhc3REcm9wVGFyZ2V0KSB7XG4gICAgICBkcmFrZS5lbWl0KCdvdXQnLCBpdGVtLCBfbGFzdERyb3BUYXJnZXQsIF9zb3VyY2UpO1xuICAgIH1cbiAgICBkcmFrZS5lbWl0KCdkcmFnZW5kJywgaXRlbSk7XG4gICAgX3NvdXJjZSA9IF9pdGVtID0gX2NvcHkgPSBfaW5pdGlhbFNpYmxpbmcgPSBfY3VycmVudFNpYmxpbmcgPSBfcmVuZGVyVGltZXIgPSBfbGFzdERyb3BUYXJnZXQgPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNJbml0aWFsUGxhY2VtZW50ICh0YXJnZXQsIHMpIHtcbiAgICB2YXIgc2libGluZztcbiAgICBpZiAocyAhPT0gdm9pZCAwKSB7XG4gICAgICBzaWJsaW5nID0gcztcbiAgICB9IGVsc2UgaWYgKF9taXJyb3IpIHtcbiAgICAgIHNpYmxpbmcgPSBfY3VycmVudFNpYmxpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpYmxpbmcgPSBuZXh0RWwoX2NvcHkgfHwgX2l0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0ID09PSBfc291cmNlICYmIHNpYmxpbmcgPT09IF9pbml0aWFsU2libGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmREcm9wVGFyZ2V0IChlbGVtZW50QmVoaW5kQ3Vyc29yLCBjbGllbnRYLCBjbGllbnRZKSB7XG4gICAgdmFyIHRhcmdldCA9IGVsZW1lbnRCZWhpbmRDdXJzb3I7XG4gICAgd2hpbGUgKHRhcmdldCAmJiAhYWNjZXB0ZWQoKSkge1xuICAgICAgdGFyZ2V0ID0gZ2V0UGFyZW50KHRhcmdldCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG5cbiAgICBmdW5jdGlvbiBhY2NlcHRlZCAoKSB7XG4gICAgICB2YXIgZHJvcHBhYmxlID0gaXNDb250YWluZXIodGFyZ2V0KTtcbiAgICAgIGlmIChkcm9wcGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGltbWVkaWF0ZSA9IGdldEltbWVkaWF0ZUNoaWxkKHRhcmdldCwgZWxlbWVudEJlaGluZEN1cnNvcik7XG4gICAgICB2YXIgcmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlKHRhcmdldCwgaW1tZWRpYXRlLCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICAgIHZhciBpbml0aWFsID0gaXNJbml0aWFsUGxhY2VtZW50KHRhcmdldCwgcmVmZXJlbmNlKTtcbiAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZHJvcCBpdCByaWdodCBiYWNrIHdoZXJlIGl0IHdhc1xuICAgICAgfVxuICAgICAgcmV0dXJuIG8uYWNjZXB0cyhfaXRlbSwgdGFyZ2V0LCBfc291cmNlLCByZWZlcmVuY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYWcgKGUpIHtcbiAgICBpZiAoIV9taXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdmFyIGNsaWVudFggPSBnZXRDb29yZCgnY2xpZW50WCcsIGUpIHx8IDA7XG4gICAgdmFyIGNsaWVudFkgPSBnZXRDb29yZCgnY2xpZW50WScsIGUpIHx8IDA7XG4gICAgdmFyIHggPSBjbGllbnRYIC0gX29mZnNldFg7XG4gICAgdmFyIHkgPSBjbGllbnRZIC0gX29mZnNldFk7XG5cbiAgICBfbWlycm9yLnN0eWxlLmxlZnQgPSB4ICsgJ3B4JztcbiAgICBfbWlycm9yLnN0eWxlLnRvcCA9IHkgKyAncHgnO1xuXG4gICAgdmFyIGl0ZW0gPSBfY29weSB8fCBfaXRlbTtcbiAgICB2YXIgZWxlbWVudEJlaGluZEN1cnNvciA9IGdldEVsZW1lbnRCZWhpbmRQb2ludChfbWlycm9yLCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICB2YXIgZHJvcFRhcmdldCA9IGZpbmREcm9wVGFyZ2V0KGVsZW1lbnRCZWhpbmRDdXJzb3IsIGNsaWVudFgsIGNsaWVudFkpO1xuICAgIHZhciBjaGFuZ2VkID0gZHJvcFRhcmdldCAhPT0gbnVsbCAmJiBkcm9wVGFyZ2V0ICE9PSBfbGFzdERyb3BUYXJnZXQ7XG4gICAgaWYgKGNoYW5nZWQgfHwgZHJvcFRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgb3V0KCk7XG4gICAgICBfbGFzdERyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0O1xuICAgICAgb3ZlcigpO1xuICAgIH1cbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGl0ZW0pO1xuICAgIGlmIChkcm9wVGFyZ2V0ID09PSBfc291cmNlICYmIF9jb3B5ICYmICFvLmNvcHlTb3J0U291cmNlKSB7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlZmVyZW5jZTtcbiAgICB2YXIgaW1tZWRpYXRlID0gZ2V0SW1tZWRpYXRlQ2hpbGQoZHJvcFRhcmdldCwgZWxlbWVudEJlaGluZEN1cnNvcik7XG4gICAgaWYgKGltbWVkaWF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlKGRyb3BUYXJnZXQsIGltbWVkaWF0ZSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgfSBlbHNlIGlmIChvLnJldmVydE9uU3BpbGwgPT09IHRydWUgJiYgIV9jb3B5KSB7XG4gICAgICByZWZlcmVuY2UgPSBfaW5pdGlhbFNpYmxpbmc7XG4gICAgICBkcm9wVGFyZ2V0ID0gX3NvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKF9jb3B5ICYmIHBhcmVudCkge1xuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChyZWZlcmVuY2UgPT09IG51bGwgJiYgY2hhbmdlZCkgfHxcbiAgICAgIHJlZmVyZW5jZSAhPT0gaXRlbSAmJlxuICAgICAgcmVmZXJlbmNlICE9PSBuZXh0RWwoaXRlbSlcbiAgICApIHtcbiAgICAgIF9jdXJyZW50U2libGluZyA9IHJlZmVyZW5jZTtcbiAgICAgIGRyb3BUYXJnZXQuaW5zZXJ0QmVmb3JlKGl0ZW0sIHJlZmVyZW5jZSk7XG4gICAgICBkcmFrZS5lbWl0KCdzaGFkb3cnLCBpdGVtLCBkcm9wVGFyZ2V0LCBfc291cmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW92ZWQgKHR5cGUpIHsgZHJha2UuZW1pdCh0eXBlLCBpdGVtLCBfbGFzdERyb3BUYXJnZXQsIF9zb3VyY2UpOyB9XG4gICAgZnVuY3Rpb24gb3ZlciAoKSB7IGlmIChjaGFuZ2VkKSB7IG1vdmVkKCdvdmVyJyk7IH0gfVxuICAgIGZ1bmN0aW9uIG91dCAoKSB7IGlmIChfbGFzdERyb3BUYXJnZXQpIHsgbW92ZWQoJ291dCcpOyB9IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNwaWxsT3ZlciAoZWwpIHtcbiAgICBjbGFzc2VzLnJtKGVsLCAnZ3UtaGlkZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3BpbGxPdXQgKGVsKSB7XG4gICAgaWYgKGRyYWtlLmRyYWdnaW5nKSB7IGNsYXNzZXMuYWRkKGVsLCAnZ3UtaGlkZScpOyB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJNaXJyb3JJbWFnZSAoKSB7XG4gICAgaWYgKF9taXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlY3QgPSBfaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBfbWlycm9yID0gX2l0ZW0uY2xvbmVOb2RlKHRydWUpO1xuICAgIF9taXJyb3Iuc3R5bGUud2lkdGggPSBnZXRSZWN0V2lkdGgocmVjdCkgKyAncHgnO1xuICAgIF9taXJyb3Iuc3R5bGUuaGVpZ2h0ID0gZ2V0UmVjdEhlaWdodChyZWN0KSArICdweCc7XG4gICAgY2xhc3Nlcy5ybShfbWlycm9yLCAnZ3UtdHJhbnNpdCcpO1xuICAgIGNsYXNzZXMuYWRkKF9taXJyb3IsICdndS1taXJyb3InKTtcbiAgICBvLm1pcnJvckNvbnRhaW5lci5hcHBlbmRDaGlsZChfbWlycm9yKTtcbiAgICB0b3VjaHkoZG9jdW1lbnRFbGVtZW50LCAnYWRkJywgJ21vdXNlbW92ZScsIGRyYWcpO1xuICAgIGNsYXNzZXMuYWRkKG8ubWlycm9yQ29udGFpbmVyLCAnZ3UtdW5zZWxlY3RhYmxlJyk7XG4gICAgZHJha2UuZW1pdCgnY2xvbmVkJywgX21pcnJvciwgX2l0ZW0sICdtaXJyb3InKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU1pcnJvckltYWdlICgpIHtcbiAgICBpZiAoX21pcnJvcikge1xuICAgICAgY2xhc3Nlcy5ybShvLm1pcnJvckNvbnRhaW5lciwgJ2d1LXVuc2VsZWN0YWJsZScpO1xuICAgICAgdG91Y2h5KGRvY3VtZW50RWxlbWVudCwgJ3JlbW92ZScsICdtb3VzZW1vdmUnLCBkcmFnKTtcbiAgICAgIGdldFBhcmVudChfbWlycm9yKS5yZW1vdmVDaGlsZChfbWlycm9yKTtcbiAgICAgIF9taXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEltbWVkaWF0ZUNoaWxkIChkcm9wVGFyZ2V0LCB0YXJnZXQpIHtcbiAgICB2YXIgaW1tZWRpYXRlID0gdGFyZ2V0O1xuICAgIHdoaWxlIChpbW1lZGlhdGUgIT09IGRyb3BUYXJnZXQgJiYgZ2V0UGFyZW50KGltbWVkaWF0ZSkgIT09IGRyb3BUYXJnZXQpIHtcbiAgICAgIGltbWVkaWF0ZSA9IGdldFBhcmVudChpbW1lZGlhdGUpO1xuICAgIH1cbiAgICBpZiAoaW1tZWRpYXRlID09PSBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW1tZWRpYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlIChkcm9wVGFyZ2V0LCB0YXJnZXQsIHgsIHkpIHtcbiAgICB2YXIgaG9yaXpvbnRhbCA9IG8uZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHJlZmVyZW5jZSA9IHRhcmdldCAhPT0gZHJvcFRhcmdldCA/IGluc2lkZSgpIDogb3V0c2lkZSgpO1xuICAgIHJldHVybiByZWZlcmVuY2U7XG5cbiAgICBmdW5jdGlvbiBvdXRzaWRlICgpIHsgLy8gc2xvd2VyLCBidXQgYWJsZSB0byBmaWd1cmUgb3V0IGFueSBwb3NpdGlvblxuICAgICAgdmFyIGxlbiA9IGRyb3BUYXJnZXQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgZWw7XG4gICAgICB2YXIgcmVjdDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBlbCA9IGRyb3BUYXJnZXQuY2hpbGRyZW5baV07XG4gICAgICAgIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGhvcml6b250YWwgJiYgKHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKSA+IHgpIHsgcmV0dXJuIGVsOyB9XG4gICAgICAgIGlmICghaG9yaXpvbnRhbCAmJiAocmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIpID4geSkgeyByZXR1cm4gZWw7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc2lkZSAoKSB7IC8vIGZhc3RlciwgYnV0IG9ubHkgYXZhaWxhYmxlIGlmIGRyb3BwZWQgaW5zaWRlIGEgY2hpbGQgZWxlbWVudFxuICAgICAgdmFyIHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh4ID4gcmVjdC5sZWZ0ICsgZ2V0UmVjdFdpZHRoKHJlY3QpIC8gMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZSh5ID4gcmVjdC50b3AgKyBnZXRSZWN0SGVpZ2h0KHJlY3QpIC8gMik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZSAoYWZ0ZXIpIHtcbiAgICAgIHJldHVybiBhZnRlciA/IG5leHRFbCh0YXJnZXQpIDogdGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29weSAoaXRlbSwgY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvLmNvcHkgPT09ICdib29sZWFuJyA/IG8uY29weSA6IG8uY29weShpdGVtLCBjb250YWluZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvdWNoeSAoZWwsIG9wLCB0eXBlLCBmbikge1xuICB2YXIgdG91Y2ggPSB7XG4gICAgbW91c2V1cDogJ3RvdWNoZW5kJyxcbiAgICBtb3VzZWRvd246ICd0b3VjaHN0YXJ0JyxcbiAgICBtb3VzZW1vdmU6ICd0b3VjaG1vdmUnXG4gIH07XG4gIHZhciBwb2ludGVycyA9IHtcbiAgICBtb3VzZXVwOiAncG9pbnRlcnVwJyxcbiAgICBtb3VzZWRvd246ICdwb2ludGVyZG93bicsXG4gICAgbW91c2Vtb3ZlOiAncG9pbnRlcm1vdmUnXG4gIH07XG4gIHZhciBtaWNyb3NvZnQgPSB7XG4gICAgbW91c2V1cDogJ01TUG9pbnRlclVwJyxcbiAgICBtb3VzZWRvd246ICdNU1BvaW50ZXJEb3duJyxcbiAgICBtb3VzZW1vdmU6ICdNU1BvaW50ZXJNb3ZlJ1xuICB9O1xuICBpZiAoZ2xvYmFsLm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZCkge1xuICAgIGNyb3NzdmVudFtvcF0oZWwsIHBvaW50ZXJzW3R5cGVdLCBmbik7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsLm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKSB7XG4gICAgY3Jvc3N2ZW50W29wXShlbCwgbWljcm9zb2Z0W3R5cGVdLCBmbik7XG4gIH0gZWxzZSB7XG4gICAgY3Jvc3N2ZW50W29wXShlbCwgdG91Y2hbdHlwZV0sIGZuKTtcbiAgICBjcm9zc3ZlbnRbb3BdKGVsLCB0eXBlLCBmbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2hpY2hNb3VzZUJ1dHRvbiAoZSkge1xuICBpZiAoZS50b3VjaGVzICE9PSB2b2lkIDApIHsgcmV0dXJuIGUudG91Y2hlcy5sZW5ndGg7IH1cbiAgaWYgKGUud2hpY2ggIT09IHZvaWQgMCAmJiBlLndoaWNoICE9PSAwKSB7IHJldHVybiBlLndoaWNoOyB9IC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYmV2YWNxdWEvZHJhZ3VsYS9pc3N1ZXMvMjYxXG4gIGlmIChlLmJ1dHRvbnMgIT09IHZvaWQgMCkgeyByZXR1cm4gZS5idXR0b25zOyB9XG4gIHZhciBidXR0b24gPSBlLmJ1dHRvbjtcbiAgaWYgKGJ1dHRvbiAhPT0gdm9pZCAwKSB7IC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzk5ZThmZjFiYWE3YWUzNDFlOTRiYjg5YzNlODQ1NzBjN2MzYWQ5ZWEvc3JjL2V2ZW50LmpzI0w1NzMtTDU3NVxuICAgIHJldHVybiBidXR0b24gJiAxID8gMSA6IGJ1dHRvbiAmIDIgPyAzIDogKGJ1dHRvbiAmIDQgPyAyIDogMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0IChlbCkge1xuICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCArIGdldFNjcm9sbCgnc2Nyb2xsTGVmdCcsICdwYWdlWE9mZnNldCcpLFxuICAgIHRvcDogcmVjdC50b3AgKyBnZXRTY3JvbGwoJ3Njcm9sbFRvcCcsICdwYWdlWU9mZnNldCcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbCAoc2Nyb2xsUHJvcCwgb2Zmc2V0UHJvcCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFtvZmZzZXRQcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZ2xvYmFsW29mZnNldFByb3BdO1xuICB9XG4gIGlmIChkb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudFtzY3JvbGxQcm9wXTtcbiAgfVxuICByZXR1cm4gZG9jLmJvZHlbc2Nyb2xsUHJvcF07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCZWhpbmRQb2ludCAocG9pbnQsIHgsIHkpIHtcbiAgcG9pbnQgPSBwb2ludCB8fCB7fTtcbiAgdmFyIHN0YXRlID0gcG9pbnQuY2xhc3NOYW1lIHx8ICcnO1xuICB2YXIgZWw7XG4gIHBvaW50LmNsYXNzTmFtZSArPSAnIGd1LWhpZGUnO1xuICBlbCA9IGRvYy5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICBwb2ludC5jbGFzc05hbWUgPSBzdGF0ZTtcbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBuZXZlciAoKSB7IHJldHVybiBmYWxzZTsgfVxuZnVuY3Rpb24gYWx3YXlzICgpIHsgcmV0dXJuIHRydWU7IH1cbmZ1bmN0aW9uIGdldFJlY3RXaWR0aCAocmVjdCkgeyByZXR1cm4gcmVjdC53aWR0aCB8fCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCk7IH1cbmZ1bmN0aW9uIGdldFJlY3RIZWlnaHQgKHJlY3QpIHsgcmV0dXJuIHJlY3QuaGVpZ2h0IHx8IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTsgfVxuZnVuY3Rpb24gZ2V0UGFyZW50IChlbCkgeyByZXR1cm4gZWwucGFyZW50Tm9kZSA9PT0gZG9jID8gbnVsbCA6IGVsLnBhcmVudE5vZGU7IH1cbmZ1bmN0aW9uIGlzSW5wdXQgKGVsKSB7IHJldHVybiBlbC50YWdOYW1lID09PSAnSU5QVVQnIHx8IGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgZWwudGFnTmFtZSA9PT0gJ1NFTEVDVCcgfHwgaXNFZGl0YWJsZShlbCk7IH1cbmZ1bmN0aW9uIGlzRWRpdGFibGUgKGVsKSB7XG4gIGlmICghZWwpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIG5vIHBhcmVudHMgd2VyZSBlZGl0YWJsZVxuICBpZiAoZWwuY29udGVudEVkaXRhYmxlID09PSAnZmFsc2UnKSB7IHJldHVybiBmYWxzZTsgfSAvLyBzdG9wIHRoZSBsb29rdXBcbiAgaWYgKGVsLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7IHJldHVybiB0cnVlOyB9IC8vIGZvdW5kIGEgY29udGVudEVkaXRhYmxlIGVsZW1lbnQgaW4gdGhlIGNoYWluXG4gIHJldHVybiBpc0VkaXRhYmxlKGdldFBhcmVudChlbCkpOyAvLyBjb250ZW50RWRpdGFibGUgaXMgc2V0IHRvICdpbmhlcml0J1xufVxuXG5mdW5jdGlvbiBuZXh0RWwgKGVsKSB7XG4gIHJldHVybiBlbC5uZXh0RWxlbWVudFNpYmxpbmcgfHwgbWFudWFsbHkoKTtcbiAgZnVuY3Rpb24gbWFudWFsbHkgKCkge1xuICAgIHZhciBzaWJsaW5nID0gZWw7XG4gICAgZG8ge1xuICAgICAgc2libGluZyA9IHNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgfSB3aGlsZSAoc2libGluZyAmJiBzaWJsaW5nLm5vZGVUeXBlICE9PSAxKTtcbiAgICByZXR1cm4gc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudEhvc3QgKGUpIHtcbiAgLy8gb24gdG91Y2hlbmQgZXZlbnQsIHdlIGhhdmUgdG8gdXNlIGBlLmNoYW5nZWRUb3VjaGVzYFxuICAvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MTkyNTYzL3RvdWNoZW5kLWV2ZW50LXByb3BlcnRpZXNcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8zNFxuICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZS50YXJnZXRUb3VjaGVzWzBdO1xuICB9XG4gIGlmIChlLmNoYW5nZWRUb3VjaGVzICYmIGUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGUuY2hhbmdlZFRvdWNoZXNbMF07XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGdldENvb3JkIChjb29yZCwgZSkge1xuICB2YXIgaG9zdCA9IGdldEV2ZW50SG9zdChlKTtcbiAgdmFyIG1pc3NNYXAgPSB7XG4gICAgcGFnZVg6ICdjbGllbnRYJywgLy8gSUU4XG4gICAgcGFnZVk6ICdjbGllbnRZJyAvLyBJRThcbiAgfTtcbiAgaWYgKGNvb3JkIGluIG1pc3NNYXAgJiYgIShjb29yZCBpbiBob3N0KSAmJiBtaXNzTWFwW2Nvb3JkXSBpbiBob3N0KSB7XG4gICAgY29vcmQgPSBtaXNzTWFwW2Nvb3JkXTtcbiAgfVxuICByZXR1cm4gaG9zdFtjb29yZF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZHJhZ3VsYTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXRvYSAoYSwgbikgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwgbik7IH1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRpY2t5ID0gcmVxdWlyZSgndGlja3knKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWJvdW5jZSAoZm4sIGFyZ3MsIGN0eCkge1xuICBpZiAoIWZuKSB7IHJldHVybjsgfVxuICB0aWNreShmdW5jdGlvbiBydW4gKCkge1xuICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBhcmdzIHx8IFtdKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXRvYSA9IHJlcXVpcmUoJ2F0b2EnKTtcbnZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJy4vZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbWl0dGVyICh0aGluZywgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBldnQgPSB7fTtcbiAgaWYgKHRoaW5nID09PSB1bmRlZmluZWQpIHsgdGhpbmcgPSB7fTsgfVxuICB0aGluZy5vbiA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICAgIGlmICghZXZ0W3R5cGVdKSB7XG4gICAgICBldnRbdHlwZV0gPSBbZm5dO1xuICAgIH0gZWxzZSB7XG4gICAgICBldnRbdHlwZV0ucHVzaChmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbiAgfTtcbiAgdGhpbmcub25jZSA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICAgIGZuLl9vbmNlID0gdHJ1ZTsgLy8gdGhpbmcub2ZmKGZuKSBzdGlsbCB3b3JrcyFcbiAgICB0aGluZy5vbih0eXBlLCBmbik7XG4gICAgcmV0dXJuIHRoaW5nO1xuICB9O1xuICB0aGluZy5vZmYgPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGMgPT09IDEpIHtcbiAgICAgIGRlbGV0ZSBldnRbdHlwZV07XG4gICAgfSBlbHNlIGlmIChjID09PSAwKSB7XG4gICAgICBldnQgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGV0ID0gZXZ0W3R5cGVdO1xuICAgICAgaWYgKCFldCkgeyByZXR1cm4gdGhpbmc7IH1cbiAgICAgIGV0LnNwbGljZShldC5pbmRleE9mKGZuKSwgMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbiAgfTtcbiAgdGhpbmcuZW1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGF0b2EoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpbmcuZW1pdHRlclNuYXBzaG90KGFyZ3Muc2hpZnQoKSkuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG4gIHRoaW5nLmVtaXR0ZXJTbmFwc2hvdCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdmFyIGV0ID0gKGV2dFt0eXBlXSB8fCBbXSkuc2xpY2UoMCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gYXRvYShhcmd1bWVudHMpO1xuICAgICAgdmFyIGN0eCA9IHRoaXMgfHwgdGhpbmc7XG4gICAgICBpZiAodHlwZSA9PT0gJ2Vycm9yJyAmJiBvcHRzLnRocm93cyAhPT0gZmFsc2UgJiYgIWV0Lmxlbmd0aCkgeyB0aHJvdyBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBhcmdzOyB9XG4gICAgICBldC5mb3JFYWNoKGZ1bmN0aW9uIGVtaXR0ZXIgKGxpc3Rlbikge1xuICAgICAgICBpZiAob3B0cy5hc3luYykgeyBkZWJvdW5jZShsaXN0ZW4sIGFyZ3MsIGN0eCk7IH0gZWxzZSB7IGxpc3Rlbi5hcHBseShjdHgsIGFyZ3MpOyB9XG4gICAgICAgIGlmIChsaXN0ZW4uX29uY2UpIHsgdGhpbmcub2ZmKHR5cGUsIGxpc3Rlbik7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaW5nO1xuICAgIH07XG4gIH07XG4gIHJldHVybiB0aGluZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXN0b21FdmVudCA9IHJlcXVpcmUoJ2N1c3RvbS1ldmVudCcpO1xudmFyIGV2ZW50bWFwID0gcmVxdWlyZSgnLi9ldmVudG1hcCcpO1xudmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBhZGRFdmVudCA9IGFkZEV2ZW50RWFzeTtcbnZhciByZW1vdmVFdmVudCA9IHJlbW92ZUV2ZW50RWFzeTtcbnZhciBoYXJkQ2FjaGUgPSBbXTtcblxuaWYgKCFnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICBhZGRFdmVudCA9IGFkZEV2ZW50SGFyZDtcbiAgcmVtb3ZlRXZlbnQgPSByZW1vdmVFdmVudEhhcmQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGQ6IGFkZEV2ZW50LFxuICByZW1vdmU6IHJlbW92ZUV2ZW50LFxuICBmYWJyaWNhdGU6IGZhYnJpY2F0ZUV2ZW50XG59O1xuXG5mdW5jdGlvbiBhZGRFdmVudEVhc3kgKGVsLCB0eXBlLCBmbiwgY2FwdHVyaW5nKSB7XG4gIHJldHVybiBlbC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBjYXB0dXJpbmcpO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEhhcmQgKGVsLCB0eXBlLCBmbikge1xuICByZXR1cm4gZWwuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIHdyYXAoZWwsIHR5cGUsIGZuKSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50RWFzeSAoZWwsIHR5cGUsIGZuLCBjYXB0dXJpbmcpIHtcbiAgcmV0dXJuIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGNhcHR1cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50SGFyZCAoZWwsIHR5cGUsIGZuKSB7XG4gIHZhciBsaXN0ZW5lciA9IHVud3JhcChlbCwgdHlwZSwgZm4pO1xuICBpZiAobGlzdGVuZXIpIHtcbiAgICByZXR1cm4gZWwuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmYWJyaWNhdGVFdmVudCAoZWwsIHR5cGUsIG1vZGVsKSB7XG4gIHZhciBlID0gZXZlbnRtYXAuaW5kZXhPZih0eXBlKSA9PT0gLTEgPyBtYWtlQ3VzdG9tRXZlbnQoKSA6IG1ha2VDbGFzc2ljRXZlbnQoKTtcbiAgaWYgKGVsLmRpc3BhdGNoRXZlbnQpIHtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9IGVsc2Uge1xuICAgIGVsLmZpcmVFdmVudCgnb24nICsgdHlwZSwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUNsYXNzaWNFdmVudCAoKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKGRvYy5jcmVhdGVFdmVudCkge1xuICAgICAgZSA9IGRvYy5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICBlID0gZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VDdXN0b21FdmVudCAoKSB7XG4gICAgcmV0dXJuIG5ldyBjdXN0b21FdmVudCh0eXBlLCB7IGRldGFpbDogbW9kZWwgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcHBlckZhY3RvcnkgKGVsLCB0eXBlLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlciAob3JpZ2luYWxFdmVudCkge1xuICAgIHZhciBlID0gb3JpZ2luYWxFdmVudCB8fCBnbG9iYWwuZXZlbnQ7XG4gICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCA9IGUucHJldmVudERlZmF1bHQgfHwgZnVuY3Rpb24gcHJldmVudERlZmF1bHQgKCkgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH07XG4gICAgZS5zdG9wUHJvcGFnYXRpb24gPSBlLnN0b3BQcm9wYWdhdGlvbiB8fCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24gKCkgeyBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7IH07XG4gICAgZS53aGljaCA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgIGZuLmNhbGwoZWwsIGUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3cmFwIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIHdyYXBwZXIgPSB1bndyYXAoZWwsIHR5cGUsIGZuKSB8fCB3cmFwcGVyRmFjdG9yeShlbCwgdHlwZSwgZm4pO1xuICBoYXJkQ2FjaGUucHVzaCh7XG4gICAgd3JhcHBlcjogd3JhcHBlcixcbiAgICBlbGVtZW50OiBlbCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGZuOiBmblxuICB9KTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHVud3JhcCAoZWwsIHR5cGUsIGZuKSB7XG4gIHZhciBpID0gZmluZChlbCwgdHlwZSwgZm4pO1xuICBpZiAoaSkge1xuICAgIHZhciB3cmFwcGVyID0gaGFyZENhY2hlW2ldLndyYXBwZXI7XG4gICAgaGFyZENhY2hlLnNwbGljZShpLCAxKTsgLy8gZnJlZSB1cCBhIHRhZCBvZiBtZW1vcnlcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIGksIGl0ZW07XG4gIGZvciAoaSA9IDA7IGkgPCBoYXJkQ2FjaGUubGVuZ3RoOyBpKyspIHtcbiAgICBpdGVtID0gaGFyZENhY2hlW2ldO1xuICAgIGlmIChpdGVtLmVsZW1lbnQgPT09IGVsICYmIGl0ZW0udHlwZSA9PT0gdHlwZSAmJiBpdGVtLmZuID09PSBmbikge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBldmVudG1hcCA9IFtdO1xudmFyIGV2ZW50bmFtZSA9ICcnO1xudmFyIHJvbiA9IC9eb24vO1xuXG5mb3IgKGV2ZW50bmFtZSBpbiBnbG9iYWwpIHtcbiAgaWYgKHJvbi50ZXN0KGV2ZW50bmFtZSkpIHtcbiAgICBldmVudG1hcC5wdXNoKGV2ZW50bmFtZS5zbGljZSgyKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBldmVudG1hcDtcbiIsIlxudmFyIE5hdGl2ZUN1c3RvbUV2ZW50ID0gZ2xvYmFsLkN1c3RvbUV2ZW50O1xuXG5mdW5jdGlvbiB1c2VOYXRpdmUgKCkge1xuICB0cnkge1xuICAgIHZhciBwID0gbmV3IE5hdGl2ZUN1c3RvbUV2ZW50KCdjYXQnLCB7IGRldGFpbDogeyBmb286ICdiYXInIH0gfSk7XG4gICAgcmV0dXJuICAnY2F0JyA9PT0gcC50eXBlICYmICdiYXInID09PSBwLmRldGFpbC5mb287XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ3Jvc3MtYnJvd3NlciBgQ3VzdG9tRXZlbnRgIGNvbnN0cnVjdG9yLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC5DdXN0b21FdmVudFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZU5hdGl2ZSgpID8gTmF0aXZlQ3VzdG9tRXZlbnQgOlxuXG4vLyBJRSA+PSA5XG4ndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGRvY3VtZW50ICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA/IGZ1bmN0aW9uIEN1c3RvbUV2ZW50ICh0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgaWYgKHBhcmFtcykge1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSwgcGFyYW1zLmRldGFpbCk7XG4gIH0gZWxzZSB7XG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCB2b2lkIDApO1xuICB9XG4gIHJldHVybiBlO1xufSA6XG5cbi8vIElFIDw9IDhcbmZ1bmN0aW9uIEN1c3RvbUV2ZW50ICh0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICBlLnR5cGUgPSB0eXBlO1xuICBpZiAocGFyYW1zKSB7XG4gICAgZS5idWJibGVzID0gQm9vbGVhbihwYXJhbXMuYnViYmxlcyk7XG4gICAgZS5jYW5jZWxhYmxlID0gQm9vbGVhbihwYXJhbXMuY2FuY2VsYWJsZSk7XG4gICAgZS5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICB9IGVsc2Uge1xuICAgIGUuYnViYmxlcyA9IGZhbHNlO1xuICAgIGUuY2FuY2VsYWJsZSA9IGZhbHNlO1xuICAgIGUuZGV0YWlsID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBlO1xufVxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsInZhciBzaSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsIHRpY2s7XG5pZiAoc2kpIHtcbiAgdGljayA9IGZ1bmN0aW9uIChmbikgeyBzZXRJbW1lZGlhdGUoZm4pOyB9O1xufSBlbHNlIHtcbiAgdGljayA9IGZ1bmN0aW9uIChmbikgeyBzZXRUaW1lb3V0KGZuLCAwKTsgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0aWNrOyIsInZhciBuZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLm5leHRUaWNrO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGltbWVkaWF0ZUlkcyA9IHt9O1xudmFyIG5leHRJbW1lZGlhdGVJZCA9IDA7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7IHRpbWVvdXQuY2xvc2UoKTsgfTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBUaGF0J3Mgbm90IGhvdyBub2RlLmpzIGltcGxlbWVudHMgaXQgYnV0IHRoZSBleHBvc2VkIGFwaSBpcyB0aGUgc2FtZS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogZnVuY3Rpb24oZm4pIHtcbiAgdmFyIGlkID0gbmV4dEltbWVkaWF0ZUlkKys7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBmYWxzZSA6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBpbW1lZGlhdGVJZHNbaWRdID0gdHJ1ZTtcblxuICBuZXh0VGljayhmdW5jdGlvbiBvbk5leHRUaWNrKCkge1xuICAgIGlmIChpbW1lZGlhdGVJZHNbaWRdKSB7XG4gICAgICAvLyBmbi5jYWxsKCkgaXMgZmFzdGVyIHNvIHdlIG9wdGltaXplIGZvciB0aGUgY29tbW9uIHVzZS1jYXNlXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2NhbGwtYXBwbHktc2VndVxuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbi5jYWxsKG51bGwpO1xuICAgICAgfVxuICAgICAgLy8gUHJldmVudCBpZHMgZnJvbSBsZWFraW5nXG4gICAgICBleHBvcnRzLmNsZWFySW1tZWRpYXRlKGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpZDtcbn07XG5cbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSB0eXBlb2YgY2xlYXJJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGNsZWFySW1tZWRpYXRlIDogZnVuY3Rpb24oaWQpIHtcbiAgZGVsZXRlIGltbWVkaWF0ZUlkc1tpZF07XG59OyJdfQ==\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar templates_1 = require(\"./templates\");\nexports.default = {\n framework: 'bootstrap3',\n templates: templates_1.default,\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n ' +\n((__t = (ctx.sidebar)) == null ? '' : __t) +\n'\\n
\\n
\\n ' +\n((__t = (ctx.form)) == null ? '' : __t) +\n'\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (!ctx.disableBuilderActions) { ;\n__p += '\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n ';\n } ;\n__p += '\\n ' +\n((__t = (ctx.html)) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n ' +\n((__t = (ctx.html)) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n

' +\n((__t = (ctx.t(ctx.componentInfo.title, { _userInput: true }))) == null ? '' : __t) +\n' ' +\n((__t = (ctx.t('Component'))) == null ? '' : __t) +\n'

\\n
\\n ';\n if (ctx.helplinks) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n
\\n
\\n
\\n ';\n if (!ctx.preview) { ;\n__p += '\\n
\\n \\n \\n \\n
\\n ';\n } ;\n__p += '\\n
\\n ';\n if (ctx.preview) { ;\n__p += '\\n
\\n
\\n
\\n

' +\n((__t = (ctx.t('Preview'))) == null ? '' : __t) +\n'

\\n
\\n
\\n
\\n ' +\n((__t = (ctx.preview)) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n ';\n if (ctx.componentInfo.help) { ;\n__p += '\\n
\\n ' +\n((__t = ( ctx.componentInfo.help )) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n \\n \\n \\n
\\n
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n ' +\n((__t = (ctx.t('Drag and Drop a form component'))) == null ? '' : __t) +\n'\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n \\n
\\n ';\n ctx.groups.forEach(function(group) { ;\n__p += '\\n ' +\n((__t = ( group )) == null ? '' : __t) +\n'\\n ';\n }) ;\n__p += '\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n
\\n \\n ' +\n((__t = (ctx.t(ctx.group.title, { _userInput: true }))) == null ? '' : __t) +\n'\\n \\n
\\n
\\n \\n
\\n ';\n if (ctx.group.componentOrder.length || ctx.subgroups.length) { ;\n__p += '\\n ';\n ctx.group.componentOrder.forEach(function(componentKey) { ;\n__p += '\\n \\n ';\n if (ctx.group.components[componentKey].icon) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (ctx.t(ctx.group.components[componentKey].title, { _userInput: true }))) == null ? '' : __t) +\n'\\n \\n ';\n }) ;\n__p += '\\n ' +\n((__t = (ctx.subgroups.join(''))) == null ? '' : __t) +\n'\\n ';\n } else { ;\n__p += '\\n
' +\n((__t = (ctx.t('No Matches Found'))) == null ? '' : __t) +\n'
\\n ';\n } ;\n__p += '\\n
\\n
\\n\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n ctx.component.columns.forEach(function(column, index) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.columnComponents[index])) == null ? '' : __t) +\n'\\n
\\n';\n }) ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n 'formio-tab-panel-active': 'active',\n 'formio-tab-link-active': 'active',\n 'formio-tab-link-container-active': 'active',\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ' +\n((__t = ( col.hideLabel ? '' : ctx.t(col.label || col.title, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n if (col.tooltip) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.hasExtraColumn) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n ctx.rows.forEach(function(row, index) { ;\n__p += '\\n ';\n if (ctx.hasGroups && ctx.groups[index]) { ;\n__p += '\\n \\n ' +\n((__t = (ctx.groups[index].label)) == null ? '' : __t) +\n'\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (ctx.component.reorder) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n ctx.columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.hasExtraColumn) { ;\n__p += '\\n ';\n if (ctx.hasRemoveButtons) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (ctx.canAddColumn) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n } ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n if (ctx.hasAddButton && ctx.hasBottomSubmit) { ;\n__p += '\\n \\n \\n \\n \\n \\n ';\n } ;\n__p += '\\n
\\n ';\n if (!ctx.builder && ctx.hasAddButton && ctx.hasTopSubmit) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n \\n \\n ' +\n((__t = (row[col.key])) == null ? '' : __t) +\n'\\n \\n \\n \\n ' +\n((__t = (ctx.placeholder)) == null ? '' : __t) +\n'\\n
\\n \\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (hasHeader) { ;\n__p += '\\n \\n \\n ';\n columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n rows.forEach(function(row) { ;\n__p += '\\n \\n ';\n columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
\\n ' +\n((__t = ( col.hideLabel ? '' : t(col.label || col.title) )) == null ? '' : __t) +\n'\\n ';\n if (col.tooltip) { ;\n__p += ' ';\n } ;\n__p += '\\n
\\n ' +\n((__t = (row[col.key])) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (ctx.dayFirst && ctx.showDay) { ;\n__p += '\\n
\\n ';\n if (!ctx.component.hideInputLabels) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n ';\n if (ctx.showMonth) { ;\n__p += '\\n
\\n ';\n if (!ctx.component.hideInputLabels) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.dayFirst && ctx.showDay) { ;\n__p += '\\n
\\n ';\n if (!ctx.component.hideInputLabels) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n ';\n if (ctx.showYear) { ;\n__p += '\\n
\\n ';\n if (!ctx.component.hideInputLabels) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n
\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n
\\n
\\n \\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n if (ctx.header) { ;\n__p += '\\n
  • \\n ' +\n((__t = (ctx.header)) == null ? '' : __t) +\n'\\n
  • \\n ';\n } ;\n__p += '\\n ';\n ctx.rows.forEach(function(row, rowIndex) { ;\n__p += '\\n
  • \\n ' +\n((__t = (row)) == null ? '' : __t) +\n'\\n ';\n if (ctx.openRows[rowIndex] && !ctx.readOnly) { ;\n__p += '\\n
    \\n \\n ';\n if (ctx.component.removeRow) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n
    \\n
    \\n ' +\n((__t = (ctx.errors[rowIndex])) == null ? '' : __t) +\n'\\n
    \\n
    \\n
  • \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.footer) { ;\n__p += '\\n
  • \\n ' +\n((__t = (ctx.footer)) == null ? '' : __t) +\n'\\n
  • \\n ';\n } ;\n__p += '\\n
\\n';\n if (!ctx.readOnly && ctx.hasAddButton) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n if (ctx.header) { ;\n__p += '\\n
  • \\n ' +\n((__t = (ctx.header)) == null ? '' : __t) +\n'\\n
  • \\n ';\n } ;\n__p += '\\n ';\n ctx.rows.forEach(function(row, rowIndex) { ;\n__p += '\\n
  • \\n ' +\n((__t = (row)) == null ? '' : __t) +\n'\\n ';\n if (ctx.openRows[rowIndex] && !ctx.readOnly) { ;\n__p += '\\n
    \\n \\n ';\n if (ctx.component.removeRow) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n
    \\n
    \\n ' +\n((__t = (ctx.errors[rowIndex])) == null ? '' : __t) +\n'\\n
    \\n
    \\n
  • \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.footer) { ;\n__p += '\\n
  • \\n ' +\n((__t = (ctx.footer)) == null ? '' : __t) +\n'\\n
  • \\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '

' +\n((__t = (ctx.t('error'))) == null ? '' : __t) +\n'

\\n
    \\n ';\n ctx.errors.forEach(function(err) { ;\n__p += '\\n ' +\n((__t = (err.message)) == null ? '' : __t) +\n'\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (!ctx.label.hidden) { ;\n__p += '\\n
\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n\\n ';\n if (ctx.label.hidden && ctx.label.className && ctx.component.validate.required) { ;\n__p += '\\n
\\n \\n
\\n ';\n } ;\n__p += '\\n\\n
\\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n
\\n
\\n\\n';\n if (ctx.component.description) { ;\n__p += '\\n
' +\n((__t = (ctx.t(ctx.component.description, { _userInput: true }))) == null ? '' : __t) +\n'
\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (!ctx.label.hidden && ctx.label.labelPosition !== 'bottom') { ;\n__p += '\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n\\n';\n if (ctx.label.hidden && ctx.label.className && ctx.component.validate.required) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n\\n' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n';\n if (!ctx.label.hidden && ctx.label.labelPosition === 'bottom') { ;\n__p += '\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n';\n if (ctx.component.description) { ;\n__p += '\\n
' +\n((__t = (ctx.t(ctx.component.description, { _userInput: true }))) == null ? '' : __t) +\n'
\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar align_ejs_1 = require(\"./align.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { align: align_ejs_1.default, form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (!ctx.self.imageUpload) { ;\n__p += '\\n
    \\n
  • \\n
    \\n ';\n if (!ctx.disabled) { ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n
    \\n
    ' +\n((__t = (ctx.t('Size'))) == null ? '' : __t) +\n'
    \\n ';\n if (ctx.self.hasTypes) { ;\n__p += '\\n
    ' +\n((__t = (ctx.t('Type'))) == null ? '' : __t) +\n'
    \\n ';\n } ;\n__p += '\\n
    \\n
  • \\n ';\n ctx.files.forEach(function(file) { ;\n__p += '\\n
  • \\n
    \\n ';\n if (!ctx.disabled) { ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n
    ' +\n((__t = (file.originalName || file.name)) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n
    \\n
    ' +\n((__t = (ctx.fileSize(file.size))) == null ? '' : __t) +\n'
    \\n ';\n if (ctx.self.hasTypes && !ctx.disabled) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.self.hasTypes && ctx.disabled) { ;\n__p += '\\n
    ' +\n((__t = (file.fileType)) == null ? '' : __t) +\n'
    \\n ';\n } ;\n__p += '\\n
    \\n
  • \\n ';\n }) ;\n__p += '\\n
\\n';\n } else { ;\n__p += '\\n
\\n ';\n ctx.files.forEach(function(file) { ;\n__p += '\\n
\\n \\n \"'\\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n
\\n ';\n }) ;\n__p += '\\n
\\n';\n } ;\n__p += '\\n';\n if (!ctx.disabled && (ctx.component.multiple || !ctx.files.length)) { ;\n__p += '\\n ';\n if (ctx.self.useWebViewCamera) { ;\n__p += '\\n
\\n \\n \\n
\\n ';\n } else if (!ctx.self.cameraMode) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.t('Drop files to attach,'))) == null ? '' : __t) +\n'\\n ';\n if (ctx.self.imageUpload && ctx.component.webcam) { ;\n__p += '\\n ' +\n((__t = (ctx.t('Use Camera,'))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ' +\n((__t = (ctx.t('or'))) == null ? '' : __t) +\n' ' +\n((__t = (ctx.t('browse'))) == null ? '' : __t) +\n'\\n
\\n ';\n } else { ;\n__p += '\\n
\\n \\n
\\n \\n \\n ';\n } ;\n__p += '\\n';\n } ;\n__p += '\\n';\n ctx.statuses.forEach(function(status) { ;\n__p += '\\n
\\n
\\n
' +\n((__t = (status.originalName)) == null ? '' : __t) +\n'
\\n
' +\n((__t = (ctx.fileSize(status.size))) == null ? '' : __t) +\n'
\\n
\\n
\\n
\\n ';\n if (status.status === 'progress') { ;\n__p += '\\n
\\n
\\n ' +\n((__t = (status.progress)) == null ? '' : __t) +\n'% ' +\n((__t = (ctx.t('Complete'))) == null ? '' : __t) +\n'\\n
\\n
\\n ';\n } else if (status.status === 'error'){ ;\n__p += '\\n
' +\n((__t = (ctx.t(status.message))) == null ? '' : __t) +\n'
\\n ';\n } else { ;\n__p += '\\n
' +\n((__t = (ctx.t(status.message))) == null ? '' : __t) +\n'
\\n ';\n } ;\n__p += '\\n
\\n
\\n
\\n';\n }) ;\n__p += '\\n';\n if (!ctx.component.storage || ctx.support.hasWarning) { ;\n__p += '\\n
\\n ';\n if (!ctx.component.storage) { ;\n__p += '\\n

' +\n((__t = (ctx.t('No storage has been set for this field. File uploads are disabled until storage is set up.'))) == null ? '' : __t) +\n'

\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.filereader) { ;\n__p += '\\n

' +\n((__t = (ctx.t('File API & FileReader API not supported.'))) == null ? '' : __t) +\n'

\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.formdata) { ;\n__p += '\\n

' +\n((__t = (ctx.t(\"XHR2's FormData is not supported.\"))) == null ? '' : __t) +\n'

\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.progress) { ;\n__p += '\\n

' +\n((__t = (ctx.t(\"XHR2's upload progress isn't supported.\"))) == null ? '' : __t) +\n'

\\n ';\n } ;\n__p += '\\n
\\n';\n } ;\n\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '' +\n((__t = (ctx.content)) == null ? '' : __t) +\n'\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (iconset, name, spinning) {\n if (iconset === 'fa') {\n switch (name) {\n case 'save':\n name = 'download';\n break;\n case 'zoom-in':\n name = 'search-plus';\n break;\n case 'zoom-out':\n name = 'search-minus';\n break;\n case 'question-sign':\n name = 'question-circle';\n break;\n case 'remove-circle':\n name = 'times-circle-o';\n break;\n case 'new-window':\n name = 'window-restore';\n break;\n case 'move':\n name = 'arrows';\n break;\n }\n }\n return spinning ? iconset + \" \" + iconset + \"-\" + name + \" \" + iconset + \"-spin\" : iconset + \" \" + iconset + \"-\" + name;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar resize_observer_polyfill_1 = require(\"resize-observer-polyfill\");\nvar builder_1 = require(\"./builder\");\nvar builderComponent_1 = require(\"./builderComponent\");\nvar builderComponents_1 = require(\"./builderComponents\");\nvar builderEditForm_1 = require(\"./builderEditForm\");\nvar builderPlaceholder_1 = require(\"./builderPlaceholder\");\nvar builderSidebar_1 = require(\"./builderSidebar\");\nvar builderSidebarGroup_1 = require(\"./builderSidebarGroup\");\nvar columns_1 = require(\"./columns\");\nvar cssClasses_1 = require(\"./cssClasses\");\nvar datagrid_1 = require(\"./datagrid\");\nvar day_1 = require(\"./day\");\nvar dialog_1 = require(\"./dialog\");\nvar editgrid_1 = require(\"./editgrid\");\nvar field_1 = require(\"./field\");\nvar file_1 = require(\"./file\");\nvar icon_1 = require(\"./icon\");\nvar iconClass_1 = require(\"./iconClass\");\nvar input_1 = require(\"./input\");\nvar label_1 = require(\"./label\");\nvar message_1 = require(\"./message\");\nvar modaldialog_1 = require(\"./modaldialog\");\nvar modaledit_1 = require(\"./modaledit\");\nvar multiValueRow_1 = require(\"./multiValueRow\");\nvar multiValueTable_1 = require(\"./multiValueTable\");\nvar panel_1 = require(\"./panel\");\nvar radio_1 = require(\"./radio\");\nvar resourceAdd_1 = require(\"./resourceAdd\");\nvar signature_1 = require(\"./signature\");\nvar survey_1 = require(\"./survey\");\nvar tab_1 = require(\"./tab\");\nvar table_1 = require(\"./table\");\nvar well_1 = require(\"./well\");\nvar wizard_1 = require(\"./wizard\");\nvar wizardHeader_1 = require(\"./wizardHeader\");\nvar wizardHeaderClassic_1 = require(\"./wizardHeaderClassic\");\nvar wizardHeaderVertical_1 = require(\"./wizardHeaderVertical\");\nvar wizardNav_1 = require(\"./wizardNav\");\nvar alert_1 = require(\"./alert\");\nvar errorsList_1 = require(\"./errorsList\");\nexports.default = {\n transform: function (type, text) {\n if (!text) {\n return text;\n }\n switch (type) {\n case 'class':\n return this.cssClasses.hasOwnProperty(text.toString()) ? this.cssClasses[text.toString()] : text;\n }\n return text;\n },\n handleBuilderSidebarScroll: function (builder) {\n if (builder.scrollResizeObserver) {\n builder.scrollResizeObserver.disconnect();\n }\n builder.scrollResizeObserver = new resize_observer_polyfill_1.default(function () {\n setTimeout(function () {\n var _a = builder.refs, form = _a.form, sidebar = _a.sidebar;\n var formHeight = form && form.parentNode && form.parentNode.clientHeight;\n var sidebarHeight = sidebar && sidebar.clientHeight;\n var style = sidebar && sidebar.parentNode && sidebar.parentNode.style;\n if (style && formHeight && sidebarHeight) {\n style.height = Math.max(sidebarHeight + 20, formHeight) + \"px\";\n }\n });\n });\n builder.scrollResizeObserver.observe(builder.refs.form);\n builder.scrollResizeObserver.observe(builder.refs.sidebar);\n },\n clearBuilderSidebarScroll: function (builder) {\n if (builder.scrollResizeObserver) {\n builder.scrollResizeObserver.disconnect();\n builder.scrollResizeObserver = null;\n }\n },\n defaultIconset: 'glyphicon',\n iconClass: iconClass_1.default,\n cssClasses: cssClasses_1.default,\n builder: builder_1.default,\n builderComponent: builderComponent_1.default,\n builderComponents: builderComponents_1.default,\n builderEditForm: builderEditForm_1.default,\n builderPlaceholder: builderPlaceholder_1.default,\n builderSidebar: builderSidebar_1.default,\n builderSidebarGroup: builderSidebarGroup_1.default,\n columns: columns_1.default,\n datagrid: datagrid_1.default,\n day: day_1.default,\n dialog: dialog_1.default,\n editgrid: editgrid_1.default,\n field: field_1.default,\n file: file_1.default,\n icon: icon_1.default,\n input: input_1.default,\n label: label_1.default,\n message: message_1.default,\n modaldialog: modaldialog_1.default,\n modaledit: modaledit_1.default,\n multiValueRow: multiValueRow_1.default,\n multiValueTable: multiValueTable_1.default,\n panel: panel_1.default,\n radio: radio_1.default,\n resourceAdd: resourceAdd_1.default,\n signature: signature_1.default,\n survey: survey_1.default,\n tab: tab_1.default,\n table: table_1.default,\n well: well_1.default,\n wizard: wizard_1.default,\n wizardHeader: wizardHeader_1.default,\n wizardHeaderClassic: wizardHeaderClassic_1.default,\n wizardHeaderVertical: wizardHeaderVertical_1.default,\n wizardNav: wizardNav_1.default,\n errorsList: errorsList_1.default,\n alert: alert_1.default\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (ctx.prefix || ctx.suffix) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n ';\n if (ctx.prefix) { ;\n__p += '\\n
\\n ';\n if(ctx.prefix instanceof HTMLElement){ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.prefix.outerHTML, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n } else{ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.prefix, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.component.editor && !ctx.component.wysiwyg) { ;\n__p += '\\n <' +\n((__t = (ctx.input.type)) == null ? '' : __t) +\n'\\n ref=\"' +\n((__t = (ctx.input.ref ? ctx.input.ref : 'input')) == null ? '' : __t) +\n'\"\\n ';\n for (var attr in ctx.input.attr) { ;\n__p += '\\n ' +\n((__t = (attr)) == null ? '' : __t) +\n'=\"' +\n((__t = (ctx.input.attr[attr])) == null ? '' : __t) +\n'\"\\n ';\n } ;\n__p += '\\n id=\"' +\n((__t = (ctx.instance.id)) == null ? '' : __t) +\n'-' +\n((__t = (ctx.component.key)) == null ? '' : __t) +\n'\"\\n >' +\n((__t = (ctx.input.content)) == null ? '' : __t) +\n'\\n ';\n if (ctx.hasValueMaskInput) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n';\n } ;\n__p += '\\n';\n if (ctx.component.editor || ctx.component.wysiwyg) { ;\n__p += '\\n
\\n';\n } ;\n__p += '\\n';\n if (ctx.suffix) { ;\n__p += '\\n
\\n ';\n if(ctx.suffix instanceof HTMLElement){ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.suffix.outerHTML, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n } else{ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.suffix, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n
\\n';\n } ;\n__p += '\\n';\n if (ctx.prefix || ctx.suffix) { ;\n__p += '\\n
\\n';\n } ;\n__p += '\\n';\n if (ctx.component.showCharCount) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\n if (ctx.component.showWordCount) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
';\n if (ctx.value) { ;\n__p +=\n((__t = (ctx.value)) == null ? '' : __t);\n } else { ;\n__p += '-';\n } ;\n__p += '
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (!ctx.label.hidden) { ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.component.label, { _userInput: true }) )) == null ? '' : __t) +\n'\\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n } ;\n__p += '\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '

' +\n((__t = (ctx.message)) == null ? '' : __t) +\n'

\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n
\\n \\n ' +\n((__t = (ctx.t('Close'))) == null ? '' : __t) +\n'\\n \\n
\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n \\n \\n \\n
' +\n((__t = (ctx.content)) == null ? '' : __t) +\n'
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n \\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n \\n \\n ';\n } ;\n__p += '\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ' +\n((__t = (ctx.rows)) == null ? '' : __t) +\n'\\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n \\n \\n ';\n } ;\n__p += '\\n \\n
\\n \\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (!ctx.component.hideLabel || ctx.builder || ctx.component.collapsible || ctx.component.tooltip) { ;\n__p += '\\n
\\n

\\n ';\n if (ctx.component.collapsible) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.component.hideLabel || ctx.builder) { ;\n__p += '\\n ' +\n((__t = (ctx.t(ctx.component.title, { _userInput: true }))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

\\n
\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.collapsed || ctx.builder) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n ctx.values.forEach(function(item) { ;\n__p += '\\n
\\n \\n
\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n var filtered = ctx.values.filter(function(item) {return ctx.value === item.value || (typeof ctx.value === 'object' && ctx.value.hasOwnProperty(item.value) && ctx.value[item.value])}).map(function(item) { return ctx.t(item.label, { _userInput: true })}).join(', ') ;\n__p += '\\n ' +\n((__t = (filtered)) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n
\\n \\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p +=\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n\\n\\n \\n \\n \\n \\n ';\n if (ctx.required) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n\\n';\n if (ctx.component.footer) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.t(ctx.component.footer, { _userInput: true }))) == null ? '' : __t) +\n'\\n
\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n \\n \\n ';\n ctx.component.values.forEach(function(value) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n \\n ';\n ctx.component.questions.forEach(function(question) { ;\n__p += '\\n \\n \\n ';\n ctx.component.values.forEach(function(value) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
\\n ' +\n((__t = (ctx.t(value.label))) == null ? '' : __t) +\n'\\n ';\n if (value.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n ' +\n((__t = (ctx.t(question.label))) == null ? '' : __t) +\n'\\n ';\n if (question.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n \\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ';\n ctx.component.questions.forEach(function(question) { ;\n__p += '\\n \\n \\n \\n \\n ';\n }) ;\n__p += '\\n \\n
' +\n((__t = (ctx.t(question.label))) == null ? '' : __t) +\n'\\n ';\n ctx.component.values.forEach(function(item) { ;\n__p += '\\n ';\n if (ctx.value && ctx.value.hasOwnProperty(question.value) && ctx.value[question.value] === item.value) { ;\n__p += '\\n ' +\n((__t = (ctx.t(item.label))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n ctx.component.components.forEach(function(tab, index) { ;\n__p += '\\n
\\n
\\n

' +\n((__t = ( ctx.t(tab.label, { _userInput: true }) )) == null ? '' : __t) +\n'

\\n
\\n
\\n ' +\n((__t = ( ctx.tabComponents[index] )) == null ? '' : __t) +\n'\\n
\\n
\\n';\n }) ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n \\n
\\n ';\n ctx.component.components.forEach(function(tab, index) { ;\n__p += '\\n
' +\n((__t = (ctx.tabComponents[index])) == null ? '' : __t) +\n'
\\n ';\n }) ;\n__p += '\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar flat_ejs_1 = require(\"./flat.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { flat: flat_ejs_1.default, form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (ctx.component.header && ctx.component.header.length > 0) { ;\n__p += '\\n \\n \\n ';\n ctx.component.header.forEach(function(header) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n ctx.tableComponents.forEach(function(row, rowIndex) { ;\n__p += '\\n \\n ';\n row.forEach(function(column, colIndex) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
' +\n((__t = (ctx.t(header, { _userInput: true }))) == null ? '' : __t) +\n'
\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
' +\n((__t = ( ctx.t(ctx.component.title, { _userInput: true }) )) == null ? '' : __t) +\n'
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n ';\n if (ctx.wizardHeaderType === 'wizardHeaderVertical') { ;\n__p += '\\n
\\n
\\n ' +\n((__t = ( ctx.wizardHeader )) == null ? '' : __t) +\n'\\n
\\n
\\n ' +\n((__t = (ctx.components)) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n ' +\n((__t = ( ctx.wizardNav )) == null ? '' : __t) +\n'\\n
\\n ';\n } else { ;\n__p += ' \\n ' +\n((__t = ( ctx.wizardHeader )) == null ? '' : __t) +\n'\\n
\\n ' +\n((__t = (ctx.components)) == null ? '' : __t) +\n'\\n
\\n ' +\n((__t = ( ctx.wizardNav )) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += ' \\n
\\n
';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar builder_ejs_1 = require(\"./builder.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default, builder: builder_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n if (ctx.buttons.cancel) { ;\n__p += '\\n
  • \\n \\n
  • \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.previous) { ;\n__p += '\\n
  • \\n \\n
  • \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.next) { ;\n__p += '\\n
  • \\n \\n
  • \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.submit) { ;\n__p += '\\n
  • \\n \\n
  • \\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bootstrap3_1 = require(\"./bootstrap3\");\nexports.default = {\n bootstrap3: bootstrap3_1.default,\n};\n","/*! @formio/choices.js v10.2.0 | © 2023 Josh Johnson | https://github.com/jshjohnson/Choices#readme */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Choices\"] = factory();\n\telse\n\t\troot[\"Choices\"] = factory();\n})(window, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 282:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.clearChoices = exports.activateChoices = exports.filterChoices = exports.addChoice = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addChoice = function (_a) {\n var value = _a.value,\n label = _a.label,\n id = _a.id,\n groupId = _a.groupId,\n disabled = _a.disabled,\n elementId = _a.elementId,\n customProperties = _a.customProperties,\n placeholder = _a.placeholder,\n keyCode = _a.keyCode;\n return {\n type: constants_1.ACTION_TYPES.ADD_CHOICE,\n value: value,\n label: label,\n id: id,\n groupId: groupId,\n disabled: disabled,\n elementId: elementId,\n customProperties: customProperties,\n placeholder: placeholder,\n keyCode: keyCode\n };\n};\nexports.addChoice = addChoice;\nvar filterChoices = function (results) {\n return {\n type: constants_1.ACTION_TYPES.FILTER_CHOICES,\n results: results\n };\n};\nexports.filterChoices = filterChoices;\nvar activateChoices = function (active) {\n if (active === void 0) {\n active = true;\n }\n return {\n type: constants_1.ACTION_TYPES.ACTIVATE_CHOICES,\n active: active\n };\n};\nexports.activateChoices = activateChoices;\nvar clearChoices = function () {\n return {\n type: constants_1.ACTION_TYPES.CLEAR_CHOICES\n };\n};\nexports.clearChoices = clearChoices;\n\n/***/ }),\n\n/***/ 783:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.addGroup = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addGroup = function (_a) {\n var value = _a.value,\n id = _a.id,\n active = _a.active,\n disabled = _a.disabled;\n return {\n type: constants_1.ACTION_TYPES.ADD_GROUP,\n value: value,\n id: id,\n active: active,\n disabled: disabled\n };\n};\nexports.addGroup = addGroup;\n\n/***/ }),\n\n/***/ 464:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.highlightItem = exports.removeItem = exports.addItem = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addItem = function (_a) {\n var value = _a.value,\n label = _a.label,\n id = _a.id,\n choiceId = _a.choiceId,\n groupId = _a.groupId,\n customProperties = _a.customProperties,\n placeholder = _a.placeholder,\n keyCode = _a.keyCode;\n return {\n type: constants_1.ACTION_TYPES.ADD_ITEM,\n value: value,\n label: label,\n id: id,\n choiceId: choiceId,\n groupId: groupId,\n customProperties: customProperties,\n placeholder: placeholder,\n keyCode: keyCode\n };\n};\nexports.addItem = addItem;\nvar removeItem = function (id, choiceId) {\n return {\n type: constants_1.ACTION_TYPES.REMOVE_ITEM,\n id: id,\n choiceId: choiceId\n };\n};\nexports.removeItem = removeItem;\nvar highlightItem = function (id, highlighted) {\n return {\n type: constants_1.ACTION_TYPES.HIGHLIGHT_ITEM,\n id: id,\n highlighted: highlighted\n };\n};\nexports.highlightItem = highlightItem;\n\n/***/ }),\n\n/***/ 137:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setIsLoading = exports.resetTo = exports.clearAll = void 0;\nvar constants_1 = __webpack_require__(883);\nvar clearAll = function () {\n return {\n type: constants_1.ACTION_TYPES.CLEAR_ALL\n };\n};\nexports.clearAll = clearAll;\nvar resetTo = function (state) {\n return {\n type: constants_1.ACTION_TYPES.RESET_TO,\n state: state\n };\n};\nexports.resetTo = resetTo;\nvar setIsLoading = function (isLoading) {\n return {\n type: constants_1.ACTION_TYPES.SET_IS_LOADING,\n isLoading: isLoading\n };\n};\nexports.setIsLoading = setIsLoading;\n\n/***/ }),\n\n/***/ 373:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar deepmerge_1 = __importDefault(__webpack_require__(996));\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar fuse_js_1 = __importDefault(__webpack_require__(221));\nvar choices_1 = __webpack_require__(282);\nvar groups_1 = __webpack_require__(783);\nvar items_1 = __webpack_require__(464);\nvar misc_1 = __webpack_require__(137);\nvar components_1 = __webpack_require__(520);\nvar constants_1 = __webpack_require__(883);\nvar defaults_1 = __webpack_require__(789);\nvar utils_1 = __webpack_require__(799);\nvar reducers_1 = __webpack_require__(655);\nvar store_1 = __importDefault(__webpack_require__(744));\nvar templates_1 = __importDefault(__webpack_require__(686));\n/** @see {@link http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c} */\nvar IS_IE11 = '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;\nvar USER_DEFAULTS = {};\n/**\n * Choices\n * @author Josh Johnson\n */\nvar Choices = /** @class */function () {\n function Choices(element, userConfig) {\n if (element === void 0) {\n element = '[data-choice]';\n }\n if (userConfig === void 0) {\n userConfig = {};\n }\n var _this = this;\n if (userConfig.allowHTML === undefined) {\n console.warn('Deprecation warning: allowHTML will default to false in a future release. To render HTML in Choices, you will need to set it to true. Setting allowHTML will suppress this message.');\n }\n this.config = deepmerge_1.default.all([defaults_1.DEFAULT_CONFIG, Choices.defaults.options, userConfig],\n // When merging array configs, replace with a copy of the userConfig array,\n // instead of concatenating with the default array\n {\n arrayMerge: function (_, sourceArray) {\n return __spreadArray([], sourceArray, true);\n }\n });\n // Restore the shadowRoot if provided. deeperge converts it into an empty object.\n if (userConfig.shadowRoot) {\n this.config.shadowRoot = userConfig.shadowRoot;\n }\n var invalidConfigOptions = (0, utils_1.diff)(this.config, defaults_1.DEFAULT_CONFIG);\n if (invalidConfigOptions.length) {\n console.warn('Unknown config option(s) passed', invalidConfigOptions.join(', '));\n }\n var passedElement = typeof element === 'string' ? document.querySelector(element) : element;\n if (!(passedElement instanceof HTMLInputElement || passedElement instanceof HTMLSelectElement)) {\n throw TypeError('Expected one of the following types text|select-one|select-multiple');\n }\n this._isTextElement = passedElement.type === constants_1.TEXT_TYPE;\n this._isSelectOneElement = passedElement.type === constants_1.SELECT_ONE_TYPE;\n this._isSelectMultipleElement = passedElement.type === constants_1.SELECT_MULTIPLE_TYPE;\n this._isSelectElement = this._isSelectOneElement || this._isSelectMultipleElement;\n this.config.searchEnabled = this._isSelectMultipleElement || this.config.searchEnabled;\n if (!['auto', 'always'].includes(\"\".concat(this.config.renderSelectedChoices))) {\n this.config.renderSelectedChoices = 'auto';\n }\n if (userConfig.addItemFilter && typeof userConfig.addItemFilter !== 'function') {\n var re = userConfig.addItemFilter instanceof RegExp ? userConfig.addItemFilter : new RegExp(userConfig.addItemFilter);\n this.config.addItemFilter = re.test.bind(re);\n }\n if (this._isTextElement) {\n this.passedElement = new components_1.WrappedInput({\n element: passedElement,\n classNames: this.config.classNames,\n delimiter: this.config.delimiter\n });\n } else {\n this.passedElement = new components_1.WrappedSelect({\n element: passedElement,\n classNames: this.config.classNames,\n template: function (data) {\n return _this._templates.option(data);\n }\n });\n }\n this.initialised = false;\n this._store = new store_1.default();\n this._initialState = reducers_1.defaultState;\n this._currentState = reducers_1.defaultState;\n this._prevState = reducers_1.defaultState;\n this._currentValue = '';\n this._canSearch = !!this.config.searchEnabled;\n this._isScrollingOnIe = false;\n this._highlightPosition = 0;\n this._wasTap = true;\n this._placeholderValue = this._generatePlaceholderValue();\n this._baseId = (0, utils_1.generateId)(this.passedElement.element, 'choices-');\n /**\n * setting direction in cases where it's explicitly set on passedElement\n * or when calculated direction is different from the document\n */\n this._direction = this.passedElement.dir;\n if (!this._direction) {\n var elementDirection = window.getComputedStyle(this.passedElement.element).direction;\n var documentDirection = window.getComputedStyle(document.documentElement).direction;\n if (elementDirection !== documentDirection) {\n this._direction = elementDirection;\n }\n }\n this._idNames = {\n itemChoice: 'item-choice'\n };\n if (this._isSelectElement) {\n // Assign preset groups from passed element\n this._presetGroups = this.passedElement.optionGroups;\n // Assign preset options from passed element\n this._presetOptions = this.passedElement.options;\n }\n // Assign preset choices from passed object\n this._presetChoices = this.config.choices;\n // Assign preset items from passed object first\n this._presetItems = this.config.items;\n // Add any values passed from attribute\n if (this.passedElement.value && this._isTextElement) {\n var splitValues = this.passedElement.value.split(this.config.delimiter);\n this._presetItems = this._presetItems.concat(splitValues);\n }\n // Create array of choices from option elements\n if (this.passedElement.options) {\n this.passedElement.options.forEach(function (option) {\n _this._presetChoices.push({\n value: option.value,\n label: option.innerHTML,\n selected: !!option.selected,\n disabled: option.disabled || option.parentNode.disabled,\n placeholder: option.value === '' || option.hasAttribute('placeholder'),\n customProperties: (0, utils_1.parseCustomProperties)(option.dataset.customProperties)\n });\n });\n }\n this._render = this._render.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this._onKeyUp = this._onKeyUp.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onTouchMove = this._onTouchMove.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onMouseOver = this._onMouseOver.bind(this);\n this._onFormReset = this._onFormReset.bind(this);\n this._onSelectKey = this._onSelectKey.bind(this);\n this._onEnterKey = this._onEnterKey.bind(this);\n this._onEscapeKey = this._onEscapeKey.bind(this);\n this._onDirectionKey = this._onDirectionKey.bind(this);\n this._onDeleteKey = this._onDeleteKey.bind(this);\n // If element has already been initialised with Choices, fail silently\n if (this.passedElement.isActive) {\n if (!this.config.silent) {\n console.warn('Trying to initialise Choices on element already initialised', {\n element: element\n });\n }\n this.initialised = true;\n return;\n }\n // Let's go\n this.init();\n }\n Object.defineProperty(Choices, \"defaults\", {\n get: function () {\n return Object.preventExtensions({\n get options() {\n return USER_DEFAULTS;\n },\n get templates() {\n return templates_1.default;\n }\n });\n },\n enumerable: false,\n configurable: true\n });\n Choices.prototype.init = function () {\n if (this.initialised) {\n return;\n }\n this._createTemplates();\n this._createElements();\n this._createStructure();\n this._store.subscribe(this._render);\n this._render();\n this._addEventListeners();\n var shouldDisable = !this.config.addItems || this.passedElement.element.hasAttribute('disabled');\n if (shouldDisable) {\n this.disable();\n }\n this.initialised = true;\n var callbackOnInit = this.config.callbackOnInit;\n // Run callback if it is a function\n if (callbackOnInit && typeof callbackOnInit === 'function') {\n callbackOnInit.call(this);\n }\n };\n Choices.prototype.destroy = function () {\n if (!this.initialised) {\n return;\n }\n this._removeEventListeners();\n this.passedElement.reveal();\n this.containerOuter.unwrap(this.passedElement.element);\n this.clearStore();\n if (this._isSelectElement) {\n this.passedElement.options = this._presetOptions;\n }\n this._templates = templates_1.default;\n this.initialised = false;\n };\n Choices.prototype.enable = function () {\n if (this.passedElement.isDisabled) {\n this.passedElement.enable();\n }\n if (this.containerOuter.isDisabled) {\n this._addEventListeners();\n this.input.enable();\n this.containerOuter.enable();\n }\n return this;\n };\n Choices.prototype.disable = function () {\n if (!this.passedElement.isDisabled) {\n this.passedElement.disable();\n }\n if (!this.containerOuter.isDisabled) {\n this._removeEventListeners();\n this.input.disable();\n this.containerOuter.disable();\n }\n return this;\n };\n Choices.prototype.highlightItem = function (item, runEvent) {\n if (runEvent === void 0) {\n runEvent = true;\n }\n if (!item || !item.id) {\n return this;\n }\n var id = item.id,\n _a = item.groupId,\n groupId = _a === void 0 ? -1 : _a,\n _b = item.value,\n value = _b === void 0 ? '' : _b,\n _c = item.label,\n label = _c === void 0 ? '' : _c;\n var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n this._store.dispatch((0, items_1.highlightItem)(id, true));\n if (runEvent) {\n this.passedElement.triggerEvent(constants_1.EVENTS.highlightItem, {\n id: id,\n value: value,\n label: label,\n groupValue: group && group.value ? group.value : null\n });\n }\n return this;\n };\n Choices.prototype.unhighlightItem = function (item) {\n if (!item || !item.id) {\n return this;\n }\n var id = item.id,\n _a = item.groupId,\n groupId = _a === void 0 ? -1 : _a,\n _b = item.value,\n value = _b === void 0 ? '' : _b,\n _c = item.label,\n label = _c === void 0 ? '' : _c;\n var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n this._store.dispatch((0, items_1.highlightItem)(id, false));\n this.passedElement.triggerEvent(constants_1.EVENTS.highlightItem, {\n id: id,\n value: value,\n label: label,\n groupValue: group && group.value ? group.value : null\n });\n return this;\n };\n Choices.prototype.highlightAll = function () {\n var _this = this;\n this._store.items.forEach(function (item) {\n return _this.highlightItem(item);\n });\n return this;\n };\n Choices.prototype.unhighlightAll = function () {\n var _this = this;\n this._store.items.forEach(function (item) {\n return _this.unhighlightItem(item);\n });\n return this;\n };\n Choices.prototype.removeActiveItemsByValue = function (value) {\n var _this = this;\n this._store.activeItems.filter(function (item) {\n return item.value === value;\n }).forEach(function (item) {\n return _this._removeItem(item);\n });\n return this;\n };\n Choices.prototype.removeActiveItems = function (excludedId) {\n var _this = this;\n this._store.activeItems.filter(function (_a) {\n var id = _a.id;\n return id !== excludedId;\n }).forEach(function (item) {\n return _this._removeItem(item);\n });\n return this;\n };\n Choices.prototype.removeHighlightedItems = function (runEvent) {\n var _this = this;\n if (runEvent === void 0) {\n runEvent = false;\n }\n this._store.highlightedActiveItems.forEach(function (item) {\n _this._removeItem(item);\n // If this action was performed by the user\n // trigger the event\n if (runEvent) {\n _this._triggerChange(item.value);\n }\n });\n return this;\n };\n Choices.prototype.showDropdown = function (preventInputFocus) {\n var _this = this;\n if (this.dropdown.isActive) {\n return this;\n }\n requestAnimationFrame(function () {\n _this.dropdown.show();\n _this.containerOuter.open(_this.dropdown.distanceFromTopWindow);\n if (!preventInputFocus && _this._canSearch) {\n _this.input.focus();\n }\n _this.passedElement.triggerEvent(constants_1.EVENTS.showDropdown, {});\n });\n return this;\n };\n Choices.prototype.hideDropdown = function (preventInputBlur) {\n var _this = this;\n if (!this.dropdown.isActive) {\n return this;\n }\n requestAnimationFrame(function () {\n _this.dropdown.hide();\n _this.containerOuter.close();\n if (!preventInputBlur && _this._canSearch) {\n _this.input.removeActiveDescendant();\n _this.input.blur();\n }\n _this.passedElement.triggerEvent(constants_1.EVENTS.hideDropdown, {});\n });\n return this;\n };\n Choices.prototype.getValue = function (valueOnly) {\n if (valueOnly === void 0) {\n valueOnly = false;\n }\n var values = this._store.activeItems.reduce(function (selectedItems, item) {\n var itemValue = valueOnly ? item.value : item;\n selectedItems.push(itemValue);\n return selectedItems;\n }, []);\n return this._isSelectOneElement ? values[0] : values;\n };\n Choices.prototype.setValue = function (items) {\n var _this = this;\n if (!this.initialised) {\n return this;\n }\n items.forEach(function (value) {\n return _this._setChoiceOrItem(value);\n });\n return this;\n };\n Choices.prototype.setChoiceByValue = function (value) {\n var _this = this;\n if (!this.initialised || this._isTextElement) {\n return this;\n }\n // If only one value has been passed, convert to array\n var choiceValue = Array.isArray(value) ? value : [value];\n // Loop through each value and\n choiceValue.forEach(function (val) {\n return _this._findAndSelectChoiceByValue(val);\n });\n return this;\n };\n /**\n * Set choices of select input via an array of objects (or function that returns array of object or promise of it),\n * a value field name and a label field name.\n * This behaves the same as passing items via the choices option but can be called after initialising Choices.\n * This can also be used to add groups of choices (see example 2); Optionally pass a true `replaceChoices` value to remove any existing choices.\n * Optionally pass a `customProperties` object to add additional data to your choices (useful when searching/filtering etc).\n *\n * **Input types affected:** select-one, select-multiple\n *\n * @example\n * ```js\n * const example = new Choices(element);\n *\n * example.setChoices([\n * {value: 'One', label: 'Label One', disabled: true},\n * {value: 'Two', label: 'Label Two', selected: true},\n * {value: 'Three', label: 'Label Three'},\n * ], 'value', 'label', false);\n * ```\n *\n * @example\n * ```js\n * const example = new Choices(element);\n *\n * example.setChoices(async () => {\n * try {\n * const items = await fetch('/items');\n * return items.json()\n * } catch(err) {\n * console.error(err)\n * }\n * });\n * ```\n *\n * @example\n * ```js\n * const example = new Choices(element);\n *\n * example.setChoices([{\n * label: 'Group one',\n * id: 1,\n * disabled: false,\n * choices: [\n * {value: 'Child One', label: 'Child One', selected: true},\n * {value: 'Child Two', label: 'Child Two', disabled: true},\n * {value: 'Child Three', label: 'Child Three'},\n * ]\n * },\n * {\n * label: 'Group two',\n * id: 2,\n * disabled: false,\n * choices: [\n * {value: 'Child Four', label: 'Child Four', disabled: true},\n * {value: 'Child Five', label: 'Child Five'},\n * {value: 'Child Six', label: 'Child Six', customProperties: {\n * description: 'Custom description about child six',\n * random: 'Another random custom property'\n * }},\n * ]\n * }], 'value', 'label', false);\n * ```\n */\n Choices.prototype.setChoices = function (choicesArrayOrFetcher, value, label, replaceChoices) {\n var _this = this;\n if (choicesArrayOrFetcher === void 0) {\n choicesArrayOrFetcher = [];\n }\n if (value === void 0) {\n value = 'value';\n }\n if (label === void 0) {\n label = 'label';\n }\n if (replaceChoices === void 0) {\n replaceChoices = false;\n }\n if (!this.initialised) {\n throw new ReferenceError(\"setChoices was called on a non-initialized instance of Choices\");\n }\n if (!this._isSelectElement) {\n throw new TypeError(\"setChoices can't be used with INPUT based Choices\");\n }\n if (typeof value !== 'string' || !value) {\n throw new TypeError(\"value parameter must be a name of 'value' field in passed objects\");\n }\n // Clear choices if needed\n if (replaceChoices) {\n this.clearChoices();\n }\n if (typeof choicesArrayOrFetcher === 'function') {\n // it's a choices fetcher function\n var fetcher_1 = choicesArrayOrFetcher(this);\n if (typeof Promise === 'function' && fetcher_1 instanceof Promise) {\n // that's a promise\n // eslint-disable-next-line no-promise-executor-return\n return new Promise(function (resolve) {\n return requestAnimationFrame(resolve);\n }).then(function () {\n return _this._handleLoadingState(true);\n }).then(function () {\n return fetcher_1;\n }).then(function (data) {\n return _this.setChoices(data, value, label, replaceChoices);\n }).catch(function (err) {\n if (!_this.config.silent) {\n console.error(err);\n }\n }).then(function () {\n return _this._handleLoadingState(false);\n }).then(function () {\n return _this;\n });\n }\n // function returned something else than promise, let's check if it's an array of choices\n if (!Array.isArray(fetcher_1)) {\n throw new TypeError(\".setChoices first argument function must return either array of choices or Promise, got: \".concat(typeof fetcher_1));\n }\n // recursion with results, it's sync and choices were cleared already\n return this.setChoices(fetcher_1, value, label, false);\n }\n if (!Array.isArray(choicesArrayOrFetcher)) {\n throw new TypeError(\".setChoices must be called either with array of choices with a function resulting into Promise of array of choices\");\n }\n this.containerOuter.removeLoadingState();\n this._startLoading();\n choicesArrayOrFetcher.forEach(function (groupOrChoice) {\n if (groupOrChoice.choices) {\n _this._addGroup({\n id: groupOrChoice.id ? parseInt(\"\".concat(groupOrChoice.id), 10) : null,\n group: groupOrChoice,\n valueKey: value,\n labelKey: label\n });\n } else {\n var choice = groupOrChoice;\n _this._addChoice({\n value: choice[value],\n label: choice[label],\n isSelected: !!choice.selected,\n isDisabled: !!choice.disabled,\n placeholder: !!choice.placeholder,\n customProperties: choice.customProperties\n });\n }\n });\n this._stopLoading();\n return this;\n };\n Choices.prototype.clearChoices = function () {\n this._store.dispatch((0, choices_1.clearChoices)());\n return this;\n };\n Choices.prototype.clearStore = function () {\n this._store.dispatch((0, misc_1.clearAll)());\n return this;\n };\n Choices.prototype.clearInput = function () {\n var shouldSetInputWidth = !this._isSelectOneElement;\n this.input.clear(shouldSetInputWidth);\n if (!this._isTextElement && this._canSearch) {\n this._isSearching = false;\n this._store.dispatch((0, choices_1.activateChoices)(true));\n }\n return this;\n };\n Choices.prototype._render = function () {\n if (this._store.isLoading()) {\n return;\n }\n this._currentState = this._store.state;\n var stateChanged = this._currentState.choices !== this._prevState.choices || this._currentState.groups !== this._prevState.groups || this._currentState.items !== this._prevState.items;\n var shouldRenderChoices = this._isSelectElement;\n var shouldRenderItems = this._currentState.items !== this._prevState.items;\n if (!stateChanged) {\n return;\n }\n if (shouldRenderChoices) {\n this._renderChoices();\n }\n if (shouldRenderItems) {\n this._renderItems();\n }\n this._prevState = this._currentState;\n };\n Choices.prototype._renderChoices = function () {\n var _this = this;\n var _a = this._store,\n activeGroups = _a.activeGroups,\n activeChoices = _a.activeChoices;\n var choiceListFragment = document.createDocumentFragment();\n this.choiceList.clear();\n if (this.config.resetScrollPosition) {\n requestAnimationFrame(function () {\n return _this.choiceList.scrollToTop();\n });\n }\n // If we have grouped options\n if (activeGroups.length >= 1 && !this._isSearching) {\n // If we have a placeholder choice along with groups\n var activePlaceholders = activeChoices.filter(function (activeChoice) {\n return activeChoice.placeholder === true && activeChoice.groupId === -1;\n });\n if (activePlaceholders.length >= 1) {\n choiceListFragment = this._createChoicesFragment(activePlaceholders, choiceListFragment);\n }\n choiceListFragment = this._createGroupsFragment(activeGroups, activeChoices, choiceListFragment);\n } else if (activeChoices.length >= 1) {\n choiceListFragment = this._createChoicesFragment(activeChoices, choiceListFragment);\n }\n // If we have choices to show\n if (choiceListFragment.childNodes && choiceListFragment.childNodes.length > 0) {\n var activeItems = this._store.activeItems;\n var canAddItem = this._canAddItem(activeItems, this.input.value);\n // ...and we can select them\n if (canAddItem.response) {\n // ...append them and highlight the first choice\n this.choiceList.append(choiceListFragment);\n this._highlightChoice();\n } else {\n var notice = this._getTemplate('notice', canAddItem.notice);\n this.choiceList.append(notice);\n }\n } else {\n // Otherwise show a notice\n var dropdownItem = void 0;\n var notice = void 0;\n if (this._isSearching) {\n notice = typeof this.config.noResultsText === 'function' ? this.config.noResultsText() : this.config.noResultsText;\n dropdownItem = this._getTemplate('notice', notice, 'no-results');\n } else {\n notice = typeof this.config.noChoicesText === 'function' ? this.config.noChoicesText() : this.config.noChoicesText;\n dropdownItem = this._getTemplate('notice', notice, 'no-choices');\n }\n this.choiceList.append(dropdownItem);\n }\n };\n Choices.prototype._renderItems = function () {\n var activeItems = this._store.activeItems || [];\n this.itemList.clear();\n // Create a fragment to store our list items\n // (so we don't have to update the DOM for each item)\n var itemListFragment = this._createItemsFragment(activeItems);\n // If we have items to add, append them\n if (itemListFragment.childNodes) {\n this.itemList.append(itemListFragment);\n }\n };\n Choices.prototype._createGroupsFragment = function (groups, choices, fragment) {\n var _this = this;\n if (fragment === void 0) {\n fragment = document.createDocumentFragment();\n }\n var getGroupChoices = function (group) {\n return choices.filter(function (choice) {\n if (_this._isSelectOneElement) {\n return choice.groupId === group.id;\n }\n return choice.groupId === group.id && (_this.config.renderSelectedChoices === 'always' || !choice.selected);\n });\n };\n // If sorting is enabled, filter groups\n if (this.config.shouldSort) {\n groups.sort(this.config.sorter);\n }\n groups.forEach(function (group) {\n var groupChoices = getGroupChoices(group);\n if (groupChoices.length >= 1) {\n var dropdownGroup = _this._getTemplate('choiceGroup', group);\n fragment.appendChild(dropdownGroup);\n _this._createChoicesFragment(groupChoices, fragment, true);\n }\n });\n return fragment;\n };\n Choices.prototype._createChoicesFragment = function (choices, fragment, withinGroup) {\n var _this = this;\n if (fragment === void 0) {\n fragment = document.createDocumentFragment();\n }\n if (withinGroup === void 0) {\n withinGroup = false;\n }\n // Create a fragment to store our list items (so we don't have to update the DOM for each item)\n var _a = this.config,\n renderSelectedChoices = _a.renderSelectedChoices,\n searchResultLimit = _a.searchResultLimit,\n renderChoiceLimit = _a.renderChoiceLimit;\n var filter = this._isSearching ? utils_1.sortByScore : this.config.sorter;\n var appendChoice = function (choice) {\n var shouldRender = renderSelectedChoices === 'auto' ? _this._isSelectOneElement || !choice.selected : true;\n if (shouldRender) {\n var dropdownItem = _this._getTemplate('choice', choice, _this.config.itemSelectText);\n fragment.appendChild(dropdownItem);\n }\n };\n var rendererableChoices = choices;\n if (renderSelectedChoices === 'auto' && !this._isSelectOneElement) {\n rendererableChoices = choices.filter(function (choice) {\n return !choice.selected;\n });\n }\n // Split array into placeholders and \"normal\" choices\n var _b = rendererableChoices.reduce(function (acc, choice) {\n if (choice.placeholder) {\n acc.placeholderChoices.push(choice);\n } else {\n acc.normalChoices.push(choice);\n }\n return acc;\n }, {\n placeholderChoices: [],\n normalChoices: []\n }),\n placeholderChoices = _b.placeholderChoices,\n normalChoices = _b.normalChoices;\n // If sorting is enabled or the user is searching, filter choices\n if (this.config.shouldSort || this._isSearching) {\n normalChoices.sort(filter);\n }\n var choiceLimit = rendererableChoices.length;\n // Prepend placeholeder\n var sortedChoices = this._isSelectOneElement ? __spreadArray(__spreadArray([], placeholderChoices, true), normalChoices, true) : normalChoices;\n if (this._isSearching) {\n choiceLimit = searchResultLimit;\n } else if (renderChoiceLimit && renderChoiceLimit > 0 && !withinGroup) {\n choiceLimit = renderChoiceLimit;\n }\n // Add each choice to dropdown within range\n for (var i = 0; i < choiceLimit; i += 1) {\n if (sortedChoices[i]) {\n appendChoice(sortedChoices[i]);\n }\n }\n return fragment;\n };\n Choices.prototype._createItemsFragment = function (items, fragment) {\n var _this = this;\n if (fragment === void 0) {\n fragment = document.createDocumentFragment();\n }\n // Create fragment to add elements to\n var _a = this.config,\n shouldSortItems = _a.shouldSortItems,\n sorter = _a.sorter,\n removeItemButton = _a.removeItemButton;\n // If sorting is enabled, filter items\n if (shouldSortItems && !this._isSelectOneElement) {\n items.sort(sorter);\n }\n if (this._isTextElement) {\n // Update the value of the hidden input\n this.passedElement.value = items.map(function (_a) {\n var value = _a.value;\n return value;\n }).join(this.config.delimiter);\n } else {\n // Update the options of the hidden input\n this.passedElement.options = items;\n }\n var addItemToFragment = function (item) {\n // Create new list element\n var listItem = _this._getTemplate('item', item, removeItemButton);\n // Append it to list\n fragment.appendChild(listItem);\n };\n // Add each list item to list\n items.forEach(addItemToFragment);\n return fragment;\n };\n Choices.prototype._triggerChange = function (value) {\n if (value === undefined || value === null) {\n return;\n }\n this.passedElement.triggerEvent(constants_1.EVENTS.change, {\n value: value\n });\n };\n Choices.prototype._selectPlaceholderChoice = function (placeholderChoice) {\n this._addItem({\n value: placeholderChoice.value,\n label: placeholderChoice.label,\n choiceId: placeholderChoice.id,\n groupId: placeholderChoice.groupId,\n placeholder: placeholderChoice.placeholder\n });\n this._triggerChange(placeholderChoice.value);\n };\n Choices.prototype._handleButtonAction = function (activeItems, element) {\n if (!activeItems || !element || !this.config.removeItems || !this.config.removeItemButton) {\n return;\n }\n var itemId = element.parentNode && element.parentNode.dataset.id;\n var itemToRemove = itemId && activeItems.find(function (item) {\n return item.id === parseInt(itemId, 10);\n });\n if (!itemToRemove) {\n return;\n }\n // Remove item associated with button\n this._removeItem(itemToRemove);\n this._triggerChange(itemToRemove.value);\n if (this._isSelectOneElement && this._store.placeholderChoice) {\n this._selectPlaceholderChoice(this._store.placeholderChoice);\n }\n };\n Choices.prototype._handleItemAction = function (activeItems, element, hasShiftKey) {\n var _this = this;\n if (hasShiftKey === void 0) {\n hasShiftKey = false;\n }\n if (!activeItems || !element || !this.config.removeItems || this._isSelectOneElement) {\n return;\n }\n var passedId = element.dataset.id;\n // We only want to select one item with a click\n // so we deselect any items that aren't the target\n // unless shift is being pressed\n activeItems.forEach(function (item) {\n if (item.id === parseInt(\"\".concat(passedId), 10) && !item.highlighted) {\n _this.highlightItem(item);\n } else if (!hasShiftKey && item.highlighted) {\n _this.unhighlightItem(item);\n }\n });\n // Focus input as without focus, a user cannot do anything with a\n // highlighted item\n this.input.focus();\n };\n Choices.prototype._handleChoiceAction = function (activeItems, element) {\n if (!activeItems || !element) {\n return;\n }\n // If we are clicking on an option\n var id = element.dataset.id;\n var choice = id && this._store.getChoiceById(id);\n if (!choice) {\n return;\n }\n var passedKeyCode = activeItems[0] && activeItems[0].keyCode ? activeItems[0].keyCode : undefined;\n var hasActiveDropdown = this.dropdown.isActive;\n // Update choice keyCode\n choice.keyCode = passedKeyCode;\n this.passedElement.triggerEvent(constants_1.EVENTS.choice, {\n choice: choice\n });\n if (!choice.selected && !choice.disabled) {\n var canAddItem = this._canAddItem(activeItems, choice.value);\n if (canAddItem.response) {\n this._addItem({\n value: choice.value,\n label: choice.label,\n choiceId: choice.id,\n groupId: choice.groupId,\n customProperties: choice.customProperties,\n placeholder: choice.placeholder,\n keyCode: choice.keyCode\n });\n this._triggerChange(choice.value);\n }\n }\n this.clearInput();\n // We want to close the dropdown if we are dealing with a single select box\n if (hasActiveDropdown && this._isSelectOneElement) {\n this.hideDropdown(true);\n this.containerOuter.focus();\n }\n };\n Choices.prototype._handleBackspace = function (activeItems) {\n if (!this.config.removeItems || !activeItems) {\n return;\n }\n var lastItem = activeItems[activeItems.length - 1];\n var hasHighlightedItems = activeItems.some(function (item) {\n return item.highlighted;\n });\n // If editing the last item is allowed and there are not other selected items,\n // we can edit the item value. Otherwise if we can remove items, remove all selected items\n if (this.config.editItems && !hasHighlightedItems && lastItem) {\n this.input.value = lastItem.value;\n this.input.setWidth();\n this._removeItem(lastItem);\n this._triggerChange(lastItem.value);\n } else {\n if (!hasHighlightedItems) {\n // Highlight last item if none already highlighted\n this.highlightItem(lastItem, false);\n }\n this.removeHighlightedItems(true);\n }\n };\n Choices.prototype._startLoading = function () {\n this._store.dispatch((0, misc_1.setIsLoading)(true));\n };\n Choices.prototype._stopLoading = function () {\n this._store.dispatch((0, misc_1.setIsLoading)(false));\n };\n Choices.prototype._handleLoadingState = function (setLoading) {\n if (setLoading === void 0) {\n setLoading = true;\n }\n var placeholderItem = this.itemList.getChild(\".\".concat(this.config.classNames.placeholder));\n if (setLoading) {\n this.disable();\n this.containerOuter.addLoadingState();\n if (this._isSelectOneElement) {\n if (!placeholderItem) {\n placeholderItem = this._getTemplate('placeholder', this.config.loadingText);\n if (placeholderItem) {\n this.itemList.append(placeholderItem);\n }\n } else {\n placeholderItem.innerHTML = this.config.loadingText;\n }\n } else {\n this.input.placeholder = this.config.loadingText;\n }\n } else {\n this.enable();\n this.containerOuter.removeLoadingState();\n if (this._isSelectOneElement) {\n if (placeholderItem) {\n placeholderItem.innerHTML = this._placeholderValue || '';\n }\n } else {\n this.input.placeholder = this._placeholderValue || '';\n }\n }\n };\n Choices.prototype._handleSearch = function (value) {\n if (!this.input.isFocussed) {\n return;\n }\n var choices = this._store.choices;\n var _a = this.config,\n searchFloor = _a.searchFloor,\n searchChoices = _a.searchChoices;\n var hasUnactiveChoices = choices.some(function (option) {\n return !option.active;\n });\n // Check that we have a value to search and the input was an alphanumeric character\n if (value !== null && typeof value !== 'undefined' && value.length >= searchFloor) {\n var resultCount = searchChoices ? this._searchChoices(value) : 0;\n // Trigger search event\n this.passedElement.triggerEvent(constants_1.EVENTS.search, {\n value: value,\n resultCount: resultCount\n });\n } else if (hasUnactiveChoices) {\n // Otherwise reset choices to active\n this._isSearching = false;\n this._store.dispatch((0, choices_1.activateChoices)(true));\n }\n };\n Choices.prototype._canAddItem = function (activeItems, value) {\n var canAddItem = true;\n var notice = typeof this.config.addItemText === 'function' ? this.config.addItemText(value) : this.config.addItemText;\n if (!this._isSelectOneElement) {\n var isDuplicateValue = (0, utils_1.existsInArray)(activeItems, value);\n if (this.config.maxItemCount > 0 && this.config.maxItemCount <= activeItems.length) {\n // If there is a max entry limit and we have reached that limit\n // don't update\n canAddItem = false;\n notice = typeof this.config.maxItemText === 'function' ? this.config.maxItemText(this.config.maxItemCount) : this.config.maxItemText;\n }\n if (!this.config.duplicateItemsAllowed && isDuplicateValue && canAddItem) {\n canAddItem = false;\n notice = typeof this.config.uniqueItemText === 'function' ? this.config.uniqueItemText(value) : this.config.uniqueItemText;\n }\n if (this._isTextElement && this.config.addItems && canAddItem && typeof this.config.addItemFilter === 'function' && !this.config.addItemFilter(value)) {\n canAddItem = false;\n notice = typeof this.config.customAddItemText === 'function' ? this.config.customAddItemText(value) : this.config.customAddItemText;\n }\n }\n return {\n response: canAddItem,\n notice: notice\n };\n };\n Choices.prototype._searchChoices = function (value) {\n var newValue = typeof value === 'string' ? value.trim() : value;\n var currentValue = typeof this._currentValue === 'string' ? this._currentValue.trim() : this._currentValue;\n if (newValue.length < 1 && newValue === \"\".concat(currentValue, \" \")) {\n return 0;\n }\n // If new value matches the desired length and is not the same as the current value with a space\n var haystack = this._store.searchableChoices;\n var needle = newValue;\n var options = Object.assign(this.config.fuseOptions, {\n keys: __spreadArray([], this.config.searchFields, true),\n includeMatches: true\n });\n var fuse = new fuse_js_1.default(haystack, options);\n var results = fuse.search(needle); // see https://github.com/krisk/Fuse/issues/303\n this._currentValue = newValue;\n this._highlightPosition = 0;\n this._isSearching = true;\n this._store.dispatch((0, choices_1.filterChoices)(results));\n return results.length;\n };\n Choices.prototype._addEventListeners = function () {\n var documentElement = this.config.shadowRoot || document.documentElement;\n // capture events - can cancel event processing or propagation\n documentElement.addEventListener('touchend', this._onTouchEnd, true);\n this.containerOuter.element.addEventListener('keydown', this._onKeyDown, true);\n this.containerOuter.element.addEventListener('mousedown', this._onMouseDown, true);\n // passive events - doesn't call `preventDefault` or `stopPropagation`\n documentElement.addEventListener('click', this._onClick, {\n passive: true\n });\n documentElement.addEventListener('touchmove', this._onTouchMove, {\n passive: true\n });\n this.dropdown.element.addEventListener('mouseover', this._onMouseOver, {\n passive: true\n });\n if (this._isSelectOneElement) {\n this.containerOuter.element.addEventListener('focus', this._onFocus, {\n passive: true\n });\n this.containerOuter.element.addEventListener('blur', this._onBlur, {\n passive: true\n });\n }\n this.input.element.addEventListener('keyup', this._onKeyUp, {\n passive: true\n });\n this.input.element.addEventListener('focus', this._onFocus, {\n passive: true\n });\n this.input.element.addEventListener('blur', this._onBlur, {\n passive: true\n });\n if (this.input.element.form) {\n this.input.element.form.addEventListener('reset', this._onFormReset, {\n passive: true\n });\n }\n this.input.addEventListeners();\n };\n Choices.prototype._removeEventListeners = function () {\n var documentElement = this.config.shadowRoot || document.documentElement;\n documentElement.removeEventListener('touchend', this._onTouchEnd, true);\n this.containerOuter.element.removeEventListener('keydown', this._onKeyDown, true);\n this.containerOuter.element.removeEventListener('mousedown', this._onMouseDown, true);\n documentElement.removeEventListener('click', this._onClick);\n documentElement.removeEventListener('touchmove', this._onTouchMove);\n this.dropdown.element.removeEventListener('mouseover', this._onMouseOver);\n if (this._isSelectOneElement) {\n this.containerOuter.element.removeEventListener('focus', this._onFocus);\n this.containerOuter.element.removeEventListener('blur', this._onBlur);\n }\n this.input.element.removeEventListener('keyup', this._onKeyUp);\n this.input.element.removeEventListener('focus', this._onFocus);\n this.input.element.removeEventListener('blur', this._onBlur);\n if (this.input.element.form) {\n this.input.element.form.removeEventListener('reset', this._onFormReset);\n }\n this.input.removeEventListeners();\n };\n Choices.prototype._onKeyDown = function (event) {\n var keyCode = event.keyCode;\n var activeItems = this._store.activeItems;\n var hasFocusedInput = this.input.isFocussed;\n var hasActiveDropdown = this.dropdown.isActive;\n var hasItems = this.itemList.hasChildren();\n var keyString = String.fromCharCode(keyCode);\n // eslint-disable-next-line no-control-regex\n var wasPrintableChar = /[^\\x00-\\x1F]/.test(keyString);\n var BACK_KEY = constants_1.KEY_CODES.BACK_KEY,\n DELETE_KEY = constants_1.KEY_CODES.DELETE_KEY,\n ENTER_KEY = constants_1.KEY_CODES.ENTER_KEY,\n A_KEY = constants_1.KEY_CODES.A_KEY,\n ESC_KEY = constants_1.KEY_CODES.ESC_KEY,\n UP_KEY = constants_1.KEY_CODES.UP_KEY,\n DOWN_KEY = constants_1.KEY_CODES.DOWN_KEY,\n PAGE_UP_KEY = constants_1.KEY_CODES.PAGE_UP_KEY,\n PAGE_DOWN_KEY = constants_1.KEY_CODES.PAGE_DOWN_KEY;\n if (!this._isTextElement && !hasActiveDropdown && wasPrintableChar) {\n this.showDropdown();\n if (!this.input.isFocussed) {\n /*\n We update the input value with the pressed key as\n the input was not focussed at the time of key press\n therefore does not have the value of the key.\n */\n this.input.value += event.key.toLowerCase();\n }\n }\n switch (keyCode) {\n case A_KEY:\n return this._onSelectKey(event, hasItems);\n case ENTER_KEY:\n return this._onEnterKey({\n event: event,\n activeItems: activeItems,\n hasActiveDropdown: hasActiveDropdown\n });\n case ESC_KEY:\n return this._onEscapeKey(hasActiveDropdown);\n case UP_KEY:\n case PAGE_UP_KEY:\n case DOWN_KEY:\n case PAGE_DOWN_KEY:\n return this._onDirectionKey({\n event: event,\n hasActiveDropdown: hasActiveDropdown\n });\n case DELETE_KEY:\n case BACK_KEY:\n return this._onDeleteKey(event, activeItems, hasFocusedInput);\n default:\n }\n };\n Choices.prototype._onKeyUp = function (_a) {\n var target = _a.target,\n keyCode = _a.keyCode;\n var value = this.input.value;\n var activeItems = this._store.activeItems;\n var canAddItem = this._canAddItem(activeItems, value);\n var backKey = constants_1.KEY_CODES.BACK_KEY,\n deleteKey = constants_1.KEY_CODES.DELETE_KEY;\n // We are typing into a text input and have a value, we want to show a dropdown\n // notice. Otherwise hide the dropdown\n if (this._isTextElement) {\n var canShowDropdownNotice = canAddItem.notice && value;\n if (canShowDropdownNotice) {\n var dropdownItem = this._getTemplate('notice', canAddItem.notice);\n this.dropdown.element.innerHTML = dropdownItem.outerHTML;\n this.showDropdown(true);\n } else {\n this.hideDropdown(true);\n }\n } else {\n var wasRemovalKeyCode = keyCode === backKey || keyCode === deleteKey;\n var userHasRemovedValue = wasRemovalKeyCode && target && !target.value;\n var canReactivateChoices = !this._isTextElement && this._isSearching;\n var canSearch = this._canSearch && canAddItem.response;\n if (userHasRemovedValue && canReactivateChoices) {\n this._isSearching = false;\n this._store.dispatch((0, choices_1.activateChoices)(true));\n } else if (canSearch) {\n this._handleSearch(this.input.rawValue);\n }\n }\n this._canSearch = this.config.searchEnabled;\n };\n Choices.prototype._onSelectKey = function (event, hasItems) {\n var ctrlKey = event.ctrlKey,\n metaKey = event.metaKey;\n var hasCtrlDownKeyPressed = ctrlKey || metaKey;\n // If CTRL + A or CMD + A have been pressed and there are items to select\n if (hasCtrlDownKeyPressed && hasItems) {\n this._canSearch = false;\n var shouldHightlightAll = this.config.removeItems && !this.input.value && this.input.element === document.activeElement;\n if (shouldHightlightAll) {\n this.highlightAll();\n }\n }\n };\n Choices.prototype._onEnterKey = function (eventArgs) {\n var event = eventArgs.event,\n activeItems = eventArgs.activeItems,\n hasActiveDropdown = eventArgs.hasActiveDropdown;\n var target = event.target;\n var enterKey = constants_1.KEY_CODES.ENTER_KEY;\n var targetWasButton = target && target.hasAttribute('data-button');\n if (this._isTextElement && target && target.value) {\n var value = this.input.value;\n var canAddItem = this._canAddItem(activeItems, value);\n if (canAddItem.response) {\n this.hideDropdown(true);\n this._addItem({\n value: value\n });\n this._triggerChange(value);\n this.clearInput();\n }\n }\n if (targetWasButton) {\n this._handleButtonAction(activeItems, target);\n event.preventDefault();\n }\n if (hasActiveDropdown) {\n var highlightedChoice = this.dropdown.getChild(\".\".concat(this.config.classNames.highlightedState));\n if (highlightedChoice) {\n // add enter keyCode value\n if (activeItems[0]) {\n activeItems[0].keyCode = enterKey; // eslint-disable-line no-param-reassign\n }\n\n this._handleChoiceAction(activeItems, highlightedChoice);\n }\n event.preventDefault();\n } else if (this._isSelectOneElement) {\n this.showDropdown();\n event.preventDefault();\n }\n };\n Choices.prototype._onEscapeKey = function (hasActiveDropdown) {\n if (hasActiveDropdown) {\n this.hideDropdown(true);\n this.containerOuter.focus();\n }\n };\n Choices.prototype._onDirectionKey = function (eventArgs) {\n var event = eventArgs.event,\n hasActiveDropdown = eventArgs.hasActiveDropdown;\n var keyCode = event.keyCode,\n metaKey = event.metaKey;\n var downKey = constants_1.KEY_CODES.DOWN_KEY,\n pageUpKey = constants_1.KEY_CODES.PAGE_UP_KEY,\n pageDownKey = constants_1.KEY_CODES.PAGE_DOWN_KEY;\n // If up or down key is pressed, traverse through options\n if (hasActiveDropdown || this._isSelectOneElement) {\n this.showDropdown();\n this._canSearch = false;\n var directionInt = keyCode === downKey || keyCode === pageDownKey ? 1 : -1;\n var skipKey = metaKey || keyCode === pageDownKey || keyCode === pageUpKey;\n var selectableChoiceIdentifier = '[data-choice-selectable]';\n var nextEl = void 0;\n if (skipKey) {\n if (directionInt > 0) {\n nextEl = this.dropdown.element.querySelector(\"\".concat(selectableChoiceIdentifier, \":last-of-type\"));\n } else {\n nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n }\n } else {\n var currentEl = this.dropdown.element.querySelector(\".\".concat(this.config.classNames.highlightedState));\n if (currentEl) {\n nextEl = (0, utils_1.getAdjacentEl)(currentEl, selectableChoiceIdentifier, directionInt);\n } else {\n nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n }\n }\n if (nextEl) {\n // We prevent default to stop the cursor moving\n // when pressing the arrow\n if (!(0, utils_1.isScrolledIntoView)(nextEl, this.choiceList.element, directionInt)) {\n this.choiceList.scrollToChildElement(nextEl, directionInt);\n }\n this._highlightChoice(nextEl);\n }\n // Prevent default to maintain cursor position whilst\n // traversing dropdown options\n event.preventDefault();\n }\n };\n Choices.prototype._onDeleteKey = function (event, activeItems, hasFocusedInput) {\n var target = event.target;\n // If backspace or delete key is pressed and the input has no value\n if (!this._isSelectOneElement && !target.value && hasFocusedInput) {\n this._handleBackspace(activeItems);\n event.preventDefault();\n }\n };\n Choices.prototype._onTouchMove = function () {\n if (this._wasTap) {\n this._wasTap = false;\n }\n };\n Choices.prototype._onTouchEnd = function (event) {\n var target = (event || event.touches[0]).target;\n var touchWasWithinContainer = this._wasTap && this.containerOuter.element.contains(target);\n if (touchWasWithinContainer) {\n var containerWasExactTarget = target === this.containerOuter.element || target === this.containerInner.element;\n if (containerWasExactTarget) {\n if (this._isTextElement) {\n this.input.focus();\n } else if (this._isSelectMultipleElement) {\n this.showDropdown();\n }\n }\n // Prevents focus event firing\n event.stopPropagation();\n }\n this._wasTap = true;\n };\n /**\n * Handles mousedown event in capture mode for containetOuter.element\n */\n Choices.prototype._onMouseDown = function (event) {\n var target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n // If we have our mouse down on the scrollbar and are on IE11...\n if (IS_IE11 && this.choiceList.element.contains(target)) {\n // check if click was on a scrollbar area\n var firstChoice = this.choiceList.element.firstElementChild;\n var isOnScrollbar = this._direction === 'ltr' ? event.offsetX >= firstChoice.offsetWidth : event.offsetX < firstChoice.offsetLeft;\n this._isScrollingOnIe = isOnScrollbar;\n }\n if (target === this.input.element) {\n return;\n }\n var item = target.closest('[data-button],[data-item],[data-choice]');\n if (item instanceof HTMLElement) {\n var hasShiftKey = event.shiftKey;\n var activeItems = this._store.activeItems;\n var dataset = item.dataset;\n if ('button' in dataset) {\n this._handleButtonAction(activeItems, item);\n } else if ('item' in dataset) {\n this._handleItemAction(activeItems, item, hasShiftKey);\n } else if ('choice' in dataset) {\n this._handleChoiceAction(activeItems, item);\n }\n }\n event.preventDefault();\n };\n /**\n * Handles mouseover event over this.dropdown\n * @param {MouseEvent} event\n */\n Choices.prototype._onMouseOver = function (_a) {\n var target = _a.target;\n if (target instanceof HTMLElement && 'choice' in target.dataset) {\n this._highlightChoice(target);\n }\n };\n Choices.prototype._onClick = function (_a) {\n var target = _a.target;\n var clickWasWithinContainer = this.containerOuter.element.contains(target);\n if (clickWasWithinContainer) {\n if (!this.dropdown.isActive && !this.containerOuter.isDisabled) {\n if (this._isTextElement) {\n if (document.activeElement !== this.input.element) {\n this.input.focus();\n }\n } else {\n this.showDropdown();\n this.containerOuter.focus();\n }\n } else if (this._isSelectOneElement && target !== this.input.element && !this.dropdown.element.contains(target)) {\n this.hideDropdown();\n }\n } else {\n var hasHighlightedItems = this._store.highlightedActiveItems.length > 0;\n if (hasHighlightedItems) {\n this.unhighlightAll();\n }\n this.containerOuter.removeFocusState();\n this.hideDropdown(true);\n }\n };\n Choices.prototype._onFocus = function (_a) {\n var _b;\n var _this = this;\n var target = _a.target;\n var focusWasWithinContainer = target && this.containerOuter.element.contains(target);\n if (!focusWasWithinContainer) {\n return;\n }\n var focusActions = (_b = {}, _b[constants_1.TEXT_TYPE] = function () {\n if (target === _this.input.element) {\n _this.containerOuter.addFocusState();\n }\n }, _b[constants_1.SELECT_ONE_TYPE] = function () {\n _this.containerOuter.addFocusState();\n if (target === _this.input.element) {\n _this.showDropdown(true);\n }\n }, _b[constants_1.SELECT_MULTIPLE_TYPE] = function () {\n if (target === _this.input.element) {\n _this.showDropdown(true);\n // If element is a select box, the focused element is the container and the dropdown\n // isn't already open, focus and show dropdown\n _this.containerOuter.addFocusState();\n }\n }, _b);\n focusActions[this.passedElement.element.type]();\n };\n Choices.prototype._onBlur = function (_a) {\n var _b;\n var _this = this;\n var target = _a.target;\n var blurWasWithinContainer = target && this.containerOuter.element.contains(target);\n if (blurWasWithinContainer && !this._isScrollingOnIe) {\n var activeItems = this._store.activeItems;\n var hasHighlightedItems_1 = activeItems.some(function (item) {\n return item.highlighted;\n });\n var blurActions = (_b = {}, _b[constants_1.TEXT_TYPE] = function () {\n if (target === _this.input.element) {\n _this.containerOuter.removeFocusState();\n if (hasHighlightedItems_1) {\n _this.unhighlightAll();\n }\n _this.hideDropdown(true);\n }\n }, _b[constants_1.SELECT_ONE_TYPE] = function () {\n _this.containerOuter.removeFocusState();\n if (target === _this.input.element || target === _this.containerOuter.element && !_this._canSearch) {\n _this.hideDropdown(true);\n }\n }, _b[constants_1.SELECT_MULTIPLE_TYPE] = function () {\n if (target === _this.input.element) {\n _this.containerOuter.removeFocusState();\n _this.hideDropdown(true);\n if (hasHighlightedItems_1) {\n _this.unhighlightAll();\n }\n }\n }, _b);\n blurActions[this.passedElement.element.type]();\n } else {\n // On IE11, clicking the scollbar blurs our input and thus\n // closes the dropdown. To stop this, we refocus our input\n // if we know we are on IE *and* are scrolling.\n this._isScrollingOnIe = false;\n this.input.element.focus();\n }\n };\n Choices.prototype._onFormReset = function () {\n this._store.dispatch((0, misc_1.resetTo)(this._initialState));\n };\n Choices.prototype._highlightChoice = function (el) {\n var _this = this;\n if (el === void 0) {\n el = null;\n }\n var choices = Array.from(this.dropdown.element.querySelectorAll('[data-choice-selectable]'));\n if (!choices.length) {\n return;\n }\n var passedEl = el;\n var highlightedChoices = Array.from(this.dropdown.element.querySelectorAll(\".\".concat(this.config.classNames.highlightedState)));\n // Remove any highlighted choices\n highlightedChoices.forEach(function (choice) {\n choice.classList.remove(_this.config.classNames.highlightedState);\n choice.setAttribute('aria-selected', 'false');\n });\n if (passedEl) {\n this._highlightPosition = choices.indexOf(passedEl);\n } else {\n // Highlight choice based on last known highlight location\n if (choices.length > this._highlightPosition) {\n // If we have an option to highlight\n passedEl = choices[this._highlightPosition];\n } else {\n // Otherwise highlight the option before\n passedEl = choices[choices.length - 1];\n }\n if (!passedEl) {\n passedEl = choices[0];\n }\n }\n passedEl.classList.add(this.config.classNames.highlightedState);\n passedEl.setAttribute('aria-selected', 'true');\n this.passedElement.triggerEvent(constants_1.EVENTS.highlightChoice, {\n el: passedEl\n });\n if (this.dropdown.isActive) {\n // IE11 ignores aria-label and blocks virtual keyboard\n // if aria-activedescendant is set without a dropdown\n this.input.setActiveDescendant(passedEl.id);\n this.containerOuter.setActiveDescendant(passedEl.id);\n }\n };\n Choices.prototype._addItem = function (_a) {\n var value = _a.value,\n _b = _a.label,\n label = _b === void 0 ? null : _b,\n _c = _a.choiceId,\n choiceId = _c === void 0 ? -1 : _c,\n _d = _a.groupId,\n groupId = _d === void 0 ? -1 : _d,\n _e = _a.customProperties,\n customProperties = _e === void 0 ? {} : _e,\n _f = _a.placeholder,\n placeholder = _f === void 0 ? false : _f,\n _g = _a.keyCode,\n keyCode = _g === void 0 ? -1 : _g;\n var passedValue = typeof value === 'string' ? value.trim() : value;\n var items = this._store.items;\n var passedLabel = label || passedValue;\n var passedOptionId = choiceId || -1;\n var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n var id = items ? items.length + 1 : 1;\n // If a prepended value has been passed, prepend it\n if (this.config.prependValue) {\n passedValue = this.config.prependValue + passedValue.toString();\n }\n // If an appended value has been passed, append it\n if (this.config.appendValue) {\n passedValue += this.config.appendValue.toString();\n }\n this._store.dispatch((0, items_1.addItem)({\n value: passedValue,\n label: passedLabel,\n id: id,\n choiceId: passedOptionId,\n groupId: groupId,\n customProperties: customProperties,\n placeholder: placeholder,\n keyCode: keyCode\n }));\n if (this._isSelectOneElement) {\n this.removeActiveItems(id);\n }\n // Trigger change event\n this.passedElement.triggerEvent(constants_1.EVENTS.addItem, {\n id: id,\n value: passedValue,\n label: passedLabel,\n customProperties: customProperties,\n groupValue: group && group.value ? group.value : null,\n keyCode: keyCode\n });\n };\n Choices.prototype._removeItem = function (item) {\n var id = item.id,\n value = item.value,\n label = item.label,\n customProperties = item.customProperties,\n choiceId = item.choiceId,\n groupId = item.groupId;\n var group = groupId && groupId >= 0 ? this._store.getGroupById(groupId) : null;\n if (!id || !choiceId) {\n return;\n }\n this._store.dispatch((0, items_1.removeItem)(id, choiceId));\n this.passedElement.triggerEvent(constants_1.EVENTS.removeItem, {\n id: id,\n value: value,\n label: label,\n customProperties: customProperties,\n groupValue: group && group.value ? group.value : null\n });\n };\n Choices.prototype._addChoice = function (_a) {\n var value = _a.value,\n _b = _a.label,\n label = _b === void 0 ? null : _b,\n _c = _a.isSelected,\n isSelected = _c === void 0 ? false : _c,\n _d = _a.isDisabled,\n isDisabled = _d === void 0 ? false : _d,\n _e = _a.groupId,\n groupId = _e === void 0 ? -1 : _e,\n _f = _a.customProperties,\n customProperties = _f === void 0 ? {} : _f,\n _g = _a.placeholder,\n placeholder = _g === void 0 ? false : _g,\n _h = _a.keyCode,\n keyCode = _h === void 0 ? -1 : _h;\n if (typeof value === 'undefined' || value === null) {\n return;\n }\n // Generate unique id\n var choices = this._store.choices;\n var choiceLabel = label || value;\n var choiceId = choices ? choices.length + 1 : 1;\n var choiceElementId = \"\".concat(this._baseId, \"-\").concat(this._idNames.itemChoice, \"-\").concat(choiceId);\n this._store.dispatch((0, choices_1.addChoice)({\n id: choiceId,\n groupId: groupId,\n elementId: choiceElementId,\n value: value,\n label: choiceLabel,\n disabled: isDisabled,\n customProperties: customProperties,\n placeholder: placeholder,\n keyCode: keyCode\n }));\n if (isSelected) {\n this._addItem({\n value: value,\n label: choiceLabel,\n choiceId: choiceId,\n customProperties: customProperties,\n placeholder: placeholder,\n keyCode: keyCode\n });\n }\n };\n Choices.prototype._addGroup = function (_a) {\n var _this = this;\n var group = _a.group,\n id = _a.id,\n _b = _a.valueKey,\n valueKey = _b === void 0 ? 'value' : _b,\n _c = _a.labelKey,\n labelKey = _c === void 0 ? 'label' : _c;\n var groupChoices = (0, utils_1.isType)('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION'));\n var groupId = id || Math.floor(new Date().valueOf() * Math.random());\n var isDisabled = group.disabled ? group.disabled : false;\n if (groupChoices) {\n this._store.dispatch((0, groups_1.addGroup)({\n value: group.label,\n id: groupId,\n active: true,\n disabled: isDisabled\n }));\n var addGroupChoices = function (choice) {\n var isOptDisabled = choice.disabled || choice.parentNode && choice.parentNode.disabled;\n _this._addChoice({\n value: choice[valueKey],\n label: (0, utils_1.isType)('Object', choice) ? choice[labelKey] : choice.innerHTML,\n isSelected: choice.selected,\n isDisabled: isOptDisabled,\n groupId: groupId,\n customProperties: choice.customProperties,\n placeholder: choice.placeholder\n });\n };\n groupChoices.forEach(addGroupChoices);\n } else {\n this._store.dispatch((0, groups_1.addGroup)({\n value: group.label,\n id: group.id,\n active: false,\n disabled: group.disabled\n }));\n }\n };\n Choices.prototype._getTemplate = function (template) {\n var _a;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return (_a = this._templates[template]).call.apply(_a, __spreadArray([this, this.config], args, false));\n };\n Choices.prototype._createTemplates = function () {\n var callbackOnCreateTemplates = this.config.callbackOnCreateTemplates;\n var userTemplates = {};\n if (callbackOnCreateTemplates && typeof callbackOnCreateTemplates === 'function') {\n userTemplates = callbackOnCreateTemplates.call(this, utils_1.strToEl);\n }\n this._templates = (0, deepmerge_1.default)(templates_1.default, userTemplates);\n };\n Choices.prototype._createElements = function () {\n this.containerOuter = new components_1.Container({\n element: this._getTemplate('containerOuter', this._direction, this._isSelectElement, this._isSelectOneElement, this.config.searchEnabled, this.passedElement.element.type, this.config.labelId),\n classNames: this.config.classNames,\n type: this.passedElement.element.type,\n position: this.config.position\n });\n this.containerInner = new components_1.Container({\n element: this._getTemplate('containerInner'),\n classNames: this.config.classNames,\n type: this.passedElement.element.type,\n position: this.config.position\n });\n this.input = new components_1.Input({\n element: this._getTemplate('input', this._placeholderValue),\n classNames: this.config.classNames,\n type: this.passedElement.element.type,\n preventPaste: !this.config.paste\n });\n this.choiceList = new components_1.List({\n element: this._getTemplate('choiceList', this._isSelectOneElement)\n });\n this.itemList = new components_1.List({\n element: this._getTemplate('itemList', this._isSelectOneElement)\n });\n this.dropdown = new components_1.Dropdown({\n element: this._getTemplate('dropdown'),\n classNames: this.config.classNames,\n type: this.passedElement.element.type\n });\n };\n Choices.prototype._createStructure = function () {\n // Hide original element\n this.passedElement.conceal();\n // Wrap input in container preserving DOM ordering\n this.containerInner.wrap(this.passedElement.element);\n // Wrapper inner container with outer container\n this.containerOuter.wrap(this.containerInner.element);\n if (this._isSelectOneElement) {\n this.input.placeholder = this.config.searchPlaceholderValue || '';\n } else if (this._placeholderValue) {\n this.input.placeholder = this._placeholderValue;\n this.input.setWidth();\n }\n this.containerOuter.element.appendChild(this.containerInner.element);\n this.containerOuter.element.appendChild(this.dropdown.element);\n this.containerInner.element.appendChild(this.itemList.element);\n if (!this._isTextElement) {\n this.dropdown.element.appendChild(this.choiceList.element);\n }\n if (!this._isSelectOneElement) {\n this.containerInner.element.appendChild(this.input.element);\n } else if (this.config.searchEnabled) {\n this.dropdown.element.insertBefore(this.input.element, this.dropdown.element.firstChild);\n }\n if (this._isSelectElement) {\n this._highlightPosition = 0;\n this._isSearching = false;\n this._startLoading();\n if (this._presetGroups.length) {\n this._addPredefinedGroups(this._presetGroups);\n } else {\n this._addPredefinedChoices(this._presetChoices);\n }\n this._stopLoading();\n }\n if (this._isTextElement) {\n this._addPredefinedItems(this._presetItems);\n }\n };\n Choices.prototype._addPredefinedGroups = function (groups) {\n var _this = this;\n // If we have a placeholder option\n var placeholderChoice = this.passedElement.placeholderOption;\n if (placeholderChoice && placeholderChoice.parentNode && placeholderChoice.parentNode.tagName === 'SELECT') {\n this._addChoice({\n value: placeholderChoice.value,\n label: placeholderChoice.innerHTML,\n isSelected: placeholderChoice.selected,\n isDisabled: placeholderChoice.disabled,\n placeholder: true\n });\n }\n groups.forEach(function (group) {\n return _this._addGroup({\n group: group,\n id: group.id || null\n });\n });\n };\n Choices.prototype._addPredefinedChoices = function (choices) {\n var _this = this;\n // If sorting is enabled or the user is searching, filter choices\n if (this.config.shouldSort) {\n choices.sort(this.config.sorter);\n }\n var hasSelectedChoice = choices.some(function (choice) {\n return choice.selected;\n });\n var firstEnabledChoiceIndex = choices.findIndex(function (choice) {\n return choice.disabled === undefined || !choice.disabled;\n });\n choices.forEach(function (choice, index) {\n var _a = choice.value,\n value = _a === void 0 ? '' : _a,\n label = choice.label,\n customProperties = choice.customProperties,\n placeholder = choice.placeholder;\n if (_this._isSelectElement) {\n // If the choice is actually a group\n if (choice.choices) {\n _this._addGroup({\n group: choice,\n id: choice.id || null\n });\n } else {\n /**\n * If there is a selected choice already or the choice is not the first in\n * the array, add each choice normally.\n *\n * Otherwise we pre-select the first enabled choice in the array (\"select-one\" only)\n */\n var shouldPreselect = _this._isSelectOneElement && !hasSelectedChoice && index === firstEnabledChoiceIndex;\n var isSelected = shouldPreselect ? true : choice.selected;\n var isDisabled = choice.disabled;\n _this._addChoice({\n value: value,\n label: label,\n isSelected: !!isSelected,\n isDisabled: !!isDisabled,\n placeholder: !!placeholder,\n customProperties: customProperties\n });\n }\n } else {\n _this._addChoice({\n value: value,\n label: label,\n isSelected: !!choice.selected,\n isDisabled: !!choice.disabled,\n placeholder: !!choice.placeholder,\n customProperties: customProperties\n });\n }\n });\n };\n Choices.prototype._addPredefinedItems = function (items) {\n var _this = this;\n items.forEach(function (item) {\n if (typeof item === 'object' && item.value) {\n _this._addItem({\n value: item.value,\n label: item.label,\n choiceId: item.id,\n customProperties: item.customProperties,\n placeholder: item.placeholder\n });\n }\n if (typeof item === 'string') {\n _this._addItem({\n value: item\n });\n }\n });\n };\n Choices.prototype._setChoiceOrItem = function (item) {\n var _this = this;\n var itemType = (0, utils_1.getType)(item).toLowerCase();\n var handleType = {\n object: function () {\n if (!item.value) {\n return;\n }\n // If we are dealing with a select input, we need to create an option first\n // that is then selected. For text inputs we can just add items normally.\n if (!_this._isTextElement) {\n _this._addChoice({\n value: item.value,\n label: item.label,\n isSelected: true,\n isDisabled: false,\n customProperties: item.customProperties,\n placeholder: item.placeholder\n });\n } else {\n _this._addItem({\n value: item.value,\n label: item.label,\n choiceId: item.id,\n customProperties: item.customProperties,\n placeholder: item.placeholder\n });\n }\n },\n string: function () {\n if (!_this._isTextElement) {\n _this._addChoice({\n value: item,\n label: item,\n isSelected: true,\n isDisabled: false\n });\n } else {\n _this._addItem({\n value: item\n });\n }\n }\n };\n handleType[itemType]();\n };\n Choices.prototype._findAndSelectChoiceByValue = function (value) {\n var _this = this;\n var choices = this._store.choices;\n // Check 'value' property exists and the choice isn't already selected\n var foundChoice = choices.find(function (choice) {\n return _this.config.valueComparer(choice.value, value);\n });\n if (foundChoice && !foundChoice.selected) {\n this._addItem({\n value: foundChoice.value,\n label: foundChoice.label,\n choiceId: foundChoice.id,\n groupId: foundChoice.groupId,\n customProperties: foundChoice.customProperties,\n placeholder: foundChoice.placeholder,\n keyCode: foundChoice.keyCode\n });\n }\n };\n Choices.prototype._generatePlaceholderValue = function () {\n if (this._isSelectElement && this.passedElement.placeholderOption) {\n var placeholderOption = this.passedElement.placeholderOption;\n return placeholderOption ? placeholderOption.text : null;\n }\n var _a = this.config,\n placeholder = _a.placeholder,\n placeholderValue = _a.placeholderValue;\n var dataset = this.passedElement.element.dataset;\n if (placeholder) {\n if (placeholderValue) {\n return placeholderValue;\n }\n if (dataset.placeholder) {\n return dataset.placeholder;\n }\n }\n return null;\n };\n return Choices;\n}();\nexports[\"default\"] = Choices;\n\n/***/ }),\n\n/***/ 613:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar constants_1 = __webpack_require__(883);\nvar Container = /** @class */function () {\n function Container(_a) {\n var element = _a.element,\n type = _a.type,\n classNames = _a.classNames,\n position = _a.position;\n this.element = element;\n this.classNames = classNames;\n this.type = type;\n this.position = position;\n this.isOpen = false;\n this.isFlipped = false;\n this.isFocussed = false;\n this.isDisabled = false;\n this.isLoading = false;\n this._onFocus = this._onFocus.bind(this);\n this._onBlur = this._onBlur.bind(this);\n }\n Container.prototype.addEventListeners = function () {\n this.element.addEventListener('focus', this._onFocus);\n this.element.addEventListener('blur', this._onBlur);\n };\n Container.prototype.removeEventListeners = function () {\n this.element.removeEventListener('focus', this._onFocus);\n this.element.removeEventListener('blur', this._onBlur);\n };\n /**\n * Determine whether container should be flipped based on passed\n * dropdown position\n */\n Container.prototype.shouldFlip = function (dropdownPos) {\n if (typeof dropdownPos !== 'number') {\n return false;\n }\n // If flip is enabled and the dropdown bottom position is\n // greater than the window height flip the dropdown.\n var shouldFlip = false;\n if (this.position === 'auto') {\n shouldFlip = !window.matchMedia(\"(min-height: \".concat(dropdownPos + 1, \"px)\")).matches;\n } else if (this.position === 'top') {\n shouldFlip = true;\n }\n return shouldFlip;\n };\n Container.prototype.setActiveDescendant = function (activeDescendantID) {\n this.element.setAttribute('aria-activedescendant', activeDescendantID);\n };\n Container.prototype.removeActiveDescendant = function () {\n this.element.removeAttribute('aria-activedescendant');\n };\n Container.prototype.open = function (dropdownPos) {\n this.element.classList.add(this.classNames.openState);\n this.element.setAttribute('aria-expanded', 'true');\n this.isOpen = true;\n if (this.shouldFlip(dropdownPos)) {\n this.element.classList.add(this.classNames.flippedState);\n this.isFlipped = true;\n }\n };\n Container.prototype.close = function () {\n this.element.classList.remove(this.classNames.openState);\n this.element.setAttribute('aria-expanded', 'false');\n this.removeActiveDescendant();\n this.isOpen = false;\n // A dropdown flips if it does not have space within the page\n if (this.isFlipped) {\n this.element.classList.remove(this.classNames.flippedState);\n this.isFlipped = false;\n }\n };\n Container.prototype.focus = function () {\n if (!this.isFocussed) {\n this.element.focus();\n }\n };\n Container.prototype.addFocusState = function () {\n this.element.classList.add(this.classNames.focusState);\n };\n Container.prototype.removeFocusState = function () {\n this.element.classList.remove(this.classNames.focusState);\n };\n Container.prototype.enable = function () {\n this.element.classList.remove(this.classNames.disabledState);\n this.element.removeAttribute('aria-disabled');\n if (this.type === constants_1.SELECT_ONE_TYPE) {\n this.element.setAttribute('tabindex', '0');\n }\n this.isDisabled = false;\n };\n Container.prototype.disable = function () {\n this.element.classList.add(this.classNames.disabledState);\n this.element.setAttribute('aria-disabled', 'true');\n if (this.type === constants_1.SELECT_ONE_TYPE) {\n this.element.setAttribute('tabindex', '-1');\n }\n this.isDisabled = true;\n };\n Container.prototype.wrap = function (element) {\n (0, utils_1.wrap)(element, this.element);\n };\n Container.prototype.unwrap = function (element) {\n if (this.element.parentNode) {\n // Move passed element outside this element\n this.element.parentNode.insertBefore(element, this.element);\n // Remove this element\n this.element.parentNode.removeChild(this.element);\n }\n };\n Container.prototype.addLoadingState = function () {\n this.element.classList.add(this.classNames.loadingState);\n this.element.setAttribute('aria-busy', 'true');\n this.isLoading = true;\n };\n Container.prototype.removeLoadingState = function () {\n this.element.classList.remove(this.classNames.loadingState);\n this.element.removeAttribute('aria-busy');\n this.isLoading = false;\n };\n Container.prototype._onFocus = function () {\n this.isFocussed = true;\n };\n Container.prototype._onBlur = function () {\n this.isFocussed = false;\n };\n return Container;\n}();\nexports[\"default\"] = Container;\n\n/***/ }),\n\n/***/ 217:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar Dropdown = /** @class */function () {\n function Dropdown(_a) {\n var element = _a.element,\n type = _a.type,\n classNames = _a.classNames;\n this.element = element;\n this.classNames = classNames;\n this.type = type;\n this.isActive = false;\n }\n Object.defineProperty(Dropdown.prototype, \"distanceFromTopWindow\", {\n /**\n * Bottom position of dropdown in viewport coordinates\n */\n get: function () {\n return this.element.getBoundingClientRect().bottom;\n },\n enumerable: false,\n configurable: true\n });\n Dropdown.prototype.getChild = function (selector) {\n return this.element.querySelector(selector);\n };\n /**\n * Show dropdown to user by adding active state class\n */\n Dropdown.prototype.show = function () {\n this.element.classList.add(this.classNames.activeState);\n this.element.setAttribute('aria-expanded', 'true');\n this.isActive = true;\n return this;\n };\n /**\n * Hide dropdown from user\n */\n Dropdown.prototype.hide = function () {\n this.element.classList.remove(this.classNames.activeState);\n this.element.setAttribute('aria-expanded', 'false');\n this.isActive = false;\n return this;\n };\n return Dropdown;\n}();\nexports[\"default\"] = Dropdown;\n\n/***/ }),\n\n/***/ 520:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.WrappedSelect = exports.WrappedInput = exports.List = exports.Input = exports.Container = exports.Dropdown = void 0;\nvar dropdown_1 = __importDefault(__webpack_require__(217));\nexports.Dropdown = dropdown_1.default;\nvar container_1 = __importDefault(__webpack_require__(613));\nexports.Container = container_1.default;\nvar input_1 = __importDefault(__webpack_require__(11));\nexports.Input = input_1.default;\nvar list_1 = __importDefault(__webpack_require__(624));\nexports.List = list_1.default;\nvar wrapped_input_1 = __importDefault(__webpack_require__(541));\nexports.WrappedInput = wrapped_input_1.default;\nvar wrapped_select_1 = __importDefault(__webpack_require__(982));\nexports.WrappedSelect = wrapped_select_1.default;\n\n/***/ }),\n\n/***/ 11:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar constants_1 = __webpack_require__(883);\nvar Input = /** @class */function () {\n function Input(_a) {\n var element = _a.element,\n type = _a.type,\n classNames = _a.classNames,\n preventPaste = _a.preventPaste;\n this.element = element;\n this.type = type;\n this.classNames = classNames;\n this.preventPaste = preventPaste;\n this.isFocussed = this.element.isEqualNode(document.activeElement);\n this.isDisabled = element.disabled;\n this._onPaste = this._onPaste.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onBlur = this._onBlur.bind(this);\n }\n Object.defineProperty(Input.prototype, \"placeholder\", {\n set: function (placeholder) {\n this.element.placeholder = placeholder;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Input.prototype, \"value\", {\n get: function () {\n return (0, utils_1.sanitise)(this.element.value);\n },\n set: function (value) {\n this.element.value = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Input.prototype, \"rawValue\", {\n get: function () {\n return this.element.value;\n },\n enumerable: false,\n configurable: true\n });\n Input.prototype.addEventListeners = function () {\n this.element.addEventListener('paste', this._onPaste);\n this.element.addEventListener('input', this._onInput, {\n passive: true\n });\n this.element.addEventListener('focus', this._onFocus, {\n passive: true\n });\n this.element.addEventListener('blur', this._onBlur, {\n passive: true\n });\n };\n Input.prototype.removeEventListeners = function () {\n this.element.removeEventListener('input', this._onInput);\n this.element.removeEventListener('paste', this._onPaste);\n this.element.removeEventListener('focus', this._onFocus);\n this.element.removeEventListener('blur', this._onBlur);\n };\n Input.prototype.enable = function () {\n this.element.removeAttribute('disabled');\n this.isDisabled = false;\n };\n Input.prototype.disable = function () {\n this.element.setAttribute('disabled', '');\n this.isDisabled = true;\n };\n Input.prototype.focus = function () {\n if (!this.isFocussed) {\n this.element.focus();\n }\n };\n Input.prototype.blur = function () {\n if (this.isFocussed) {\n this.element.blur();\n }\n };\n Input.prototype.clear = function (setWidth) {\n if (setWidth === void 0) {\n setWidth = true;\n }\n if (this.element.value) {\n this.element.value = '';\n }\n if (setWidth) {\n this.setWidth();\n }\n return this;\n };\n /**\n * Set the correct input width based on placeholder\n * value or input value\n */\n Input.prototype.setWidth = function () {\n // Resize input to contents or placeholder\n var _a = this.element,\n style = _a.style,\n value = _a.value,\n placeholder = _a.placeholder;\n style.minWidth = \"\".concat(placeholder.length + 1, \"ch\");\n style.width = \"\".concat(value.length + 1, \"ch\");\n };\n Input.prototype.setActiveDescendant = function (activeDescendantID) {\n this.element.setAttribute('aria-activedescendant', activeDescendantID);\n };\n Input.prototype.removeActiveDescendant = function () {\n this.element.removeAttribute('aria-activedescendant');\n };\n Input.prototype._onInput = function () {\n if (this.type !== constants_1.SELECT_ONE_TYPE) {\n this.setWidth();\n }\n };\n Input.prototype._onPaste = function (event) {\n if (this.preventPaste) {\n event.preventDefault();\n }\n };\n Input.prototype._onFocus = function () {\n this.isFocussed = true;\n };\n Input.prototype._onBlur = function () {\n this.isFocussed = false;\n };\n return Input;\n}();\nexports[\"default\"] = Input;\n\n/***/ }),\n\n/***/ 624:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar constants_1 = __webpack_require__(883);\nvar List = /** @class */function () {\n function List(_a) {\n var element = _a.element;\n this.element = element;\n this.scrollPos = this.element.scrollTop;\n this.height = this.element.offsetHeight;\n }\n List.prototype.clear = function () {\n this.element.innerHTML = '';\n };\n List.prototype.append = function (node) {\n this.element.appendChild(node);\n };\n List.prototype.getChild = function (selector) {\n return this.element.querySelector(selector);\n };\n List.prototype.hasChildren = function () {\n return this.element.hasChildNodes();\n };\n List.prototype.scrollToTop = function () {\n this.element.scrollTop = 0;\n };\n List.prototype.scrollToChildElement = function (element, direction) {\n var _this = this;\n if (!element) {\n return;\n }\n var listHeight = this.element.offsetHeight;\n // Scroll position of dropdown\n var listScrollPosition = this.element.scrollTop + listHeight;\n var elementHeight = element.offsetHeight;\n // Distance from bottom of element to top of parent\n var elementPos = element.offsetTop + elementHeight;\n // Difference between the element and scroll position\n var destination = direction > 0 ? this.element.scrollTop + elementPos - listScrollPosition : element.offsetTop;\n requestAnimationFrame(function () {\n _this._animateScroll(destination, direction);\n });\n };\n List.prototype._scrollDown = function (scrollPos, strength, destination) {\n var easing = (destination - scrollPos) / strength;\n var distance = easing > 1 ? easing : 1;\n this.element.scrollTop = scrollPos + distance;\n };\n List.prototype._scrollUp = function (scrollPos, strength, destination) {\n var easing = (scrollPos - destination) / strength;\n var distance = easing > 1 ? easing : 1;\n this.element.scrollTop = scrollPos - distance;\n };\n List.prototype._animateScroll = function (destination, direction) {\n var _this = this;\n var strength = constants_1.SCROLLING_SPEED;\n var choiceListScrollTop = this.element.scrollTop;\n var continueAnimation = false;\n if (direction > 0) {\n this._scrollDown(choiceListScrollTop, strength, destination);\n if (choiceListScrollTop < destination) {\n continueAnimation = true;\n }\n } else {\n this._scrollUp(choiceListScrollTop, strength, destination);\n if (choiceListScrollTop > destination) {\n continueAnimation = true;\n }\n }\n if (continueAnimation) {\n requestAnimationFrame(function () {\n _this._animateScroll(destination, direction);\n });\n }\n };\n return List;\n}();\nexports[\"default\"] = List;\n\n/***/ }),\n\n/***/ 730:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar WrappedElement = /** @class */function () {\n function WrappedElement(_a) {\n var element = _a.element,\n classNames = _a.classNames;\n this.element = element;\n this.classNames = classNames;\n if (!(element instanceof HTMLInputElement) && !(element instanceof HTMLSelectElement)) {\n throw new TypeError('Invalid element passed');\n }\n this.isDisabled = false;\n }\n Object.defineProperty(WrappedElement.prototype, \"isActive\", {\n get: function () {\n return this.element.dataset.choice === 'active';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WrappedElement.prototype, \"dir\", {\n get: function () {\n return this.element.dir;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WrappedElement.prototype, \"value\", {\n get: function () {\n return this.element.value;\n },\n set: function (value) {\n // you must define setter here otherwise it will be readonly property\n this.element.value = value;\n },\n enumerable: false,\n configurable: true\n });\n WrappedElement.prototype.conceal = function () {\n // Hide passed input\n this.element.classList.add(this.classNames.input);\n this.element.hidden = true;\n // Remove element from tab index\n this.element.tabIndex = -1;\n // Backup original styles if any\n var origStyle = this.element.getAttribute('style');\n if (origStyle) {\n this.element.setAttribute('data-choice-orig-style', origStyle);\n }\n this.element.setAttribute('data-choice', 'active');\n };\n WrappedElement.prototype.reveal = function () {\n // Reinstate passed element\n this.element.classList.remove(this.classNames.input);\n this.element.hidden = false;\n this.element.removeAttribute('tabindex');\n // Recover original styles if any\n var origStyle = this.element.getAttribute('data-choice-orig-style');\n if (origStyle) {\n this.element.removeAttribute('data-choice-orig-style');\n this.element.setAttribute('style', origStyle);\n } else {\n this.element.removeAttribute('style');\n }\n this.element.removeAttribute('data-choice');\n // Re-assign values - this is weird, I know\n // @todo Figure out why we need to do this\n this.element.value = this.element.value; // eslint-disable-line no-self-assign\n };\n\n WrappedElement.prototype.enable = function () {\n this.element.removeAttribute('disabled');\n this.element.disabled = false;\n this.isDisabled = false;\n };\n WrappedElement.prototype.disable = function () {\n this.element.setAttribute('disabled', '');\n this.element.disabled = true;\n this.isDisabled = true;\n };\n WrappedElement.prototype.triggerEvent = function (eventType, data) {\n (0, utils_1.dispatchEvent)(this.element, eventType, data);\n };\n return WrappedElement;\n}();\nexports[\"default\"] = WrappedElement;\n\n/***/ }),\n\n/***/ 541:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __extends = this && this.__extends || function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar wrapped_element_1 = __importDefault(__webpack_require__(730));\nvar WrappedInput = /** @class */function (_super) {\n __extends(WrappedInput, _super);\n function WrappedInput(_a) {\n var element = _a.element,\n classNames = _a.classNames,\n delimiter = _a.delimiter;\n var _this = _super.call(this, {\n element: element,\n classNames: classNames\n }) || this;\n _this.delimiter = delimiter;\n return _this;\n }\n Object.defineProperty(WrappedInput.prototype, \"value\", {\n get: function () {\n return this.element.value;\n },\n set: function (value) {\n this.element.setAttribute('value', value);\n this.element.value = value;\n },\n enumerable: false,\n configurable: true\n });\n return WrappedInput;\n}(wrapped_element_1.default);\nexports[\"default\"] = WrappedInput;\n\n/***/ }),\n\n/***/ 982:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __extends = this && this.__extends || function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar wrapped_element_1 = __importDefault(__webpack_require__(730));\nvar WrappedSelect = /** @class */function (_super) {\n __extends(WrappedSelect, _super);\n function WrappedSelect(_a) {\n var element = _a.element,\n classNames = _a.classNames,\n template = _a.template;\n var _this = _super.call(this, {\n element: element,\n classNames: classNames\n }) || this;\n _this.template = template;\n return _this;\n }\n Object.defineProperty(WrappedSelect.prototype, \"placeholderOption\", {\n get: function () {\n return this.element.querySelector('option[value=\"\"]') ||\n // Backward compatibility layer for the non-standard placeholder attribute supported in older versions.\n this.element.querySelector('option[placeholder]');\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WrappedSelect.prototype, \"optionGroups\", {\n get: function () {\n return Array.from(this.element.getElementsByTagName('OPTGROUP'));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WrappedSelect.prototype, \"options\", {\n get: function () {\n return Array.from(this.element.options);\n },\n set: function (options) {\n var _this = this;\n var fragment = document.createDocumentFragment();\n var addOptionToFragment = function (data) {\n // Create a standard select option\n var option = _this.template(data);\n // Append it to fragment\n fragment.appendChild(option);\n };\n // Add each list item to list\n options.forEach(function (optionData) {\n return addOptionToFragment(optionData);\n });\n this.appendDocFragment(fragment);\n },\n enumerable: false,\n configurable: true\n });\n WrappedSelect.prototype.appendDocFragment = function (fragment) {\n this.element.innerHTML = '';\n this.element.appendChild(fragment);\n };\n return WrappedSelect;\n}(wrapped_element_1.default);\nexports[\"default\"] = WrappedSelect;\n\n/***/ }),\n\n/***/ 883:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SCROLLING_SPEED = exports.SELECT_MULTIPLE_TYPE = exports.SELECT_ONE_TYPE = exports.TEXT_TYPE = exports.KEY_CODES = exports.ACTION_TYPES = exports.EVENTS = void 0;\nexports.EVENTS = {\n showDropdown: 'showDropdown',\n hideDropdown: 'hideDropdown',\n change: 'change',\n choice: 'choice',\n search: 'search',\n addItem: 'addItem',\n removeItem: 'removeItem',\n highlightItem: 'highlightItem',\n highlightChoice: 'highlightChoice',\n unhighlightItem: 'unhighlightItem'\n};\nexports.ACTION_TYPES = {\n ADD_CHOICE: 'ADD_CHOICE',\n FILTER_CHOICES: 'FILTER_CHOICES',\n ACTIVATE_CHOICES: 'ACTIVATE_CHOICES',\n CLEAR_CHOICES: 'CLEAR_CHOICES',\n ADD_GROUP: 'ADD_GROUP',\n ADD_ITEM: 'ADD_ITEM',\n REMOVE_ITEM: 'REMOVE_ITEM',\n HIGHLIGHT_ITEM: 'HIGHLIGHT_ITEM',\n CLEAR_ALL: 'CLEAR_ALL',\n RESET_TO: 'RESET_TO',\n SET_IS_LOADING: 'SET_IS_LOADING'\n};\nexports.KEY_CODES = {\n BACK_KEY: 46,\n DELETE_KEY: 8,\n ENTER_KEY: 13,\n A_KEY: 65,\n ESC_KEY: 27,\n UP_KEY: 38,\n DOWN_KEY: 40,\n PAGE_UP_KEY: 33,\n PAGE_DOWN_KEY: 34\n};\nexports.TEXT_TYPE = 'text';\nexports.SELECT_ONE_TYPE = 'select-one';\nexports.SELECT_MULTIPLE_TYPE = 'select-multiple';\nexports.SCROLLING_SPEED = 4;\n\n/***/ }),\n\n/***/ 789:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DEFAULT_CONFIG = exports.DEFAULT_CLASSNAMES = void 0;\nvar utils_1 = __webpack_require__(799);\nexports.DEFAULT_CLASSNAMES = {\n containerOuter: 'choices',\n containerInner: 'choices__inner',\n input: 'choices__input',\n inputCloned: 'choices__input--cloned',\n list: 'choices__list',\n listItems: 'choices__list--multiple',\n listSingle: 'choices__list--single',\n listDropdown: 'choices__list--dropdown',\n item: 'choices__item',\n itemSelectable: 'choices__item--selectable',\n itemDisabled: 'choices__item--disabled',\n itemChoice: 'choices__item--choice',\n placeholder: 'choices__placeholder',\n group: 'choices__group',\n groupHeading: 'choices__heading',\n button: 'choices__button',\n activeState: 'is-active',\n focusState: 'is-focused',\n openState: 'is-open',\n disabledState: 'is-disabled',\n highlightedState: 'is-highlighted',\n selectedState: 'is-selected',\n flippedState: 'is-flipped',\n loadingState: 'is-loading',\n noResults: 'has-no-results',\n noChoices: 'has-no-choices'\n};\nexports.DEFAULT_CONFIG = {\n items: [],\n choices: [],\n silent: false,\n renderChoiceLimit: -1,\n maxItemCount: -1,\n addItems: true,\n addItemFilter: null,\n removeItems: true,\n removeItemButton: false,\n editItems: false,\n allowHTML: true,\n duplicateItemsAllowed: true,\n delimiter: ',',\n paste: true,\n searchEnabled: true,\n searchChoices: true,\n searchFloor: 1,\n searchResultLimit: 4,\n searchFields: ['label', 'value'],\n position: 'auto',\n resetScrollPosition: true,\n shouldSort: true,\n shouldSortItems: false,\n sorter: utils_1.sortByAlpha,\n shadowRoot: null,\n placeholder: true,\n placeholderValue: null,\n searchPlaceholderValue: null,\n prependValue: null,\n appendValue: null,\n renderSelectedChoices: 'auto',\n loadingText: 'Loading...',\n noResultsText: 'No results found',\n noChoicesText: 'No choices to choose from',\n itemSelectText: 'Press to select',\n uniqueItemText: 'Only unique values can be added',\n customAddItemText: 'Only values matching specific conditions can be added',\n addItemText: function (value) {\n return \"Press Enter to add \\\"\".concat((0, utils_1.sanitise)(value), \"\\\"\");\n },\n maxItemText: function (maxItemCount) {\n return \"Only \".concat(maxItemCount, \" values can be added\");\n },\n valueComparer: function (value1, value2) {\n return value1 === value2;\n },\n fuseOptions: {\n includeScore: true\n },\n labelId: '',\n callbackOnInit: null,\n callbackOnCreateTemplates: null,\n classNames: exports.DEFAULT_CLASSNAMES\n};\n\n/***/ }),\n\n/***/ 18:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 978:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 948:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 359:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 285:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 533:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 187:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = {\n enumerable: true,\n get: function () {\n return m[k];\n }\n };\n }\n Object.defineProperty(o, k2, desc);\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n__exportStar(__webpack_require__(18), exports);\n__exportStar(__webpack_require__(978), exports);\n__exportStar(__webpack_require__(948), exports);\n__exportStar(__webpack_require__(359), exports);\n__exportStar(__webpack_require__(285), exports);\n__exportStar(__webpack_require__(533), exports);\n__exportStar(__webpack_require__(287), exports);\n__exportStar(__webpack_require__(132), exports);\n__exportStar(__webpack_require__(837), exports);\n__exportStar(__webpack_require__(598), exports);\n__exportStar(__webpack_require__(369), exports);\n__exportStar(__webpack_require__(37), exports);\n__exportStar(__webpack_require__(47), exports);\n__exportStar(__webpack_require__(923), exports);\n__exportStar(__webpack_require__(876), exports);\n\n/***/ }),\n\n/***/ 287:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 132:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 837:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 598:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 37:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 369:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 47:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 923:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 876:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n/***/ }),\n\n/***/ 799:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.parseCustomProperties = exports.diff = exports.cloneObject = exports.existsInArray = exports.dispatchEvent = exports.sortByScore = exports.sortByAlpha = exports.strToEl = exports.sanitise = exports.isScrolledIntoView = exports.getAdjacentEl = exports.wrap = exports.isType = exports.getType = exports.generateId = exports.generateChars = exports.getRandomNumber = void 0;\nvar getRandomNumber = function (min, max) {\n return Math.floor(Math.random() * (max - min) + min);\n};\nexports.getRandomNumber = getRandomNumber;\nvar generateChars = function (length) {\n return Array.from({\n length: length\n }, function () {\n return (0, exports.getRandomNumber)(0, 36).toString(36);\n }).join('');\n};\nexports.generateChars = generateChars;\nvar generateId = function (element, prefix) {\n var id = element.id || element.name && \"\".concat(element.name, \"-\").concat((0, exports.generateChars)(2)) || (0, exports.generateChars)(4);\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n id = \"\".concat(prefix, \"-\").concat(id);\n return id;\n};\nexports.generateId = generateId;\nvar getType = function (obj) {\n return Object.prototype.toString.call(obj).slice(8, -1);\n};\nexports.getType = getType;\nvar isType = function (type, obj) {\n return obj !== undefined && obj !== null && (0, exports.getType)(obj) === type;\n};\nexports.isType = isType;\nvar wrap = function (element, wrapper) {\n if (wrapper === void 0) {\n wrapper = document.createElement('div');\n }\n if (element.parentNode) {\n if (element.nextSibling) {\n element.parentNode.insertBefore(wrapper, element.nextSibling);\n } else {\n element.parentNode.appendChild(wrapper);\n }\n }\n return wrapper.appendChild(element);\n};\nexports.wrap = wrap;\nvar getAdjacentEl = function (startEl, selector, direction) {\n if (direction === void 0) {\n direction = 1;\n }\n var prop = \"\".concat(direction > 0 ? 'next' : 'previous', \"ElementSibling\");\n var sibling = startEl[prop];\n while (sibling) {\n if (sibling.matches(selector)) {\n return sibling;\n }\n sibling = sibling[prop];\n }\n return sibling;\n};\nexports.getAdjacentEl = getAdjacentEl;\nvar isScrolledIntoView = function (element, parent, direction) {\n if (direction === void 0) {\n direction = 1;\n }\n if (!element) {\n return false;\n }\n var isVisible;\n if (direction > 0) {\n // In view from bottom\n isVisible = parent.scrollTop + parent.offsetHeight >= element.offsetTop + element.offsetHeight;\n } else {\n // In view from top\n isVisible = element.offsetTop >= parent.scrollTop;\n }\n return isVisible;\n};\nexports.isScrolledIntoView = isScrolledIntoView;\nvar sanitise = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n return value.replace(/&/g, '&').replace(/>/g, '>').replace(/ -1) {\n return state.map(function (obj) {\n var choice = obj;\n if (choice.id === parseInt(\"\".concat(addItemAction_1.choiceId), 10)) {\n choice.selected = true;\n }\n return choice;\n });\n }\n return state;\n }\n case 'REMOVE_ITEM':\n {\n var removeItemAction_1 = action;\n // When an item is removed and it has an associated choice,\n // we want to re-enable it so it can be chosen again\n if (removeItemAction_1.choiceId && removeItemAction_1.choiceId > -1) {\n return state.map(function (obj) {\n var choice = obj;\n if (choice.id === parseInt(\"\".concat(removeItemAction_1.choiceId), 10)) {\n choice.selected = false;\n }\n return choice;\n });\n }\n return state;\n }\n case 'FILTER_CHOICES':\n {\n var filterChoicesAction_1 = action;\n return state.map(function (obj) {\n var choice = obj;\n // Set active state based on whether choice is\n // within filtered results\n choice.active = filterChoicesAction_1.results.some(function (_a) {\n var item = _a.item,\n score = _a.score;\n if (item.id === choice.id) {\n choice.score = score;\n return true;\n }\n return false;\n });\n return choice;\n });\n }\n case 'ACTIVATE_CHOICES':\n {\n var activateChoicesAction_1 = action;\n return state.map(function (obj) {\n var choice = obj;\n choice.active = activateChoicesAction_1.active;\n return choice;\n });\n }\n case 'CLEAR_CHOICES':\n {\n return exports.defaultState;\n }\n default:\n {\n return state;\n }\n }\n}\nexports[\"default\"] = choices;\n\n/***/ }),\n\n/***/ 871:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = [];\nfunction groups(state, action) {\n if (state === void 0) {\n state = exports.defaultState;\n }\n if (action === void 0) {\n action = {};\n }\n switch (action.type) {\n case 'ADD_GROUP':\n {\n var addGroupAction = action;\n return __spreadArray(__spreadArray([], state, true), [{\n id: addGroupAction.id,\n value: addGroupAction.value,\n active: addGroupAction.active,\n disabled: addGroupAction.disabled\n }], false);\n }\n case 'CLEAR_CHOICES':\n {\n return [];\n }\n default:\n {\n return state;\n }\n }\n}\nexports[\"default\"] = groups;\n\n/***/ }),\n\n/***/ 655:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.defaultState = void 0;\nvar redux_1 = __webpack_require__(791);\nvar items_1 = __importDefault(__webpack_require__(52));\nvar groups_1 = __importDefault(__webpack_require__(871));\nvar choices_1 = __importDefault(__webpack_require__(273));\nvar loading_1 = __importDefault(__webpack_require__(502));\nvar utils_1 = __webpack_require__(799);\nexports.defaultState = {\n groups: [],\n items: [],\n choices: [],\n loading: false\n};\nvar appReducer = (0, redux_1.combineReducers)({\n items: items_1.default,\n groups: groups_1.default,\n choices: choices_1.default,\n loading: loading_1.default\n});\nvar rootReducer = function (passedState, action) {\n var state = passedState;\n // If we are clearing all items, groups and options we reassign\n // state and then pass that state to our proper reducer. This isn't\n // mutating our actual state\n // See: http://stackoverflow.com/a/35641992\n if (action.type === 'CLEAR_ALL') {\n state = exports.defaultState;\n } else if (action.type === 'RESET_TO') {\n return (0, utils_1.cloneObject)(action.state);\n }\n return appReducer(state, action);\n};\nexports[\"default\"] = rootReducer;\n\n/***/ }),\n\n/***/ 52:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = [];\nfunction items(state, action) {\n if (state === void 0) {\n state = exports.defaultState;\n }\n if (action === void 0) {\n action = {};\n }\n switch (action.type) {\n case 'ADD_ITEM':\n {\n var addItemAction = action;\n // Add object to items array\n var newState = __spreadArray(__spreadArray([], state, true), [{\n id: addItemAction.id,\n choiceId: addItemAction.choiceId,\n groupId: addItemAction.groupId,\n value: addItemAction.value,\n label: addItemAction.label,\n active: true,\n highlighted: false,\n customProperties: addItemAction.customProperties,\n placeholder: addItemAction.placeholder || false,\n keyCode: null\n }], false);\n return newState.map(function (obj) {\n var item = obj;\n item.highlighted = false;\n return item;\n });\n }\n case 'REMOVE_ITEM':\n {\n // Set item to inactive\n return state.map(function (obj) {\n var item = obj;\n if (item.id === action.id) {\n item.active = false;\n }\n return item;\n });\n }\n case 'HIGHLIGHT_ITEM':\n {\n var highlightItemAction_1 = action;\n return state.map(function (obj) {\n var item = obj;\n if (item.id === highlightItemAction_1.id) {\n item.highlighted = highlightItemAction_1.highlighted;\n }\n return item;\n });\n }\n default:\n {\n return state;\n }\n }\n}\nexports[\"default\"] = items;\n\n/***/ }),\n\n/***/ 502:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = false;\nvar general = function (state, action) {\n if (state === void 0) {\n state = exports.defaultState;\n }\n if (action === void 0) {\n action = {};\n }\n switch (action.type) {\n case 'SET_IS_LOADING':\n {\n return action.isLoading;\n }\n default:\n {\n return state;\n }\n }\n};\nexports[\"default\"] = general;\n\n/***/ }),\n\n/***/ 744:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar redux_1 = __webpack_require__(791);\nvar index_1 = __importDefault(__webpack_require__(655));\nvar Store = /** @class */function () {\n function Store() {\n this._store = (0, redux_1.createStore)(index_1.default, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());\n }\n /**\n * Subscribe store to function call (wrapped Redux method)\n */\n Store.prototype.subscribe = function (onChange) {\n this._store.subscribe(onChange);\n };\n /**\n * Dispatch event to store (wrapped Redux method)\n */\n Store.prototype.dispatch = function (action) {\n this._store.dispatch(action);\n };\n Object.defineProperty(Store.prototype, \"state\", {\n /**\n * Get store object (wrapping Redux method)\n */\n get: function () {\n return this._store.getState();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"items\", {\n /**\n * Get items from store\n */\n get: function () {\n return this.state.items;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"activeItems\", {\n /**\n * Get active items from store\n */\n get: function () {\n return this.items.filter(function (item) {\n return item.active === true;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"highlightedActiveItems\", {\n /**\n * Get highlighted items from store\n */\n get: function () {\n return this.items.filter(function (item) {\n return item.active && item.highlighted;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"choices\", {\n /**\n * Get choices from store\n */\n get: function () {\n return this.state.choices;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"activeChoices\", {\n /**\n * Get active choices from store\n */\n get: function () {\n return this.choices.filter(function (choice) {\n return choice.active === true;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"selectableChoices\", {\n /**\n * Get selectable choices from store\n */\n get: function () {\n return this.choices.filter(function (choice) {\n return choice.disabled !== true;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"searchableChoices\", {\n /**\n * Get choices that can be searched (excluding placeholders)\n */\n get: function () {\n return this.selectableChoices.filter(function (choice) {\n return choice.placeholder !== true;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"placeholderChoice\", {\n /**\n * Get placeholder choice from store\n */\n get: function () {\n return __spreadArray([], this.choices, true).reverse().find(function (choice) {\n return choice.placeholder === true;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"groups\", {\n /**\n * Get groups from store\n */\n get: function () {\n return this.state.groups;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Store.prototype, \"activeGroups\", {\n /**\n * Get active groups from store\n */\n get: function () {\n var _a = this,\n groups = _a.groups,\n choices = _a.choices;\n return groups.filter(function (group) {\n var isActive = group.active === true && group.disabled === false;\n var hasActiveOptions = choices.some(function (choice) {\n return choice.active === true && choice.disabled === false;\n });\n return isActive && hasActiveOptions;\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get loading state from store\n */\n Store.prototype.isLoading = function () {\n return this.state.loading;\n };\n /**\n * Get single choice by it's ID\n */\n Store.prototype.getChoiceById = function (id) {\n return this.activeChoices.find(function (choice) {\n return choice.id === parseInt(id, 10);\n });\n };\n /**\n * Get group by group id\n */\n Store.prototype.getGroupById = function (id) {\n return this.groups.find(function (group) {\n return group.id === id;\n });\n };\n return Store;\n}();\nexports[\"default\"] = Store;\n\n/***/ }),\n\n/***/ 686:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\n/**\n * Helpers to create HTML elements used by Choices\n * Can be overridden by providing `callbackOnCreateTemplates` option\n */\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar templates = {\n containerOuter: function (_a, dir, isSelectElement, isSelectOneElement, searchEnabled, passedElementType, labelId) {\n var containerOuter = _a.classNames.containerOuter;\n var div = Object.assign(document.createElement('div'), {\n className: containerOuter\n });\n div.dataset.type = passedElementType;\n if (dir) {\n div.dir = dir;\n }\n if (isSelectOneElement) {\n div.tabIndex = 0;\n }\n if (isSelectElement) {\n div.setAttribute('role', searchEnabled ? 'combobox' : 'listbox');\n if (searchEnabled) {\n div.setAttribute('aria-autocomplete', 'list');\n }\n }\n div.setAttribute('aria-haspopup', 'true');\n div.setAttribute('aria-expanded', 'false');\n if (labelId) {\n div.setAttribute('aria-labelledby', labelId);\n }\n return div;\n },\n containerInner: function (_a) {\n var containerInner = _a.classNames.containerInner;\n return Object.assign(document.createElement('div'), {\n className: containerInner\n });\n },\n itemList: function (_a, isSelectOneElement) {\n var _b = _a.classNames,\n list = _b.list,\n listSingle = _b.listSingle,\n listItems = _b.listItems;\n return Object.assign(document.createElement('div'), {\n className: \"\".concat(list, \" \").concat(isSelectOneElement ? listSingle : listItems)\n });\n },\n placeholder: function (_a, value) {\n var _b;\n var allowHTML = _a.allowHTML,\n placeholder = _a.classNames.placeholder;\n return Object.assign(document.createElement('div'), (_b = {\n className: placeholder\n }, _b[allowHTML ? 'innerHTML' : 'innerText'] = value, _b));\n },\n item: function (_a, _b, removeItemButton) {\n var _c, _d;\n var allowHTML = _a.allowHTML,\n _e = _a.classNames,\n item = _e.item,\n button = _e.button,\n highlightedState = _e.highlightedState,\n itemSelectable = _e.itemSelectable,\n placeholder = _e.placeholder;\n var id = _b.id,\n value = _b.value,\n label = _b.label,\n customProperties = _b.customProperties,\n active = _b.active,\n disabled = _b.disabled,\n highlighted = _b.highlighted,\n isPlaceholder = _b.placeholder;\n var div = Object.assign(document.createElement('div'), (_c = {\n className: item\n }, _c[allowHTML ? 'innerHTML' : 'innerText'] = label, _c));\n Object.assign(div.dataset, {\n item: '',\n id: id,\n value: value,\n customProperties: customProperties\n });\n if (active) {\n div.setAttribute('aria-selected', 'true');\n }\n if (disabled) {\n div.setAttribute('aria-disabled', 'true');\n }\n if (isPlaceholder) {\n div.classList.add(placeholder);\n }\n div.classList.add(highlighted ? highlightedState : itemSelectable);\n if (removeItemButton) {\n if (disabled) {\n div.classList.remove(itemSelectable);\n }\n div.dataset.deletable = '';\n /** @todo This MUST be localizable, not hardcoded! */\n var REMOVE_ITEM_TEXT = 'Remove item';\n var removeButton = Object.assign(document.createElement('button'), (_d = {\n type: 'button',\n className: button\n }, _d[allowHTML ? 'innerHTML' : 'innerText'] = REMOVE_ITEM_TEXT, _d));\n removeButton.setAttribute('aria-label', \"\".concat(REMOVE_ITEM_TEXT, \": '\").concat(value, \"'\"));\n removeButton.dataset.button = '';\n div.appendChild(removeButton);\n }\n return div;\n },\n choiceList: function (_a, isSelectOneElement) {\n var list = _a.classNames.list;\n var div = Object.assign(document.createElement('div'), {\n className: list\n });\n if (!isSelectOneElement) {\n div.setAttribute('aria-multiselectable', 'true');\n }\n div.setAttribute('role', 'listbox');\n return div;\n },\n choiceGroup: function (_a, _b) {\n var _c;\n var allowHTML = _a.allowHTML,\n _d = _a.classNames,\n group = _d.group,\n groupHeading = _d.groupHeading,\n itemDisabled = _d.itemDisabled;\n var id = _b.id,\n value = _b.value,\n disabled = _b.disabled;\n var div = Object.assign(document.createElement('div'), {\n className: \"\".concat(group, \" \").concat(disabled ? itemDisabled : '')\n });\n div.setAttribute('role', 'group');\n Object.assign(div.dataset, {\n group: '',\n id: id,\n value: value\n });\n if (disabled) {\n div.setAttribute('aria-disabled', 'true');\n }\n div.appendChild(Object.assign(document.createElement('div'), (_c = {\n className: groupHeading\n }, _c[allowHTML ? 'innerHTML' : 'innerText'] = value, _c)));\n return div;\n },\n choice: function (_a, _b, selectText) {\n var _c;\n var allowHTML = _a.allowHTML,\n _d = _a.classNames,\n item = _d.item,\n itemChoice = _d.itemChoice,\n itemSelectable = _d.itemSelectable,\n selectedState = _d.selectedState,\n itemDisabled = _d.itemDisabled,\n placeholder = _d.placeholder;\n var id = _b.id,\n value = _b.value,\n label = _b.label,\n groupId = _b.groupId,\n elementId = _b.elementId,\n isDisabled = _b.disabled,\n isSelected = _b.selected,\n isPlaceholder = _b.placeholder;\n var div = Object.assign(document.createElement('div'), (_c = {\n id: elementId\n }, _c[allowHTML ? 'innerHTML' : 'innerText'] = label, _c.className = \"\".concat(item, \" \").concat(itemChoice), _c));\n if (isSelected) {\n div.classList.add(selectedState);\n }\n if (isPlaceholder) {\n div.classList.add(placeholder);\n }\n div.setAttribute('role', groupId && groupId > 0 ? 'treeitem' : 'option');\n Object.assign(div.dataset, {\n choice: '',\n id: id,\n value: value,\n selectText: selectText\n });\n if (isDisabled) {\n div.classList.add(itemDisabled);\n div.dataset.choiceDisabled = '';\n div.setAttribute('aria-disabled', 'true');\n } else {\n div.classList.add(itemSelectable);\n div.dataset.choiceSelectable = '';\n }\n return div;\n },\n input: function (_a, placeholderValue) {\n var _b = _a.classNames,\n input = _b.input,\n inputCloned = _b.inputCloned;\n var inp = Object.assign(document.createElement('input'), {\n type: 'text',\n name: 'search_terms',\n className: \"\".concat(input, \" \").concat(inputCloned),\n autocomplete: 'off',\n autocapitalize: 'off',\n spellcheck: false\n });\n inp.setAttribute('role', 'textbox');\n inp.setAttribute('aria-autocomplete', 'list');\n inp.setAttribute('aria-label', placeholderValue);\n return inp;\n },\n dropdown: function (_a) {\n var _b = _a.classNames,\n list = _b.list,\n listDropdown = _b.listDropdown;\n var div = document.createElement('div');\n div.classList.add(list, listDropdown);\n div.setAttribute('aria-expanded', 'false');\n return div;\n },\n notice: function (_a, innerText, type) {\n var _b;\n var allowHTML = _a.allowHTML,\n _c = _a.classNames,\n item = _c.item,\n itemChoice = _c.itemChoice,\n noResults = _c.noResults,\n noChoices = _c.noChoices;\n if (type === void 0) {\n type = '';\n }\n var classes = [item, itemChoice];\n if (type === 'no-choices') {\n classes.push(noChoices);\n } else if (type === 'no-results') {\n classes.push(noResults);\n }\n return Object.assign(document.createElement('div'), (_b = {}, _b[allowHTML ? 'innerHTML' : 'innerText'] = innerText, _b.className = classes.join(' '), _b));\n },\n option: function (_a) {\n var label = _a.label,\n value = _a.value,\n customProperties = _a.customProperties,\n active = _a.active,\n disabled = _a.disabled;\n var opt = new Option(label, value, false, active);\n if (customProperties) {\n opt.dataset.customProperties = \"\".concat(customProperties);\n }\n opt.disabled = !!disabled;\n return opt;\n }\n};\nexports[\"default\"] = templates;\n\n/***/ }),\n\n/***/ 996:\n/***/ ((module) => {\n\n\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n\n\n/***/ }),\n\n/***/ 221:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Fuse)\n/* harmony export */ });\n/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {}\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\n\n\n\n/***/ }),\n\n/***/ 791:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"__DO_NOT_USE__ActionTypes\": () => (/* binding */ ActionTypes),\n \"applyMiddleware\": () => (/* binding */ applyMiddleware),\n \"bindActionCreators\": () => (/* binding */ bindActionCreators),\n \"combineReducers\": () => (/* binding */ combineReducers),\n \"compose\": () => (/* binding */ compose),\n \"createStore\": () => (/* binding */ createStore),\n \"legacy_createStore\": () => (/* binding */ legacy_createStore)\n});\n\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\n\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\n;// CONCATENATED MODULE: ./node_modules/redux/es/redux.js\n\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (false) {}\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error( true ? formatProdErrorMessage(0) : 0);\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error( true ? formatProdErrorMessage(1) : 0);\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error( true ? formatProdErrorMessage(2) : 0);\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(3) : 0);\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error( true ? formatProdErrorMessage(4) : 0);\n }\n\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(5) : 0);\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(6) : 0);\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error( true ? formatProdErrorMessage(7) : 0);\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error( true ? formatProdErrorMessage(8) : 0);\n }\n\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(9) : 0);\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error( true ? formatProdErrorMessage(10) : 0);\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error( true ? formatProdErrorMessage(11) : 0);\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error( true ? formatProdErrorMessage(12) : 0);\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error( true ? formatProdErrorMessage(13) : 0);\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (false) {}\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (false) {}\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (false) { var warningMessage; }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error( true ? formatProdErrorMessage(14) : 0);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error( true ? formatProdErrorMessage(16) : 0);\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error( true ? formatProdErrorMessage(15) : 0);\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread2(_objectSpread2({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (false) {}\n\n\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _scripts_choices__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(373);\n/* harmony import */ var _scripts_choices__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_scripts_choices__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _scripts_interfaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(187);\n/* harmony import */ var _scripts_interfaces__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_scripts_interfaces__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _scripts_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(883);\n/* harmony import */ var _scripts_defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(789);\n/* harmony import */ var _scripts_templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(686);\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((_scripts_choices__WEBPACK_IMPORTED_MODULE_0___default()));\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar templates_1 = require(\"./templates\");\nexports.default = {\n framework: 'semantic',\n templates: templates_1.default,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar semantic_1 = require(\"./semantic\");\nexports.default = {\n semantic: semantic_1.default,\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n ' +\n((__t = (ctx.sidebar)) == null ? '' : __t) +\n'\\n
\\n
\\n ' +\n((__t = (ctx.form)) == null ? '' : __t) +\n'\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n ' +\n((__t = (ctx.html)) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
\\n ' +\n((__t = (ctx.html)) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n

' +\n((__t = (ctx.t(ctx.componentInfo.title))) == null ? '' : __t) +\n' ' +\n((__t = (ctx.t('Component'))) == null ? '' : __t) +\n'

\\n
\\n \\n
\\n
\\n
\\n ';\n if (!ctx.preview) { ;\n__p += '\\n
\\n \\n \\n \\n
\\n ';\n } ;\n__p += '\\n
\\n ';\n if (ctx.preview) { ;\n__p += '\\n
\\n
\\n ' +\n((__t = (ctx.t('Preview'))) == null ? '' : __t) +\n'\\n
\\n
\\n ' +\n((__t = (ctx.preview)) == null ? '' : __t) +\n'\\n
\\n ';\n if (ctx.componentInfo.help) { ;\n__p += '\\n
\\n ' +\n((__t = ( ctx.componentInfo.help )) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n \\n \\n \\n
\\n
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n Drag and Drop a form component\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n ctx.groups.forEach(function(group) { ;\n__p += '\\n ' +\n((__t = ( group )) == null ? '' : __t) +\n'\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n
\\n \\n ' +\n((__t = (ctx.t(ctx.group.title))) == null ? '' : __t) +\n'\\n \\n
\\n
\\n
\\n
\\n \\n
\\n ';\n ctx.group.componentOrder.forEach(function(componentKey) { ;\n__p += '\\n \\n ';\n if (ctx.group.components[componentKey].icon) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (ctx.t(ctx.group.components[componentKey].title))) == null ? '' : __t) +\n'\\n \\n ';\n }) ;\n__p += '\\n ' +\n((__t = (ctx.subgroups.join(''))) == null ? '' : __t) +\n'\\n
\\n
\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n
\\n ' +\n((__t = (ctx.sidebar)) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n ';\n ctx.pages.forEach(function(page, pageIndex) { ;\n__p += '\\n
\\n
/
\\n ';\n }) ;\n__p += '\\n
' +\n((__t = (ctx.t('Page'))) == null ? '' : __t) +\n'
\\n
\\n
\\n ' +\n((__t = (ctx.form)) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '<' +\n((__t = (ctx.input.type)) == null ? '' : __t) +\n'\\n ref=\"button\"\\n class=\"ui button ' +\n((__t = (ctx.transform('theme', ctx.component.theme))) == null ? '' : __t) +\n' ' +\n((__t = (ctx.component.customClass)) == null ? '' : __t) +\n'\"\\n ';\n for (var attr in ctx.input.attr) { ;\n__p += '\\n ' +\n((__t = (attr)) == null ? '' : __t) +\n'=\"' +\n((__t = (ctx.input.attr[attr])) == null ? '' : __t) +\n'\"\\n ';\n } ;\n__p += '\\n>\\n';\n if (ctx.component.leftIcon) { ;\n__p += ' ';\n } ;\n__p += '\\n' +\n((__t = (ctx.input.content)) == null ? '' : __t) +\n'\\n';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n';\n if (ctx.component.rightIcon) { ;\n__p += ' ';\n } ;\n__p += '\\n\\n
\\n \\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n <' +\n((__t = (ctx.input.type)) == null ? '' : __t) +\n'\\n ref=\"input\"\\n id=\"' +\n((__t = (ctx.id)) == null ? '' : __t) +\n'\"\\n ';\n for (var attr in ctx.input.attr) { ;\n__p += '\\n ' +\n((__t = (attr)) == null ? '' : __t) +\n'=\"' +\n((__t = (ctx.input.attr[attr])) == null ? '' : __t) +\n'\"\\n ';\n } ;\n__p += '\\n ';\n if (ctx.checked) { ;\n__p += 'checked=true';\n } ;\n__p += '\\n >\\n \\n \\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n
';\n if (ctx.checked) { ;\n__p += 'True';\n } else { ;\n__p += 'False';\n } ;\n__p += '
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n ctx.component.columns.forEach(function(column, index) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.columnComponents[index])) == null ? '' : __t) +\n'\\n
\\n ';\n }) ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n 'has-error': 'error',\n 'is-invalid': 'error',\n 'formio-tab-panel-active': 'active',\n 'formio-tab-link-active': 'active',\n 'formio-tab-link-container-active': 'active',\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ' +\n((__t = ( col.hideLabel ? '' : ctx.t(col.label || col.title) )) == null ? '' : __t) +\n'\\n ';\n if (col.tooltip) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.hasExtraColumn) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n ctx.rows.forEach(function(row, index) { ;\n__p += '\\n ';\n if (ctx.hasGroups && ctx.groups[index]) { ;\n__p += '\\n \\n ' +\n((__t = (ctx.groups[index].label)) == null ? '' : __t) +\n'\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (ctx.component.reorder) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n ctx.columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n ';\n if (ctx.hasExtraColumn) { ;\n__p += '\\n ';\n if (ctx.hasRemoveButtons) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (ctx.canAddColumn) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n } ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n if (ctx.hasAddButton && ctx.hasBottomSubmit) { ;\n__p += '\\n \\n \\n \\n \\n \\n ';\n } ;\n__p += '\\n
\\n ';\n if (ctx.hasAddButton && ctx.hasTopSubmit) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n \\n \\n ' +\n((__t = (row[col.key])) == null ? '' : __t) +\n'\\n \\n \\n \\n ' +\n((__t = (ctx.placeholder)) == null ? '' : __t) +\n'\\n
\\n \\n
\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (ctx.hasHeader) { ;\n__p += '\\n \\n \\n ';\n ctx.columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n ctx.rows.forEach(function(row) { ;\n__p += '\\n \\n ';\n ctx.columns.forEach(function(col) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
\\n ' +\n((__t = ( col.hideLabel ? '' : ctx.t(col.label || col.title) )) == null ? '' : __t) +\n'\\n ';\n if (col.tooltip) { ;\n__p += ' ';\n } ;\n__p += '\\n
\\n ' +\n((__t = (row[col.key])) == null ? '' : __t) +\n'\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (ctx.dayFirst && ctx.showDay) { ;\n__p += '\\n
\\n \\n ' +\n((__t = (ctx.day)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n ';\n if (ctx.showMonth) { ;\n__p += '\\n
\\n \\n ' +\n((__t = (ctx.month)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n ';\n if (!ctx.dayFirst && ctx.showDay) { ;\n__p += '\\n
\\n \\n ' +\n((__t = (ctx.day)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n ';\n if (ctx.showYear) { ;\n__p += '\\n
\\n \\n ' +\n((__t = (ctx.year)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (ctx.header) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.header)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n ';\n ctx.rows.forEach(function(row, rowIndex) { ;\n__p += '\\n
\\n ' +\n((__t = (row)) == null ? '' : __t) +\n'\\n ';\n if (ctx.openRows[rowIndex] && !ctx.readOnly) { ;\n__p += '\\n
\\n \\n ';\n if (ctx.component.removeRow) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n
\\n
\\n ' +\n((__t = (ctx.errors[rowIndex])) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n ';\n }) ;\n__p += '\\n ';\n if (ctx.footer) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.footer)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n';\n if (!ctx.readOnly && ctx.hasAddButton) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (ctx.header) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.header)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n ';\n ctx.rows.forEach(function(row, rowIndex) { ;\n__p += '\\n
\\n ' +\n((__t = (row)) == null ? '' : __t) +\n'\\n ';\n if (ctx.openRows[rowIndex] && !ctx.readOnly) { ;\n__p += '\\n
\\n \\n ';\n if (ctx.component.removeRow) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n
\\n
\\n ' +\n((__t = (ctx.errors[rowIndex])) == null ? '' : __t) +\n'\\n
\\n
\\n
\\n ';\n }) ;\n__p += '\\n ';\n if (ctx.footer) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.footer)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '

' +\n((__t = (ctx.t('error'))) == null ? '' : __t) +\n'

\\n
    \\n ';\n ctx.errors.forEach(function(err) { ;\n__p += '\\n ' +\n((__t = (err.message)) == null ? '' : __t) +\n'\\n ';\n }) ;\n__p += '\\n
\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n ';\n if (!ctx.label.hidden) { ;\n__p += '\\n
\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n\\n ';\n if (ctx.label.hidden && ctx.label.className && ctx.component.validate.required) { ;\n__p += '\\n
\\n \\n
\\n ';\n } ;\n__p += '\\n\\n
\\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n
\\n
\\n\\n';\n if (ctx.component.description) { ;\n__p += '\\n
' +\n((__t = (ctx.t(ctx.component.description))) == null ? '' : __t) +\n'
\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (!ctx.label.hidden && ctx.label.labelPosition !== 'bottom') { ;\n__p += '\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n\\n';\n if (ctx.label.hidden && ctx.label.className && ctx.component.validate.required) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n\\n' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n';\n if (!ctx.label.hidden && ctx.label.labelPosition === 'bottom') { ;\n__p += '\\n ' +\n((__t = ( ctx.labelMarkup )) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n';\n if (ctx.component.description) { ;\n__p += '\\n
' +\n((__t = (ctx.t(ctx.component.description))) == null ? '' : __t) +\n'
\\n';\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar align_ejs_1 = require(\"./align.ejs\");\nexports.default = { form: form_ejs_1.default, align: align_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
\\n \\n ' +\n((__t = (ctx.t(ctx.component.legend))) == null ? '' : __t) +\n'\\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.collapsed) { ;\n__p += '\\n
\\n ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'\\n
\\n ';\n } ;\n__p += '\\n
\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (!ctx.self.imageUpload) { ;\n__p += '\\n
\\n
\\n
\\n ';\n if (!ctx.disabled) { ;\n__p += '\\n
\\n ';\n } ;\n__p += '\\n
\\n
' +\n((__t = (ctx.t('Size'))) == null ? '' : __t) +\n'
\\n ';\n if (ctx.self.hasTypes) { ;\n__p += '\\n
' +\n((__t = (ctx.t('Type'))) == null ? '' : __t) +\n'
\\n ';\n } ;\n__p += '\\n
\\n
\\n ';\n ctx.files.forEach(function(file) { ;\n__p += '\\n
  • \\n
    \\n ';\n if (!ctx.disabled) { ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n
    ' +\n((__t = (file.originalName || file.name)) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n
    \\n
    ' +\n((__t = (ctx.fileSize(file.size))) == null ? '' : __t) +\n'
    \\n ';\n if (ctx.self.hasTypes && !ctx.disabled) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.self.hasTypes && ctx.disabled) { ;\n__p += '\\n
    ' +\n((__t = (file.fileType)) == null ? '' : __t) +\n'
    \\n ';\n } ;\n__p += '\\n
    \\n
  • \\n ';\n }) ;\n__p += '\\n
    \\n';\n } else { ;\n__p += '\\n
    \\n ';\n ctx.files.forEach(function(file) { ;\n__p += '\\n
    \\n \\n \"'\\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n
    \\n ';\n }) ;\n__p += '\\n
    \\n';\n } ;\n__p += '\\n';\n if (!ctx.disabled && (ctx.component.multiple || !ctx.files.length)) { ;\n__p += '\\n ';\n if (ctx.self.useWebViewCamera) { ;\n__p += '\\n
    \\n \\n \\n
    \\n ';\n } else if (!ctx.self.cameraMode) { ;\n__p += '\\n
    \\n ' +\n((__t = (ctx.t('Drop files to attach,'))) == null ? '' : __t) +\n'\\n ';\n if (ctx.self.imageUpload && ctx.component.webcam) { ;\n__p += '\\n ' +\n((__t = (ctx.t('Use Camera,'))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ' +\n((__t = (ctx.t('or'))) == null ? '' : __t) +\n' ' +\n((__t = (ctx.t('browse'))) == null ? '' : __t) +\n'\\n
    \\n ';\n } else { ;\n__p += '\\n
    \\n \\n
    \\n \\n \\n ';\n } ;\n__p += '\\n';\n } ;\n__p += '\\n';\n ctx.statuses.forEach(function(status) { ;\n__p += '\\n
    \\n
    \\n
    ' +\n((__t = (status.originalName)) == null ? '' : __t) +\n'
    \\n
    ' +\n((__t = (ctx.fileSize(status.size))) == null ? '' : __t) +\n'
    \\n
    \\n
    \\n
    \\n ';\n if (status.status === 'progress') { ;\n__p += '\\n
    \\n
    \\n ' +\n((__t = (status.progress)) == null ? '' : __t) +\n'% ' +\n((__t = (ctx.t('Complete'))) == null ? '' : __t) +\n'\\n
    \\n
    \\n ';\n } else { ;\n__p += '\\n
    ' +\n((__t = (ctx.t(status.message))) == null ? '' : __t) +\n'
    \\n ';\n } ;\n__p += '\\n
    \\n
    \\n
    \\n';\n }) ;\n__p += '\\n';\n if (!ctx.component.storage || ctx.support.hasWarning) { ;\n__p += '\\n
    \\n ';\n if (!ctx.component.storage) { ;\n__p += '\\n

    ' +\n((__t = (ctx.t('No storage has been set for this field. File uploads are disabled until storage is set up.'))) == null ? '' : __t) +\n'

    \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.filereader) { ;\n__p += '\\n

    ' +\n((__t = (ctx.t('File API & FileReader API not supported.'))) == null ? '' : __t) +\n'

    \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.formdata) { ;\n__p += '\\n

    ' +\n((__t = (ctx.t(\"XHR2's FormData is not supported.\"))) == null ? '' : __t) +\n'

    \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.support.progress) { ;\n__p += '\\n

    ' +\n((__t = (ctx.t(\"XHR2's upload progress isn't supported.\"))) == null ? '' : __t) +\n'

    \\n ';\n } ;\n__p += '\\n
    \\n';\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '' +\n((__t = (ctx.content)) == null ? '' : __t) +\n'\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (function (iconset, name, spinning) {\n var icons = {\n 'plus-squre-o': 'plus square outline',\n 'minus-squre-o': 'minus square outline',\n 'question-sign': 'question circle',\n 'remove-circle': 'trash alternate outline',\n 'new-window': 'external alternate',\n 'files-o': 'file outline',\n 'move': 'arrows alternate',\n 'link': 'linkify',\n };\n if (icons.hasOwnProperty(name)) {\n name = icons[name];\n }\n name = name || '';\n name = name.replace(/-/g, ' ');\n name = name.replace(/ o$/, ' outline');\n return spinning ? \"icon \".concat(name, \" loading\") : \"icon \".concat(name);\n});\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar builder_1 = require(\"./builder\");\nvar builderComponent_1 = require(\"./builderComponent\");\nvar builderComponents_1 = require(\"./builderComponents\");\nvar builderEditForm_1 = require(\"./builderEditForm\");\nvar builderPlaceholder_1 = require(\"./builderPlaceholder\");\nvar builderSidebar_1 = require(\"./builderSidebar\");\nvar builderSidebarGroup_1 = require(\"./builderSidebarGroup\");\nvar builderWizard_1 = require(\"./builderWizard\");\nvar button_1 = require(\"./button\");\nvar checkbox_1 = require(\"./checkbox\");\nvar columns_1 = require(\"./columns\");\nvar component_1 = require(\"./component\");\nvar cssClasses_1 = require(\"./cssClasses\");\nvar datagrid_1 = require(\"./datagrid\");\nvar day_1 = require(\"./day\");\nvar editgrid_1 = require(\"./editgrid\");\nvar field_1 = require(\"./field\");\nvar fieldset_1 = require(\"./fieldset\");\nvar file_1 = require(\"./file\");\nvar icon_1 = require(\"./icon\");\nvar iconClass_1 = require(\"./iconClass\");\nvar input_1 = require(\"./input\");\nvar label_1 = require(\"./label\");\nvar loader_1 = require(\"./loader\");\nvar loading_1 = require(\"./loading\");\nvar message_1 = require(\"./message\");\nvar multiValueRow_1 = require(\"./multiValueRow\");\nvar multiValueTable_1 = require(\"./multiValueTable\");\nvar panel_1 = require(\"./panel\");\nvar radio_1 = require(\"./radio\");\nvar resourceAdd_1 = require(\"./resourceAdd\");\nvar select_1 = require(\"./select\");\nvar selectOption_1 = require(\"./selectOption\");\nvar signature_1 = require(\"./signature\");\nvar survey_1 = require(\"./survey\");\nvar tab_1 = require(\"./tab\");\nvar table_1 = require(\"./table\");\nvar tree_1 = require(\"./tree\");\nvar partials_1 = require(\"./tree/partials\");\nvar webform_1 = require(\"./webform\");\nvar well_1 = require(\"./well\");\nvar wizard_1 = require(\"./wizard\");\nvar wizardHeader_1 = require(\"./wizardHeader\");\nvar wizardHeaderClassic_1 = require(\"./wizardHeaderClassic\");\nvar wizardHeaderVertical_1 = require(\"./wizardHeaderVertical\");\nvar wizardNav_1 = require(\"./wizardNav\");\nvar alert_1 = require(\"./alert\");\nvar errorsList_1 = require(\"./errorsList\");\nexports.default = __assign(__assign({ transform: function (type, text) {\n if (!text) {\n return text;\n }\n var columns = {\n 1: 'one',\n 2: 'two',\n 3: 'three',\n 4: 'four',\n 5: 'five',\n 6: 'six',\n 7: 'seven',\n 8: 'eight',\n 9: 'nine',\n 10: 'ten',\n 11: 'eleven',\n 12: 'twelve',\n 13: 'thirteen',\n 14: 'fourteen',\n 15: 'fifteen',\n 16: 'sixteen',\n };\n switch (type) {\n case 'columns':\n return columns.hasOwnProperty(text.toString()) ? columns[text.toString()] : text;\n case 'class':\n return this.cssClasses.hasOwnProperty(text.toString()) ? this.cssClasses[text.toString()] : text;\n }\n return text;\n }, defaultIconset: 'icon', iconClass: iconClass_1.default, cssClasses: cssClasses_1.default, builder: builder_1.default, builderComponent: builderComponent_1.default, builderComponents: builderComponents_1.default, builderEditForm: builderEditForm_1.default, builderPlaceholder: builderPlaceholder_1.default, builderSidebar: builderSidebar_1.default, builderSidebarGroup: builderSidebarGroup_1.default, builderWizard: builderWizard_1.default, button: button_1.default, checkbox: checkbox_1.default, columns: columns_1.default, component: component_1.default, datagrid: datagrid_1.default, day: day_1.default, editgrid: editgrid_1.default, field: field_1.default, fieldset: fieldset_1.default, file: file_1.default, icon: icon_1.default, input: input_1.default, label: label_1.default, loader: loader_1.default, loading: loading_1.default, message: message_1.default, multiValueRow: multiValueRow_1.default, multiValueTable: multiValueTable_1.default, panel: panel_1.default, radio: radio_1.default, resourceAdd: resourceAdd_1.default, select: select_1.default, selectOption: selectOption_1.default, signature: signature_1.default, survey: survey_1.default, tab: tab_1.default, tree: tree_1.default }, partials_1.default), { table: table_1.default, webform: webform_1.default, well: well_1.default, wizard: wizard_1.default, wizardHeader: wizardHeader_1.default, wizardHeaderClassic: wizardHeaderClassic_1.default, wizardHeaderVertical: wizardHeaderVertical_1.default, wizardNav: wizardNav_1.default, alert: alert_1.default, errorsList: errorsList_1.default });\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n';\n if (ctx.prefix) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\n if (!ctx.component.editor && !ctx.component.wysiwyg) { ;\n__p += '\\n<' +\n((__t = (ctx.input.type)) == null ? '' : __t) +\n'\\n ref=\"' +\n((__t = (ctx.input.ref ? ctx.input.ref : 'input')) == null ? '' : __t) +\n'\"\\n ';\n for (var attr in ctx.input.attr) { ;\n__p += '\\n ' +\n((__t = (attr)) == null ? '' : __t) +\n'=\"' +\n((__t = (ctx.input.attr[attr])) == null ? '' : __t) +\n'\"\\n ';\n } ;\n__p += '\\n id=\"' +\n((__t = (ctx.instance.id)) == null ? '' : __t) +\n'-' +\n((__t = (ctx.component.key)) == null ? '' : __t) +\n'\"\\n>' +\n((__t = (ctx.input.content)) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n';\n if (ctx.component.editor || ctx.component.wysiwyg) { ;\n__p += '\\n
    \\n';\n } ;\n__p += '\\n';\n if (ctx.component.showCharCount) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\n if (ctx.component.showWordCount) { ;\n__p += '\\n\\n';\n } ;\n__p += '\\n';\n if (ctx.suffix) { ;\n__p += '\\n
    \\n';\n if(ctx.suffix instanceof HTMLElement){ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.suffix.outerHTML) )) == null ? '' : __t) +\n'\\n';\n } else{ ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.suffix) )) == null ? '' : __t) +\n'\\n';\n } ;\n__p += '\\n
    \\n';\n } ;\n__p += '\\n
    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    ';\n if (ctx.value) { ;\n__p +=\n((__t = (ctx.value)) == null ? '' : __t);\n } else { ;\n__p += '-';\n } ;\n__p += '
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (!ctx.label.hidden) { ;\n__p += '\\n ' +\n((__t = ( ctx.t(ctx.component.label) )) == null ? '' : __t) +\n'\\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n } ;\n__p += '\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
    \\n
    \\n
    \\n
    \\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += 'Loading...\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
    \\n ' +\n((__t = (ctx.message)) == null ? '' : __t) +\n'\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n \\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n \\n \\n ';\n } ;\n__p += '\\n\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ' +\n((__t = (ctx.rows)) == null ? '' : __t) +\n'\\n ';\n if (!ctx.disabled) { ;\n__p += '\\n \\n \\n \\n ';\n } ;\n__p += '\\n \\n
    \\n \\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (!ctx.component.hideLabel || ctx.builder || ctx.component.collapsible || ctx.component.tooltip) { ;\n__p += '\\n

    \\n ';\n if (ctx.component.collapsible) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.component.hideLabel || ctx.builder) { ;\n__p += '\\n ' +\n((__t = (ctx.t(ctx.component.title))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ';\n if (ctx.component.tooltip) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

    \\n';\n } ;\n__p += '\\n';\n if (!ctx.collapsed || ctx.builder) { ;\n__p += '\\n
    \\n ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'\\n
    \\n';\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n ctx.values.forEach(function(item) { ;\n__p += '\\n
    \\n
    \\n <' +\n((__t = (ctx.input.type)) == null ? '' : __t) +\n'\\n ref=\"input\"\\n ';\n for (var attr in ctx.input.attr) { ;\n__p += '\\n ' +\n((__t = (attr)) == null ? '' : __t) +\n'=\"' +\n((__t = (ctx.input.attr[attr])) == null ? '' : __t) +\n'\"\\n ';\n } ;\n__p += '\\n value=\"' +\n((__t = (item.value)) == null ? '' : __t) +\n'\"\\n ';\n if (ctx.value === item.value || (typeof ctx.value === 'object' && ctx.value.hasOwnProperty(item.value) && ctx.value[item.value])) { ;\n__p += '\\n checked=true\\n ';\n } ;\n__p += '\\n ';\n if (item.disabled) { ;\n__p += '\\n disabled=true\\n ';\n } ;\n__p += '\\n id=\"' +\n((__t = (ctx.instance.root && ctx.instance.root.id)) == null ? '' : __t) +\n'-' +\n((__t = (ctx.id)) == null ? '' : __t) +\n'-' +\n((__t = (ctx.row)) == null ? '' : __t) +\n'-' +\n((__t = (item.value)) == null ? '' : __t) +\n'\"\\n >\\n \\n
    \\n
    \\n ';\n }) ;\n__p += '\\n
    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n var filtered = ctx.values.filter(function(item) {return ctx.value === item.value || (typeof ctx.value === 'object' && ctx.value.hasOwnProperty(item.value) && ctx.value[item.value])}).map(function(item) { return ctx.t(item.label)}).join(', ') ;\n__p += '\\n ' +\n((__t = (filtered)) == null ? '' : __t) +\n'\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n ' +\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n
    \\n \\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (ctx.selected) { ;\n__p +=\n((__t = (ctx.t(ctx.option.label))) == null ? '' : __t);\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p +=\n((__t = (ctx.element)) == null ? '' : __t) +\n'\\n\\n\\n \\n \\n \\n \\n ';\n if (ctx.required) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n\\n';\n if (ctx.component.footer) { ;\n__p += '\\n
    \\n ' +\n((__t = (ctx.t(ctx.component.footer))) == null ? '' : __t) +\n'\\n
    \\n';\n } ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n \\n \\n ';\n ctx.component.values.forEach(function(value) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n \\n ';\n ctx.component.questions.forEach(function(question) { ;\n__p += '\\n \\n \\n ';\n ctx.component.values.forEach(function(value) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
    ' +\n((__t = (ctx.t(value.label))) == null ? '' : __t) +\n'
    ' +\n((__t = (ctx.t(question.label))) == null ? '' : __t) +\n'\\n \\n
    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n \\n ';\n ctx.component.questions.forEach(function(question) { ;\n__p += '\\n \\n \\n \\n \\n ';\n }) ;\n__p += '\\n \\n
    ' +\n((__t = (ctx.t(question.label))) == null ? '' : __t) +\n'\\n ';\n ctx.component.values.forEach(function(item) { ;\n__p += '\\n ';\n if (ctx.value && ctx.value.hasOwnProperty(question.value) && ctx.value[question.value] === item.value) { ;\n__p += '\\n ' +\n((__t = (ctx.t(item.label))) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += '\\n ';\n }) ;\n__p += '\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nvar html_ejs_1 = require(\"./html.ejs\");\nexports.default = { form: form_ejs_1.default, html: html_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n ctx.component.components.forEach(function(tab, index) { ;\n__p += '\\n

    ' +\n((__t = ( ctx.t(tab.label) )) == null ? '' : __t) +\n'

    \\n
    \\n ' +\n((__t = ( ctx.tabComponents[index] )) == null ? '' : __t) +\n'\\n
    \\n';\n }) ;\n__p += '\\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n
    \\n ';\n ctx.component.components.forEach(function(tab, index) { ;\n__p += '\\n ' +\n((__t = (ctx.t(tab.label))) == null ? '' : __t) +\n'\\n ';\n }) ;\n__p += '\\n
    \\n ';\n ctx.component.components.forEach(function(tab, index) { ;\n__p += '\\n
    ' +\n((__t = (ctx.tabComponents[index])) == null ? '' : __t) +\n'
    \\n ';\n }) ;\n__p += '\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar flat_ejs_1 = require(\"./flat.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { flat: flat_ejs_1.default, form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n ';\n if (ctx.component.header && ctx.component.header.length > 0) { ;\n__p += '\\n \\n \\n ';\n ctx.component.header.forEach(function(header) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n \\n ';\n } ;\n__p += '\\n \\n ';\n ctx.tableComponents.forEach(function(row, rowIndex) { ;\n__p += '\\n \\n ';\n row.forEach(function(column, colIndex) { ;\n__p += '\\n \\n ';\n }) ;\n__p += '\\n \\n
    ' +\n((__t = (ctx.t(header))) == null ? '' : __t) +\n'
    \\n ';\n }) ;\n__p += '\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n\n if (ctx.node.isRoot) { ;\n__p += '\\n
    \\n
    \\n ';\n } else { ;\n__p += '\\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.content) { ;\n__p += '\\n
    \\n ' +\n((__t = ( ctx.content )) == null ? '' : __t) +\n'\\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.childNodes && ctx.childNodes.length) { ;\n__p += '\\n
    \\n ' +\n((__t = ( ctx.childNodes.join('') )) == null ? '' : __t) +\n'\\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.node.isRoot) { ;\n__p += '\\n
    \\n
    \\n ';\n } else { ;\n__p += '\\n
    \\n';\n } ;\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n
    ' +\n((__t = ( ctx.children )) == null ? '' : __t) +\n'
    \\n ';\n if (!ctx.readOnly) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar edit_ejs_1 = require(\"./edit.ejs\");\nvar view_ejs_1 = require(\"./view.ejs\");\nexports.default = {\n treeView: {\n form: view_ejs_1.default,\n },\n treeEdit: {\n form: edit_ejs_1.default,\n },\n};\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n
    \\n ';\n ctx.values.forEach(function(value) { ;\n__p += '\\n
    \\n ' +\n((__t = ( value )) == null ? '' : __t) +\n'\\n
    \\n ';\n }) ;\n__p += '\\n
    \\n
    \\n ';\n if (ctx.node.hasChildren) { ;\n__p += '\\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (!ctx.readOnly) { ;\n__p += '\\n \\n
    \\n \\n
    \\n \\n ';\n if (ctx.node.revertAvailable) { ;\n__p += '\\n
    \\n \\n ';\n } ;\n__p += '\\n ';\n } ;\n__p += '\\n
    \\n
    \\n
    \\n
    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '

    ' +\n((__t = ( ctx.t(ctx.component.title) )) == null ? '' : __t) +\n'

    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
    ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar builder_ejs_1 = require(\"./builder.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default, builder: builder_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
    \\n
    \\n ' +\n((__t = (ctx.children)) == null ? '' : __t) +\n'\\n
    \\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '';\n__p += '
    ' +\n((__t = ( ctx.t(ctx.component.title) )) == null ? '' : __t) +\n'
    \\n';\nreturn __p\n}","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n
    \\n ';\n if (ctx.wizardHeaderType === 'wizardHeaderVertical') { ;\n__p += '\\n
    \\n
    \\n ' +\n((__t = ( ctx.wizardHeader )) == null ? '' : __t) +\n'\\n
    \\n
    \\n
    \\n ' +\n((__t = (ctx.components)) == null ? '' : __t) +\n'\\n
    \\n
    \\n
    \\n
    \\n
    \\n ' +\n((__t = ( ctx.wizardNav )) == null ? '' : __t) +\n'\\n
    \\n
    \\n ';\n } else { ;\n__p += ' \\n ' +\n((__t = ( ctx.wizardHeader )) == null ? '' : __t) +\n'\\n
    \\n ' +\n((__t = (ctx.components)) == null ? '' : __t) +\n'\\n
    \\n ' +\n((__t = ( ctx.wizardNav )) == null ? '' : __t) +\n'\\n ';\n } ;\n__p += ' \\n
    \\n
    ';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar builder_ejs_1 = require(\"./builder.ejs\");\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default, builder: builder_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '\\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","Object.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default=function(ctx) {\nvar __t, __p = '', __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n__p += '
    \\n ';\n if (ctx.buttons.cancel) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.previous) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.next) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n ';\n if (ctx.buttons.submit) { ;\n__p += '\\n
    \\n \\n
    \\n ';\n } ;\n__p += '\\n
    \\n';\nreturn __p\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar form_ejs_1 = require(\"./form.ejs\");\nexports.default = { form: form_ejs_1.default };\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.textMaskAddons=t():e.textMaskAddons=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"\",t(0)}([function(e,t,n){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1);Object.defineProperty(t,\"createAutoCorrectedDatePipe\",{enumerable:!0,get:function(){return r(i).default}});var o=n(2);Object.defineProperty(t,\"createNumberMask\",{enumerable:!0,get:function(){return r(o).default}});var u=n(3);Object.defineProperty(t,\"emailMask\",{enumerable:!0,get:function(){return r(u).default}})},function(e,t){\"use strict\";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"mm dd yyyy\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.minYear,o=void 0===n?1:n,u=t.maxYear,a=void 0===u?9999:u,c=e.split(/[^dmyHMS]+/).sort(function(e,t){return i.indexOf(e)-i.indexOf(t)});return function(t){var n=[],i={dd:31,mm:12,yy:99,yyyy:a,HH:23,MM:59,SS:59},u={dd:1,mm:1,yy:0,yyyy:o,HH:0,MM:0,SS:0},l=t.split(\"\");c.forEach(function(t){var r=e.indexOf(t),o=parseInt(i[t].toString().substr(0,1),10);parseInt(l[r],10)>o&&(l[r+1]=l[r],l[r]=0,n.push(r))});var s=0,d=c.some(function(n){var c=e.indexOf(n),l=n.length,d=t.substr(c,l).replace(/\\D/g,\"\"),f=parseInt(d,10);\"mm\"===n&&(s=f||0);var p=\"dd\"===n?r[s]:i[n];if(\"yyyy\"===n&&(1!==o||9999!==a)){var v=parseInt(i[n].toString().substring(0,d.length),10),y=parseInt(u[n].toString().substring(0,d.length),10);return fv}return f>p||d.length===l&&f0&&void 0!==arguments[0]?arguments[0]:a,t=e.length;if(e===a||e[0]===g[0]&&1===t)return g.split(a).concat([v]).concat(h.split(a));if(e===P&&_)return g.split(a).concat([\"0\",P,v]).concat(h.split(a));var n=e[0]===s&&D;n&&(e=e.toString().substr(1));var u=e.lastIndexOf(P),c=u!==-1,l=void 0,m=void 0,b=void 0;if(e.slice($*-1)===h&&(e=e.slice(0,$*-1)),c&&(_||I)?(l=e.slice(e.slice(0,N)===g?N:0,u),m=e.slice(u+1,t),m=r(m.replace(f,a))):l=e.slice(0,N)===g?e.slice(N):e,L&&(\"undefined\"==typeof L?\"undefined\":o(L))===p){var O=\".\"===S?\"[.]\":\"\"+S,M=(l.match(new RegExp(O,\"g\"))||[]).length;l=l.slice(0,L+M*V)}return l=l.replace(f,a),R||(l=l.replace(/^0+(0$|[^0])/,\"$1\")),l=x?i(l,S):l,b=r(l),(c&&_||I===!0)&&(e[u-1]!==P&&b.push(y),b.push(P,y),m&&((\"undefined\"==typeof C?\"undefined\":o(C))===p&&(m=m.slice(0,C)),b=b.concat(m)),I===!0&&e[u-1]===P&&b.push(v)),N>0&&(b=g.split(a).concat(b)),n&&(b.length===N&&b.push(v),b=[d].concat(b)),h.length>0&&(b=b.concat(h.split(a))),b}var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.prefix,g=void 0===n?u:n,m=t.suffix,h=void 0===m?a:m,b=t.includeThousandsSeparator,x=void 0===b||b,O=t.thousandsSeparatorSymbol,S=void 0===O?c:O,M=t.allowDecimal,_=void 0!==M&&M,j=t.decimalSymbol,P=void 0===j?l:j,w=t.decimalLimit,C=void 0===w?2:w,H=t.requireDecimal,I=void 0!==H&&H,k=t.allowNegative,D=void 0!==k&&k,E=t.allowLeadingZeroes,R=void 0!==E&&E,A=t.integerLimit,L=void 0===A?null:A,N=g&&g.length||0,$=h&&h.length||0,V=S&&S.length||0;return e.instanceOf=\"createNumberMask\",e}function r(e){return e.split(a).map(function(e){return v.test(e)?v:e})}function i(e,t){return e.replace(/\\B(?=(\\d{3})+(?!\\d))/g,t)}Object.defineProperty(t,\"__esModule\",{value:!0});var o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};t.default=n;var u=\"$\",a=\"\",c=\",\",l=\".\",s=\"-\",d=/-/,f=/\\D+/g,p=\"number\",v=/\\d/,y=\"[]\"},function(e,t,n){\"use strict\";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){e=e.replace(O,v);var n=t.placeholderChar,r=t.currentCaretPosition,i=e.indexOf(y),s=e.lastIndexOf(p),d=s1&&v.substr(-1)===c&&n!==o.length&&(v=v.slice(0,v.length-1)),v}function r(e){var t=0;return e.replace(o,function(){return t++,1===t?i:u})}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=n;var i=\"@\",o=/@/g,u=\"\",a=\"@.\",c=\".\",l=\"..\",s=[],d=/\\./g}])});","!function(e,r){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=r():\"function\"==typeof define&&define.amd?define([],r):\"object\"==typeof exports?exports.vanillaTextMask=r():e.vanillaTextMask=r()}(this,function(){return function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}var t={};return r.m=e,r.c=t,r.p=\"\",r(0)}([function(e,r,t){\"use strict\";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){var r=e.inputElement,t=e.afterUpdate,n=(0,u.default)(e),o=function(e){var r=e.target.value;n.update(r),\"function\"==typeof t&&t(r)};return r.addEventListener(\"input\",o),n.update(r.value),{textMaskInputElement:n,destroy:function(){r.removeEventListener(\"input\",o)}}}Object.defineProperty(r,\"__esModule\",{value:!0}),r.conformToMask=void 0,r.maskInput=o;var i=t(2);Object.defineProperty(r,\"conformToMask\",{enumerable:!0,get:function(){return n(i).default}});var a=t(5),u=n(a);r.default=o},function(e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.placeholderChar=\"_\",r.strFunction=\"function\"},function(e,r,t){\"use strict\";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!(0,i.isArray)(r)){if((\"undefined\"==typeof r?\"undefined\":o(r))!==a.strFunction)throw new Error(\"Text-mask:conformToMask; The mask property must be an array.\");r=r(e,t),r=(0,i.processCaretTraps)(r).maskWithoutCaretTraps}var n=t.guide,s=void 0===n||n,f=t.previousConformedValue,d=void 0===f?l:f,c=t.placeholderChar,p=void 0===c?a.placeholderChar:c,v=t.placeholder,h=void 0===v?(0,i.convertMaskToPlaceholder)(r,p):v,m=t.currentCaretPosition,y=t.keepCharPositions,g=s===!1&&void 0!==d,b=e.length,C=d.length,k=h.length,x=r.length,P=b-C,T=P>0,O=m+(T?-P:0),w=O+Math.abs(P);if(y===!0&&!T){for(var M=l,S=O;S=O&&r=0;j--){var V=_[j].char;if(V!==p){var E=j>=O&&C===x;V===h[E?j-P:j]&&_.splice(j,1)}}var A=l,N=!1;e:for(var F=0;F0)for(;_.length>0;){var I=_.shift(),L=I.char,J=I.isNew;if(L===p&&g!==!0){A+=p;continue e}if(r[F].test(L)){if(y===!0&&J!==!1&&d!==l&&s!==!1&&T){for(var W=_.length,q=null,U=0;U0&&void 0!==arguments[0]?arguments[0]:f,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s.placeholderChar;if(!o(e))throw new Error(\"Text-mask:convertMaskToPlaceholder; The mask property must be an array.\");if(e.indexOf(r)!==-1)throw new Error(\"Placeholder character must not be used as part of the mask. Please specify a character that is not present in your mask as your placeholder character.\\n\\n\"+(\"The placeholder character that was received is: \"+JSON.stringify(r)+\"\\n\\n\")+(\"The mask that was received is: \"+JSON.stringify(e)));return e.map(function(e){return e instanceof RegExp?r:e}).join(\"\")}function o(e){return Array.isArray&&Array.isArray(e)||e instanceof Array}function i(e){return\"string\"==typeof e||e instanceof String}function a(e){return\"number\"==typeof e&&void 0===e.length&&!isNaN(e)}function u(e){return\"undefined\"==typeof e||null===e}function l(e){for(var r=[],t=void 0;t=e.indexOf(d),t!==-1;)r.push(t),e.splice(t,1);return{maskWithoutCaretTraps:e,indexes:r}}Object.defineProperty(r,\"__esModule\",{value:!0}),r.convertMaskToPlaceholder=n,r.isArray=o,r.isString=i,r.isNumber=a,r.isNil=u,r.processCaretTraps=l;var s=t(1),f=[],d=\"[]\"},function(e,r){\"use strict\";function t(e){var r=e.previousConformedValue,t=void 0===r?o:r,i=e.previousPlaceholder,a=void 0===i?o:i,u=e.currentCaretPosition,l=void 0===u?0:u,s=e.conformedValue,f=e.rawValue,d=e.placeholderChar,c=e.placeholder,p=e.indexesOfPipedChars,v=void 0===p?n:p,h=e.caretTrapIndexes,m=void 0===h?n:h;if(0===l||!f.length)return 0;var y=f.length,g=t.length,b=c.length,C=s.length,k=y-g,x=k>0,P=0===g,T=k>1&&!x&&!P;if(T)return l;var O=x&&(t===s||s===c),w=0,M=void 0,S=void 0;if(O)w=l-k;else{var _=s.toLowerCase(),j=f.toLowerCase(),V=j.substr(0,l).split(o),E=V.filter(function(e){return _.indexOf(e)!==-1});S=E[E.length-1];var A=a.substr(0,E.length).split(o).filter(function(e){return e!==d}).length,N=c.substr(0,E.length).split(o).filter(function(e){return e!==d}).length,F=N!==A,R=void 0!==a[E.length-1]&&void 0!==c[E.length-2]&&a[E.length-1]!==d&&a[E.length-1]!==c[E.length-1]&&a[E.length-1]===c[E.length-2];!x&&(F||R)&&A>0&&c.indexOf(S)>-1&&void 0!==f[l]&&(M=!0,S=f[l]);for(var I=v.map(function(e){return _[e]}),L=I.filter(function(e){return e===S}).length,J=E.filter(function(e){return e===S}).length,W=c.substr(0,c.indexOf(d)).split(o).filter(function(e,r){return e===S&&f[r]!==e}).length,q=W+J+L+(M?1:0),U=0,z=0;z=q)break}}if(x){for(var D=w,G=w;G<=b;G++)if(c[G]===d&&(D=G),c[G]===d||m.indexOf(G)!==-1||G===b)return D}else if(M){for(var H=w-1;H>=0;H--)if(s[H]===S||m.indexOf(H)!==-1||0===H)return H}else for(var K=w;K>=0;K--)if(c[K-1]===d||m.indexOf(K)!==-1||0===K)return K}Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=t;var n=[],o=\"\"},function(e,r,t){\"use strict\";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){var r={previousConformedValue:void 0,previousPlaceholder:void 0};return{state:r,update:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=n.inputElement,s=n.mask,d=n.guide,m=n.pipe,g=n.placeholderChar,b=void 0===g?v.placeholderChar:g,C=n.keepCharPositions,k=void 0!==C&&C,x=n.showMask,P=void 0!==x&&x;if(\"undefined\"==typeof t&&(t=o.value),t!==r.previousConformedValue){(\"undefined\"==typeof s?\"undefined\":l(s))===y&&void 0!==s.pipe&&void 0!==s.mask&&(m=s.pipe,s=s.mask);var T=void 0,O=void 0;if(s instanceof Array&&(T=(0,p.convertMaskToPlaceholder)(s,b)),s!==!1){var w=a(t),M=o.selectionEnd,S=r.previousConformedValue,_=r.previousPlaceholder,j=void 0;if((\"undefined\"==typeof s?\"undefined\":l(s))===v.strFunction){if(O=s(w,{currentCaretPosition:M,previousConformedValue:S,placeholderChar:b}),O===!1)return;var V=(0,p.processCaretTraps)(O),E=V.maskWithoutCaretTraps,A=V.indexes;O=E,j=A,T=(0,p.convertMaskToPlaceholder)(O,b)}else O=s;var N={previousConformedValue:S,guide:d,placeholderChar:b,pipe:m,placeholder:T,currentCaretPosition:M,keepCharPositions:k},F=(0,c.default)(w,O,N),R=F.conformedValue,I=(\"undefined\"==typeof m?\"undefined\":l(m))===v.strFunction,L={};I&&(L=m(R,u({rawValue:w},N)),L===!1?L={value:S,rejected:!0}:(0,p.isString)(L)&&(L={value:L}));var J=I?L.value:R,W=(0,f.default)({previousConformedValue:S,previousPlaceholder:_,conformedValue:J,placeholder:T,rawValue:w,currentCaretPosition:M,placeholderChar:b,indexesOfPipedChars:L.indexesOfPipedChars,caretTrapIndexes:j}),q=J===T&&0===W,U=P?T:h,z=q?U:J;r.previousConformedValue=z,r.previousPlaceholder=T,o.value!==z&&(o.value=z,i(o,W,e.shadowRoot))}}}}}function i(e,r,t){var n=t?t.activeElement:document.activeElement;n===e&&(g?b(function(){return e.setSelectionRange(r,r,m)},0):e.setSelectionRange(r,r,m))}function a(e){if((0,p.isString)(e))return e;if((0,p.isNumber)(e))return String(e);if(void 0===e||null===e)return h;throw new Error(\"The 'value' provided to Text Mask needs to be a string or a number. The value received was:\\n\\n \"+JSON.stringify(e))}Object.defineProperty(r,\"__esModule\",{value:!0});var u=Object.assign||function(e){for(var r=1;r= 0) {\n var prev = originalData[i - rollPeriod];\n if (prev[1] !== null && !isNaN(prev[1])) {\n low -= prev[2][0];\n mid -= prev[1];\n high -= prev[2][1];\n count -= 1;\n }\n }\n if (count) {\n rollingData[i] = [originalData[i][0], 1.0 * mid / count, [1.0 * low / count, 1.0 * high / count]];\n } else {\n rollingData[i] = [originalData[i][0], null, [null, null]];\n }\n }\n\n return rollingData;\n};\n\nexports['default'] = CustomBarsHandler;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DataHandler implementation for the error bars option.\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar _bars = require('./bars');\n\nvar _bars2 = _interopRequireDefault(_bars);\n\n/**\n * @constructor\n * @extends BarsHandler\n */\nvar ErrorBarsHandler = function ErrorBarsHandler() {};\n\nErrorBarsHandler.prototype = new _bars2[\"default\"]();\n\n/** @inheritDoc */\nErrorBarsHandler.prototype.extractSeries = function (rawData, i, options) {\n // TODO(danvk): pre-allocate series here.\n var series = [];\n var x, y, variance, point;\n var sigma = options.get(\"sigma\");\n var logScale = options.get('logscale');\n for (var j = 0; j < rawData.length; j++) {\n x = rawData[j][0];\n point = rawData[j][i];\n if (logScale && point !== null) {\n // On the log scale, points less than zero do not exist.\n // This will create a gap in the chart.\n if (point[0] <= 0 || point[0] - sigma * point[1] <= 0) {\n point = null;\n }\n }\n // Extract to the unified data format.\n if (point !== null) {\n y = point[0];\n if (y !== null && !isNaN(y)) {\n variance = sigma * point[1];\n // preserve original error value in extras for further\n // filtering\n series.push([x, y, [y - variance, y + variance, point[1]]]);\n } else {\n series.push([x, y, [y, y, y]]);\n }\n } else {\n series.push([x, null, [null, null, null]]);\n }\n }\n return series;\n};\n\n/** @inheritDoc */\nErrorBarsHandler.prototype.rollingAverage = function (originalData, rollPeriod, options) {\n rollPeriod = Math.min(rollPeriod, originalData.length);\n var rollingData = [];\n var sigma = options.get(\"sigma\");\n\n var i, j, y, v, sum, num_ok, stddev, variance, value;\n\n // Calculate the rolling average for the first rollPeriod - 1 points\n // where there is not enough data to roll over the full number of points\n for (i = 0; i < originalData.length; i++) {\n sum = 0;\n variance = 0;\n num_ok = 0;\n for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) {\n y = originalData[j][1];\n if (y === null || isNaN(y)) continue;\n num_ok++;\n sum += y;\n variance += Math.pow(originalData[j][2][2], 2);\n }\n if (num_ok) {\n stddev = Math.sqrt(variance) / num_ok;\n value = sum / num_ok;\n rollingData[i] = [originalData[i][0], value, [value - sigma * stddev, value + sigma * stddev]];\n } else {\n // This explicitly preserves NaNs to aid with \"independent\n // series\".\n // See testRollingAveragePreservesNaNs.\n v = rollPeriod == 1 ? originalData[i][1] : null;\n rollingData[i] = [originalData[i][0], v, [v, v]];\n }\n }\n\n return rollingData;\n};\n\nexports[\"default\"] = ErrorBarsHandler;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DataHandler implementation for the combination \n * of error bars and fractions options.\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar _bars = require('./bars');\n\nvar _bars2 = _interopRequireDefault(_bars);\n\n/**\n * @constructor\n * @extends Dygraph.DataHandlers.BarsHandler\n */\nvar FractionsBarsHandler = function FractionsBarsHandler() {};\n\nFractionsBarsHandler.prototype = new _bars2[\"default\"]();\n\n/** @inheritDoc */\nFractionsBarsHandler.prototype.extractSeries = function (rawData, i, options) {\n // TODO(danvk): pre-allocate series here.\n var series = [];\n var x, y, point, num, den, value, stddev, variance;\n var mult = 100.0;\n var sigma = options.get(\"sigma\");\n var logScale = options.get('logscale');\n for (var j = 0; j < rawData.length; j++) {\n x = rawData[j][0];\n point = rawData[j][i];\n if (logScale && point !== null) {\n // On the log scale, points less than zero do not exist.\n // This will create a gap in the chart.\n if (point[0] <= 0 || point[1] <= 0) {\n point = null;\n }\n }\n // Extract to the unified data format.\n if (point !== null) {\n num = point[0];\n den = point[1];\n if (num !== null && !isNaN(num)) {\n value = den ? num / den : 0.0;\n stddev = den ? sigma * Math.sqrt(value * (1 - value) / den) : 1.0;\n variance = mult * stddev;\n y = mult * value;\n // preserve original values in extras for further filtering\n series.push([x, y, [y - variance, y + variance, num, den]]);\n } else {\n series.push([x, num, [num, num, num, den]]);\n }\n } else {\n series.push([x, null, [null, null, null, null]]);\n }\n }\n return series;\n};\n\n/** @inheritDoc */\nFractionsBarsHandler.prototype.rollingAverage = function (originalData, rollPeriod, options) {\n rollPeriod = Math.min(rollPeriod, originalData.length);\n var rollingData = [];\n var sigma = options.get(\"sigma\");\n var wilsonInterval = options.get(\"wilsonInterval\");\n\n var low, high, i, stddev;\n var num = 0;\n var den = 0; // numerator/denominator\n var mult = 100.0;\n for (i = 0; i < originalData.length; i++) {\n num += originalData[i][2][2];\n den += originalData[i][2][3];\n if (i - rollPeriod >= 0) {\n num -= originalData[i - rollPeriod][2][2];\n den -= originalData[i - rollPeriod][2][3];\n }\n\n var date = originalData[i][0];\n var value = den ? num / den : 0.0;\n if (wilsonInterval) {\n // For more details on this confidence interval, see:\n // http://en.wikipedia.org/wiki/Binomial_confidence_interval\n if (den) {\n var p = value < 0 ? 0 : value,\n n = den;\n var pm = sigma * Math.sqrt(p * (1 - p) / n + sigma * sigma / (4 * n * n));\n var denom = 1 + sigma * sigma / den;\n low = (p + sigma * sigma / (2 * den) - pm) / denom;\n high = (p + sigma * sigma / (2 * den) + pm) / denom;\n rollingData[i] = [date, p * mult, [low * mult, high * mult]];\n } else {\n rollingData[i] = [date, 0, [0, 0]];\n }\n } else {\n stddev = den ? sigma * Math.sqrt(value * (1 - value) / den) : 1.0;\n rollingData[i] = [date, mult * value, [mult * (value - stddev), mult * (value + stddev)]];\n }\n }\n\n return rollingData;\n};\n\nexports[\"default\"] = FractionsBarsHandler;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DataHandler base implementation for the \"bar\" \n * data formats. This implementation must be extended and the\n * extractSeries and rollingAverage must be implemented.\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n */\n\n/*global Dygraph:false */\n/*global DygraphLayout:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _datahandler = require('./datahandler');\n\nvar _datahandler2 = _interopRequireDefault(_datahandler);\n\nvar _dygraphLayout = require('../dygraph-layout');\n\nvar _dygraphLayout2 = _interopRequireDefault(_dygraphLayout);\n\n/**\n * @constructor\n * @extends {Dygraph.DataHandler}\n */\nvar BarsHandler = function BarsHandler() {\n _datahandler2['default'].call(this);\n};\nBarsHandler.prototype = new _datahandler2['default']();\n\n// TODO(danvk): figure out why the jsdoc has to be copy/pasted from superclass.\n// (I get closure compiler errors if this isn't here.)\n/**\n * @override\n * @param {!Array.} rawData The raw data passed into dygraphs where \n * rawData[i] = [x,ySeries1,...,ySeriesN].\n * @param {!number} seriesIndex Index of the series to extract. All other\n * series should be ignored.\n * @param {!DygraphOptions} options Dygraph options.\n * @return {Array.<[!number,?number,?]>} The series in the unified data format\n * where series[i] = [x,y,{extras}]. \n */\nBarsHandler.prototype.extractSeries = function (rawData, seriesIndex, options) {\n // Not implemented here must be extended\n};\n\n/**\n * @override\n * @param {!Array.<[!number,?number,?]>} series The series in the unified \n * data format where series[i] = [x,y,{extras}].\n * @param {!number} rollPeriod The number of points over which to average the data\n * @param {!DygraphOptions} options The dygraph options.\n * TODO(danvk): be more specific than \"Array\" here.\n * @return {!Array.<[!number,?number,?]>} the rolled series.\n */\nBarsHandler.prototype.rollingAverage = function (series, rollPeriod, options) {\n // Not implemented here, must be extended.\n};\n\n/** @inheritDoc */\nBarsHandler.prototype.onPointsCreated_ = function (series, points) {\n for (var i = 0; i < series.length; ++i) {\n var item = series[i];\n var point = points[i];\n point.y_top = NaN;\n point.y_bottom = NaN;\n point.yval_minus = _datahandler2['default'].parseFloat(item[2][0]);\n point.yval_plus = _datahandler2['default'].parseFloat(item[2][1]);\n }\n};\n\n/** @inheritDoc */\nBarsHandler.prototype.getExtremeYValues = function (series, dateWindow, options) {\n var minY = null,\n maxY = null,\n y;\n\n var firstIdx = 0;\n var lastIdx = series.length - 1;\n\n for (var j = firstIdx; j <= lastIdx; j++) {\n y = series[j][1];\n if (y === null || isNaN(y)) continue;\n\n var low = series[j][2][0];\n var high = series[j][2][1];\n\n if (low > y) low = y; // this can happen with custom bars,\n if (high < y) high = y; // e.g. in tests/custom-bars.html\n\n if (maxY === null || high > maxY) maxY = high;\n if (minY === null || low < minY) minY = low;\n }\n\n return [minY, maxY];\n};\n\n/** @inheritDoc */\nBarsHandler.prototype.onLineEvaluated = function (points, axis, logscale) {\n var point;\n for (var j = 0; j < points.length; j++) {\n // Copy over the error terms\n point = points[j];\n point.y_top = _dygraphLayout2['default'].calcYNormal_(axis, point.yval_minus, logscale);\n point.y_bottom = _dygraphLayout2['default'].calcYNormal_(axis, point.yval_plus, logscale);\n }\n};\n\nexports['default'] = BarsHandler;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview This file contains the managment of data handlers\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n *\n * The idea is to define a common, generic data format that works for all data\n * structures supported by dygraphs. To make this possible, the DataHandler\n * interface is introduced. This makes it possible, that dygraph itself can work\n * with the same logic for every data type independent of the actual format and\n * the DataHandler takes care of the data format specific jobs.\n * DataHandlers are implemented for all data types supported by Dygraphs and\n * return Dygraphs compliant formats.\n * By default the correct DataHandler is chosen based on the options set.\n * Optionally the user may use his own DataHandler (similar to the plugin\n * system).\n *\n *\n * The unified data format returend by each handler is defined as so:\n * series[n][point] = [x,y,(extras)]\n *\n * This format contains the common basis that is needed to draw a simple line\n * series extended by optional extras for more complex graphing types. It\n * contains a primitive x value as first array entry, a primitive y value as\n * second array entry and an optional extras object for additional data needed.\n *\n * x must always be a number.\n * y must always be a number, NaN of type number or null.\n * extras is optional and must be interpreted by the DataHandler. It may be of\n * any type.\n *\n * In practice this might look something like this:\n * default: [x, yVal]\n * errorBar / customBar: [x, yVal, [yTopVariance, yBottomVariance] ]\n *\n */\n/*global Dygraph:false */\n/*global DygraphLayout:false */\n\n\"use strict\";\n\n/**\n *\n * The data handler is responsible for all data specific operations. All of the\n * series data it receives and returns is always in the unified data format.\n * Initially the unified data is created by the extractSeries method\n * @constructor\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar DygraphDataHandler = function DygraphDataHandler() {};\n\nvar handler = DygraphDataHandler;\n\n/**\n * X-value array index constant for unified data samples.\n * @const\n * @type {number}\n */\nhandler.X = 0;\n\n/**\n * Y-value array index constant for unified data samples.\n * @const\n * @type {number}\n */\nhandler.Y = 1;\n\n/**\n * Extras-value array index constant for unified data samples.\n * @const\n * @type {number}\n */\nhandler.EXTRAS = 2;\n\n/**\n * Extracts one series from the raw data (a 2D array) into an array of the\n * unified data format.\n * This is where undesirable points (i.e. negative values on log scales and\n * missing values through which we wish to connect lines) are dropped.\n * TODO(danvk): the \"missing values\" bit above doesn't seem right.\n *\n * @param {!Array.} rawData The raw data passed into dygraphs where\n * rawData[i] = [x,ySeries1,...,ySeriesN].\n * @param {!number} seriesIndex Index of the series to extract. All other\n * series should be ignored.\n * @param {!DygraphOptions} options Dygraph options.\n * @return {Array.<[!number,?number,?]>} The series in the unified data format\n * where series[i] = [x,y,{extras}].\n */\nhandler.prototype.extractSeries = function (rawData, seriesIndex, options) {};\n\n/**\n * Converts a series to a Point array. The resulting point array must be\n * returned in increasing order of idx property.\n *\n * @param {!Array.<[!number,?number,?]>} series The series in the unified\n * data format where series[i] = [x,y,{extras}].\n * @param {!string} setName Name of the series.\n * @param {!number} boundaryIdStart Index offset of the first point, equal to the\n * number of skipped points left of the date window minimum (if any).\n * @return {!Array.} List of points for this series.\n */\nhandler.prototype.seriesToPoints = function (series, setName, boundaryIdStart) {\n // TODO(bhs): these loops are a hot-spot for high-point-count charts. In\n // fact,\n // on chrome+linux, they are 6 times more expensive than iterating through\n // the\n // points and drawing the lines. The brunt of the cost comes from allocating\n // the |point| structures.\n var points = [];\n for (var i = 0; i < series.length; ++i) {\n var item = series[i];\n var yraw = item[1];\n var yval = yraw === null ? null : handler.parseFloat(yraw);\n var point = {\n x: NaN,\n y: NaN,\n xval: handler.parseFloat(item[0]),\n yval: yval,\n name: setName, // TODO(danvk): is this really necessary?\n idx: i + boundaryIdStart\n };\n points.push(point);\n }\n this.onPointsCreated_(series, points);\n return points;\n};\n\n/**\n * Callback called for each series after the series points have been generated\n * which will later be used by the plotters to draw the graph.\n * Here data may be added to the seriesPoints which is needed by the plotters.\n * The indexes of series and points are in sync meaning the original data\n * sample for series[i] is points[i].\n *\n * @param {!Array.<[!number,?number,?]>} series The series in the unified\n * data format where series[i] = [x,y,{extras}].\n * @param {!Array.} points The corresponding points passed\n * to the plotter.\n * @protected\n */\nhandler.prototype.onPointsCreated_ = function (series, points) {};\n\n/**\n * Calculates the rolling average of a data set.\n *\n * @param {!Array.<[!number,?number,?]>} series The series in the unified\n * data format where series[i] = [x,y,{extras}].\n * @param {!number} rollPeriod The number of points over which to average the data\n * @param {!DygraphOptions} options The dygraph options.\n * @return {!Array.<[!number,?number,?]>} the rolled series.\n */\nhandler.prototype.rollingAverage = function (series, rollPeriod, options) {};\n\n/**\n * Computes the range of the data series (including confidence intervals).\n *\n * @param {!Array.<[!number,?number,?]>} series The series in the unified\n * data format where series[i] = [x, y, {extras}].\n * @param {!Array.} dateWindow The x-value range to display with\n * the format: [min, max].\n * @param {!DygraphOptions} options The dygraph options.\n * @return {Array.} The low and high extremes of the series in the\n * given window with the format: [low, high].\n */\nhandler.prototype.getExtremeYValues = function (series, dateWindow, options) {};\n\n/**\n * Callback called for each series after the layouting data has been\n * calculated before the series is drawn. Here normalized positioning data\n * should be calculated for the extras of each point.\n *\n * @param {!Array.} points The points passed to\n * the plotter.\n * @param {!Object} axis The axis on which the series will be plotted.\n * @param {!boolean} logscale Weather or not to use a logscale.\n */\nhandler.prototype.onLineEvaluated = function (points, axis, logscale) {};\n\n/**\n * Optimized replacement for parseFloat, which was way too slow when almost\n * all values were type number, with few edge cases, none of which were strings.\n * @param {?number} val\n * @return {number}\n * @protected\n */\nhandler.parseFloat = function (val) {\n // parseFloat(null) is NaN\n if (val === null) {\n return NaN;\n }\n\n // Assume it's a number or NaN. If it's something else, I'll be shocked.\n return val;\n};\n\nexports[\"default\"] = DygraphDataHandler;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DataHandler implementation for the fractions option.\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _datahandler = require('./datahandler');\n\nvar _datahandler2 = _interopRequireDefault(_datahandler);\n\nvar _default = require('./default');\n\nvar _default2 = _interopRequireDefault(_default);\n\n/**\n * @extends DefaultHandler\n * @constructor\n */\nvar DefaultFractionHandler = function DefaultFractionHandler() {};\n\nDefaultFractionHandler.prototype = new _default2['default']();\n\nDefaultFractionHandler.prototype.extractSeries = function (rawData, i, options) {\n // TODO(danvk): pre-allocate series here.\n var series = [];\n var x, y, point, num, den, value;\n var mult = 100.0;\n var logScale = options.get('logscale');\n for (var j = 0; j < rawData.length; j++) {\n x = rawData[j][0];\n point = rawData[j][i];\n if (logScale && point !== null) {\n // On the log scale, points less than zero do not exist.\n // This will create a gap in the chart.\n if (point[0] <= 0 || point[1] <= 0) {\n point = null;\n }\n }\n // Extract to the unified data format.\n if (point !== null) {\n num = point[0];\n den = point[1];\n if (num !== null && !isNaN(num)) {\n value = den ? num / den : 0.0;\n y = mult * value;\n // preserve original values in extras for further filtering\n series.push([x, y, [num, den]]);\n } else {\n series.push([x, num, [num, den]]);\n }\n } else {\n series.push([x, null, [null, null]]);\n }\n }\n return series;\n};\n\nDefaultFractionHandler.prototype.rollingAverage = function (originalData, rollPeriod, options) {\n rollPeriod = Math.min(rollPeriod, originalData.length);\n var rollingData = [];\n\n var i;\n var num = 0;\n var den = 0; // numerator/denominator\n var mult = 100.0;\n for (i = 0; i < originalData.length; i++) {\n num += originalData[i][2][0];\n den += originalData[i][2][1];\n if (i - rollPeriod >= 0) {\n num -= originalData[i - rollPeriod][2][0];\n den -= originalData[i - rollPeriod][2][1];\n }\n\n var date = originalData[i][0];\n var value = den ? num / den : 0.0;\n rollingData[i] = [date, mult * value];\n }\n\n return rollingData;\n};\n\nexports['default'] = DefaultFractionHandler;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DataHandler default implementation used for simple line charts.\n * @author David Eberlein (david.eberlein@ch.sauter-bc.com)\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _datahandler = require('./datahandler');\n\nvar _datahandler2 = _interopRequireDefault(_datahandler);\n\n/**\n * @constructor\n * @extends Dygraph.DataHandler\n */\nvar DefaultHandler = function DefaultHandler() {};\n\nDefaultHandler.prototype = new _datahandler2['default']();\n\n/** @inheritDoc */\nDefaultHandler.prototype.extractSeries = function (rawData, i, options) {\n // TODO(danvk): pre-allocate series here.\n var series = [];\n var logScale = options.get('logscale');\n for (var j = 0; j < rawData.length; j++) {\n var x = rawData[j][0];\n var point = rawData[j][i];\n if (logScale) {\n // On the log scale, points less than zero do not exist.\n // This will create a gap in the chart.\n if (point <= 0) {\n point = null;\n }\n }\n series.push([x, point]);\n }\n return series;\n};\n\n/** @inheritDoc */\nDefaultHandler.prototype.rollingAverage = function (originalData, rollPeriod, options) {\n rollPeriod = Math.min(rollPeriod, originalData.length);\n var rollingData = [];\n\n var i, j, y, sum, num_ok;\n // Calculate the rolling average for the first rollPeriod - 1 points\n // where\n // there is not enough data to roll over the full number of points\n if (rollPeriod == 1) {\n return originalData;\n }\n for (i = 0; i < originalData.length; i++) {\n sum = 0;\n num_ok = 0;\n for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) {\n y = originalData[j][1];\n if (y === null || isNaN(y)) continue;\n num_ok++;\n sum += originalData[j][1];\n }\n if (num_ok) {\n rollingData[i] = [originalData[i][0], sum / num_ok];\n } else {\n rollingData[i] = [originalData[i][0], null];\n }\n }\n\n return rollingData;\n};\n\n/** @inheritDoc */\nDefaultHandler.prototype.getExtremeYValues = function (series, dateWindow, options) {\n var minY = null,\n maxY = null,\n y;\n var firstIdx = 0,\n lastIdx = series.length - 1;\n\n for (var j = firstIdx; j <= lastIdx; j++) {\n y = series[j][1];\n if (y === null || isNaN(y)) continue;\n if (maxY === null || y > maxY) {\n maxY = y;\n }\n if (minY === null || y < minY) {\n minY = y;\n }\n }\n return [minY, maxY];\n};\n\nexports['default'] = DefaultHandler;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2006 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview Based on PlotKit.CanvasRenderer, but modified to meet the\n * needs of dygraphs.\n *\n * In particular, support for:\n * - grid overlays\n * - error bars\n * - dygraphs attribute system\n */\n\n/**\n * The DygraphCanvasRenderer class does the actual rendering of the chart onto\n * a canvas. It's based on PlotKit.CanvasRenderer.\n * @param {Object} element The canvas to attach to\n * @param {Object} elementContext The 2d context of the canvas (injected so it\n * can be mocked for testing.)\n * @param {Layout} layout The DygraphLayout object for this graph.\n * @constructor\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\nvar _dygraph = require('./dygraph');\n\nvar _dygraph2 = _interopRequireDefault(_dygraph);\n\n/**\n * @constructor\n *\n * This gets called when there are \"new points\" to chart. This is generally the\n * case when the underlying data being charted has changed. It is _not_ called\n * in the common case that the user has zoomed or is panning the view.\n *\n * The chart canvas has already been created by the Dygraph object. The\n * renderer simply gets a drawing context.\n *\n * @param {Dygraph} dygraph The chart to which this renderer belongs.\n * @param {HTMLCanvasElement} element The <canvas> DOM element on which to draw.\n * @param {CanvasRenderingContext2D} elementContext The drawing context.\n * @param {DygraphLayout} layout The chart's DygraphLayout object.\n *\n * TODO(danvk): remove the elementContext property.\n */\nvar DygraphCanvasRenderer = function DygraphCanvasRenderer(dygraph, element, elementContext, layout) {\n this.dygraph_ = dygraph;\n\n this.layout = layout;\n this.element = element;\n this.elementContext = elementContext;\n\n this.height = dygraph.height_;\n this.width = dygraph.width_;\n\n // --- check whether everything is ok before we return\n if (!utils.isCanvasSupported(this.element)) {\n throw \"Canvas is not supported.\";\n }\n\n // internal state\n this.area = layout.getPlotArea();\n\n // Set up a clipping area for the canvas (and the interaction canvas).\n // This ensures that we don't overdraw.\n var ctx = this.dygraph_.canvas_ctx_;\n ctx.beginPath();\n ctx.rect(this.area.x, this.area.y, this.area.w, this.area.h);\n ctx.clip();\n\n ctx = this.dygraph_.hidden_ctx_;\n ctx.beginPath();\n ctx.rect(this.area.x, this.area.y, this.area.w, this.area.h);\n ctx.clip();\n};\n\n/**\n * Clears out all chart content and DOM elements.\n * This is called immediately before render() on every frame, including\n * during zooms and pans.\n * @private\n */\nDygraphCanvasRenderer.prototype.clear = function () {\n this.elementContext.clearRect(0, 0, this.width, this.height);\n};\n\n/**\n * This method is responsible for drawing everything on the chart, including\n * lines, error bars, fills and axes.\n * It is called immediately after clear() on every frame, including during pans\n * and zooms.\n * @private\n */\nDygraphCanvasRenderer.prototype.render = function () {\n // attaches point.canvas{x,y}\n this._updatePoints();\n\n // actually draws the chart.\n this._renderLineChart();\n};\n\n/**\n * Returns a predicate to be used with an iterator, which will\n * iterate over points appropriately, depending on whether\n * connectSeparatedPoints is true. When it's false, the predicate will\n * skip over points with missing yVals.\n */\nDygraphCanvasRenderer._getIteratorPredicate = function (connectSeparatedPoints) {\n return connectSeparatedPoints ? DygraphCanvasRenderer._predicateThatSkipsEmptyPoints : null;\n};\n\nDygraphCanvasRenderer._predicateThatSkipsEmptyPoints = function (array, idx) {\n return array[idx].yval !== null;\n};\n\n/**\n * Draws a line with the styles passed in and calls all the drawPointCallbacks.\n * @param {Object} e The dictionary passed to the plotter function.\n * @private\n */\nDygraphCanvasRenderer._drawStyledLine = function (e, color, strokeWidth, strokePattern, drawPoints, drawPointCallback, pointSize) {\n var g = e.dygraph;\n // TODO(konigsberg): Compute attributes outside this method call.\n var stepPlot = g.getBooleanOption(\"stepPlot\", e.setName);\n\n if (!utils.isArrayLike(strokePattern)) {\n strokePattern = null;\n }\n\n var drawGapPoints = g.getBooleanOption('drawGapEdgePoints', e.setName);\n\n var points = e.points;\n var setName = e.setName;\n var iter = utils.createIterator(points, 0, points.length, DygraphCanvasRenderer._getIteratorPredicate(g.getBooleanOption(\"connectSeparatedPoints\", setName)));\n\n var stroking = strokePattern && strokePattern.length >= 2;\n\n var ctx = e.drawingContext;\n ctx.save();\n if (stroking) {\n if (ctx.setLineDash) ctx.setLineDash(strokePattern);\n }\n\n var pointsOnLine = DygraphCanvasRenderer._drawSeries(e, iter, strokeWidth, pointSize, drawPoints, drawGapPoints, stepPlot, color);\n DygraphCanvasRenderer._drawPointsOnLine(e, pointsOnLine, drawPointCallback, color, pointSize);\n\n if (stroking) {\n if (ctx.setLineDash) ctx.setLineDash([]);\n }\n\n ctx.restore();\n};\n\n/**\n * This does the actual drawing of lines on the canvas, for just one series.\n * Returns a list of [canvasx, canvasy] pairs for points for which a\n * drawPointCallback should be fired. These include isolated points, or all\n * points if drawPoints=true.\n * @param {Object} e The dictionary passed to the plotter function.\n * @private\n */\nDygraphCanvasRenderer._drawSeries = function (e, iter, strokeWidth, pointSize, drawPoints, drawGapPoints, stepPlot, color) {\n\n var prevCanvasX = null;\n var prevCanvasY = null;\n var nextCanvasY = null;\n var isIsolated; // true if this point is isolated (no line segments)\n var point; // the point being processed in the while loop\n var pointsOnLine = []; // Array of [canvasx, canvasy] pairs.\n var first = true; // the first cycle through the while loop\n\n var ctx = e.drawingContext;\n ctx.beginPath();\n ctx.strokeStyle = color;\n ctx.lineWidth = strokeWidth;\n\n // NOTE: we break the iterator's encapsulation here for about a 25% speedup.\n var arr = iter.array_;\n var limit = iter.end_;\n var predicate = iter.predicate_;\n\n for (var i = iter.start_; i < limit; i++) {\n point = arr[i];\n if (predicate) {\n while (i < limit && !predicate(arr, i)) {\n i++;\n }\n if (i == limit) break;\n point = arr[i];\n }\n\n // FIXME: The 'canvasy != canvasy' test here catches NaN values but the test\n // doesn't catch Infinity values. Could change this to\n // !isFinite(point.canvasy), but I assume it avoids isNaN for performance?\n if (point.canvasy === null || point.canvasy != point.canvasy) {\n if (stepPlot && prevCanvasX !== null) {\n // Draw a horizontal line to the start of the missing data\n ctx.moveTo(prevCanvasX, prevCanvasY);\n ctx.lineTo(point.canvasx, prevCanvasY);\n }\n prevCanvasX = prevCanvasY = null;\n } else {\n isIsolated = false;\n if (drawGapPoints || prevCanvasX === null) {\n iter.nextIdx_ = i;\n iter.next();\n nextCanvasY = iter.hasNext ? iter.peek.canvasy : null;\n\n var isNextCanvasYNullOrNaN = nextCanvasY === null || nextCanvasY != nextCanvasY;\n isIsolated = prevCanvasX === null && isNextCanvasYNullOrNaN;\n if (drawGapPoints) {\n // Also consider a point to be \"isolated\" if it's adjacent to a\n // null point, excluding the graph edges.\n if (!first && prevCanvasX === null || iter.hasNext && isNextCanvasYNullOrNaN) {\n isIsolated = true;\n }\n }\n }\n\n if (prevCanvasX !== null) {\n if (strokeWidth) {\n if (stepPlot) {\n ctx.moveTo(prevCanvasX, prevCanvasY);\n ctx.lineTo(point.canvasx, prevCanvasY);\n }\n\n ctx.lineTo(point.canvasx, point.canvasy);\n }\n } else {\n ctx.moveTo(point.canvasx, point.canvasy);\n }\n if (drawPoints || isIsolated) {\n pointsOnLine.push([point.canvasx, point.canvasy, point.idx]);\n }\n prevCanvasX = point.canvasx;\n prevCanvasY = point.canvasy;\n }\n first = false;\n }\n ctx.stroke();\n return pointsOnLine;\n};\n\n/**\n * This fires the drawPointCallback functions, which draw dots on the points by\n * default. This gets used when the \"drawPoints\" option is set, or when there\n * are isolated points.\n * @param {Object} e The dictionary passed to the plotter function.\n * @private\n */\nDygraphCanvasRenderer._drawPointsOnLine = function (e, pointsOnLine, drawPointCallback, color, pointSize) {\n var ctx = e.drawingContext;\n for (var idx = 0; idx < pointsOnLine.length; idx++) {\n var cb = pointsOnLine[idx];\n ctx.save();\n drawPointCallback.call(e.dygraph, e.dygraph, e.setName, ctx, cb[0], cb[1], color, pointSize, cb[2]);\n ctx.restore();\n }\n};\n\n/**\n * Attaches canvas coordinates to the points array.\n * @private\n */\nDygraphCanvasRenderer.prototype._updatePoints = function () {\n // Update Points\n // TODO(danvk): here\n //\n // TODO(bhs): this loop is a hot-spot for high-point-count charts. These\n // transformations can be pushed into the canvas via linear transformation\n // matrices.\n // NOTE(danvk): this is trickier than it sounds at first. The transformation\n // needs to be done before the .moveTo() and .lineTo() calls, but must be\n // undone before the .stroke() call to ensure that the stroke width is\n // unaffected. An alternative is to reduce the stroke width in the\n // transformed coordinate space, but you can't specify different values for\n // each dimension (as you can with .scale()). The speedup here is ~12%.\n var sets = this.layout.points;\n for (var i = sets.length; i--;) {\n var points = sets[i];\n for (var j = points.length; j--;) {\n var point = points[j];\n point.canvasx = this.area.w * point.x + this.area.x;\n point.canvasy = this.area.h * point.y + this.area.y;\n }\n }\n};\n\n/**\n * Add canvas Actually draw the lines chart, including error bars.\n *\n * This function can only be called if DygraphLayout's points array has been\n * updated with canvas{x,y} attributes, i.e. by\n * DygraphCanvasRenderer._updatePoints.\n *\n * @param {string=} opt_seriesName when specified, only that series will\n * be drawn. (This is used for expedited redrawing with highlightSeriesOpts)\n * @param {CanvasRenderingContext2D} opt_ctx when specified, the drawing\n * context. However, lines are typically drawn on the object's\n * elementContext.\n * @private\n */\nDygraphCanvasRenderer.prototype._renderLineChart = function (opt_seriesName, opt_ctx) {\n var ctx = opt_ctx || this.elementContext;\n var i;\n\n var sets = this.layout.points;\n var setNames = this.layout.setNames;\n var setName;\n\n this.colors = this.dygraph_.colorsMap_;\n\n // Determine which series have specialized plotters.\n var plotter_attr = this.dygraph_.getOption(\"plotter\");\n var plotters = plotter_attr;\n if (!utils.isArrayLike(plotters)) {\n plotters = [plotters];\n }\n\n var setPlotters = {}; // series name -> plotter fn.\n for (i = 0; i < setNames.length; i++) {\n setName = setNames[i];\n var setPlotter = this.dygraph_.getOption(\"plotter\", setName);\n if (setPlotter == plotter_attr) continue; // not specialized.\n\n setPlotters[setName] = setPlotter;\n }\n\n for (i = 0; i < plotters.length; i++) {\n var plotter = plotters[i];\n var is_last = i == plotters.length - 1;\n\n for (var j = 0; j < sets.length; j++) {\n setName = setNames[j];\n if (opt_seriesName && setName != opt_seriesName) continue;\n\n var points = sets[j];\n\n // Only throw in the specialized plotters on the last iteration.\n var p = plotter;\n if (setName in setPlotters) {\n if (is_last) {\n p = setPlotters[setName];\n } else {\n // Don't use the standard plotters in this case.\n continue;\n }\n }\n\n var color = this.colors[setName];\n var strokeWidth = this.dygraph_.getOption(\"strokeWidth\", setName);\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = strokeWidth;\n p({\n points: points,\n setName: setName,\n drawingContext: ctx,\n color: color,\n strokeWidth: strokeWidth,\n dygraph: this.dygraph_,\n axis: this.dygraph_.axisPropertiesForSeries(setName),\n plotArea: this.area,\n seriesIndex: j,\n seriesCount: sets.length,\n singleSeriesName: opt_seriesName,\n allSeriesPoints: sets\n });\n ctx.restore();\n }\n }\n};\n\n/**\n * Standard plotters. These may be used by clients via Dygraph.Plotters.\n * See comments there for more details.\n */\nDygraphCanvasRenderer._Plotters = {\n linePlotter: function linePlotter(e) {\n DygraphCanvasRenderer._linePlotter(e);\n },\n\n fillPlotter: function fillPlotter(e) {\n DygraphCanvasRenderer._fillPlotter(e);\n },\n\n errorPlotter: function errorPlotter(e) {\n DygraphCanvasRenderer._errorPlotter(e);\n }\n};\n\n/**\n * Plotter which draws the central lines for a series.\n * @private\n */\nDygraphCanvasRenderer._linePlotter = function (e) {\n var g = e.dygraph;\n var setName = e.setName;\n var strokeWidth = e.strokeWidth;\n\n // TODO(danvk): Check if there's any performance impact of just calling\n // getOption() inside of _drawStyledLine. Passing in so many parameters makes\n // this code a bit nasty.\n var borderWidth = g.getNumericOption(\"strokeBorderWidth\", setName);\n var drawPointCallback = g.getOption(\"drawPointCallback\", setName) || utils.Circles.DEFAULT;\n var strokePattern = g.getOption(\"strokePattern\", setName);\n var drawPoints = g.getBooleanOption(\"drawPoints\", setName);\n var pointSize = g.getNumericOption(\"pointSize\", setName);\n\n if (borderWidth && strokeWidth) {\n DygraphCanvasRenderer._drawStyledLine(e, g.getOption(\"strokeBorderColor\", setName), strokeWidth + 2 * borderWidth, strokePattern, drawPoints, drawPointCallback, pointSize);\n }\n\n DygraphCanvasRenderer._drawStyledLine(e, e.color, strokeWidth, strokePattern, drawPoints, drawPointCallback, pointSize);\n};\n\n/**\n * Draws the shaded error bars/confidence intervals for each series.\n * This happens before the center lines are drawn, since the center lines\n * need to be drawn on top of the error bars for all series.\n * @private\n */\nDygraphCanvasRenderer._errorPlotter = function (e) {\n var g = e.dygraph;\n var setName = e.setName;\n var errorBars = g.getBooleanOption(\"errorBars\") || g.getBooleanOption(\"customBars\");\n if (!errorBars) return;\n\n var fillGraph = g.getBooleanOption(\"fillGraph\", setName);\n if (fillGraph) {\n console.warn(\"Can't use fillGraph option with error bars\");\n }\n\n var ctx = e.drawingContext;\n var color = e.color;\n var fillAlpha = g.getNumericOption('fillAlpha', setName);\n var stepPlot = g.getBooleanOption(\"stepPlot\", setName);\n var points = e.points;\n\n var iter = utils.createIterator(points, 0, points.length, DygraphCanvasRenderer._getIteratorPredicate(g.getBooleanOption(\"connectSeparatedPoints\", setName)));\n\n var newYs;\n\n // setup graphics context\n var prevX = NaN;\n var prevY = NaN;\n var prevYs = [-1, -1];\n // should be same color as the lines but only 15% opaque.\n var rgb = utils.toRGB_(color);\n var err_color = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + fillAlpha + ')';\n ctx.fillStyle = err_color;\n ctx.beginPath();\n\n var isNullUndefinedOrNaN = function isNullUndefinedOrNaN(x) {\n return x === null || x === undefined || isNaN(x);\n };\n\n while (iter.hasNext) {\n var point = iter.next();\n if (!stepPlot && isNullUndefinedOrNaN(point.y) || stepPlot && !isNaN(prevY) && isNullUndefinedOrNaN(prevY)) {\n prevX = NaN;\n continue;\n }\n\n newYs = [point.y_bottom, point.y_top];\n if (stepPlot) {\n prevY = point.y;\n }\n\n // The documentation specifically disallows nulls inside the point arrays,\n // but in case it happens we should do something sensible.\n if (isNaN(newYs[0])) newYs[0] = point.y;\n if (isNaN(newYs[1])) newYs[1] = point.y;\n\n newYs[0] = e.plotArea.h * newYs[0] + e.plotArea.y;\n newYs[1] = e.plotArea.h * newYs[1] + e.plotArea.y;\n if (!isNaN(prevX)) {\n if (stepPlot) {\n ctx.moveTo(prevX, prevYs[0]);\n ctx.lineTo(point.canvasx, prevYs[0]);\n ctx.lineTo(point.canvasx, prevYs[1]);\n } else {\n ctx.moveTo(prevX, prevYs[0]);\n ctx.lineTo(point.canvasx, newYs[0]);\n ctx.lineTo(point.canvasx, newYs[1]);\n }\n ctx.lineTo(prevX, prevYs[1]);\n ctx.closePath();\n }\n prevYs = newYs;\n prevX = point.canvasx;\n }\n ctx.fill();\n};\n\n/**\n * Proxy for CanvasRenderingContext2D which drops moveTo/lineTo calls which are\n * superfluous. It accumulates all movements which haven't changed the x-value\n * and only applies the two with the most extreme y-values.\n *\n * Calls to lineTo/moveTo must have non-decreasing x-values.\n */\nDygraphCanvasRenderer._fastCanvasProxy = function (context) {\n var pendingActions = []; // array of [type, x, y] tuples\n var lastRoundedX = null;\n var lastFlushedX = null;\n\n var LINE_TO = 1,\n MOVE_TO = 2;\n\n var actionCount = 0; // number of moveTos and lineTos passed to context.\n\n // Drop superfluous motions\n // Assumes all pendingActions have the same (rounded) x-value.\n var compressActions = function compressActions(opt_losslessOnly) {\n if (pendingActions.length <= 1) return;\n\n // Lossless compression: drop inconsequential moveTos.\n for (var i = pendingActions.length - 1; i > 0; i--) {\n var action = pendingActions[i];\n if (action[0] == MOVE_TO) {\n var prevAction = pendingActions[i - 1];\n if (prevAction[1] == action[1] && prevAction[2] == action[2]) {\n pendingActions.splice(i, 1);\n }\n }\n }\n\n // Lossless compression: ... drop consecutive moveTos ...\n for (var i = 0; i < pendingActions.length - 1;) /* incremented internally */{\n var action = pendingActions[i];\n if (action[0] == MOVE_TO && pendingActions[i + 1][0] == MOVE_TO) {\n pendingActions.splice(i, 1);\n } else {\n i++;\n }\n }\n\n // Lossy compression: ... drop all but the extreme y-values ...\n if (pendingActions.length > 2 && !opt_losslessOnly) {\n // keep an initial moveTo, but drop all others.\n var startIdx = 0;\n if (pendingActions[0][0] == MOVE_TO) startIdx++;\n var minIdx = null,\n maxIdx = null;\n for (var i = startIdx; i < pendingActions.length; i++) {\n var action = pendingActions[i];\n if (action[0] != LINE_TO) continue;\n if (minIdx === null && maxIdx === null) {\n minIdx = i;\n maxIdx = i;\n } else {\n var y = action[2];\n if (y < pendingActions[minIdx][2]) {\n minIdx = i;\n } else if (y > pendingActions[maxIdx][2]) {\n maxIdx = i;\n }\n }\n }\n var minAction = pendingActions[minIdx],\n maxAction = pendingActions[maxIdx];\n pendingActions.splice(startIdx, pendingActions.length - startIdx);\n if (minIdx < maxIdx) {\n pendingActions.push(minAction);\n pendingActions.push(maxAction);\n } else if (minIdx > maxIdx) {\n pendingActions.push(maxAction);\n pendingActions.push(minAction);\n } else {\n pendingActions.push(minAction);\n }\n }\n };\n\n var flushActions = function flushActions(opt_noLossyCompression) {\n compressActions(opt_noLossyCompression);\n for (var i = 0, len = pendingActions.length; i < len; i++) {\n var action = pendingActions[i];\n if (action[0] == LINE_TO) {\n context.lineTo(action[1], action[2]);\n } else if (action[0] == MOVE_TO) {\n context.moveTo(action[1], action[2]);\n }\n }\n if (pendingActions.length) {\n lastFlushedX = pendingActions[pendingActions.length - 1][1];\n }\n actionCount += pendingActions.length;\n pendingActions = [];\n };\n\n var addAction = function addAction(action, x, y) {\n var rx = Math.round(x);\n if (lastRoundedX === null || rx != lastRoundedX) {\n // if there are large gaps on the x-axis, it's essential to keep the\n // first and last point as well.\n var hasGapOnLeft = lastRoundedX - lastFlushedX > 1,\n hasGapOnRight = rx - lastRoundedX > 1,\n hasGap = hasGapOnLeft || hasGapOnRight;\n flushActions(hasGap);\n lastRoundedX = rx;\n }\n pendingActions.push([action, x, y]);\n };\n\n return {\n moveTo: function moveTo(x, y) {\n addAction(MOVE_TO, x, y);\n },\n lineTo: function lineTo(x, y) {\n addAction(LINE_TO, x, y);\n },\n\n // for major operations like stroke/fill, we skip compression to ensure\n // that there are no artifacts at the right edge.\n stroke: function stroke() {\n flushActions(true);context.stroke();\n },\n fill: function fill() {\n flushActions(true);context.fill();\n },\n beginPath: function beginPath() {\n flushActions(true);context.beginPath();\n },\n closePath: function closePath() {\n flushActions(true);context.closePath();\n },\n\n _count: function _count() {\n return actionCount;\n }\n };\n};\n\n/**\n * Draws the shaded regions when \"fillGraph\" is set. Not to be confused with\n * error bars.\n *\n * For stacked charts, it's more convenient to handle all the series\n * simultaneously. So this plotter plots all the points on the first series\n * it's asked to draw, then ignores all the other series.\n *\n * @private\n */\nDygraphCanvasRenderer._fillPlotter = function (e) {\n // Skip if we're drawing a single series for interactive highlight overlay.\n if (e.singleSeriesName) return;\n\n // We'll handle all the series at once, not one-by-one.\n if (e.seriesIndex !== 0) return;\n\n var g = e.dygraph;\n var setNames = g.getLabels().slice(1); // remove x-axis\n\n // getLabels() includes names for invisible series, which are not included in\n // allSeriesPoints. We remove those to make the two match.\n // TODO(danvk): provide a simpler way to get this information.\n for (var i = setNames.length; i >= 0; i--) {\n if (!g.visibility()[i]) setNames.splice(i, 1);\n }\n\n var anySeriesFilled = (function () {\n for (var i = 0; i < setNames.length; i++) {\n if (g.getBooleanOption(\"fillGraph\", setNames[i])) return true;\n }\n return false;\n })();\n\n if (!anySeriesFilled) return;\n\n var area = e.plotArea;\n var sets = e.allSeriesPoints;\n var setCount = sets.length;\n\n var stackedGraph = g.getBooleanOption(\"stackedGraph\");\n var colors = g.getColors();\n\n // For stacked graphs, track the baseline for filling.\n //\n // The filled areas below graph lines are trapezoids with two\n // vertical edges. The top edge is the line segment being drawn, and\n // the baseline is the bottom edge. Each baseline corresponds to the\n // top line segment from the previous stacked line. In the case of\n // step plots, the trapezoids are rectangles.\n var baseline = {};\n var currBaseline;\n var prevStepPlot; // for different line drawing modes (line/step) per series\n\n // Helper function to trace a line back along the baseline.\n var traceBackPath = function traceBackPath(ctx, baselineX, baselineY, pathBack) {\n ctx.lineTo(baselineX, baselineY);\n if (stackedGraph) {\n for (var i = pathBack.length - 1; i >= 0; i--) {\n var pt = pathBack[i];\n ctx.lineTo(pt[0], pt[1]);\n }\n }\n };\n\n // process sets in reverse order (needed for stacked graphs)\n for (var setIdx = setCount - 1; setIdx >= 0; setIdx--) {\n var ctx = e.drawingContext;\n var setName = setNames[setIdx];\n if (!g.getBooleanOption('fillGraph', setName)) continue;\n\n var fillAlpha = g.getNumericOption('fillAlpha', setName);\n var stepPlot = g.getBooleanOption('stepPlot', setName);\n var color = colors[setIdx];\n var axis = g.axisPropertiesForSeries(setName);\n var axisY = 1.0 + axis.minyval * axis.yscale;\n if (axisY < 0.0) axisY = 0.0;else if (axisY > 1.0) axisY = 1.0;\n axisY = area.h * axisY + area.y;\n\n var points = sets[setIdx];\n var iter = utils.createIterator(points, 0, points.length, DygraphCanvasRenderer._getIteratorPredicate(g.getBooleanOption(\"connectSeparatedPoints\", setName)));\n\n // setup graphics context\n var prevX = NaN;\n var prevYs = [-1, -1];\n var newYs;\n // should be same color as the lines but only 15% opaque.\n var rgb = utils.toRGB_(color);\n var err_color = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + fillAlpha + ')';\n ctx.fillStyle = err_color;\n ctx.beginPath();\n var last_x,\n is_first = true;\n\n // If the point density is high enough, dropping segments on their way to\n // the canvas justifies the overhead of doing so.\n if (points.length > 2 * g.width_ || _dygraph2['default'].FORCE_FAST_PROXY) {\n ctx = DygraphCanvasRenderer._fastCanvasProxy(ctx);\n }\n\n // For filled charts, we draw points from left to right, then back along\n // the x-axis to complete a shape for filling.\n // For stacked plots, this \"back path\" is a more complex shape. This array\n // stores the [x, y] values needed to trace that shape.\n var pathBack = [];\n\n // TODO(danvk): there are a lot of options at play in this loop.\n // The logic would be much clearer if some (e.g. stackGraph and\n // stepPlot) were split off into separate sub-plotters.\n var point;\n while (iter.hasNext) {\n point = iter.next();\n if (!utils.isOK(point.y) && !stepPlot) {\n traceBackPath(ctx, prevX, prevYs[1], pathBack);\n pathBack = [];\n prevX = NaN;\n if (point.y_stacked !== null && !isNaN(point.y_stacked)) {\n baseline[point.canvasx] = area.h * point.y_stacked + area.y;\n }\n continue;\n }\n if (stackedGraph) {\n if (!is_first && last_x == point.xval) {\n continue;\n } else {\n is_first = false;\n last_x = point.xval;\n }\n\n currBaseline = baseline[point.canvasx];\n var lastY;\n if (currBaseline === undefined) {\n lastY = axisY;\n } else {\n if (prevStepPlot) {\n lastY = currBaseline[0];\n } else {\n lastY = currBaseline;\n }\n }\n newYs = [point.canvasy, lastY];\n\n if (stepPlot) {\n // Step plots must keep track of the top and bottom of\n // the baseline at each point.\n if (prevYs[0] === -1) {\n baseline[point.canvasx] = [point.canvasy, axisY];\n } else {\n baseline[point.canvasx] = [point.canvasy, prevYs[0]];\n }\n } else {\n baseline[point.canvasx] = point.canvasy;\n }\n } else {\n if (isNaN(point.canvasy) && stepPlot) {\n newYs = [area.y + area.h, axisY];\n } else {\n newYs = [point.canvasy, axisY];\n }\n }\n if (!isNaN(prevX)) {\n // Move to top fill point\n if (stepPlot) {\n ctx.lineTo(point.canvasx, prevYs[0]);\n ctx.lineTo(point.canvasx, newYs[0]);\n } else {\n ctx.lineTo(point.canvasx, newYs[0]);\n }\n\n // Record the baseline for the reverse path.\n if (stackedGraph) {\n pathBack.push([prevX, prevYs[1]]);\n if (prevStepPlot && currBaseline) {\n // Draw to the bottom of the baseline\n pathBack.push([point.canvasx, currBaseline[1]]);\n } else {\n pathBack.push([point.canvasx, newYs[1]]);\n }\n }\n } else {\n ctx.moveTo(point.canvasx, newYs[1]);\n ctx.lineTo(point.canvasx, newYs[0]);\n }\n prevYs = newYs;\n prevX = point.canvasx;\n }\n prevStepPlot = stepPlot;\n if (newYs && point) {\n traceBackPath(ctx, point.canvasx, newYs[1], pathBack);\n pathBack = [];\n }\n ctx.fill();\n }\n};\n\nexports['default'] = DygraphCanvasRenderer;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphTickers = require('./dygraph-tickers');\n\nvar DygraphTickers = _interopRequireWildcard(_dygraphTickers);\n\nvar _dygraphInteractionModel = require('./dygraph-interaction-model');\n\nvar _dygraphInteractionModel2 = _interopRequireDefault(_dygraphInteractionModel);\n\nvar _dygraphCanvas = require('./dygraph-canvas');\n\nvar _dygraphCanvas2 = _interopRequireDefault(_dygraphCanvas);\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n// Default attribute values.\nvar DEFAULT_ATTRS = {\n highlightCircleSize: 3,\n highlightSeriesOpts: null,\n highlightSeriesBackgroundAlpha: 0.5,\n highlightSeriesBackgroundColor: 'rgb(255, 255, 255)',\n\n labelsSeparateLines: false,\n labelsShowZeroValues: true,\n labelsKMB: false,\n labelsKMG2: false,\n showLabelsOnHighlight: true,\n\n digitsAfterDecimal: 2,\n maxNumberWidth: 6,\n sigFigs: null,\n\n strokeWidth: 1.0,\n strokeBorderWidth: 0,\n strokeBorderColor: \"white\",\n\n axisTickSize: 3,\n axisLabelFontSize: 14,\n rightGap: 5,\n\n showRoller: false,\n xValueParser: undefined,\n\n delimiter: ',',\n\n sigma: 2.0,\n errorBars: false,\n fractions: false,\n wilsonInterval: true, // only relevant if fractions is true\n customBars: false,\n fillGraph: false,\n fillAlpha: 0.15,\n connectSeparatedPoints: false,\n\n stackedGraph: false,\n stackedGraphNaNFill: 'all',\n hideOverlayOnMouseOut: true,\n\n legend: 'onmouseover',\n stepPlot: false,\n xRangePad: 0,\n yRangePad: null,\n drawAxesAtZero: false,\n\n // Sizes of the various chart labels.\n titleHeight: 28,\n xLabelHeight: 18,\n yLabelWidth: 18,\n\n axisLineColor: \"black\",\n axisLineWidth: 0.3,\n gridLineWidth: 0.3,\n axisLabelWidth: 50,\n gridLineColor: \"rgb(128,128,128)\",\n\n interactionModel: _dygraphInteractionModel2['default'].defaultModel,\n animatedZooms: false, // (for now)\n\n // Range selector options\n showRangeSelector: false,\n rangeSelectorHeight: 40,\n rangeSelectorPlotStrokeColor: \"#808FAB\",\n rangeSelectorPlotFillGradientColor: \"white\",\n rangeSelectorPlotFillColor: \"#A7B1C4\",\n rangeSelectorBackgroundStrokeColor: \"gray\",\n rangeSelectorBackgroundLineWidth: 1,\n rangeSelectorPlotLineWidth: 1.5,\n rangeSelectorForegroundStrokeColor: \"black\",\n rangeSelectorForegroundLineWidth: 1,\n rangeSelectorAlpha: 0.6,\n showInRangeSelector: null,\n\n // The ordering here ensures that central lines always appear above any\n // fill bars/error bars.\n plotter: [_dygraphCanvas2['default']._fillPlotter, _dygraphCanvas2['default']._errorPlotter, _dygraphCanvas2['default']._linePlotter],\n\n plugins: [],\n\n // per-axis options\n axes: {\n x: {\n pixelsPerLabel: 70,\n axisLabelWidth: 60,\n axisLabelFormatter: utils.dateAxisLabelFormatter,\n valueFormatter: utils.dateValueFormatter,\n drawGrid: true,\n drawAxis: true,\n independentTicks: true,\n ticker: DygraphTickers.dateTicker\n },\n y: {\n axisLabelWidth: 50,\n pixelsPerLabel: 30,\n valueFormatter: utils.numberValueFormatter,\n axisLabelFormatter: utils.numberAxisLabelFormatter,\n drawGrid: true,\n drawAxis: true,\n independentTicks: true,\n ticker: DygraphTickers.numericTicks\n },\n y2: {\n axisLabelWidth: 50,\n pixelsPerLabel: 30,\n valueFormatter: utils.numberValueFormatter,\n axisLabelFormatter: utils.numberAxisLabelFormatter,\n drawAxis: true, // only applies when there are two axes of data.\n drawGrid: false,\n independentTicks: false,\n ticker: DygraphTickers.numericTicks\n }\n }\n};\n\nexports['default'] = DEFAULT_ATTRS;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview A wrapper around the Dygraph class which implements the\n * interface for a GViz (aka Google Visualization API) visualization.\n * It is designed to be a drop-in replacement for Google's AnnotatedTimeline,\n * so the documentation at\n * http://code.google.com/apis/chart/interactive/docs/gallery/annotatedtimeline.html\n * translates over directly.\n *\n * For a full demo, see:\n * - http://dygraphs.com/tests/gviz.html\n * - http://dygraphs.com/tests/annotation-gviz.html\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _dygraph = require('./dygraph');\n\nvar _dygraph2 = _interopRequireDefault(_dygraph);\n\n/**\n * A wrapper around Dygraph that implements the gviz API.\n * @param {!HTMLDivElement} container The DOM object the visualization should\n * live in.\n * @constructor\n */\nvar GVizChart = function GVizChart(container) {\n this.container = container;\n};\n\n/**\n * @param {GVizDataTable} data\n * @param {Object.<*>} options\n */\nGVizChart.prototype.draw = function (data, options) {\n // Clear out any existing dygraph.\n // TODO(danvk): would it make more sense to simply redraw using the current\n // date_graph object?\n this.container.innerHTML = '';\n if (typeof this.date_graph != 'undefined') {\n this.date_graph.destroy();\n }\n\n this.date_graph = new _dygraph2['default'](this.container, data, options);\n};\n\n/**\n * Google charts compatible setSelection\n * Only row selection is supported, all points in the row will be highlighted\n * @param {Array.<{row:number}>} selection_array array of the selected cells\n * @public\n */\nGVizChart.prototype.setSelection = function (selection_array) {\n var row = false;\n if (selection_array.length) {\n row = selection_array[0].row;\n }\n this.date_graph.setSelection(row);\n};\n\n/**\n * Google charts compatible getSelection implementation\n * @return {Array.<{row:number,column:number}>} array of the selected cells\n * @public\n */\nGVizChart.prototype.getSelection = function () {\n var selection = [];\n\n var row = this.date_graph.getSelection();\n\n if (row < 0) return selection;\n\n var points = this.date_graph.layout_.points;\n for (var setIdx = 0; setIdx < points.length; ++setIdx) {\n selection.push({ row: row, column: setIdx + 1 });\n }\n\n return selection;\n};\n\nexports['default'] = GVizChart;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2011 Robert Konigsberg (konigsberg@google.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview The default interaction model for Dygraphs. This is kept out\n * of dygraph.js for better navigability.\n * @author Robert Konigsberg (konigsberg@google.com)\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n/**\n * You can drag this many pixels past the edge of the chart and still have it\n * be considered a zoom. This makes it easier to zoom to the exact edge of the\n * chart, a fairly common operation.\n */\nvar DRAG_EDGE_MARGIN = 100;\n\n/**\n * A collection of functions to facilitate build custom interaction models.\n * @class\n */\nvar DygraphInteraction = {};\n\n/**\n * Checks whether the beginning & ending of an event were close enough that it\n * should be considered a click. If it should, dispatch appropriate events.\n * Returns true if the event was treated as a click.\n *\n * @param {Event} event\n * @param {Dygraph} g\n * @param {Object} context\n */\nDygraphInteraction.maybeTreatMouseOpAsClick = function (event, g, context) {\n context.dragEndX = utils.dragGetX_(event, context);\n context.dragEndY = utils.dragGetY_(event, context);\n var regionWidth = Math.abs(context.dragEndX - context.dragStartX);\n var regionHeight = Math.abs(context.dragEndY - context.dragStartY);\n\n if (regionWidth < 2 && regionHeight < 2 && g.lastx_ !== undefined && g.lastx_ != -1) {\n DygraphInteraction.treatMouseOpAsClick(g, event, context);\n }\n\n context.regionWidth = regionWidth;\n context.regionHeight = regionHeight;\n};\n\n/**\n * Called in response to an interaction model operation that\n * should start the default panning behavior.\n *\n * It's used in the default callback for \"mousedown\" operations.\n * Custom interaction model builders can use it to provide the default\n * panning behavior.\n *\n * @param {Event} event the event object which led to the startPan call.\n * @param {Dygraph} g The dygraph on which to act.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.startPan = function (event, g, context) {\n var i, axis;\n context.isPanning = true;\n var xRange = g.xAxisRange();\n\n if (g.getOptionForAxis(\"logscale\", \"x\")) {\n context.initialLeftmostDate = utils.log10(xRange[0]);\n context.dateRange = utils.log10(xRange[1]) - utils.log10(xRange[0]);\n } else {\n context.initialLeftmostDate = xRange[0];\n context.dateRange = xRange[1] - xRange[0];\n }\n context.xUnitsPerPixel = context.dateRange / (g.plotter_.area.w - 1);\n\n if (g.getNumericOption(\"panEdgeFraction\")) {\n var maxXPixelsToDraw = g.width_ * g.getNumericOption(\"panEdgeFraction\");\n var xExtremes = g.xAxisExtremes(); // I REALLY WANT TO CALL THIS xTremes!\n\n var boundedLeftX = g.toDomXCoord(xExtremes[0]) - maxXPixelsToDraw;\n var boundedRightX = g.toDomXCoord(xExtremes[1]) + maxXPixelsToDraw;\n\n var boundedLeftDate = g.toDataXCoord(boundedLeftX);\n var boundedRightDate = g.toDataXCoord(boundedRightX);\n context.boundedDates = [boundedLeftDate, boundedRightDate];\n\n var boundedValues = [];\n var maxYPixelsToDraw = g.height_ * g.getNumericOption(\"panEdgeFraction\");\n\n for (i = 0; i < g.axes_.length; i++) {\n axis = g.axes_[i];\n var yExtremes = axis.extremeRange;\n\n var boundedTopY = g.toDomYCoord(yExtremes[0], i) + maxYPixelsToDraw;\n var boundedBottomY = g.toDomYCoord(yExtremes[1], i) - maxYPixelsToDraw;\n\n var boundedTopValue = g.toDataYCoord(boundedTopY, i);\n var boundedBottomValue = g.toDataYCoord(boundedBottomY, i);\n\n boundedValues[i] = [boundedTopValue, boundedBottomValue];\n }\n context.boundedValues = boundedValues;\n }\n\n // Record the range of each y-axis at the start of the drag.\n // If any axis has a valueRange, then we want a 2D pan.\n // We can't store data directly in g.axes_, because it does not belong to us\n // and could change out from under us during a pan (say if there's a data\n // update).\n context.is2DPan = false;\n context.axes = [];\n for (i = 0; i < g.axes_.length; i++) {\n axis = g.axes_[i];\n var axis_data = {};\n var yRange = g.yAxisRange(i);\n // TODO(konigsberg): These values should be in |context|.\n // In log scale, initialTopValue, dragValueRange and unitsPerPixel are log scale.\n var logscale = g.attributes_.getForAxis(\"logscale\", i);\n if (logscale) {\n axis_data.initialTopValue = utils.log10(yRange[1]);\n axis_data.dragValueRange = utils.log10(yRange[1]) - utils.log10(yRange[0]);\n } else {\n axis_data.initialTopValue = yRange[1];\n axis_data.dragValueRange = yRange[1] - yRange[0];\n }\n axis_data.unitsPerPixel = axis_data.dragValueRange / (g.plotter_.area.h - 1);\n context.axes.push(axis_data);\n\n // While calculating axes, set 2dpan.\n if (axis.valueRange) context.is2DPan = true;\n }\n};\n\n/**\n * Called in response to an interaction model operation that\n * responds to an event that pans the view.\n *\n * It's used in the default callback for \"mousemove\" operations.\n * Custom interaction model builders can use it to provide the default\n * panning behavior.\n *\n * @param {Event} event the event object which led to the movePan call.\n * @param {Dygraph} g The dygraph on which to act.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.movePan = function (event, g, context) {\n context.dragEndX = utils.dragGetX_(event, context);\n context.dragEndY = utils.dragGetY_(event, context);\n\n var minDate = context.initialLeftmostDate - (context.dragEndX - context.dragStartX) * context.xUnitsPerPixel;\n if (context.boundedDates) {\n minDate = Math.max(minDate, context.boundedDates[0]);\n }\n var maxDate = minDate + context.dateRange;\n if (context.boundedDates) {\n if (maxDate > context.boundedDates[1]) {\n // Adjust minDate, and recompute maxDate.\n minDate = minDate - (maxDate - context.boundedDates[1]);\n maxDate = minDate + context.dateRange;\n }\n }\n\n if (g.getOptionForAxis(\"logscale\", \"x\")) {\n g.dateWindow_ = [Math.pow(utils.LOG_SCALE, minDate), Math.pow(utils.LOG_SCALE, maxDate)];\n } else {\n g.dateWindow_ = [minDate, maxDate];\n }\n\n // y-axis scaling is automatic unless this is a full 2D pan.\n if (context.is2DPan) {\n\n var pixelsDragged = context.dragEndY - context.dragStartY;\n\n // Adjust each axis appropriately.\n for (var i = 0; i < g.axes_.length; i++) {\n var axis = g.axes_[i];\n var axis_data = context.axes[i];\n var unitsDragged = pixelsDragged * axis_data.unitsPerPixel;\n\n var boundedValue = context.boundedValues ? context.boundedValues[i] : null;\n\n // In log scale, maxValue and minValue are the logs of those values.\n var maxValue = axis_data.initialTopValue + unitsDragged;\n if (boundedValue) {\n maxValue = Math.min(maxValue, boundedValue[1]);\n }\n var minValue = maxValue - axis_data.dragValueRange;\n if (boundedValue) {\n if (minValue < boundedValue[0]) {\n // Adjust maxValue, and recompute minValue.\n maxValue = maxValue - (minValue - boundedValue[0]);\n minValue = maxValue - axis_data.dragValueRange;\n }\n }\n if (g.attributes_.getForAxis(\"logscale\", i)) {\n axis.valueRange = [Math.pow(utils.LOG_SCALE, minValue), Math.pow(utils.LOG_SCALE, maxValue)];\n } else {\n axis.valueRange = [minValue, maxValue];\n }\n }\n }\n\n g.drawGraph_(false);\n};\n\n/**\n * Called in response to an interaction model operation that\n * responds to an event that ends panning.\n *\n * It's used in the default callback for \"mouseup\" operations.\n * Custom interaction model builders can use it to provide the default\n * panning behavior.\n *\n * @param {Event} event the event object which led to the endPan call.\n * @param {Dygraph} g The dygraph on which to act.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.endPan = DygraphInteraction.maybeTreatMouseOpAsClick;\n\n/**\n * Called in response to an interaction model operation that\n * responds to an event that starts zooming.\n *\n * It's used in the default callback for \"mousedown\" operations.\n * Custom interaction model builders can use it to provide the default\n * zooming behavior.\n *\n * @param {Event} event the event object which led to the startZoom call.\n * @param {Dygraph} g The dygraph on which to act.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.startZoom = function (event, g, context) {\n context.isZooming = true;\n context.zoomMoved = false;\n};\n\n/**\n * Called in response to an interaction model operation that\n * responds to an event that defines zoom boundaries.\n *\n * It's used in the default callback for \"mousemove\" operations.\n * Custom interaction model builders can use it to provide the default\n * zooming behavior.\n *\n * @param {Event} event the event object which led to the moveZoom call.\n * @param {Dygraph} g The dygraph on which to act.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.moveZoom = function (event, g, context) {\n context.zoomMoved = true;\n context.dragEndX = utils.dragGetX_(event, context);\n context.dragEndY = utils.dragGetY_(event, context);\n\n var xDelta = Math.abs(context.dragStartX - context.dragEndX);\n var yDelta = Math.abs(context.dragStartY - context.dragEndY);\n\n // drag direction threshold for y axis is twice as large as x axis\n context.dragDirection = xDelta < yDelta / 2 ? utils.VERTICAL : utils.HORIZONTAL;\n\n g.drawZoomRect_(context.dragDirection, context.dragStartX, context.dragEndX, context.dragStartY, context.dragEndY, context.prevDragDirection, context.prevEndX, context.prevEndY);\n\n context.prevEndX = context.dragEndX;\n context.prevEndY = context.dragEndY;\n context.prevDragDirection = context.dragDirection;\n};\n\n/**\n * TODO(danvk): move this logic into dygraph.js\n * @param {Dygraph} g\n * @param {Event} event\n * @param {Object} context\n */\nDygraphInteraction.treatMouseOpAsClick = function (g, event, context) {\n var clickCallback = g.getFunctionOption('clickCallback');\n var pointClickCallback = g.getFunctionOption('pointClickCallback');\n\n var selectedPoint = null;\n\n // Find out if the click occurs on a point.\n var closestIdx = -1;\n var closestDistance = Number.MAX_VALUE;\n\n // check if the click was on a particular point.\n for (var i = 0; i < g.selPoints_.length; i++) {\n var p = g.selPoints_[i];\n var distance = Math.pow(p.canvasx - context.dragEndX, 2) + Math.pow(p.canvasy - context.dragEndY, 2);\n if (!isNaN(distance) && (closestIdx == -1 || distance < closestDistance)) {\n closestDistance = distance;\n closestIdx = i;\n }\n }\n\n // Allow any click within two pixels of the dot.\n var radius = g.getNumericOption('highlightCircleSize') + 2;\n if (closestDistance <= radius * radius) {\n selectedPoint = g.selPoints_[closestIdx];\n }\n\n if (selectedPoint) {\n var e = {\n cancelable: true,\n point: selectedPoint,\n canvasx: context.dragEndX,\n canvasy: context.dragEndY\n };\n var defaultPrevented = g.cascadeEvents_('pointClick', e);\n if (defaultPrevented) {\n // Note: this also prevents click / clickCallback from firing.\n return;\n }\n if (pointClickCallback) {\n pointClickCallback.call(g, event, selectedPoint);\n }\n }\n\n var e = {\n cancelable: true,\n xval: g.lastx_, // closest point by x value\n pts: g.selPoints_,\n canvasx: context.dragEndX,\n canvasy: context.dragEndY\n };\n if (!g.cascadeEvents_('click', e)) {\n if (clickCallback) {\n // TODO(danvk): pass along more info about the points, e.g. 'x'\n clickCallback.call(g, event, g.lastx_, g.selPoints_);\n }\n }\n};\n\n/**\n * Called in response to an interaction model operation that\n * responds to an event that performs a zoom based on previously defined\n * bounds..\n *\n * It's used in the default callback for \"mouseup\" operations.\n * Custom interaction model builders can use it to provide the default\n * zooming behavior.\n *\n * @param {Event} event the event object which led to the endZoom call.\n * @param {Dygraph} g The dygraph on which to end the zoom.\n * @param {Object} context The dragging context object (with\n * dragStartX/dragStartY/etc. properties). This function modifies the\n * context.\n */\nDygraphInteraction.endZoom = function (event, g, context) {\n g.clearZoomRect_();\n context.isZooming = false;\n DygraphInteraction.maybeTreatMouseOpAsClick(event, g, context);\n\n // The zoom rectangle is visibly clipped to the plot area, so its behavior\n // should be as well.\n // See http://code.google.com/p/dygraphs/issues/detail?id=280\n var plotArea = g.getArea();\n if (context.regionWidth >= 10 && context.dragDirection == utils.HORIZONTAL) {\n var left = Math.min(context.dragStartX, context.dragEndX),\n right = Math.max(context.dragStartX, context.dragEndX);\n left = Math.max(left, plotArea.x);\n right = Math.min(right, plotArea.x + plotArea.w);\n if (left < right) {\n g.doZoomX_(left, right);\n }\n context.cancelNextDblclick = true;\n } else if (context.regionHeight >= 10 && context.dragDirection == utils.VERTICAL) {\n var top = Math.min(context.dragStartY, context.dragEndY),\n bottom = Math.max(context.dragStartY, context.dragEndY);\n top = Math.max(top, plotArea.y);\n bottom = Math.min(bottom, plotArea.y + plotArea.h);\n if (top < bottom) {\n g.doZoomY_(top, bottom);\n }\n context.cancelNextDblclick = true;\n }\n context.dragStartX = null;\n context.dragStartY = null;\n};\n\n/**\n * @private\n */\nDygraphInteraction.startTouch = function (event, g, context) {\n event.preventDefault(); // touch browsers are all nice.\n if (event.touches.length > 1) {\n // If the user ever puts two fingers down, it's not a double tap.\n context.startTimeForDoubleTapMs = null;\n }\n\n var touches = [];\n for (var i = 0; i < event.touches.length; i++) {\n var t = event.touches[i];\n // we dispense with 'dragGetX_' because all touchBrowsers support pageX\n touches.push({\n pageX: t.pageX,\n pageY: t.pageY,\n dataX: g.toDataXCoord(t.pageX),\n dataY: g.toDataYCoord(t.pageY)\n // identifier: t.identifier\n });\n }\n context.initialTouches = touches;\n\n if (touches.length == 1) {\n // This is just a swipe.\n context.initialPinchCenter = touches[0];\n context.touchDirections = { x: true, y: true };\n } else if (touches.length >= 2) {\n // It's become a pinch!\n // In case there are 3+ touches, we ignore all but the \"first\" two.\n\n // only screen coordinates can be averaged (data coords could be log scale).\n context.initialPinchCenter = {\n pageX: 0.5 * (touches[0].pageX + touches[1].pageX),\n pageY: 0.5 * (touches[0].pageY + touches[1].pageY),\n\n // TODO(danvk): remove\n dataX: 0.5 * (touches[0].dataX + touches[1].dataX),\n dataY: 0.5 * (touches[0].dataY + touches[1].dataY)\n };\n\n // Make pinches in a 45-degree swath around either axis 1-dimensional zooms.\n var initialAngle = 180 / Math.PI * Math.atan2(context.initialPinchCenter.pageY - touches[0].pageY, touches[0].pageX - context.initialPinchCenter.pageX);\n\n // use symmetry to get it into the first quadrant.\n initialAngle = Math.abs(initialAngle);\n if (initialAngle > 90) initialAngle = 90 - initialAngle;\n\n context.touchDirections = {\n x: initialAngle < 90 - 45 / 2,\n y: initialAngle > 45 / 2\n };\n }\n\n // save the full x & y ranges.\n context.initialRange = {\n x: g.xAxisRange(),\n y: g.yAxisRange()\n };\n};\n\n/**\n * @private\n */\nDygraphInteraction.moveTouch = function (event, g, context) {\n // If the tap moves, then it's definitely not part of a double-tap.\n context.startTimeForDoubleTapMs = null;\n\n var i,\n touches = [];\n for (i = 0; i < event.touches.length; i++) {\n var t = event.touches[i];\n touches.push({\n pageX: t.pageX,\n pageY: t.pageY\n });\n }\n var initialTouches = context.initialTouches;\n\n var c_now;\n\n // old and new centers.\n var c_init = context.initialPinchCenter;\n if (touches.length == 1) {\n c_now = touches[0];\n } else {\n c_now = {\n pageX: 0.5 * (touches[0].pageX + touches[1].pageX),\n pageY: 0.5 * (touches[0].pageY + touches[1].pageY)\n };\n }\n\n // this is the \"swipe\" component\n // we toss it out for now, but could use it in the future.\n var swipe = {\n pageX: c_now.pageX - c_init.pageX,\n pageY: c_now.pageY - c_init.pageY\n };\n var dataWidth = context.initialRange.x[1] - context.initialRange.x[0];\n var dataHeight = context.initialRange.y[0] - context.initialRange.y[1];\n swipe.dataX = swipe.pageX / g.plotter_.area.w * dataWidth;\n swipe.dataY = swipe.pageY / g.plotter_.area.h * dataHeight;\n var xScale, yScale;\n\n // The residual bits are usually split into scale & rotate bits, but we split\n // them into x-scale and y-scale bits.\n if (touches.length == 1) {\n xScale = 1.0;\n yScale = 1.0;\n } else if (touches.length >= 2) {\n var initHalfWidth = initialTouches[1].pageX - c_init.pageX;\n xScale = (touches[1].pageX - c_now.pageX) / initHalfWidth;\n\n var initHalfHeight = initialTouches[1].pageY - c_init.pageY;\n yScale = (touches[1].pageY - c_now.pageY) / initHalfHeight;\n }\n\n // Clip scaling to [1/8, 8] to prevent too much blowup.\n xScale = Math.min(8, Math.max(0.125, xScale));\n yScale = Math.min(8, Math.max(0.125, yScale));\n\n var didZoom = false;\n if (context.touchDirections.x) {\n g.dateWindow_ = [c_init.dataX - swipe.dataX + (context.initialRange.x[0] - c_init.dataX) / xScale, c_init.dataX - swipe.dataX + (context.initialRange.x[1] - c_init.dataX) / xScale];\n didZoom = true;\n }\n\n if (context.touchDirections.y) {\n for (i = 0; i < 1 /*g.axes_.length*/; i++) {\n var axis = g.axes_[i];\n var logscale = g.attributes_.getForAxis(\"logscale\", i);\n if (logscale) {\n // TODO(danvk): implement\n } else {\n axis.valueRange = [c_init.dataY - swipe.dataY + (context.initialRange.y[0] - c_init.dataY) / yScale, c_init.dataY - swipe.dataY + (context.initialRange.y[1] - c_init.dataY) / yScale];\n didZoom = true;\n }\n }\n }\n\n g.drawGraph_(false);\n\n // We only call zoomCallback on zooms, not pans, to mirror desktop behavior.\n if (didZoom && touches.length > 1 && g.getFunctionOption('zoomCallback')) {\n var viewWindow = g.xAxisRange();\n g.getFunctionOption(\"zoomCallback\").call(g, viewWindow[0], viewWindow[1], g.yAxisRanges());\n }\n};\n\n/**\n * @private\n */\nDygraphInteraction.endTouch = function (event, g, context) {\n if (event.touches.length !== 0) {\n // this is effectively a \"reset\"\n DygraphInteraction.startTouch(event, g, context);\n } else if (event.changedTouches.length == 1) {\n // Could be part of a \"double tap\"\n // The heuristic here is that it's a double-tap if the two touchend events\n // occur within 500ms and within a 50x50 pixel box.\n var now = new Date().getTime();\n var t = event.changedTouches[0];\n if (context.startTimeForDoubleTapMs && now - context.startTimeForDoubleTapMs < 500 && context.doubleTapX && Math.abs(context.doubleTapX - t.screenX) < 50 && context.doubleTapY && Math.abs(context.doubleTapY - t.screenY) < 50) {\n g.resetZoom();\n } else {\n context.startTimeForDoubleTapMs = now;\n context.doubleTapX = t.screenX;\n context.doubleTapY = t.screenY;\n }\n }\n};\n\n// Determine the distance from x to [left, right].\nvar distanceFromInterval = function distanceFromInterval(x, left, right) {\n if (x < left) {\n return left - x;\n } else if (x > right) {\n return x - right;\n } else {\n return 0;\n }\n};\n\n/**\n * Returns the number of pixels by which the event happens from the nearest\n * edge of the chart. For events in the interior of the chart, this returns zero.\n */\nvar distanceFromChart = function distanceFromChart(event, g) {\n var chartPos = utils.findPos(g.canvas_);\n var box = {\n left: chartPos.x,\n right: chartPos.x + g.canvas_.offsetWidth,\n top: chartPos.y,\n bottom: chartPos.y + g.canvas_.offsetHeight\n };\n\n var pt = {\n x: utils.pageX(event),\n y: utils.pageY(event)\n };\n\n var dx = distanceFromInterval(pt.x, box.left, box.right),\n dy = distanceFromInterval(pt.y, box.top, box.bottom);\n return Math.max(dx, dy);\n};\n\n/**\n * Default interation model for dygraphs. You can refer to specific elements of\n * this when constructing your own interaction model, e.g.:\n * g.updateOptions( {\n * interactionModel: {\n * mousedown: DygraphInteraction.defaultInteractionModel.mousedown\n * }\n * } );\n */\nDygraphInteraction.defaultModel = {\n // Track the beginning of drag events\n mousedown: function mousedown(event, g, context) {\n // Right-click should not initiate a zoom.\n if (event.button && event.button == 2) return;\n\n context.initializeMouseDown(event, g, context);\n\n if (event.altKey || event.shiftKey) {\n DygraphInteraction.startPan(event, g, context);\n } else {\n DygraphInteraction.startZoom(event, g, context);\n }\n\n // Note: we register mousemove/mouseup on document to allow some leeway for\n // events to move outside of the chart. Interaction model events get\n // registered on the canvas, which is too small to allow this.\n var mousemove = function mousemove(event) {\n if (context.isZooming) {\n // When the mouse moves >200px from the chart edge, cancel the zoom.\n var d = distanceFromChart(event, g);\n if (d < DRAG_EDGE_MARGIN) {\n DygraphInteraction.moveZoom(event, g, context);\n } else {\n if (context.dragEndX !== null) {\n context.dragEndX = null;\n context.dragEndY = null;\n g.clearZoomRect_();\n }\n }\n } else if (context.isPanning) {\n DygraphInteraction.movePan(event, g, context);\n }\n };\n var mouseup = function mouseup(event) {\n if (context.isZooming) {\n if (context.dragEndX !== null) {\n DygraphInteraction.endZoom(event, g, context);\n } else {\n DygraphInteraction.maybeTreatMouseOpAsClick(event, g, context);\n }\n } else if (context.isPanning) {\n DygraphInteraction.endPan(event, g, context);\n }\n\n utils.removeEvent(document, 'mousemove', mousemove);\n utils.removeEvent(document, 'mouseup', mouseup);\n context.destroy();\n };\n\n g.addAndTrackEvent(document, 'mousemove', mousemove);\n g.addAndTrackEvent(document, 'mouseup', mouseup);\n },\n willDestroyContextMyself: true,\n\n touchstart: function touchstart(event, g, context) {\n DygraphInteraction.startTouch(event, g, context);\n },\n touchmove: function touchmove(event, g, context) {\n DygraphInteraction.moveTouch(event, g, context);\n },\n touchend: function touchend(event, g, context) {\n DygraphInteraction.endTouch(event, g, context);\n },\n\n // Disable zooming out if panning.\n dblclick: function dblclick(event, g, context) {\n if (context.cancelNextDblclick) {\n context.cancelNextDblclick = false;\n return;\n }\n\n // Give plugins a chance to grab this event.\n var e = {\n canvasx: context.dragEndX,\n canvasy: context.dragEndY,\n cancelable: true\n };\n if (g.cascadeEvents_('dblclick', e)) {\n return;\n }\n\n if (event.altKey || event.shiftKey) {\n return;\n }\n g.resetZoom();\n }\n};\n\n/*\nDygraph.DEFAULT_ATTRS.interactionModel = DygraphInteraction.defaultModel;\n\n// old ways of accessing these methods/properties\nDygraph.defaultInteractionModel = DygraphInteraction.defaultModel;\nDygraph.endZoom = DygraphInteraction.endZoom;\nDygraph.moveZoom = DygraphInteraction.moveZoom;\nDygraph.startZoom = DygraphInteraction.startZoom;\nDygraph.endPan = DygraphInteraction.endPan;\nDygraph.movePan = DygraphInteraction.movePan;\nDygraph.startPan = DygraphInteraction.startPan;\n*/\n\nDygraphInteraction.nonInteractiveModel_ = {\n mousedown: function mousedown(event, g, context) {\n context.initializeMouseDown(event, g, context);\n },\n mouseup: DygraphInteraction.maybeTreatMouseOpAsClick\n};\n\n// Default interaction model when using the range selector.\nDygraphInteraction.dragIsPanInteractionModel = {\n mousedown: function mousedown(event, g, context) {\n context.initializeMouseDown(event, g, context);\n DygraphInteraction.startPan(event, g, context);\n },\n mousemove: function mousemove(event, g, context) {\n if (context.isPanning) {\n DygraphInteraction.movePan(event, g, context);\n }\n },\n mouseup: function mouseup(event, g, context) {\n if (context.isPanning) {\n DygraphInteraction.endPan(event, g, context);\n }\n }\n};\n\nexports[\"default\"] = DygraphInteraction;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview Based on PlotKitLayout, but modified to meet the needs of\n * dygraphs.\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n/**\n * Creates a new DygraphLayout object.\n *\n * This class contains all the data to be charted.\n * It uses data coordinates, but also records the chart range (in data\n * coordinates) and hence is able to calculate percentage positions ('In this\n * view, Point A lies 25% down the x-axis.')\n *\n * Two things that it does not do are:\n * 1. Record pixel coordinates for anything.\n * 2. (oddly) determine anything about the layout of chart elements.\n *\n * The naming is a vestige of Dygraph's original PlotKit roots.\n *\n * @constructor\n */\nvar DygraphLayout = function DygraphLayout(dygraph) {\n this.dygraph_ = dygraph;\n /**\n * Array of points for each series.\n *\n * [series index][row index in series] = |Point| structure,\n * where series index refers to visible series only, and the\n * point index is for the reduced set of points for the current\n * zoom region (including one point just outside the window).\n * All points in the same row index share the same X value.\n *\n * @type {Array.>}\n */\n this.points = [];\n this.setNames = [];\n this.annotations = [];\n this.yAxes_ = null;\n\n // TODO(danvk): it's odd that xTicks_ and yTicks_ are inputs, but xticks and\n // yticks are outputs. Clean this up.\n this.xTicks_ = null;\n this.yTicks_ = null;\n};\n\n/**\n * Add points for a single series.\n *\n * @param {string} setname Name of the series.\n * @param {Array.} set_xy Points for the series.\n */\nDygraphLayout.prototype.addDataset = function (setname, set_xy) {\n this.points.push(set_xy);\n this.setNames.push(setname);\n};\n\n/**\n * Returns the box which the chart should be drawn in. This is the canvas's\n * box, less space needed for the axis and chart labels.\n *\n * @return {{x: number, y: number, w: number, h: number}}\n */\nDygraphLayout.prototype.getPlotArea = function () {\n return this.area_;\n};\n\n// Compute the box which the chart should be drawn in. This is the canvas's\n// box, less space needed for axis, chart labels, and other plug-ins.\n// NOTE: This should only be called by Dygraph.predraw_().\nDygraphLayout.prototype.computePlotArea = function () {\n var area = {\n // TODO(danvk): per-axis setting.\n x: 0,\n y: 0\n };\n\n area.w = this.dygraph_.width_ - area.x - this.dygraph_.getOption('rightGap');\n area.h = this.dygraph_.height_;\n\n // Let plugins reserve space.\n var e = {\n chart_div: this.dygraph_.graphDiv,\n reserveSpaceLeft: function reserveSpaceLeft(px) {\n var r = {\n x: area.x,\n y: area.y,\n w: px,\n h: area.h\n };\n area.x += px;\n area.w -= px;\n return r;\n },\n reserveSpaceRight: function reserveSpaceRight(px) {\n var r = {\n x: area.x + area.w - px,\n y: area.y,\n w: px,\n h: area.h\n };\n area.w -= px;\n return r;\n },\n reserveSpaceTop: function reserveSpaceTop(px) {\n var r = {\n x: area.x,\n y: area.y,\n w: area.w,\n h: px\n };\n area.y += px;\n area.h -= px;\n return r;\n },\n reserveSpaceBottom: function reserveSpaceBottom(px) {\n var r = {\n x: area.x,\n y: area.y + area.h - px,\n w: area.w,\n h: px\n };\n area.h -= px;\n return r;\n },\n chartRect: function chartRect() {\n return { x: area.x, y: area.y, w: area.w, h: area.h };\n }\n };\n this.dygraph_.cascadeEvents_('layout', e);\n\n this.area_ = area;\n};\n\nDygraphLayout.prototype.setAnnotations = function (ann) {\n // The Dygraph object's annotations aren't parsed. We parse them here and\n // save a copy. If there is no parser, then the user must be using raw format.\n this.annotations = [];\n var parse = this.dygraph_.getOption('xValueParser') || function (x) {\n return x;\n };\n for (var i = 0; i < ann.length; i++) {\n var a = {};\n if (!ann[i].xval && ann[i].x === undefined) {\n console.error(\"Annotations must have an 'x' property\");\n return;\n }\n if (ann[i].icon && !(ann[i].hasOwnProperty('width') && ann[i].hasOwnProperty('height'))) {\n console.error(\"Must set width and height when setting \" + \"annotation.icon property\");\n return;\n }\n utils.update(a, ann[i]);\n if (!a.xval) a.xval = parse(a.x);\n this.annotations.push(a);\n }\n};\n\nDygraphLayout.prototype.setXTicks = function (xTicks) {\n this.xTicks_ = xTicks;\n};\n\n// TODO(danvk): add this to the Dygraph object's API or move it into Layout.\nDygraphLayout.prototype.setYAxes = function (yAxes) {\n this.yAxes_ = yAxes;\n};\n\nDygraphLayout.prototype.evaluate = function () {\n this._xAxis = {};\n this._evaluateLimits();\n this._evaluateLineCharts();\n this._evaluateLineTicks();\n this._evaluateAnnotations();\n};\n\nDygraphLayout.prototype._evaluateLimits = function () {\n var xlimits = this.dygraph_.xAxisRange();\n this._xAxis.minval = xlimits[0];\n this._xAxis.maxval = xlimits[1];\n var xrange = xlimits[1] - xlimits[0];\n this._xAxis.scale = xrange !== 0 ? 1 / xrange : 1.0;\n\n if (this.dygraph_.getOptionForAxis(\"logscale\", 'x')) {\n this._xAxis.xlogrange = utils.log10(this._xAxis.maxval) - utils.log10(this._xAxis.minval);\n this._xAxis.xlogscale = this._xAxis.xlogrange !== 0 ? 1.0 / this._xAxis.xlogrange : 1.0;\n }\n for (var i = 0; i < this.yAxes_.length; i++) {\n var axis = this.yAxes_[i];\n axis.minyval = axis.computedValueRange[0];\n axis.maxyval = axis.computedValueRange[1];\n axis.yrange = axis.maxyval - axis.minyval;\n axis.yscale = axis.yrange !== 0 ? 1.0 / axis.yrange : 1.0;\n\n if (this.dygraph_.getOption(\"logscale\")) {\n axis.ylogrange = utils.log10(axis.maxyval) - utils.log10(axis.minyval);\n axis.ylogscale = axis.ylogrange !== 0 ? 1.0 / axis.ylogrange : 1.0;\n if (!isFinite(axis.ylogrange) || isNaN(axis.ylogrange)) {\n console.error('axis ' + i + ' of graph at ' + axis.g + ' can\\'t be displayed in log scale for range [' + axis.minyval + ' - ' + axis.maxyval + ']');\n }\n }\n }\n};\n\nDygraphLayout.calcXNormal_ = function (value, xAxis, logscale) {\n if (logscale) {\n return (utils.log10(value) - utils.log10(xAxis.minval)) * xAxis.xlogscale;\n } else {\n return (value - xAxis.minval) * xAxis.scale;\n }\n};\n\n/**\n * @param {DygraphAxisType} axis\n * @param {number} value\n * @param {boolean} logscale\n * @return {number}\n */\nDygraphLayout.calcYNormal_ = function (axis, value, logscale) {\n if (logscale) {\n var x = 1.0 - (utils.log10(value) - utils.log10(axis.minyval)) * axis.ylogscale;\n return isFinite(x) ? x : NaN; // shim for v8 issue; see pull request 276\n } else {\n return 1.0 - (value - axis.minyval) * axis.yscale;\n }\n};\n\nDygraphLayout.prototype._evaluateLineCharts = function () {\n var isStacked = this.dygraph_.getOption(\"stackedGraph\");\n var isLogscaleForX = this.dygraph_.getOptionForAxis(\"logscale\", 'x');\n\n for (var setIdx = 0; setIdx < this.points.length; setIdx++) {\n var points = this.points[setIdx];\n var setName = this.setNames[setIdx];\n var connectSeparated = this.dygraph_.getOption('connectSeparatedPoints', setName);\n var axis = this.dygraph_.axisPropertiesForSeries(setName);\n // TODO (konigsberg): use optionsForAxis instead.\n var logscale = this.dygraph_.attributes_.getForSeries(\"logscale\", setName);\n\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n\n // Range from 0-1 where 0 represents left and 1 represents right.\n point.x = DygraphLayout.calcXNormal_(point.xval, this._xAxis, isLogscaleForX);\n // Range from 0-1 where 0 represents top and 1 represents bottom\n var yval = point.yval;\n if (isStacked) {\n point.y_stacked = DygraphLayout.calcYNormal_(axis, point.yval_stacked, logscale);\n if (yval !== null && !isNaN(yval)) {\n yval = point.yval_stacked;\n }\n }\n if (yval === null) {\n yval = NaN;\n if (!connectSeparated) {\n point.yval = NaN;\n }\n }\n point.y = DygraphLayout.calcYNormal_(axis, yval, logscale);\n }\n\n this.dygraph_.dataHandler_.onLineEvaluated(points, axis, logscale);\n }\n};\n\nDygraphLayout.prototype._evaluateLineTicks = function () {\n var i, tick, label, pos, v, has_tick;\n this.xticks = [];\n for (i = 0; i < this.xTicks_.length; i++) {\n tick = this.xTicks_[i];\n label = tick.label;\n has_tick = !('label_v' in tick);\n v = has_tick ? tick.v : tick.label_v;\n pos = this.dygraph_.toPercentXCoord(v);\n if (pos >= 0.0 && pos < 1.0) {\n this.xticks.push({ pos: pos, label: label, has_tick: has_tick });\n }\n }\n\n this.yticks = [];\n for (i = 0; i < this.yAxes_.length; i++) {\n var axis = this.yAxes_[i];\n for (var j = 0; j < axis.ticks.length; j++) {\n tick = axis.ticks[j];\n label = tick.label;\n has_tick = !('label_v' in tick);\n v = has_tick ? tick.v : tick.label_v;\n pos = this.dygraph_.toPercentYCoord(v, i);\n if (pos > 0.0 && pos <= 1.0) {\n this.yticks.push({ axis: i, pos: pos, label: label, has_tick: has_tick });\n }\n }\n }\n};\n\nDygraphLayout.prototype._evaluateAnnotations = function () {\n // Add the annotations to the point to which they belong.\n // Make a map from (setName, xval) to annotation for quick lookups.\n var i;\n var annotations = {};\n for (i = 0; i < this.annotations.length; i++) {\n var a = this.annotations[i];\n annotations[a.xval + \",\" + a.series] = a;\n }\n\n this.annotated_points = [];\n\n // Exit the function early if there are no annotations.\n if (!this.annotations || !this.annotations.length) {\n return;\n }\n\n // TODO(antrob): loop through annotations not points.\n for (var setIdx = 0; setIdx < this.points.length; setIdx++) {\n var points = this.points[setIdx];\n for (i = 0; i < points.length; i++) {\n var p = points[i];\n var k = p.xval + \",\" + p.name;\n if (k in annotations) {\n p.annotation = annotations[k];\n this.annotated_points.push(p);\n }\n }\n }\n};\n\n/**\n * Convenience function to remove all the data sets from a graph\n */\nDygraphLayout.prototype.removeAllDatasets = function () {\n delete this.points;\n delete this.setNames;\n delete this.setPointsLengths;\n delete this.setPointsOffsets;\n this.points = [];\n this.setNames = [];\n this.setPointsLengths = [];\n this.setPointsOffsets = [];\n};\n\nexports['default'] = DygraphLayout;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar OPTIONS_REFERENCE = null;\n\n// For \"production\" code, this gets removed by uglifyjs.\nif (typeof process !== 'undefined') {\n if (process.env.NODE_ENV != 'production') {\n\n // NOTE: in addition to parsing as JS, this snippet is expected to be valid\n // JSON. This assumption cannot be checked in JS, but it will be checked when\n // documentation is generated by the generate-documentation.py script. For the\n // most part, this just means that you should always use double quotes.\n OPTIONS_REFERENCE = // \n {\n \"xValueParser\": {\n \"default\": \"parseFloat() or Date.parse()*\",\n \"labels\": [\"CSV parsing\"],\n \"type\": \"function(str) -> number\",\n \"description\": \"A function which parses x-values (i.e. the dependent series). Must return a number, even when the values are dates. In this case, millis since epoch are used. This is used primarily for parsing CSV data. *=Dygraphs is slightly more accepting in the dates which it will parse. See code for details.\"\n },\n \"stackedGraph\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"If set, stack series on top of one another rather than drawing them independently. The first series specified in the input data will wind up on top of the chart and the last will be on bottom. NaN values are drawn as white areas without a line on top, see stackedGraphNaNFill for details.\"\n },\n \"stackedGraphNaNFill\": {\n \"default\": \"all\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"string\",\n \"description\": \"Controls handling of NaN values inside a stacked graph. NaN values are interpolated/extended for stacking purposes, but the actual point value remains NaN in the legend display. Valid option values are \\\"all\\\" (interpolate internally, repeat leftmost and rightmost value as needed), \\\"inside\\\" (interpolate internally only, use zero outside leftmost and rightmost value), and \\\"none\\\" (treat NaN as zero everywhere).\"\n },\n \"pointSize\": {\n \"default\": \"1\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"integer\",\n \"description\": \"The size of the dot to draw on each point in pixels (see drawPoints). A dot is always drawn when a point is \\\"isolated\\\", i.e. there is a missing point on either side of it. This also controls the size of those dots.\"\n },\n \"drawPoints\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"Draw a small dot at each point, in addition to a line going through the point. This makes the individual data points easier to see, but can increase visual clutter in the chart. The small dot can be replaced with a custom rendering by supplying a drawPointCallback.\"\n },\n \"drawGapEdgePoints\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"Draw points at the edges of gaps in the data. This improves visibility of small data segments or other data irregularities.\"\n },\n \"drawPointCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"function(g, seriesName, canvasContext, cx, cy, color, pointSize)\",\n \"parameters\": [[\"g\", \"the reference graph\"], [\"seriesName\", \"the name of the series\"], [\"canvasContext\", \"the canvas to draw on\"], [\"cx\", \"center x coordinate\"], [\"cy\", \"center y coordinate\"], [\"color\", \"series color\"], [\"pointSize\", \"the radius of the image.\"], [\"idx\", \"the row-index of the point in the data.\"]],\n \"description\": \"Draw a custom item when drawPoints is enabled. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy). Also see drawHighlightPointCallback\"\n },\n \"height\": {\n \"default\": \"320\",\n \"labels\": [\"Overall display\"],\n \"type\": \"integer\",\n \"description\": \"Height, in pixels, of the chart. If the container div has been explicitly sized, this will be ignored.\"\n },\n \"zoomCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(minDate, maxDate, yRanges)\",\n \"parameters\": [[\"minDate\", \"milliseconds since epoch\"], [\"maxDate\", \"milliseconds since epoch.\"], [\"yRanges\", \"is an array of [bottom, top] pairs, one for each y-axis.\"]],\n \"description\": \"A function to call when the zoom window is changed (either by zooming in or out). When animatedZooms is set, zoomCallback is called once at the end of the transition (it will not be called for intermediate frames).\"\n },\n \"pointClickCallback\": {\n \"snippet\": \"function(e, point){
      alert(point);
    }\",\n \"default\": \"null\",\n \"labels\": [\"Callbacks\", \"Interactive Elements\"],\n \"type\": \"function(e, point)\",\n \"parameters\": [[\"e\", \"the event object for the click\"], [\"point\", \"the point that was clicked See Point properties for details\"]],\n \"description\": \"A function to call when a data point is clicked. and the point that was clicked.\"\n },\n \"color\": {\n \"default\": \"(see description)\",\n \"labels\": [\"Data Series Colors\"],\n \"type\": \"string\",\n \"example\": \"red\",\n \"description\": \"A per-series color definition. Used in conjunction with, and overrides, the colors option.\"\n },\n \"colors\": {\n \"default\": \"(see description)\",\n \"labels\": [\"Data Series Colors\"],\n \"type\": \"array\",\n \"example\": \"['red', '#00FF00']\",\n \"description\": \"List of colors for the data series. These can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"yellow\\\", etc. If not specified, equally-spaced points around a color wheel are used. Overridden by the 'color' option.\"\n },\n \"connectSeparatedPoints\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"Usually, when Dygraphs encounters a missing value in a data series, it interprets this as a gap and draws it as such. If, instead, the missing values represents an x-value for which only a different series has data, then you'll want to connect the dots by setting this to true. To explicitly include a gap with this option set, use a value of NaN.\"\n },\n \"highlightCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(event, x, points, row, seriesName)\",\n \"description\": \"When set, this callback gets called every time a new point is highlighted.\",\n \"parameters\": [[\"event\", \"the JavaScript mousemove event\"], [\"x\", \"the x-coordinate of the highlighted points\"], [\"points\", \"an array of highlighted points: [ {name: 'series', yval: y-value}, … ]\"], [\"row\", \"integer index of the highlighted row in the data table, starting from 0\"], [\"seriesName\", \"name of the highlighted series, only present if highlightSeriesOpts is set.\"]]\n },\n \"drawHighlightPointCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"function(g, seriesName, canvasContext, cx, cy, color, pointSize)\",\n \"parameters\": [[\"g\", \"the reference graph\"], [\"seriesName\", \"the name of the series\"], [\"canvasContext\", \"the canvas to draw on\"], [\"cx\", \"center x coordinate\"], [\"cy\", \"center y coordinate\"], [\"color\", \"series color\"], [\"pointSize\", \"the radius of the image.\"], [\"idx\", \"the row-index of the point in the data.\"]],\n \"description\": \"Draw a custom item when a point is highlighted. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy) Also see drawPointCallback\"\n },\n \"highlightSeriesOpts\": {\n \"default\": \"null\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"Object\",\n \"description\": \"When set, the options from this object are applied to the timeseries closest to the mouse pointer for interactive highlighting. See also 'highlightCallback'. Example: highlightSeriesOpts: { strokeWidth: 3 }.\"\n },\n \"highlightSeriesBackgroundAlpha\": {\n \"default\": \"0.5\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"float\",\n \"description\": \"Fade the background while highlighting series. 1=fully visible background (disable fading), 0=hiddden background (show highlighted series only).\"\n },\n \"highlightSeriesBackgroundColor\": {\n \"default\": \"rgb(255, 255, 255)\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"string\",\n \"description\": \"Sets the background color used to fade out the series in conjunction with 'highlightSeriesBackgroundAlpha'.\"\n },\n \"includeZero\": {\n \"default\": \"false\",\n \"labels\": [\"Axis display\"],\n \"type\": \"boolean\",\n \"description\": \"Usually, dygraphs will use the range of the data plus some padding to set the range of the y-axis. If this option is set, the y-axis will always include zero, typically as the lowest value. This can be used to avoid exaggerating the variance in the data\"\n },\n \"rollPeriod\": {\n \"default\": \"1\",\n \"labels\": [\"Error Bars\", \"Rolling Averages\"],\n \"type\": \"integer >= 1\",\n \"description\": \"Number of days over which to average data. Discussed extensively above.\"\n },\n \"unhighlightCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(event)\",\n \"parameters\": [[\"event\", \"the mouse event\"]],\n \"description\": \"When set, this callback gets called every time the user stops highlighting any point by mousing out of the graph.\"\n },\n \"axisTickSize\": {\n \"default\": \"3.0\",\n \"labels\": [\"Axis display\"],\n \"type\": \"number\",\n \"description\": \"The size of the line to display next to each tick mark on x- or y-axes.\"\n },\n \"labelsSeparateLines\": {\n \"default\": \"false\",\n \"labels\": [\"Legend\"],\n \"type\": \"boolean\",\n \"description\": \"Put <br/> between lines in the label string. Often used in conjunction with labelsDiv.\"\n },\n \"valueFormatter\": {\n \"default\": \"Depends on the type of your data.\",\n \"labels\": [\"Legend\", \"Value display/formatting\"],\n \"type\": \"function(num or millis, opts, seriesName, dygraph, row, col)\",\n \"description\": \"Function to provide a custom display format for the values displayed on mouseover. This does not affect the values that appear on tick marks next to the axes. To format those, see axisLabelFormatter. This is usually set on a per-axis basis. .\",\n \"parameters\": [[\"num_or_millis\", \"The value to be formatted. This is always a number. For date axes, it's millis since epoch. You can call new Date(millis) to get a Date object.\"], [\"opts\", \"This is a function you can call to access various options (e.g. opts('labelsKMB')). It returns per-axis values for the option when available.\"], [\"seriesName\", \"The name of the series from which the point came, e.g. 'X', 'Y', 'A', etc.\"], [\"dygraph\", \"The dygraph object for which the formatting is being done\"], [\"row\", \"The row of the data from which this point comes. g.getValue(row, 0) will return the x-value for this point.\"], [\"col\", \"The column of the data from which this point comes. g.getValue(row, col) will return the original y-value for this point. This can be used to get the full confidence interval for the point, or access un-rolled values for the point.\"]]\n },\n \"annotationMouseOverHandler\": {\n \"default\": \"null\",\n \"labels\": [\"Annotations\"],\n \"type\": \"function(annotation, point, dygraph, event)\",\n \"description\": \"If provided, this function is called whenever the user mouses over an annotation.\"\n },\n \"annotationMouseOutHandler\": {\n \"default\": \"null\",\n \"labels\": [\"Annotations\"],\n \"type\": \"function(annotation, point, dygraph, event)\",\n \"parameters\": [[\"annotation\", \"the annotation left\"], [\"point\", \"the point associated with the annotation\"], [\"dygraph\", \"the reference graph\"], [\"event\", \"the mouse event\"]],\n \"description\": \"If provided, this function is called whenever the user mouses out of an annotation.\"\n },\n \"annotationClickHandler\": {\n \"default\": \"null\",\n \"labels\": [\"Annotations\"],\n \"type\": \"function(annotation, point, dygraph, event)\",\n \"parameters\": [[\"annotation\", \"the annotation left\"], [\"point\", \"the point associated with the annotation\"], [\"dygraph\", \"the reference graph\"], [\"event\", \"the mouse event\"]],\n \"description\": \"If provided, this function is called whenever the user clicks on an annotation.\"\n },\n \"annotationDblClickHandler\": {\n \"default\": \"null\",\n \"labels\": [\"Annotations\"],\n \"type\": \"function(annotation, point, dygraph, event)\",\n \"parameters\": [[\"annotation\", \"the annotation left\"], [\"point\", \"the point associated with the annotation\"], [\"dygraph\", \"the reference graph\"], [\"event\", \"the mouse event\"]],\n \"description\": \"If provided, this function is called whenever the user double-clicks on an annotation.\"\n },\n \"drawCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(dygraph, is_initial)\",\n \"parameters\": [[\"dygraph\", \"The graph being drawn\"], [\"is_initial\", \"True if this is the initial draw, false for subsequent draws.\"]],\n \"description\": \"When set, this callback gets called every time the dygraph is drawn. This includes the initial draw, after zooming and repeatedly while panning.\"\n },\n \"labelsKMG2\": {\n \"default\": \"false\",\n \"labels\": [\"Value display/formatting\"],\n \"type\": \"boolean\",\n \"description\": \"Show k/M/G for kilo/Mega/Giga on y-axis. This is different than labelsKMB in that it uses base 2, not 10.\"\n },\n \"delimiter\": {\n \"default\": \",\",\n \"labels\": [\"CSV parsing\"],\n \"type\": \"string\",\n \"description\": \"The delimiter to look for when separating fields of a CSV file. Setting this to a tab is not usually necessary, since tab-delimited data is auto-detected.\"\n },\n \"axisLabelFontSize\": {\n \"default\": \"14\",\n \"labels\": [\"Axis display\"],\n \"type\": \"integer\",\n \"description\": \"Size of the font (in pixels) to use in the axis labels, both x- and y-axis.\"\n },\n \"underlayCallback\": {\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(context, area, dygraph)\",\n \"parameters\": [[\"context\", \"the canvas drawing context on which to draw\"], [\"area\", \"An object with {x,y,w,h} properties describing the drawing area.\"], [\"dygraph\", \"the reference graph\"]],\n \"description\": \"When set, this callback gets called before the chart is drawn. It details on how to use this.\"\n },\n \"width\": {\n \"default\": \"480\",\n \"labels\": [\"Overall display\"],\n \"type\": \"integer\",\n \"description\": \"Width, in pixels, of the chart. If the container div has been explicitly sized, this will be ignored.\"\n },\n \"pixelRatio\": {\n \"default\": \"(devicePixelRatio / context.backingStoreRatio)\",\n \"labels\": [\"Overall display\"],\n \"type\": \"float\",\n \"description\": \"Overrides the pixel ratio scaling factor for the canvas's 2d context. Ordinarily, this is set to the devicePixelRatio / (context.backingStoreRatio || 1), so on mobile devices, where the devicePixelRatio can be somewhere around 3, performance can be improved by overriding this value to something less precise, like 1, at the expense of resolution.\"\n },\n \"interactionModel\": {\n \"default\": \"...\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"Object\",\n \"description\": \"TODO(konigsberg): document this\"\n },\n \"ticker\": {\n \"default\": \"Dygraph.dateTicker or Dygraph.numericTicks\",\n \"labels\": [\"Axis display\"],\n \"type\": \"function(min, max, pixels, opts, dygraph, vals) -> [{v: ..., label: ...}, ...]\",\n \"parameters\": [[\"min\", \"\"], [\"max\", \"\"], [\"pixels\", \"\"], [\"opts\", \"\"], [\"dygraph\", \"the reference graph\"], [\"vals\", \"\"]],\n \"description\": \"This lets you specify an arbitrary function to generate tick marks on an axis. The tick marks are an array of (value, label) pairs. The built-in functions go to great lengths to choose good tick marks so, if you set this option, you'll most likely want to call one of them and modify the result. See dygraph-tickers.js for an extensive discussion. This is set on a per-axis basis.\"\n },\n \"xAxisHeight\": {\n \"default\": \"(null)\",\n \"labels\": [\"Axis display\"],\n \"type\": \"integer\",\n \"description\": \"Height, in pixels, of the x-axis. If not set explicitly, this is computed based on axisLabelFontSize and axisTickSize.\"\n },\n \"showLabelsOnHighlight\": {\n \"default\": \"true\",\n \"labels\": [\"Interactive Elements\", \"Legend\"],\n \"type\": \"boolean\",\n \"description\": \"Whether to show the legend upon mouseover.\"\n },\n \"axis\": {\n \"default\": \"(none)\",\n \"labels\": [\"Axis display\"],\n \"type\": \"string\",\n \"description\": \"Set to either 'y1' or 'y2' to assign a series to a y-axis (primary or secondary). Must be set per-series.\"\n },\n \"pixelsPerLabel\": {\n \"default\": \"70 (x-axis) or 30 (y-axes)\",\n \"labels\": [\"Axis display\", \"Grid\"],\n \"type\": \"integer\",\n \"description\": \"Number of pixels to require between each x- and y-label. Larger values will yield a sparser axis with fewer ticks. This is set on a per-axis basis.\"\n },\n \"labelsDiv\": {\n \"default\": \"null\",\n \"labels\": [\"Legend\"],\n \"type\": \"DOM element or string\",\n \"example\": \"document.getElementById('foo')or'foo'\",\n \"description\": \"Show data labels in an external div, rather than on the graph. This value can either be a div element or a div id.\"\n },\n \"fractions\": {\n \"default\": \"false\",\n \"labels\": [\"CSV parsing\", \"Error Bars\"],\n \"type\": \"boolean\",\n \"description\": \"When set, attempt to parse each cell in the CSV file as \\\"a/b\\\", where a and b are integers. The ratio will be plotted. This allows computation of Wilson confidence intervals (see below).\"\n },\n \"logscale\": {\n \"default\": \"false\",\n \"labels\": [\"Axis display\"],\n \"type\": \"boolean\",\n \"description\": \"When set for the y-axis or x-axis, the graph shows that axis in log scale. Any values less than or equal to zero are not displayed. Showing log scale with ranges that go below zero will result in an unviewable graph.\\n\\n Not compatible with showZero. connectSeparatedPoints is ignored. This is ignored for date-based x-axes.\"\n },\n \"strokeWidth\": {\n \"default\": \"1.0\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"float\",\n \"example\": \"0.5, 2.0\",\n \"description\": \"The width of the lines connecting data points. This can be used to increase the contrast or some graphs.\"\n },\n \"strokePattern\": {\n \"default\": \"null\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"array\",\n \"example\": \"[10, 2, 5, 2]\",\n \"description\": \"A custom pattern array where the even index is a draw and odd is a space in pixels. If null then it draws a solid line. The array should have a even length as any odd lengthed array could be expressed as a smaller even length array. This is used to create dashed lines.\"\n },\n \"strokeBorderWidth\": {\n \"default\": \"null\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"float\",\n \"example\": \"1.0\",\n \"description\": \"Draw a border around graph lines to make crossing lines more easily distinguishable. Useful for graphs with many lines.\"\n },\n \"strokeBorderColor\": {\n \"default\": \"white\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"string\",\n \"example\": \"red, #ccffdd\",\n \"description\": \"Color for the line border used if strokeBorderWidth is set.\"\n },\n \"wilsonInterval\": {\n \"default\": \"true\",\n \"labels\": [\"Error Bars\"],\n \"type\": \"boolean\",\n \"description\": \"Use in conjunction with the \\\"fractions\\\" option. Instead of plotting +/- N standard deviations, dygraphs will compute a Wilson confidence interval and plot that. This has more reasonable behavior for ratios close to 0 or 1.\"\n },\n \"fillGraph\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"Should the area underneath the graph be filled? This option is not compatible with error bars. This may be set on a per-series basis.\"\n },\n \"highlightCircleSize\": {\n \"default\": \"3\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"integer\",\n \"description\": \"The size in pixels of the dot drawn over highlighted points.\"\n },\n \"gridLineColor\": {\n \"default\": \"rgb(128,128,128)\",\n \"labels\": [\"Grid\"],\n \"type\": \"red, blue\",\n \"description\": \"The color of the gridlines. This may be set on a per-axis basis to define each axis' grid separately.\"\n },\n \"gridLinePattern\": {\n \"default\": \"null\",\n \"labels\": [\"Grid\"],\n \"type\": \"array\",\n \"example\": \"[10, 2, 5, 2]\",\n \"description\": \"A custom pattern array where the even index is a draw and odd is a space in pixels. If null then it draws a solid line. The array should have a even length as any odd lengthed array could be expressed as a smaller even length array. This is used to create dashed gridlines.\"\n },\n \"visibility\": {\n \"default\": \"[true, true, ...]\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"Array of booleans\",\n \"description\": \"Which series should initially be visible? Once the Dygraph has been constructed, you can access and modify the visibility of each series using the visibility and setVisibility methods.\"\n },\n \"valueRange\": {\n \"default\": \"Full range of the input is shown\",\n \"labels\": [\"Axis display\"],\n \"type\": \"Array of two numbers\",\n \"example\": \"[10, 110]\",\n \"description\": \"Explicitly set the vertical range of the graph to [low, high]. This may be set on a per-axis basis to define each y-axis separately. If either limit is unspecified, it will be calculated automatically (e.g. [null, 30] to automatically calculate just the lower bound)\"\n },\n \"colorSaturation\": {\n \"default\": \"1.0\",\n \"labels\": [\"Data Series Colors\"],\n \"type\": \"float (0.0 - 1.0)\",\n \"description\": \"If colors is not specified, saturation of the automatically-generated data series colors.\"\n },\n \"hideOverlayOnMouseOut\": {\n \"default\": \"true\",\n \"labels\": [\"Interactive Elements\", \"Legend\"],\n \"type\": \"boolean\",\n \"description\": \"Whether to hide the legend when the mouse leaves the chart area.\"\n },\n \"legend\": {\n \"default\": \"onmouseover\",\n \"labels\": [\"Legend\"],\n \"type\": \"string\",\n \"description\": \"When to display the legend. By default, it only appears when a user mouses over the chart. Set it to \\\"always\\\" to always display a legend of some sort. When set to \\\"follow\\\", legend follows highlighted points.\"\n },\n \"legendFormatter\": {\n \"default\": \"null\",\n \"labels\": [\"Legend\"],\n \"type\": \"function(data): string\",\n \"params\": [[\"data\", \"An object containing information about the selection (or lack of a selection). This includes formatted values and series information. See here for sample values.\"]],\n \"description\": \"Set this to supply a custom formatter for the legend. See this comment and the legendFormatter demo for usage.\"\n },\n \"labelsShowZeroValues\": {\n \"default\": \"true\",\n \"labels\": [\"Legend\"],\n \"type\": \"boolean\",\n \"description\": \"Show zero value labels in the labelsDiv.\"\n },\n \"stepPlot\": {\n \"default\": \"false\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"boolean\",\n \"description\": \"When set, display the graph as a step plot instead of a line plot. This option may either be set for the whole graph or for single series.\"\n },\n \"labelsUTC\": {\n \"default\": \"false\",\n \"labels\": [\"Value display/formatting\", \"Axis display\"],\n \"type\": \"boolean\",\n \"description\": \"Show date/time labels according to UTC (instead of local time).\"\n },\n \"labelsKMB\": {\n \"default\": \"false\",\n \"labels\": [\"Value display/formatting\"],\n \"type\": \"boolean\",\n \"description\": \"Show K/M/B for thousands/millions/billions on y-axis.\"\n },\n \"rightGap\": {\n \"default\": \"5\",\n \"labels\": [\"Overall display\"],\n \"type\": \"integer\",\n \"description\": \"Number of pixels to leave blank at the right edge of the Dygraph. This makes it easier to highlight the right-most data point.\"\n },\n \"drawAxesAtZero\": {\n \"default\": \"false\",\n \"labels\": [\"Axis display\"],\n \"type\": \"boolean\",\n \"description\": \"When set, draw the X axis at the Y=0 position and the Y axis at the X=0 position if those positions are inside the graph's visible area. Otherwise, draw the axes at the bottom or left graph edge as usual.\"\n },\n \"xRangePad\": {\n \"default\": \"0\",\n \"labels\": [\"Axis display\"],\n \"type\": \"float\",\n \"description\": \"Add the specified amount of extra space (in pixels) around the X-axis value range to ensure points at the edges remain visible.\"\n },\n \"yRangePad\": {\n \"default\": \"null\",\n \"labels\": [\"Axis display\"],\n \"type\": \"float\",\n \"description\": \"If set, add the specified amount of extra space (in pixels) around the Y-axis value range to ensure points at the edges remain visible. If unset, use the traditional Y padding algorithm.\"\n },\n \"axisLabelFormatter\": {\n \"default\": \"Depends on the data type\",\n \"labels\": [\"Axis display\"],\n \"type\": \"function(number or Date, granularity, opts, dygraph)\",\n \"parameters\": [[\"number or date\", \"Either a number (for a numeric axis) or a Date object (for a date axis)\"], [\"granularity\", \"specifies how fine-grained the axis is. For date axes, this is a reference to the time granularity enumeration, defined in dygraph-tickers.js, e.g. Dygraph.WEEKLY.\"], [\"opts\", \"a function which provides access to various options on the dygraph, e.g. opts('labelsKMB').\"], [\"dygraph\", \"the referenced graph\"]],\n \"description\": \"Function to call to format the tick values that appear along an axis. This is usually set on a per-axis basis.\"\n },\n \"clickCallback\": {\n \"snippet\": \"function(e, date_millis){
      alert(new Date(date_millis));
    }\",\n \"default\": \"null\",\n \"labels\": [\"Callbacks\"],\n \"type\": \"function(e, x, points)\",\n \"parameters\": [[\"e\", \"The event object for the click\"], [\"x\", \"The x value that was clicked (for dates, this is milliseconds since epoch)\"], [\"points\", \"The closest points along that date. See Point properties for details.\"]],\n \"description\": \"A function to call when the canvas is clicked.\"\n },\n \"labels\": {\n \"default\": \"[\\\"X\\\", \\\"Y1\\\", \\\"Y2\\\", ...]*\",\n \"labels\": [\"Legend\"],\n \"type\": \"array\",\n \"description\": \"A name for each data series, including the independent (X) series. For CSV files and DataTable objections, this is determined by context. For raw data, this must be specified. If it is not, default values are supplied and a warning is logged.\"\n },\n \"dateWindow\": {\n \"default\": \"Full range of the input is shown\",\n \"labels\": [\"Axis display\"],\n \"type\": \"Array of two numbers\",\n \"example\": \"[
      Date.parse('2006-01-01'),
      (new Date()).valueOf()
    ]\",\n \"description\": \"Initially zoom in on a section of the graph. Is of the form [earliest, latest], where earliest/latest are milliseconds since epoch. If the data for the x-axis is numeric, the values in dateWindow must also be numbers.\"\n },\n \"showRoller\": {\n \"default\": \"false\",\n \"labels\": [\"Interactive Elements\", \"Rolling Averages\"],\n \"type\": \"boolean\",\n \"description\": \"If the rolling average period text box should be shown.\"\n },\n \"sigma\": {\n \"default\": \"2.0\",\n \"labels\": [\"Error Bars\"],\n \"type\": \"float\",\n \"description\": \"When errorBars is set, shade this many standard deviations above/below each point.\"\n },\n \"customBars\": {\n \"default\": \"false\",\n \"labels\": [\"CSV parsing\", \"Error Bars\"],\n \"type\": \"boolean\",\n \"description\": \"When set, parse each CSV cell as \\\"low;middle;high\\\". Error bars will be drawn for each point between low and high, with the series itself going through middle.\"\n },\n \"colorValue\": {\n \"default\": \"1.0\",\n \"labels\": [\"Data Series Colors\"],\n \"type\": \"float (0.0 - 1.0)\",\n \"description\": \"If colors is not specified, value of the data series colors, as in hue/saturation/value. (0.0-1.0, default 0.5)\"\n },\n \"errorBars\": {\n \"default\": \"false\",\n \"labels\": [\"CSV parsing\", \"Error Bars\"],\n \"type\": \"boolean\",\n \"description\": \"Does the data contain standard deviations? Setting this to true alters the input format (see above).\"\n },\n \"displayAnnotations\": {\n \"default\": \"false\",\n \"labels\": [\"Annotations\"],\n \"type\": \"boolean\",\n \"description\": \"Only applies when Dygraphs is used as a GViz chart. Causes string columns following a data series to be interpreted as annotations on points in that series. This is the same format used by Google's AnnotatedTimeLine chart.\"\n },\n \"panEdgeFraction\": {\n \"default\": \"null\",\n \"labels\": [\"Axis display\", \"Interactive Elements\"],\n \"type\": \"float\",\n \"description\": \"A value representing the farthest a graph may be panned, in percent of the display. For example, a value of 0.1 means that the graph can only be panned 10% passed the edges of the displayed values. null means no bounds.\"\n },\n \"title\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"string\",\n \"default\": \"null\",\n \"description\": \"Text to display above the chart. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-title' classes.\"\n },\n \"titleHeight\": {\n \"default\": \"18\",\n \"labels\": [\"Chart labels\"],\n \"type\": \"integer\",\n \"description\": \"Height of the chart title, in pixels. This also controls the default font size of the title. If you style the title on your own, this controls how much space is set aside above the chart for the title's div.\"\n },\n \"xlabel\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"string\",\n \"default\": \"null\",\n \"description\": \"Text to display below the chart's x-axis. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-xlabel' classes.\"\n },\n \"xLabelHeight\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"integer\",\n \"default\": \"18\",\n \"description\": \"Height of the x-axis label, in pixels. This also controls the default font size of the x-axis label. If you style the label on your own, this controls how much space is set aside below the chart for the x-axis label's div.\"\n },\n \"ylabel\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"string\",\n \"default\": \"null\",\n \"description\": \"Text to display to the left of the chart's y-axis. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-ylabel' classes. The text will be rotated 90 degrees by default, so CSS rules may behave in unintuitive ways. No additional space is set aside for a y-axis label. If you need more space, increase the width of the y-axis tick labels using the yAxisLabelWidth option. If you need a wider div for the y-axis label, either style it that way with CSS (but remember that it's rotated, so width is controlled by the 'height' property) or set the yLabelWidth option.\"\n },\n \"y2label\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"string\",\n \"default\": \"null\",\n \"description\": \"Text to display to the right of the chart's secondary y-axis. This label is only displayed if a secondary y-axis is present. See this test for an example of how to do this. The comments for the 'ylabel' option generally apply here as well. This label gets a 'dygraph-y2label' instead of a 'dygraph-ylabel' class.\"\n },\n \"yLabelWidth\": {\n \"labels\": [\"Chart labels\"],\n \"type\": \"integer\",\n \"default\": \"18\",\n \"description\": \"Width of the div which contains the y-axis label. Since the y-axis label appears rotated 90 degrees, this actually affects the height of its div.\"\n },\n \"drawGrid\": {\n \"default\": \"true for x and y, false for y2\",\n \"labels\": [\"Grid\"],\n \"type\": \"boolean\",\n \"description\": \"Whether to display gridlines in the chart. This may be set on a per-axis basis to define the visibility of each axis' grid separately.\"\n },\n \"independentTicks\": {\n \"default\": \"true for y, false for y2\",\n \"labels\": [\"Axis display\", \"Grid\"],\n \"type\": \"boolean\",\n \"description\": \"Only valid for y and y2, has no effect on x: This option defines whether the y axes should align their ticks or if they should be independent. Possible combinations: 1.) y=true, y2=false (default): y is the primary axis and the y2 ticks are aligned to the the ones of y. (only 1 grid) 2.) y=false, y2=true: y2 is the primary axis and the y ticks are aligned to the the ones of y2. (only 1 grid) 3.) y=true, y2=true: Both axis are independent and have their own ticks. (2 grids) 4.) y=false, y2=false: Invalid configuration causes an error.\"\n },\n \"drawAxis\": {\n \"default\": \"true for x and y, false for y2\",\n \"labels\": [\"Axis display\"],\n \"type\": \"boolean\",\n \"description\": \"Whether to draw the specified axis. This may be set on a per-axis basis to define the visibility of each axis separately. Setting this to false also prevents axis ticks from being drawn and reclaims the space for the chart grid/lines.\"\n },\n \"gridLineWidth\": {\n \"default\": \"0.3\",\n \"labels\": [\"Grid\"],\n \"type\": \"float\",\n \"description\": \"Thickness (in pixels) of the gridlines drawn under the chart. The vertical/horizontal gridlines can be turned off entirely by using the drawGrid option. This may be set on a per-axis basis to define each axis' grid separately.\"\n },\n \"axisLineWidth\": {\n \"default\": \"0.3\",\n \"labels\": [\"Axis display\"],\n \"type\": \"float\",\n \"description\": \"Thickness (in pixels) of the x- and y-axis lines.\"\n },\n \"axisLineColor\": {\n \"default\": \"black\",\n \"labels\": [\"Axis display\"],\n \"type\": \"string\",\n \"description\": \"Color of the x- and y-axis lines. Accepts any value which the HTML canvas strokeStyle attribute understands, e.g. 'black' or 'rgb(0, 100, 255)'.\"\n },\n \"fillAlpha\": {\n \"default\": \"0.15\",\n \"labels\": [\"Error Bars\", \"Data Series Colors\"],\n \"type\": \"float (0.0 - 1.0)\",\n \"description\": \"Error bars (or custom bars) for each series are drawn in the same color as the series, but with partial transparency. This sets the transparency. A value of 0.0 means that the error bars will not be drawn, whereas a value of 1.0 means that the error bars will be as dark as the line for the series itself. This can be used to produce chart lines whose thickness varies at each point.\"\n },\n \"axisLabelWidth\": {\n \"default\": \"50 (y-axis), 60 (x-axis)\",\n \"labels\": [\"Axis display\", \"Chart labels\"],\n \"type\": \"integer\",\n \"description\": \"Width (in pixels) of the containing divs for x- and y-axis labels. For the y-axis, this also controls the width of the y-axis. Note that for the x-axis, this is independent from pixelsPerLabel, which controls the spacing between labels.\"\n },\n \"sigFigs\": {\n \"default\": \"null\",\n \"labels\": [\"Value display/formatting\"],\n \"type\": \"integer\",\n \"description\": \"By default, dygraphs displays numbers with a fixed number of digits after the decimal point. If you'd prefer to have a fixed number of significant figures, set this option to that number of sig figs. A value of 2, for instance, would cause 1 to be display as 1.0 and 1234 to be displayed as 1.23e+3.\"\n },\n \"digitsAfterDecimal\": {\n \"default\": \"2\",\n \"labels\": [\"Value display/formatting\"],\n \"type\": \"integer\",\n \"description\": \"Unless it's run in scientific mode (see the sigFigs option), dygraphs displays numbers with digitsAfterDecimal digits after the decimal point. Trailing zeros are not displayed, so with a value of 2 you'll get '0', '0.1', '0.12', '123.45' but not '123.456' (it will be rounded to '123.46'). Numbers with absolute value less than 0.1^digitsAfterDecimal (i.e. those which would show up as '0.00') will be displayed in scientific notation.\"\n },\n \"maxNumberWidth\": {\n \"default\": \"6\",\n \"labels\": [\"Value display/formatting\"],\n \"type\": \"integer\",\n \"description\": \"When displaying numbers in normal (not scientific) mode, large numbers will be displayed with many trailing zeros (e.g. 100000000 instead of 1e9). This can lead to unwieldy y-axis labels. If there are more than maxNumberWidth digits to the left of the decimal in a number, dygraphs will switch to scientific notation, even when not operating in scientific mode. If you'd like to see all those digits, set this to something large, like 20 or 30.\"\n },\n \"file\": {\n \"default\": \"(set when constructed)\",\n \"labels\": [\"Data\"],\n \"type\": \"string (URL of CSV or CSV), GViz DataTable or 2D Array\",\n \"description\": \"Sets the data being displayed in the chart. This can only be set when calling updateOptions; it cannot be set from the constructor. For a full description of valid data formats, see the Data Formats page.\"\n },\n \"timingName\": {\n \"default\": \"null\",\n \"labels\": [\"Debugging\", \"Deprecated\"],\n \"type\": \"string\",\n \"description\": \"Set this option to log timing information. The value of the option will be logged along with the timimg, so that you can distinguish multiple dygraphs on the same page.\"\n },\n \"showRangeSelector\": {\n \"default\": \"false\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"boolean\",\n \"description\": \"Show or hide the range selector widget.\"\n },\n \"rangeSelectorHeight\": {\n \"default\": \"40\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"integer\",\n \"description\": \"Height, in pixels, of the range selector widget. This option can only be specified at Dygraph creation time.\"\n },\n \"rangeSelectorPlotStrokeColor\": {\n \"default\": \"#808FAB\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"string\",\n \"description\": \"The range selector mini plot stroke color. This can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"yellow\\\". You can also specify null or \\\"\\\" to turn off stroke.\"\n },\n \"rangeSelectorPlotFillColor\": {\n \"default\": \"#A7B1C4\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"string\",\n \"description\": \"The range selector mini plot fill color. This can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"yellow\\\". You can also specify null or \\\"\\\" to turn off fill.\"\n },\n \"rangeSelectorPlotFillGradientColor\": {\n \"default\": \"white\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"string\",\n \"description\": \"The top color for the range selector mini plot fill color gradient. This can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"rgba(255,100,200,42)\\\" or \\\"yellow\\\". You can also specify null or \\\"\\\" to disable the gradient and fill with one single color.\"\n },\n \"rangeSelectorBackgroundStrokeColor\": {\n \"default\": \"gray\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"string\",\n \"description\": \"The color of the lines below and on both sides of the range selector mini plot. This can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"yellow\\\".\"\n },\n \"rangeSelectorBackgroundLineWidth\": {\n \"default\": \"1\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"float\",\n \"description\": \"The width of the lines below and on both sides of the range selector mini plot.\"\n },\n \"rangeSelectorPlotLineWidth\": {\n \"default\": \"1.5\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"float\",\n \"description\": \"The width of the range selector mini plot line.\"\n },\n \"rangeSelectorForegroundStrokeColor\": {\n \"default\": \"black\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"string\",\n \"description\": \"The color of the lines in the interactive layer of the range selector. This can be of the form \\\"#AABBCC\\\" or \\\"rgb(255,100,200)\\\" or \\\"yellow\\\".\"\n },\n \"rangeSelectorForegroundLineWidth\": {\n \"default\": \"1\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"float\",\n \"description\": \"The width the lines in the interactive layer of the range selector.\"\n },\n \"rangeSelectorAlpha\": {\n \"default\": \"0.6\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"float (0.0 - 1.0)\",\n \"description\": \"The transparency of the veil that is drawn over the unselected portions of the range selector mini plot. A value of 0 represents full transparency and the unselected portions of the mini plot will appear as normal. A value of 1 represents full opacity and the unselected portions of the mini plot will be hidden.\"\n },\n \"showInRangeSelector\": {\n \"default\": \"null\",\n \"labels\": [\"Range Selector\"],\n \"type\": \"boolean\",\n \"description\": \"Mark this series for inclusion in the range selector. The mini plot curve will be an average of all such series. If this is not specified for any series, the default behavior is to average all the visible series. Setting it for one series will result in that series being charted alone in the range selector. Once it's set for a single series, it needs to be set for all series which should be included (regardless of visibility).\"\n },\n \"animatedZooms\": {\n \"default\": \"false\",\n \"labels\": [\"Interactive Elements\"],\n \"type\": \"boolean\",\n \"description\": \"Set this option to animate the transition between zoom windows. Applies to programmatic and interactive zooms. Note that if you also set a drawCallback, it will be called several times on each zoom. If you set a zoomCallback, it will only be called after the animation is complete.\"\n },\n \"plotter\": {\n \"default\": \"[DygraphCanvasRenderer.Plotters.fillPlotter, DygraphCanvasRenderer.Plotters.errorPlotter, DygraphCanvasRenderer.Plotters.linePlotter]\",\n \"labels\": [\"Data Line display\"],\n \"type\": \"array or function\",\n \"description\": \"A function (or array of functions) which plot each data series on the chart. TODO(danvk): more details! May be set per-series.\"\n },\n \"axes\": {\n \"default\": \"null\",\n \"labels\": [\"Configuration\"],\n \"type\": \"Object\",\n \"description\": \"Defines per-axis options. Valid keys are 'x', 'y' and 'y2'. Only some options may be set on a per-axis basis. If an option may be set in this way, it will be noted on this page. See also documentation on per-series and per-axis options.\"\n },\n \"series\": {\n \"default\": \"null\",\n \"labels\": [\"Series\"],\n \"type\": \"Object\",\n \"description\": \"Defines per-series options. Its keys match the y-axis label names, and the values are dictionaries themselves that contain options specific to that series.\"\n },\n \"plugins\": {\n \"default\": \"[]\",\n \"labels\": [\"Configuration\"],\n \"type\": \"Array\",\n \"description\": \"Defines per-graph plugins. Useful for per-graph customization\"\n },\n \"dataHandler\": {\n \"default\": \"(depends on data)\",\n \"labels\": [\"Data\"],\n \"type\": \"Dygraph.DataHandler\",\n \"description\": \"Custom DataHandler. This is an advanced customization. See http://bit.ly/151E7Aq.\"\n }\n }; //
    \n // NOTE: in addition to parsing as JS, this snippet is expected to be valid\n // JSON. This assumption cannot be checked in JS, but it will be checked when\n // documentation is generated by the generate-documentation.py script. For the\n // most part, this just means that you should always use double quotes.\n\n // Do a quick sanity check on the options reference.\n var warn = function warn(msg) {\n if (window.console) window.console.warn(msg);\n };\n var flds = ['type', 'default', 'description'];\n var valid_cats = ['Annotations', 'Axis display', 'Chart labels', 'CSV parsing', 'Callbacks', 'Data', 'Data Line display', 'Data Series Colors', 'Error Bars', 'Grid', 'Interactive Elements', 'Range Selector', 'Legend', 'Overall display', 'Rolling Averages', 'Series', 'Value display/formatting', 'Zooming', 'Debugging', 'Configuration', 'Deprecated'];\n var i;\n var cats = {};\n for (i = 0; i < valid_cats.length; i++) cats[valid_cats[i]] = true;\n\n for (var k in OPTIONS_REFERENCE) {\n if (!OPTIONS_REFERENCE.hasOwnProperty(k)) continue;\n var op = OPTIONS_REFERENCE[k];\n for (i = 0; i < flds.length; i++) {\n if (!op.hasOwnProperty(flds[i])) {\n warn('Option ' + k + ' missing \"' + flds[i] + '\" property');\n } else if (typeof op[flds[i]] != 'string') {\n warn(k + '.' + flds[i] + ' must be of type string');\n }\n }\n var labels = op.labels;\n if (typeof labels !== 'object') {\n warn('Option \"' + k + '\" is missing a \"labels\": [...] option');\n } else {\n for (i = 0; i < labels.length; i++) {\n if (!cats.hasOwnProperty(labels[i])) {\n warn('Option \"' + k + '\" has label \"' + labels[i] + '\", which is invalid.');\n }\n }\n }\n }\n }\n}\n\nexports['default'] = OPTIONS_REFERENCE;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview DygraphOptions is responsible for parsing and returning\n * information about options.\n */\n\n// TODO: remove this jshint directive & fix the warnings.\n/*jshint sub:true */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\nvar _dygraphDefaultAttrs = require('./dygraph-default-attrs');\n\nvar _dygraphDefaultAttrs2 = _interopRequireDefault(_dygraphDefaultAttrs);\n\nvar _dygraphOptionsReference = require('./dygraph-options-reference');\n\nvar _dygraphOptionsReference2 = _interopRequireDefault(_dygraphOptionsReference);\n\n/*\n * Interesting member variables: (REMOVING THIS LIST AS I CLOSURIZE)\n * global_ - global attributes (common among all graphs, AIUI)\n * user - attributes set by the user\n * series_ - { seriesName -> { idx, yAxis, options }}\n */\n\n/**\n * This parses attributes into an object that can be easily queried.\n *\n * It doesn't necessarily mean that all options are available, specifically\n * if labels are not yet available, since those drive details of the per-series\n * and per-axis options.\n *\n * @param {Dygraph} dygraph The chart to which these options belong.\n * @constructor\n */\nvar DygraphOptions = function DygraphOptions(dygraph) {\n /**\n * The dygraph.\n * @type {!Dygraph}\n */\n this.dygraph_ = dygraph;\n\n /**\n * Array of axis index to { series : [ series names ] , options : { axis-specific options. }\n * @type {Array.<{series : Array., options : Object}>} @private\n */\n this.yAxes_ = [];\n\n /**\n * Contains x-axis specific options, which are stored in the options key.\n * This matches the yAxes_ object structure (by being a dictionary with an\n * options element) allowing for shared code.\n * @type {options: Object} @private\n */\n this.xAxis_ = {};\n this.series_ = {};\n\n // Once these two objects are initialized, you can call get();\n this.global_ = this.dygraph_.attrs_;\n this.user_ = this.dygraph_.user_attrs_ || {};\n\n /**\n * A list of series in columnar order.\n * @type {Array.}\n */\n this.labels_ = [];\n\n this.highlightSeries_ = this.get(\"highlightSeriesOpts\") || {};\n this.reparseSeries();\n};\n\n/**\n * Not optimal, but does the trick when you're only using two axes.\n * If we move to more axes, this can just become a function.\n *\n * @type {Object.}\n * @private\n */\nDygraphOptions.AXIS_STRING_MAPPINGS_ = {\n 'y': 0,\n 'Y': 0,\n 'y1': 0,\n 'Y1': 0,\n 'y2': 1,\n 'Y2': 1\n};\n\n/**\n * @param {string|number} axis\n * @private\n */\nDygraphOptions.axisToIndex_ = function (axis) {\n if (typeof axis == \"string\") {\n if (DygraphOptions.AXIS_STRING_MAPPINGS_.hasOwnProperty(axis)) {\n return DygraphOptions.AXIS_STRING_MAPPINGS_[axis];\n }\n throw \"Unknown axis : \" + axis;\n }\n if (typeof axis == \"number\") {\n if (axis === 0 || axis === 1) {\n return axis;\n }\n throw \"Dygraphs only supports two y-axes, indexed from 0-1.\";\n }\n if (axis) {\n throw \"Unknown axis : \" + axis;\n }\n // No axis specification means axis 0.\n return 0;\n};\n\n/**\n * Reparses options that are all related to series. This typically occurs when\n * options are either updated, or source data has been made available.\n *\n * TODO(konigsberg): The method name is kind of weak; fix.\n */\nDygraphOptions.prototype.reparseSeries = function () {\n var labels = this.get(\"labels\");\n if (!labels) {\n return; // -- can't do more for now, will parse after getting the labels.\n }\n\n this.labels_ = labels.slice(1);\n\n this.yAxes_ = [{ series: [], options: {} }]; // Always one axis at least.\n this.xAxis_ = { options: {} };\n this.series_ = {};\n\n // Series are specified in the series element:\n //\n // {\n // labels: [ \"X\", \"foo\", \"bar\" ],\n // pointSize: 3,\n // series : {\n // foo : {}, // options for foo\n // bar : {} // options for bar\n // }\n // }\n //\n // So, if series is found, it's expected to contain per-series data, otherwise set a\n // default.\n var seriesDict = this.user_.series || {};\n for (var idx = 0; idx < this.labels_.length; idx++) {\n var seriesName = this.labels_[idx];\n var optionsForSeries = seriesDict[seriesName] || {};\n var yAxis = DygraphOptions.axisToIndex_(optionsForSeries[\"axis\"]);\n\n this.series_[seriesName] = {\n idx: idx,\n yAxis: yAxis,\n options: optionsForSeries };\n\n if (!this.yAxes_[yAxis]) {\n this.yAxes_[yAxis] = { series: [seriesName], options: {} };\n } else {\n this.yAxes_[yAxis].series.push(seriesName);\n }\n }\n\n var axis_opts = this.user_[\"axes\"] || {};\n utils.update(this.yAxes_[0].options, axis_opts[\"y\"] || {});\n if (this.yAxes_.length > 1) {\n utils.update(this.yAxes_[1].options, axis_opts[\"y2\"] || {});\n }\n utils.update(this.xAxis_.options, axis_opts[\"x\"] || {});\n\n // For \"production\" code, this gets removed by uglifyjs.\n if (typeof process !== 'undefined') {\n if (process.env.NODE_ENV != 'production') {\n this.validateOptions_();\n }\n }\n};\n\n/**\n * Get a global value.\n *\n * @param {string} name the name of the option.\n */\nDygraphOptions.prototype.get = function (name) {\n var result = this.getGlobalUser_(name);\n if (result !== null) {\n return result;\n }\n return this.getGlobalDefault_(name);\n};\n\nDygraphOptions.prototype.getGlobalUser_ = function (name) {\n if (this.user_.hasOwnProperty(name)) {\n return this.user_[name];\n }\n return null;\n};\n\nDygraphOptions.prototype.getGlobalDefault_ = function (name) {\n if (this.global_.hasOwnProperty(name)) {\n return this.global_[name];\n }\n if (_dygraphDefaultAttrs2['default'].hasOwnProperty(name)) {\n return _dygraphDefaultAttrs2['default'][name];\n }\n return null;\n};\n\n/**\n * Get a value for a specific axis. If there is no specific value for the axis,\n * the global value is returned.\n *\n * @param {string} name the name of the option.\n * @param {string|number} axis the axis to search. Can be the string representation\n * (\"y\", \"y2\") or the axis number (0, 1).\n */\nDygraphOptions.prototype.getForAxis = function (name, axis) {\n var axisIdx;\n var axisString;\n\n // Since axis can be a number or a string, straighten everything out here.\n if (typeof axis == 'number') {\n axisIdx = axis;\n axisString = axisIdx === 0 ? \"y\" : \"y2\";\n } else {\n if (axis == \"y1\") {\n axis = \"y\";\n } // Standardize on 'y'. Is this bad? I think so.\n if (axis == \"y\") {\n axisIdx = 0;\n } else if (axis == \"y2\") {\n axisIdx = 1;\n } else if (axis == \"x\") {\n axisIdx = -1; // simply a placeholder for below.\n } else {\n throw \"Unknown axis \" + axis;\n }\n axisString = axis;\n }\n\n var userAxis = axisIdx == -1 ? this.xAxis_ : this.yAxes_[axisIdx];\n\n // Search the user-specified axis option first.\n if (userAxis) {\n // This condition could be removed if we always set up this.yAxes_ for y2.\n var axisOptions = userAxis.options;\n if (axisOptions.hasOwnProperty(name)) {\n return axisOptions[name];\n }\n }\n\n // User-specified global options second.\n // But, hack, ignore globally-specified 'logscale' for 'x' axis declaration.\n if (!(axis === 'x' && name === 'logscale')) {\n var result = this.getGlobalUser_(name);\n if (result !== null) {\n return result;\n }\n }\n // Default axis options third.\n var defaultAxisOptions = _dygraphDefaultAttrs2['default'].axes[axisString];\n if (defaultAxisOptions.hasOwnProperty(name)) {\n return defaultAxisOptions[name];\n }\n\n // Default global options last.\n return this.getGlobalDefault_(name);\n};\n\n/**\n * Get a value for a specific series. If there is no specific value for the series,\n * the value for the axis is returned (and afterwards, the global value.)\n *\n * @param {string} name the name of the option.\n * @param {string} series the series to search.\n */\nDygraphOptions.prototype.getForSeries = function (name, series) {\n // Honors indexes as series.\n if (series === this.dygraph_.getHighlightSeries()) {\n if (this.highlightSeries_.hasOwnProperty(name)) {\n return this.highlightSeries_[name];\n }\n }\n\n if (!this.series_.hasOwnProperty(series)) {\n throw \"Unknown series: \" + series;\n }\n\n var seriesObj = this.series_[series];\n var seriesOptions = seriesObj[\"options\"];\n if (seriesOptions.hasOwnProperty(name)) {\n return seriesOptions[name];\n }\n\n return this.getForAxis(name, seriesObj[\"yAxis\"]);\n};\n\n/**\n * Returns the number of y-axes on the chart.\n * @return {number} the number of axes.\n */\nDygraphOptions.prototype.numAxes = function () {\n return this.yAxes_.length;\n};\n\n/**\n * Return the y-axis for a given series, specified by name.\n */\nDygraphOptions.prototype.axisForSeries = function (series) {\n return this.series_[series].yAxis;\n};\n\n/**\n * Returns the options for the specified axis.\n */\n// TODO(konigsberg): this is y-axis specific. Support the x axis.\nDygraphOptions.prototype.axisOptions = function (yAxis) {\n return this.yAxes_[yAxis].options;\n};\n\n/**\n * Return the series associated with an axis.\n */\nDygraphOptions.prototype.seriesForAxis = function (yAxis) {\n return this.yAxes_[yAxis].series;\n};\n\n/**\n * Return the list of all series, in their columnar order.\n */\nDygraphOptions.prototype.seriesNames = function () {\n return this.labels_;\n};\n\n// For \"production\" code, this gets removed by uglifyjs.\nif (typeof process !== 'undefined') {\n if (process.env.NODE_ENV != 'production') {\n\n /**\n * Validate all options.\n * This requires OPTIONS_REFERENCE, which is only available in debug builds.\n * @private\n */\n DygraphOptions.prototype.validateOptions_ = function () {\n if (typeof _dygraphOptionsReference2['default'] === 'undefined') {\n throw 'Called validateOptions_ in prod build.';\n }\n\n var that = this;\n var validateOption = function validateOption(optionName) {\n if (!_dygraphOptionsReference2['default'][optionName]) {\n that.warnInvalidOption_(optionName);\n }\n };\n\n var optionsDicts = [this.xAxis_.options, this.yAxes_[0].options, this.yAxes_[1] && this.yAxes_[1].options, this.global_, this.user_, this.highlightSeries_];\n var names = this.seriesNames();\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (this.series_.hasOwnProperty(name)) {\n optionsDicts.push(this.series_[name].options);\n }\n }\n for (var i = 0; i < optionsDicts.length; i++) {\n var dict = optionsDicts[i];\n if (!dict) continue;\n for (var optionName in dict) {\n if (dict.hasOwnProperty(optionName)) {\n validateOption(optionName);\n }\n }\n }\n };\n\n var WARNINGS = {}; // Only show any particular warning once.\n\n /**\n * Logs a warning about invalid options.\n * TODO: make this throw for testing\n * @private\n */\n DygraphOptions.prototype.warnInvalidOption_ = function (optionName) {\n if (!WARNINGS[optionName]) {\n WARNINGS[optionName] = true;\n var isSeries = this.labels_.indexOf(optionName) >= 0;\n if (isSeries) {\n console.warn('Use new-style per-series options (saw ' + optionName + ' as top-level options key). See http://bit.ly/1tceaJs');\n } else {\n console.warn('Unknown option ' + optionName + ' (full list of options at dygraphs.com/options.html');\n }\n throw \"invalid option \" + optionName;\n }\n };\n\n // Reset list of previously-shown warnings. Used for testing.\n DygraphOptions.resetWarnings_ = function () {\n WARNINGS = {};\n };\n }\n}\n\nexports['default'] = DygraphOptions;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview Description of this file.\n * @author danvk@google.com (Dan Vanderkam)\n *\n * A ticker is a function with the following interface:\n *\n * function(a, b, pixels, options_view, dygraph, forced_values);\n * -> [ { v: tick1_v, label: tick1_label[, label_v: label_v1] },\n * { v: tick2_v, label: tick2_label[, label_v: label_v2] },\n * ...\n * ]\n *\n * The returned value is called a \"tick list\".\n *\n * Arguments\n * ---------\n *\n * [a, b] is the range of the axis for which ticks are being generated. For a\n * numeric axis, these will simply be numbers. For a date axis, these will be\n * millis since epoch (convertable to Date objects using \"new Date(a)\" and \"new\n * Date(b)\").\n *\n * opts provides access to chart- and axis-specific options. It can be used to\n * access number/date formatting code/options, check for a log scale, etc.\n *\n * pixels is the length of the axis in pixels. opts('pixelsPerLabel') is the\n * minimum amount of space to be allotted to each label. For instance, if\n * pixels=400 and opts('pixelsPerLabel')=40 then the ticker should return\n * between zero and ten (400/40) ticks.\n *\n * dygraph is the Dygraph object for which an axis is being constructed.\n *\n * forced_values is used for secondary y-axes. The tick positions are typically\n * set by the primary y-axis, so the secondary y-axis has no choice in where to\n * put these. It simply has to generate labels for these data values.\n *\n * Tick lists\n * ----------\n * Typically a tick will have both a grid/tick line and a label at one end of\n * that line (at the bottom for an x-axis, at left or right for the y-axis).\n *\n * A tick may be missing one of these two components:\n * - If \"label_v\" is specified instead of \"v\", then there will be no tick or\n * gridline, just a label.\n * - Similarly, if \"label\" is not specified, then there will be a gridline\n * without a label.\n *\n * This flexibility is useful in a few situations:\n * - For log scales, some of the tick lines may be too close to all have labels.\n * - For date scales where years are being displayed, it is desirable to display\n * tick marks at the beginnings of years but labels (e.g. \"2006\") in the\n * middle of the years.\n */\n\n/*jshint sub:true */\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n/** @typedef {Array.<{v:number, label:string, label_v:(string|undefined)}>} */\nvar TickList = undefined; // the ' = undefined' keeps jshint happy.\n\n/** @typedef {function(\n * number,\n * number,\n * number,\n * function(string):*,\n * Dygraph=,\n * Array.=\n * ): TickList}\n */\nvar Ticker = undefined; // the ' = undefined' keeps jshint happy.\n\n/** @type {Ticker} */\nvar numericLinearTicks = function numericLinearTicks(a, b, pixels, opts, dygraph, vals) {\n var nonLogscaleOpts = function nonLogscaleOpts(opt) {\n if (opt === 'logscale') return false;\n return opts(opt);\n };\n return numericTicks(a, b, pixels, nonLogscaleOpts, dygraph, vals);\n};\n\nexports.numericLinearTicks = numericLinearTicks;\n/** @type {Ticker} */\nvar numericTicks = function numericTicks(a, b, pixels, opts, dygraph, vals) {\n var pixels_per_tick = /** @type{number} */opts('pixelsPerLabel');\n var ticks = [];\n var i, j, tickV, nTicks;\n if (vals) {\n for (i = 0; i < vals.length; i++) {\n ticks.push({ v: vals[i] });\n }\n } else {\n // TODO(danvk): factor this log-scale block out into a separate function.\n if (opts(\"logscale\")) {\n nTicks = Math.floor(pixels / pixels_per_tick);\n var minIdx = utils.binarySearch(a, PREFERRED_LOG_TICK_VALUES, 1);\n var maxIdx = utils.binarySearch(b, PREFERRED_LOG_TICK_VALUES, -1);\n if (minIdx == -1) {\n minIdx = 0;\n }\n if (maxIdx == -1) {\n maxIdx = PREFERRED_LOG_TICK_VALUES.length - 1;\n }\n // Count the number of tick values would appear, if we can get at least\n // nTicks / 4 accept them.\n var lastDisplayed = null;\n if (maxIdx - minIdx >= nTicks / 4) {\n for (var idx = maxIdx; idx >= minIdx; idx--) {\n var tickValue = PREFERRED_LOG_TICK_VALUES[idx];\n var pixel_coord = Math.log(tickValue / a) / Math.log(b / a) * pixels;\n var tick = { v: tickValue };\n if (lastDisplayed === null) {\n lastDisplayed = {\n tickValue: tickValue,\n pixel_coord: pixel_coord\n };\n } else {\n if (Math.abs(pixel_coord - lastDisplayed.pixel_coord) >= pixels_per_tick) {\n lastDisplayed = {\n tickValue: tickValue,\n pixel_coord: pixel_coord\n };\n } else {\n tick.label = \"\";\n }\n }\n ticks.push(tick);\n }\n // Since we went in backwards order.\n ticks.reverse();\n }\n }\n\n // ticks.length won't be 0 if the log scale function finds values to insert.\n if (ticks.length === 0) {\n // Basic idea:\n // Try labels every 1, 2, 5, 10, 20, 50, 100, etc.\n // Calculate the resulting tick spacing (i.e. this.height_ / nTicks).\n // The first spacing greater than pixelsPerYLabel is what we use.\n // TODO(danvk): version that works on a log scale.\n var kmg2 = opts(\"labelsKMG2\");\n var mults, base;\n if (kmg2) {\n mults = [1, 2, 4, 8, 16, 32, 64, 128, 256];\n base = 16;\n } else {\n mults = [1, 2, 5, 10, 20, 50, 100];\n base = 10;\n }\n\n // Get the maximum number of permitted ticks based on the\n // graph's pixel size and pixels_per_tick setting.\n var max_ticks = Math.ceil(pixels / pixels_per_tick);\n\n // Now calculate the data unit equivalent of this tick spacing.\n // Use abs() since graphs may have a reversed Y axis.\n var units_per_tick = Math.abs(b - a) / max_ticks;\n\n // Based on this, get a starting scale which is the largest\n // integer power of the chosen base (10 or 16) that still remains\n // below the requested pixels_per_tick spacing.\n var base_power = Math.floor(Math.log(units_per_tick) / Math.log(base));\n var base_scale = Math.pow(base, base_power);\n\n // Now try multiples of the starting scale until we find one\n // that results in tick marks spaced sufficiently far apart.\n // The \"mults\" array should cover the range 1 .. base^2 to\n // adjust for rounding and edge effects.\n var scale, low_val, high_val, spacing;\n for (j = 0; j < mults.length; j++) {\n scale = base_scale * mults[j];\n low_val = Math.floor(a / scale) * scale;\n high_val = Math.ceil(b / scale) * scale;\n nTicks = Math.abs(high_val - low_val) / scale;\n spacing = pixels / nTicks;\n if (spacing > pixels_per_tick) break;\n }\n\n // Construct the set of ticks.\n // Allow reverse y-axis if it's explicitly requested.\n if (low_val > high_val) scale *= -1;\n for (i = 0; i <= nTicks; i++) {\n tickV = low_val + i * scale;\n ticks.push({ v: tickV });\n }\n }\n }\n\n var formatter = /**@type{AxisLabelFormatter}*/opts('axisLabelFormatter');\n\n // Add labels to the ticks.\n for (i = 0; i < ticks.length; i++) {\n if (ticks[i].label !== undefined) continue; // Use current label.\n // TODO(danvk): set granularity to something appropriate here.\n ticks[i].label = formatter.call(dygraph, ticks[i].v, 0, opts, dygraph);\n }\n\n return ticks;\n};\n\nexports.numericTicks = numericTicks;\n/** @type {Ticker} */\nvar dateTicker = function dateTicker(a, b, pixels, opts, dygraph, vals) {\n var chosen = pickDateTickGranularity(a, b, pixels, opts);\n\n if (chosen >= 0) {\n return getDateAxis(a, b, chosen, opts, dygraph);\n } else {\n // this can happen if self.width_ is zero.\n return [];\n }\n};\n\nexports.dateTicker = dateTicker;\n// Time granularity enumeration\nvar Granularity = {\n MILLISECONDLY: 0,\n TWO_MILLISECONDLY: 1,\n FIVE_MILLISECONDLY: 2,\n TEN_MILLISECONDLY: 3,\n FIFTY_MILLISECONDLY: 4,\n HUNDRED_MILLISECONDLY: 5,\n FIVE_HUNDRED_MILLISECONDLY: 6,\n SECONDLY: 7,\n TWO_SECONDLY: 8,\n FIVE_SECONDLY: 9,\n TEN_SECONDLY: 10,\n THIRTY_SECONDLY: 11,\n MINUTELY: 12,\n TWO_MINUTELY: 13,\n FIVE_MINUTELY: 14,\n TEN_MINUTELY: 15,\n THIRTY_MINUTELY: 16,\n HOURLY: 17,\n TWO_HOURLY: 18,\n SIX_HOURLY: 19,\n DAILY: 20,\n TWO_DAILY: 21,\n WEEKLY: 22,\n MONTHLY: 23,\n QUARTERLY: 24,\n BIANNUAL: 25,\n ANNUAL: 26,\n DECADAL: 27,\n CENTENNIAL: 28,\n NUM_GRANULARITIES: 29\n};\n\nexports.Granularity = Granularity;\n// Date components enumeration (in the order of the arguments in Date)\n// TODO: make this an @enum\nvar DateField = {\n DATEFIELD_Y: 0,\n DATEFIELD_M: 1,\n DATEFIELD_D: 2,\n DATEFIELD_HH: 3,\n DATEFIELD_MM: 4,\n DATEFIELD_SS: 5,\n DATEFIELD_MS: 6,\n NUM_DATEFIELDS: 7\n};\n\n/**\n * The value of datefield will start at an even multiple of \"step\", i.e.\n * if datefield=SS and step=5 then the first tick will be on a multiple of 5s.\n *\n * For granularities <= HOURLY, ticks are generated every `spacing` ms.\n *\n * At coarser granularities, ticks are generated by incrementing `datefield` by\n * `step`. In this case, the `spacing` value is only used to estimate the\n * number of ticks. It should roughly correspond to the spacing between\n * adjacent ticks.\n *\n * @type {Array.<{datefield:number, step:number, spacing:number}>}\n */\nvar TICK_PLACEMENT = [];\nTICK_PLACEMENT[Granularity.MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 1, spacing: 1 };\nTICK_PLACEMENT[Granularity.TWO_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 2, spacing: 2 };\nTICK_PLACEMENT[Granularity.FIVE_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 5, spacing: 5 };\nTICK_PLACEMENT[Granularity.TEN_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 10, spacing: 10 };\nTICK_PLACEMENT[Granularity.FIFTY_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 50, spacing: 50 };\nTICK_PLACEMENT[Granularity.HUNDRED_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 100, spacing: 100 };\nTICK_PLACEMENT[Granularity.FIVE_HUNDRED_MILLISECONDLY] = { datefield: DateField.DATEFIELD_MS, step: 500, spacing: 500 };\nTICK_PLACEMENT[Granularity.SECONDLY] = { datefield: DateField.DATEFIELD_SS, step: 1, spacing: 1000 * 1 };\nTICK_PLACEMENT[Granularity.TWO_SECONDLY] = { datefield: DateField.DATEFIELD_SS, step: 2, spacing: 1000 * 2 };\nTICK_PLACEMENT[Granularity.FIVE_SECONDLY] = { datefield: DateField.DATEFIELD_SS, step: 5, spacing: 1000 * 5 };\nTICK_PLACEMENT[Granularity.TEN_SECONDLY] = { datefield: DateField.DATEFIELD_SS, step: 10, spacing: 1000 * 10 };\nTICK_PLACEMENT[Granularity.THIRTY_SECONDLY] = { datefield: DateField.DATEFIELD_SS, step: 30, spacing: 1000 * 30 };\nTICK_PLACEMENT[Granularity.MINUTELY] = { datefield: DateField.DATEFIELD_MM, step: 1, spacing: 1000 * 60 };\nTICK_PLACEMENT[Granularity.TWO_MINUTELY] = { datefield: DateField.DATEFIELD_MM, step: 2, spacing: 1000 * 60 * 2 };\nTICK_PLACEMENT[Granularity.FIVE_MINUTELY] = { datefield: DateField.DATEFIELD_MM, step: 5, spacing: 1000 * 60 * 5 };\nTICK_PLACEMENT[Granularity.TEN_MINUTELY] = { datefield: DateField.DATEFIELD_MM, step: 10, spacing: 1000 * 60 * 10 };\nTICK_PLACEMENT[Granularity.THIRTY_MINUTELY] = { datefield: DateField.DATEFIELD_MM, step: 30, spacing: 1000 * 60 * 30 };\nTICK_PLACEMENT[Granularity.HOURLY] = { datefield: DateField.DATEFIELD_HH, step: 1, spacing: 1000 * 3600 };\nTICK_PLACEMENT[Granularity.TWO_HOURLY] = { datefield: DateField.DATEFIELD_HH, step: 2, spacing: 1000 * 3600 * 2 };\nTICK_PLACEMENT[Granularity.SIX_HOURLY] = { datefield: DateField.DATEFIELD_HH, step: 6, spacing: 1000 * 3600 * 6 };\nTICK_PLACEMENT[Granularity.DAILY] = { datefield: DateField.DATEFIELD_D, step: 1, spacing: 1000 * 86400 };\nTICK_PLACEMENT[Granularity.TWO_DAILY] = { datefield: DateField.DATEFIELD_D, step: 2, spacing: 1000 * 86400 * 2 };\nTICK_PLACEMENT[Granularity.WEEKLY] = { datefield: DateField.DATEFIELD_D, step: 7, spacing: 1000 * 604800 };\nTICK_PLACEMENT[Granularity.MONTHLY] = { datefield: DateField.DATEFIELD_M, step: 1, spacing: 1000 * 7200 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 / 12\nTICK_PLACEMENT[Granularity.QUARTERLY] = { datefield: DateField.DATEFIELD_M, step: 3, spacing: 1000 * 21600 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 / 4\nTICK_PLACEMENT[Granularity.BIANNUAL] = { datefield: DateField.DATEFIELD_M, step: 6, spacing: 1000 * 43200 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 / 2\nTICK_PLACEMENT[Granularity.ANNUAL] = { datefield: DateField.DATEFIELD_Y, step: 1, spacing: 1000 * 86400 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 * 1\nTICK_PLACEMENT[Granularity.DECADAL] = { datefield: DateField.DATEFIELD_Y, step: 10, spacing: 1000 * 864000 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 * 10\nTICK_PLACEMENT[Granularity.CENTENNIAL] = { datefield: DateField.DATEFIELD_Y, step: 100, spacing: 1000 * 8640000 * 365.2524 }; // 1e3 * 60 * 60 * 24 * 365.2524 * 100\n\n/**\n * This is a list of human-friendly values at which to show tick marks on a log\n * scale. It is k * 10^n, where k=1..9 and n=-39..+39, so:\n * ..., 1, 2, 3, 4, 5, ..., 9, 10, 20, 30, ..., 90, 100, 200, 300, ...\n * NOTE: this assumes that utils.LOG_SCALE = 10.\n * @type {Array.}\n */\nvar PREFERRED_LOG_TICK_VALUES = (function () {\n var vals = [];\n for (var power = -39; power <= 39; power++) {\n var range = Math.pow(10, power);\n for (var mult = 1; mult <= 9; mult++) {\n var val = range * mult;\n vals.push(val);\n }\n }\n return vals;\n})();\n\n/**\n * Determine the correct granularity of ticks on a date axis.\n *\n * @param {number} a Left edge of the chart (ms)\n * @param {number} b Right edge of the chart (ms)\n * @param {number} pixels Size of the chart in the relevant dimension (width).\n * @param {function(string):*} opts Function mapping from option name -> value.\n * @return {number} The appropriate axis granularity for this chart. See the\n * enumeration of possible values in dygraph-tickers.js.\n */\nvar pickDateTickGranularity = function pickDateTickGranularity(a, b, pixels, opts) {\n var pixels_per_tick = /** @type{number} */opts('pixelsPerLabel');\n for (var i = 0; i < Granularity.NUM_GRANULARITIES; i++) {\n var num_ticks = numDateTicks(a, b, i);\n if (pixels / num_ticks >= pixels_per_tick) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Compute the number of ticks on a date axis for a given granularity.\n * @param {number} start_time\n * @param {number} end_time\n * @param {number} granularity (one of the granularities enumerated above)\n * @return {number} (Approximate) number of ticks that would result.\n */\nvar numDateTicks = function numDateTicks(start_time, end_time, granularity) {\n var spacing = TICK_PLACEMENT[granularity].spacing;\n return Math.round(1.0 * (end_time - start_time) / spacing);\n};\n\n/**\n * Compute the positions and labels of ticks on a date axis for a given granularity.\n * @param {number} start_time\n * @param {number} end_time\n * @param {number} granularity (one of the granularities enumerated above)\n * @param {function(string):*} opts Function mapping from option name -> value.\n * @param {Dygraph=} dg\n * @return {!TickList}\n */\nvar getDateAxis = function getDateAxis(start_time, end_time, granularity, opts, dg) {\n var formatter = /** @type{AxisLabelFormatter} */opts(\"axisLabelFormatter\");\n var utc = opts(\"labelsUTC\");\n var accessors = utc ? utils.DateAccessorsUTC : utils.DateAccessorsLocal;\n\n var datefield = TICK_PLACEMENT[granularity].datefield;\n var step = TICK_PLACEMENT[granularity].step;\n var spacing = TICK_PLACEMENT[granularity].spacing;\n\n // Choose a nice tick position before the initial instant.\n // Currently, this code deals properly with the existent daily granularities:\n // DAILY (with step of 1) and WEEKLY (with step of 7 but specially handled).\n // Other daily granularities (say TWO_DAILY) should also be handled specially\n // by setting the start_date_offset to 0.\n var start_date = new Date(start_time);\n var date_array = [];\n date_array[DateField.DATEFIELD_Y] = accessors.getFullYear(start_date);\n date_array[DateField.DATEFIELD_M] = accessors.getMonth(start_date);\n date_array[DateField.DATEFIELD_D] = accessors.getDate(start_date);\n date_array[DateField.DATEFIELD_HH] = accessors.getHours(start_date);\n date_array[DateField.DATEFIELD_MM] = accessors.getMinutes(start_date);\n date_array[DateField.DATEFIELD_SS] = accessors.getSeconds(start_date);\n date_array[DateField.DATEFIELD_MS] = accessors.getMilliseconds(start_date);\n\n var start_date_offset = date_array[datefield] % step;\n if (granularity == Granularity.WEEKLY) {\n // This will put the ticks on Sundays.\n start_date_offset = accessors.getDay(start_date);\n }\n\n date_array[datefield] -= start_date_offset;\n for (var df = datefield + 1; df < DateField.NUM_DATEFIELDS; df++) {\n // The minimum value is 1 for the day of month, and 0 for all other fields.\n date_array[df] = df === DateField.DATEFIELD_D ? 1 : 0;\n }\n\n // Generate the ticks.\n // For granularities not coarser than HOURLY we use the fact that:\n // the number of milliseconds between ticks is constant\n // and equal to the defined spacing.\n // Otherwise we rely on the 'roll over' property of the Date functions:\n // when some date field is set to a value outside of its logical range,\n // the excess 'rolls over' the next (more significant) field.\n // However, when using local time with DST transitions,\n // there are dates that do not represent any time value at all\n // (those in the hour skipped at the 'spring forward'),\n // and the JavaScript engines usually return an equivalent value.\n // Hence we have to check that the date is properly increased at each step,\n // returning a date at a nice tick position.\n var ticks = [];\n var tick_date = accessors.makeDate.apply(null, date_array);\n var tick_time = tick_date.getTime();\n if (granularity <= Granularity.HOURLY) {\n if (tick_time < start_time) {\n tick_time += spacing;\n tick_date = new Date(tick_time);\n }\n while (tick_time <= end_time) {\n ticks.push({ v: tick_time,\n label: formatter.call(dg, tick_date, granularity, opts, dg)\n });\n tick_time += spacing;\n tick_date = new Date(tick_time);\n }\n } else {\n if (tick_time < start_time) {\n date_array[datefield] += step;\n tick_date = accessors.makeDate.apply(null, date_array);\n tick_time = tick_date.getTime();\n }\n while (tick_time <= end_time) {\n if (granularity >= Granularity.DAILY || accessors.getHours(tick_date) % step === 0) {\n ticks.push({ v: tick_time,\n label: formatter.call(dg, tick_date, granularity, opts, dg)\n });\n }\n date_array[datefield] += step;\n tick_date = accessors.makeDate.apply(null, date_array);\n tick_time = tick_date.getTime();\n }\n }\n return ticks;\n};\nexports.getDateAxis = getDateAxis;","/**\n * @license\n * Copyright 2011 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview This file contains utility functions used by dygraphs. These\n * are typically static (i.e. not related to any particular dygraph). Examples\n * include date/time formatting functions, basic algorithms (e.g. binary\n * search) and generic DOM-manipulation functions.\n */\n\n/*global Dygraph:false, Node:false */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeEvent = removeEvent;\nexports.cancelEvent = cancelEvent;\nexports.hsvToRGB = hsvToRGB;\nexports.findPos = findPos;\nexports.pageX = pageX;\nexports.pageY = pageY;\nexports.dragGetX_ = dragGetX_;\nexports.dragGetY_ = dragGetY_;\nexports.isOK = isOK;\nexports.isValidPoint = isValidPoint;\nexports.floatFormat = floatFormat;\nexports.zeropad = zeropad;\nexports.hmsString_ = hmsString_;\nexports.dateString_ = dateString_;\nexports.round_ = round_;\nexports.binarySearch = binarySearch;\nexports.dateParser = dateParser;\nexports.dateStrToMillis = dateStrToMillis;\nexports.update = update;\nexports.updateDeep = updateDeep;\nexports.isArrayLike = isArrayLike;\nexports.isDateLike = isDateLike;\nexports.clone = clone;\nexports.createCanvas = createCanvas;\nexports.getContextPixelRatio = getContextPixelRatio;\nexports.Iterator = Iterator;\nexports.createIterator = createIterator;\nexports.repeatAndCleanup = repeatAndCleanup;\nexports.isPixelChangingOptionList = isPixelChangingOptionList;\nexports.detectLineDelimiter = detectLineDelimiter;\nexports.isNodeContainedBy = isNodeContainedBy;\nexports.pow = pow;\nexports.toRGB_ = toRGB_;\nexports.isCanvasSupported = isCanvasSupported;\nexports.parseFloat_ = parseFloat_;\nexports.numberValueFormatter = numberValueFormatter;\nexports.numberAxisLabelFormatter = numberAxisLabelFormatter;\nexports.dateAxisLabelFormatter = dateAxisLabelFormatter;\nexports.dateValueFormatter = dateValueFormatter;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\nvar _dygraphTickers = require('./dygraph-tickers');\n\nvar DygraphTickers = _interopRequireWildcard(_dygraphTickers);\n\nvar LOG_SCALE = 10;\nexports.LOG_SCALE = LOG_SCALE;\nvar LN_TEN = Math.log(LOG_SCALE);\n\nexports.LN_TEN = LN_TEN;\n/**\n * @private\n * @param {number} x\n * @return {number}\n */\nvar log10 = function log10(x) {\n return Math.log(x) / LN_TEN;\n};\n\nexports.log10 = log10;\n/**\n * @private\n * @param {number} r0\n * @param {number} r1\n * @param {number} pct\n * @return {number}\n */\nvar logRangeFraction = function logRangeFraction(r0, r1, pct) {\n // Computing the inverse of toPercentXCoord. The function was arrived at with\n // the following steps:\n //\n // Original calcuation:\n // pct = (log(x) - log(xRange[0])) / (log(xRange[1]) - log(xRange[0])));\n //\n // Multiply both sides by the right-side denominator.\n // pct * (log(xRange[1] - log(xRange[0]))) = log(x) - log(xRange[0])\n //\n // add log(xRange[0]) to both sides\n // log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0])) = log(x);\n //\n // Swap both sides of the equation,\n // log(x) = log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0]))\n //\n // Use both sides as the exponent in 10^exp and we're done.\n // x = 10 ^ (log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0])))\n\n var logr0 = log10(r0);\n var logr1 = log10(r1);\n var exponent = logr0 + pct * (logr1 - logr0);\n var value = Math.pow(LOG_SCALE, exponent);\n return value;\n};\n\nexports.logRangeFraction = logRangeFraction;\n/** A dotted line stroke pattern. */\nvar DOTTED_LINE = [2, 2];\nexports.DOTTED_LINE = DOTTED_LINE;\n/** A dashed line stroke pattern. */\nvar DASHED_LINE = [7, 3];\nexports.DASHED_LINE = DASHED_LINE;\n/** A dot dash stroke pattern. */\nvar DOT_DASH_LINE = [7, 2, 2, 2];\n\nexports.DOT_DASH_LINE = DOT_DASH_LINE;\n// Directions for panning and zooming. Use bit operations when combined\n// values are possible.\nvar HORIZONTAL = 1;\nexports.HORIZONTAL = HORIZONTAL;\nvar VERTICAL = 2;\n\nexports.VERTICAL = VERTICAL;\n/**\n * Return the 2d context for a dygraph canvas.\n *\n * This method is only exposed for the sake of replacing the function in\n * automated tests.\n *\n * @param {!HTMLCanvasElement} canvas\n * @return {!CanvasRenderingContext2D}\n * @private\n */\nvar getContext = function getContext(canvas) {\n return (/** @type{!CanvasRenderingContext2D}*/canvas.getContext(\"2d\")\n );\n};\n\nexports.getContext = getContext;\n/**\n * Add an event handler.\n * @param {!Node} elem The element to add the event to.\n * @param {string} type The type of the event, e.g. 'click' or 'mousemove'.\n * @param {function(Event):(boolean|undefined)} fn The function to call\n * on the event. The function takes one parameter: the event object.\n * @private\n */\nvar addEvent = function addEvent(elem, type, fn) {\n elem.addEventListener(type, fn, false);\n};\n\nexports.addEvent = addEvent;\n/**\n * Remove an event handler.\n * @param {!Node} elem The element to remove the event from.\n * @param {string} type The type of the event, e.g. 'click' or 'mousemove'.\n * @param {function(Event):(boolean|undefined)} fn The function to call\n * on the event. The function takes one parameter: the event object.\n */\n\nfunction removeEvent(elem, type, fn) {\n elem.removeEventListener(type, fn, false);\n}\n\n;\n\n/**\n * Cancels further processing of an event. This is useful to prevent default\n * browser actions, e.g. highlighting text on a double-click.\n * Based on the article at\n * http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel\n * @param {!Event} e The event whose normal behavior should be canceled.\n * @private\n */\n\nfunction cancelEvent(e) {\n e = e ? e : window.event;\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n if (e.preventDefault) {\n e.preventDefault();\n }\n e.cancelBubble = true;\n e.cancel = true;\n e.returnValue = false;\n return false;\n}\n\n;\n\n/**\n * Convert hsv values to an rgb(r,g,b) string. Taken from MochiKit.Color. This\n * is used to generate default series colors which are evenly spaced on the\n * color wheel.\n * @param { number } hue Range is 0.0-1.0.\n * @param { number } saturation Range is 0.0-1.0.\n * @param { number } value Range is 0.0-1.0.\n * @return { string } \"rgb(r,g,b)\" where r, g and b range from 0-255.\n * @private\n */\n\nfunction hsvToRGB(hue, saturation, value) {\n var red;\n var green;\n var blue;\n if (saturation === 0) {\n red = value;\n green = value;\n blue = value;\n } else {\n var i = Math.floor(hue * 6);\n var f = hue * 6 - i;\n var p = value * (1 - saturation);\n var q = value * (1 - saturation * f);\n var t = value * (1 - saturation * (1 - f));\n switch (i) {\n case 1:\n red = q;green = value;blue = p;break;\n case 2:\n red = p;green = value;blue = t;break;\n case 3:\n red = p;green = q;blue = value;break;\n case 4:\n red = t;green = p;blue = value;break;\n case 5:\n red = value;green = p;blue = q;break;\n case 6: // fall through\n case 0:\n red = value;green = t;blue = p;break;\n }\n }\n red = Math.floor(255 * red + 0.5);\n green = Math.floor(255 * green + 0.5);\n blue = Math.floor(255 * blue + 0.5);\n return 'rgb(' + red + ',' + green + ',' + blue + ')';\n}\n\n;\n\n/**\n * Find the coordinates of an object relative to the top left of the page.\n *\n * @param {Node} obj\n * @return {{x:number,y:number}}\n * @private\n */\n\nfunction findPos(obj) {\n var p = obj.getBoundingClientRect(),\n w = window,\n d = document.documentElement;\n\n return {\n x: p.left + (w.pageXOffset || d.scrollLeft),\n y: p.top + (w.pageYOffset || d.scrollTop)\n };\n}\n\n;\n\n/**\n * Returns the x-coordinate of the event in a coordinate system where the\n * top-left corner of the page (not the window) is (0,0).\n * Taken from MochiKit.Signal\n * @param {!Event} e\n * @return {number}\n * @private\n */\n\nfunction pageX(e) {\n return !e.pageX || e.pageX < 0 ? 0 : e.pageX;\n}\n\n;\n\n/**\n * Returns the y-coordinate of the event in a coordinate system where the\n * top-left corner of the page (not the window) is (0,0).\n * Taken from MochiKit.Signal\n * @param {!Event} e\n * @return {number}\n * @private\n */\n\nfunction pageY(e) {\n return !e.pageY || e.pageY < 0 ? 0 : e.pageY;\n}\n\n;\n\n/**\n * Converts page the x-coordinate of the event to pixel x-coordinates on the\n * canvas (i.e. DOM Coords).\n * @param {!Event} e Drag event.\n * @param {!DygraphInteractionContext} context Interaction context object.\n * @return {number} The amount by which the drag has moved to the right.\n */\n\nfunction dragGetX_(e, context) {\n return pageX(e) - context.px;\n}\n\n;\n\n/**\n * Converts page the y-coordinate of the event to pixel y-coordinates on the\n * canvas (i.e. DOM Coords).\n * @param {!Event} e Drag event.\n * @param {!DygraphInteractionContext} context Interaction context object.\n * @return {number} The amount by which the drag has moved down.\n */\n\nfunction dragGetY_(e, context) {\n return pageY(e) - context.py;\n}\n\n;\n\n/**\n * This returns true unless the parameter is 0, null, undefined or NaN.\n * TODO(danvk): rename this function to something like 'isNonZeroNan'.\n *\n * @param {number} x The number to consider.\n * @return {boolean} Whether the number is zero or NaN.\n * @private\n */\n\nfunction isOK(x) {\n return !!x && !isNaN(x);\n}\n\n;\n\n/**\n * @param {{x:?number,y:?number,yval:?number}} p The point to consider, valid\n * points are {x, y} objects\n * @param {boolean=} opt_allowNaNY Treat point with y=NaN as valid\n * @return {boolean} Whether the point has numeric x and y.\n * @private\n */\n\nfunction isValidPoint(p, opt_allowNaNY) {\n if (!p) return false; // null or undefined object\n if (p.yval === null) return false; // missing point\n if (p.x === null || p.x === undefined) return false;\n if (p.y === null || p.y === undefined) return false;\n if (isNaN(p.x) || !opt_allowNaNY && isNaN(p.y)) return false;\n return true;\n}\n\n;\n\n/**\n * Number formatting function which mimics the behavior of %g in printf, i.e.\n * either exponential or fixed format (without trailing 0s) is used depending on\n * the length of the generated string. The advantage of this format is that\n * there is a predictable upper bound on the resulting string length,\n * significant figures are not dropped, and normal numbers are not displayed in\n * exponential notation.\n *\n * NOTE: JavaScript's native toPrecision() is NOT a drop-in replacement for %g.\n * It creates strings which are too long for absolute values between 10^-4 and\n * 10^-6, e.g. '0.00001' instead of '1e-5'. See tests/number-format.html for\n * output examples.\n *\n * @param {number} x The number to format\n * @param {number=} opt_precision The precision to use, default 2.\n * @return {string} A string formatted like %g in printf. The max generated\n * string length should be precision + 6 (e.g 1.123e+300).\n */\n\nfunction floatFormat(x, opt_precision) {\n // Avoid invalid precision values; [1, 21] is the valid range.\n var p = Math.min(Math.max(1, opt_precision || 2), 21);\n\n // This is deceptively simple. The actual algorithm comes from:\n //\n // Max allowed length = p + 4\n // where 4 comes from 'e+n' and '.'.\n //\n // Length of fixed format = 2 + y + p\n // where 2 comes from '0.' and y = # of leading zeroes.\n //\n // Equating the two and solving for y yields y = 2, or 0.00xxxx which is\n // 1.0e-3.\n //\n // Since the behavior of toPrecision() is identical for larger numbers, we\n // don't have to worry about the other bound.\n //\n // Finally, the argument for toExponential() is the number of trailing digits,\n // so we take off 1 for the value before the '.'.\n return Math.abs(x) < 1.0e-3 && x !== 0.0 ? x.toExponential(p - 1) : x.toPrecision(p);\n}\n\n;\n\n/**\n * Converts '9' to '09' (useful for dates)\n * @param {number} x\n * @return {string}\n * @private\n */\n\nfunction zeropad(x) {\n if (x < 10) return \"0\" + x;else return \"\" + x;\n}\n\n;\n\n/**\n * Date accessors to get the parts of a calendar date (year, month,\n * day, hour, minute, second and millisecond) according to local time,\n * and factory method to call the Date constructor with an array of arguments.\n */\nvar DateAccessorsLocal = {\n getFullYear: function getFullYear(d) {\n return d.getFullYear();\n },\n getMonth: function getMonth(d) {\n return d.getMonth();\n },\n getDate: function getDate(d) {\n return d.getDate();\n },\n getHours: function getHours(d) {\n return d.getHours();\n },\n getMinutes: function getMinutes(d) {\n return d.getMinutes();\n },\n getSeconds: function getSeconds(d) {\n return d.getSeconds();\n },\n getMilliseconds: function getMilliseconds(d) {\n return d.getMilliseconds();\n },\n getDay: function getDay(d) {\n return d.getDay();\n },\n makeDate: function makeDate(y, m, d, hh, mm, ss, ms) {\n return new Date(y, m, d, hh, mm, ss, ms);\n }\n};\n\nexports.DateAccessorsLocal = DateAccessorsLocal;\n/**\n * Date accessors to get the parts of a calendar date (year, month,\n * day of month, hour, minute, second and millisecond) according to UTC time,\n * and factory method to call the Date constructor with an array of arguments.\n */\nvar DateAccessorsUTC = {\n getFullYear: function getFullYear(d) {\n return d.getUTCFullYear();\n },\n getMonth: function getMonth(d) {\n return d.getUTCMonth();\n },\n getDate: function getDate(d) {\n return d.getUTCDate();\n },\n getHours: function getHours(d) {\n return d.getUTCHours();\n },\n getMinutes: function getMinutes(d) {\n return d.getUTCMinutes();\n },\n getSeconds: function getSeconds(d) {\n return d.getUTCSeconds();\n },\n getMilliseconds: function getMilliseconds(d) {\n return d.getUTCMilliseconds();\n },\n getDay: function getDay(d) {\n return d.getUTCDay();\n },\n makeDate: function makeDate(y, m, d, hh, mm, ss, ms) {\n return new Date(Date.UTC(y, m, d, hh, mm, ss, ms));\n }\n};\n\nexports.DateAccessorsUTC = DateAccessorsUTC;\n/**\n * Return a string version of the hours, minutes and seconds portion of a date.\n * @param {number} hh The hours (from 0-23)\n * @param {number} mm The minutes (from 0-59)\n * @param {number} ss The seconds (from 0-59)\n * @return {string} A time of the form \"HH:MM\" or \"HH:MM:SS\"\n * @private\n */\n\nfunction hmsString_(hh, mm, ss, ms) {\n var ret = zeropad(hh) + \":\" + zeropad(mm);\n if (ss) {\n ret += \":\" + zeropad(ss);\n if (ms) {\n var str = \"\" + ms;\n ret += \".\" + ('000' + str).substring(str.length);\n }\n }\n return ret;\n}\n\n;\n\n/**\n * Convert a JS date (millis since epoch) to a formatted string.\n * @param {number} time The JavaScript time value (ms since epoch)\n * @param {boolean} utc Whether output UTC or local time\n * @return {string} A date of one of these forms:\n * \"YYYY/MM/DD\", \"YYYY/MM/DD HH:MM\" or \"YYYY/MM/DD HH:MM:SS\"\n * @private\n */\n\nfunction dateString_(time, utc) {\n var accessors = utc ? DateAccessorsUTC : DateAccessorsLocal;\n var date = new Date(time);\n var y = accessors.getFullYear(date);\n var m = accessors.getMonth(date);\n var d = accessors.getDate(date);\n var hh = accessors.getHours(date);\n var mm = accessors.getMinutes(date);\n var ss = accessors.getSeconds(date);\n var ms = accessors.getMilliseconds(date);\n // Get a year string:\n var year = \"\" + y;\n // Get a 0 padded month string\n var month = zeropad(m + 1); //months are 0-offset, sigh\n // Get a 0 padded day string\n var day = zeropad(d);\n var frac = hh * 3600 + mm * 60 + ss + 1e-3 * ms;\n var ret = year + \"/\" + month + \"/\" + day;\n if (frac) {\n ret += \" \" + hmsString_(hh, mm, ss, ms);\n }\n return ret;\n}\n\n;\n\n/**\n * Round a number to the specified number of digits past the decimal point.\n * @param {number} num The number to round\n * @param {number} places The number of decimals to which to round\n * @return {number} The rounded number\n * @private\n */\n\nfunction round_(num, places) {\n var shift = Math.pow(10, places);\n return Math.round(num * shift) / shift;\n}\n\n;\n\n/**\n * Implementation of binary search over an array.\n * Currently does not work when val is outside the range of arry's values.\n * @param {number} val the value to search for\n * @param {Array.} arry is the value over which to search\n * @param {number} abs If abs > 0, find the lowest entry greater than val\n * If abs < 0, find the highest entry less than val.\n * If abs == 0, find the entry that equals val.\n * @param {number=} low The first index in arry to consider (optional)\n * @param {number=} high The last index in arry to consider (optional)\n * @return {number} Index of the element, or -1 if it isn't found.\n * @private\n */\n\nfunction binarySearch(_x, _x2, _x3, _x4, _x5) {\n var _again = true;\n\n _function: while (_again) {\n var val = _x,\n arry = _x2,\n abs = _x3,\n low = _x4,\n high = _x5;\n _again = false;\n\n if (low === null || low === undefined || high === null || high === undefined) {\n low = 0;\n high = arry.length - 1;\n }\n if (low > high) {\n return -1;\n }\n if (abs === null || abs === undefined) {\n abs = 0;\n }\n var validIndex = function validIndex(idx) {\n return idx >= 0 && idx < arry.length;\n };\n var mid = parseInt((low + high) / 2, 10);\n var element = arry[mid];\n var idx;\n if (element == val) {\n return mid;\n } else if (element > val) {\n if (abs > 0) {\n // Accept if element > val, but also if prior element < val.\n idx = mid - 1;\n if (validIndex(idx) && arry[idx] < val) {\n return mid;\n }\n }\n _x = val;\n _x2 = arry;\n _x3 = abs;\n _x4 = low;\n _x5 = mid - 1;\n _again = true;\n validIndex = mid = element = idx = undefined;\n continue _function;\n } else if (element < val) {\n if (abs < 0) {\n // Accept if element < val, but also if prior element > val.\n idx = mid + 1;\n if (validIndex(idx) && arry[idx] > val) {\n return mid;\n }\n }\n _x = val;\n _x2 = arry;\n _x3 = abs;\n _x4 = mid + 1;\n _x5 = high;\n _again = true;\n validIndex = mid = element = idx = undefined;\n continue _function;\n }\n return -1; // can't actually happen, but makes closure compiler happy\n }\n}\n\n;\n\n/**\n * Parses a date, returning the number of milliseconds since epoch. This can be\n * passed in as an xValueParser in the Dygraph constructor.\n * TODO(danvk): enumerate formats that this understands.\n *\n * @param {string} dateStr A date in a variety of possible string formats.\n * @return {number} Milliseconds since epoch.\n * @private\n */\n\nfunction dateParser(dateStr) {\n var dateStrSlashed;\n var d;\n\n // Let the system try the format first, with one caveat:\n // YYYY-MM-DD[ HH:MM:SS] is interpreted as UTC by a variety of browsers.\n // dygraphs displays dates in local time, so this will result in surprising\n // inconsistencies. But if you specify \"T\" or \"Z\" (i.e. YYYY-MM-DDTHH:MM:SS),\n // then you probably know what you're doing, so we'll let you go ahead.\n // Issue: http://code.google.com/p/dygraphs/issues/detail?id=255\n if (dateStr.search(\"-\") == -1 || dateStr.search(\"T\") != -1 || dateStr.search(\"Z\") != -1) {\n d = dateStrToMillis(dateStr);\n if (d && !isNaN(d)) return d;\n }\n\n if (dateStr.search(\"-\") != -1) {\n // e.g. '2009-7-12' or '2009-07-12'\n dateStrSlashed = dateStr.replace(\"-\", \"/\", \"g\");\n while (dateStrSlashed.search(\"-\") != -1) {\n dateStrSlashed = dateStrSlashed.replace(\"-\", \"/\");\n }\n d = dateStrToMillis(dateStrSlashed);\n } else if (dateStr.length == 8) {\n // e.g. '20090712'\n // TODO(danvk): remove support for this format. It's confusing.\n dateStrSlashed = dateStr.substr(0, 4) + \"/\" + dateStr.substr(4, 2) + \"/\" + dateStr.substr(6, 2);\n d = dateStrToMillis(dateStrSlashed);\n } else {\n // Any format that Date.parse will accept, e.g. \"2009/07/12\" or\n // \"2009/07/12 12:34:56\"\n d = dateStrToMillis(dateStr);\n }\n\n if (!d || isNaN(d)) {\n console.error(\"Couldn't parse \" + dateStr + \" as a date\");\n }\n return d;\n}\n\n;\n\n/**\n * This is identical to JavaScript's built-in Date.parse() method, except that\n * it doesn't get replaced with an incompatible method by aggressive JS\n * libraries like MooTools or Joomla.\n * @param {string} str The date string, e.g. \"2011/05/06\"\n * @return {number} millis since epoch\n * @private\n */\n\nfunction dateStrToMillis(str) {\n return new Date(str).getTime();\n}\n\n;\n\n// These functions are all based on MochiKit.\n/**\n * Copies all the properties from o to self.\n *\n * @param {!Object} self\n * @param {!Object} o\n * @return {!Object}\n */\n\nfunction update(self, o) {\n if (typeof o != 'undefined' && o !== null) {\n for (var k in o) {\n if (o.hasOwnProperty(k)) {\n self[k] = o[k];\n }\n }\n }\n return self;\n}\n\n;\n\n/**\n * Copies all the properties from o to self.\n *\n * @param {!Object} self\n * @param {!Object} o\n * @return {!Object}\n * @private\n */\n\nfunction updateDeep(self, o) {\n // Taken from http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n function isNode(o) {\n return typeof Node === \"object\" ? o instanceof Node : typeof o === \"object\" && typeof o.nodeType === \"number\" && typeof o.nodeName === \"string\";\n }\n\n if (typeof o != 'undefined' && o !== null) {\n for (var k in o) {\n if (o.hasOwnProperty(k)) {\n if (o[k] === null) {\n self[k] = null;\n } else if (isArrayLike(o[k])) {\n self[k] = o[k].slice();\n } else if (isNode(o[k])) {\n // DOM objects are shallowly-copied.\n self[k] = o[k];\n } else if (typeof o[k] == 'object') {\n if (typeof self[k] != 'object' || self[k] === null) {\n self[k] = {};\n }\n updateDeep(self[k], o[k]);\n } else {\n self[k] = o[k];\n }\n }\n }\n }\n return self;\n}\n\n;\n\n/**\n * @param {*} o\n * @return {boolean}\n * @private\n */\n\nfunction isArrayLike(o) {\n var typ = typeof o;\n if (typ != 'object' && !(typ == 'function' && typeof o.item == 'function') || o === null || typeof o.length != 'number' || o.nodeType === 3) {\n return false;\n }\n return true;\n}\n\n;\n\n/**\n * @param {Object} o\n * @return {boolean}\n * @private\n */\n\nfunction isDateLike(o) {\n if (typeof o != \"object\" || o === null || typeof o.getTime != 'function') {\n return false;\n }\n return true;\n}\n\n;\n\n/**\n * Note: this only seems to work for arrays.\n * @param {!Array} o\n * @return {!Array}\n * @private\n */\n\nfunction clone(o) {\n // TODO(danvk): figure out how MochiKit's version works\n var r = [];\n for (var i = 0; i < o.length; i++) {\n if (isArrayLike(o[i])) {\n r.push(clone(o[i]));\n } else {\n r.push(o[i]);\n }\n }\n return r;\n}\n\n;\n\n/**\n * Create a new canvas element.\n *\n * @return {!HTMLCanvasElement}\n * @private\n */\n\nfunction createCanvas() {\n return document.createElement('canvas');\n}\n\n;\n\n/**\n * Returns the context's pixel ratio, which is the ratio between the device\n * pixel ratio and the backing store ratio. Typically this is 1 for conventional\n * displays, and > 1 for HiDPI displays (such as the Retina MBP).\n * See http://www.html5rocks.com/en/tutorials/canvas/hidpi/ for more details.\n *\n * @param {!CanvasRenderingContext2D} context The canvas's 2d context.\n * @return {number} The ratio of the device pixel ratio and the backing store\n * ratio for the specified context.\n */\n\nfunction getContextPixelRatio(context) {\n try {\n var devicePixelRatio = window.devicePixelRatio;\n var backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;\n if (devicePixelRatio !== undefined) {\n return devicePixelRatio / backingStoreRatio;\n } else {\n // At least devicePixelRatio must be defined for this ratio to make sense.\n // We default backingStoreRatio to 1: this does not exist on some browsers\n // (i.e. desktop Chrome).\n return 1;\n }\n } catch (e) {\n return 1;\n }\n}\n\n;\n\n/**\n * TODO(danvk): use @template here when it's better supported for classes.\n * @param {!Array} array\n * @param {number} start\n * @param {number} length\n * @param {function(!Array,?):boolean=} predicate\n * @constructor\n */\n\nfunction Iterator(array, start, length, predicate) {\n start = start || 0;\n length = length || array.length;\n this.hasNext = true; // Use to identify if there's another element.\n this.peek = null; // Use for look-ahead\n this.start_ = start;\n this.array_ = array;\n this.predicate_ = predicate;\n this.end_ = Math.min(array.length, start + length);\n this.nextIdx_ = start - 1; // use -1 so initial advance works.\n this.next(); // ignoring result.\n}\n\n;\n\n/**\n * @return {Object}\n */\nIterator.prototype.next = function () {\n if (!this.hasNext) {\n return null;\n }\n var obj = this.peek;\n\n var nextIdx = this.nextIdx_ + 1;\n var found = false;\n while (nextIdx < this.end_) {\n if (!this.predicate_ || this.predicate_(this.array_, nextIdx)) {\n this.peek = this.array_[nextIdx];\n found = true;\n break;\n }\n nextIdx++;\n }\n this.nextIdx_ = nextIdx;\n if (!found) {\n this.hasNext = false;\n this.peek = null;\n }\n return obj;\n};\n\n/**\n * Returns a new iterator over array, between indexes start and\n * start + length, and only returns entries that pass the accept function\n *\n * @param {!Array} array the array to iterate over.\n * @param {number} start the first index to iterate over, 0 if absent.\n * @param {number} length the number of elements in the array to iterate over.\n * This, along with start, defines a slice of the array, and so length\n * doesn't imply the number of elements in the iterator when accept doesn't\n * always accept all values. array.length when absent.\n * @param {function(?):boolean=} opt_predicate a function that takes\n * parameters array and idx, which returns true when the element should be\n * returned. If omitted, all elements are accepted.\n * @private\n */\n\nfunction createIterator(array, start, length, opt_predicate) {\n return new Iterator(array, start, length, opt_predicate);\n}\n\n;\n\n// Shim layer with setTimeout fallback.\n// From: http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// Should be called with the window context:\n// Dygraph.requestAnimFrame.call(window, function() {})\nvar requestAnimFrame = (function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n})();\n\nexports.requestAnimFrame = requestAnimFrame;\n/**\n * Call a function at most maxFrames times at an attempted interval of\n * framePeriodInMillis, then call a cleanup function once. repeatFn is called\n * once immediately, then at most (maxFrames - 1) times asynchronously. If\n * maxFrames==1, then cleanup_fn() is also called synchronously. This function\n * is used to sequence animation.\n * @param {function(number)} repeatFn Called repeatedly -- takes the frame\n * number (from 0 to maxFrames-1) as an argument.\n * @param {number} maxFrames The max number of times to call repeatFn\n * @param {number} framePeriodInMillis Max requested time between frames.\n * @param {function()} cleanupFn A function to call after all repeatFn calls.\n * @private\n */\n\nfunction repeatAndCleanup(repeatFn, maxFrames, framePeriodInMillis, cleanupFn) {\n var frameNumber = 0;\n var previousFrameNumber;\n var startTime = new Date().getTime();\n repeatFn(frameNumber);\n if (maxFrames == 1) {\n cleanupFn();\n return;\n }\n var maxFrameArg = maxFrames - 1;\n\n (function loop() {\n if (frameNumber >= maxFrames) return;\n requestAnimFrame.call(window, function () {\n // Determine which frame to draw based on the delay so far. Will skip\n // frames if necessary.\n var currentTime = new Date().getTime();\n var delayInMillis = currentTime - startTime;\n previousFrameNumber = frameNumber;\n frameNumber = Math.floor(delayInMillis / framePeriodInMillis);\n var frameDelta = frameNumber - previousFrameNumber;\n // If we predict that the subsequent repeatFn call will overshoot our\n // total frame target, so our last call will cause a stutter, then jump to\n // the last call immediately. If we're going to cause a stutter, better\n // to do it faster than slower.\n var predictOvershootStutter = frameNumber + frameDelta > maxFrameArg;\n if (predictOvershootStutter || frameNumber >= maxFrameArg) {\n repeatFn(maxFrameArg); // Ensure final call with maxFrameArg.\n cleanupFn();\n } else {\n if (frameDelta !== 0) {\n // Don't call repeatFn with duplicate frames.\n repeatFn(frameNumber);\n }\n loop();\n }\n });\n })();\n}\n\n;\n\n// A whitelist of options that do not change pixel positions.\nvar pixelSafeOptions = {\n 'annotationClickHandler': true,\n 'annotationDblClickHandler': true,\n 'annotationMouseOutHandler': true,\n 'annotationMouseOverHandler': true,\n 'axisLineColor': true,\n 'axisLineWidth': true,\n 'clickCallback': true,\n 'drawCallback': true,\n 'drawHighlightPointCallback': true,\n 'drawPoints': true,\n 'drawPointCallback': true,\n 'drawGrid': true,\n 'fillAlpha': true,\n 'gridLineColor': true,\n 'gridLineWidth': true,\n 'hideOverlayOnMouseOut': true,\n 'highlightCallback': true,\n 'highlightCircleSize': true,\n 'interactionModel': true,\n 'labelsDiv': true,\n 'labelsKMB': true,\n 'labelsKMG2': true,\n 'labelsSeparateLines': true,\n 'labelsShowZeroValues': true,\n 'legend': true,\n 'panEdgeFraction': true,\n 'pixelsPerYLabel': true,\n 'pointClickCallback': true,\n 'pointSize': true,\n 'rangeSelectorPlotFillColor': true,\n 'rangeSelectorPlotFillGradientColor': true,\n 'rangeSelectorPlotStrokeColor': true,\n 'rangeSelectorBackgroundStrokeColor': true,\n 'rangeSelectorBackgroundLineWidth': true,\n 'rangeSelectorPlotLineWidth': true,\n 'rangeSelectorForegroundStrokeColor': true,\n 'rangeSelectorForegroundLineWidth': true,\n 'rangeSelectorAlpha': true,\n 'showLabelsOnHighlight': true,\n 'showRoller': true,\n 'strokeWidth': true,\n 'underlayCallback': true,\n 'unhighlightCallback': true,\n 'zoomCallback': true\n};\n\n/**\n * This function will scan the option list and determine if they\n * require us to recalculate the pixel positions of each point.\n * TODO: move this into dygraph-options.js\n * @param {!Array.} labels a list of options to check.\n * @param {!Object} attrs\n * @return {boolean} true if the graph needs new points else false.\n * @private\n */\n\nfunction isPixelChangingOptionList(labels, attrs) {\n // Assume that we do not require new points.\n // This will change to true if we actually do need new points.\n\n // Create a dictionary of series names for faster lookup.\n // If there are no labels, then the dictionary stays empty.\n var seriesNamesDictionary = {};\n if (labels) {\n for (var i = 1; i < labels.length; i++) {\n seriesNamesDictionary[labels[i]] = true;\n }\n }\n\n // Scan through a flat (i.e. non-nested) object of options.\n // Returns true/false depending on whether new points are needed.\n var scanFlatOptions = function scanFlatOptions(options) {\n for (var property in options) {\n if (options.hasOwnProperty(property) && !pixelSafeOptions[property]) {\n return true;\n }\n }\n return false;\n };\n\n // Iterate through the list of updated options.\n for (var property in attrs) {\n if (!attrs.hasOwnProperty(property)) continue;\n\n // Find out of this field is actually a series specific options list.\n if (property == 'highlightSeriesOpts' || seriesNamesDictionary[property] && !attrs.series) {\n // This property value is a list of options for this series.\n if (scanFlatOptions(attrs[property])) return true;\n } else if (property == 'series' || property == 'axes') {\n // This is twice-nested options list.\n var perSeries = attrs[property];\n for (var series in perSeries) {\n if (perSeries.hasOwnProperty(series) && scanFlatOptions(perSeries[series])) {\n return true;\n }\n }\n } else {\n // If this was not a series specific option list, check if it's a pixel\n // changing property.\n if (!pixelSafeOptions[property]) return true;\n }\n }\n\n return false;\n}\n\n;\n\nvar Circles = {\n DEFAULT: function DEFAULT(g, name, ctx, canvasx, canvasy, color, radius) {\n ctx.beginPath();\n ctx.fillStyle = color;\n ctx.arc(canvasx, canvasy, radius, 0, 2 * Math.PI, false);\n ctx.fill();\n }\n // For more shapes, include extras/shapes.js\n};\n\nexports.Circles = Circles;\n/**\n * Determine whether |data| is delimited by CR, CRLF, LF, LFCR.\n * @param {string} data\n * @return {?string} the delimiter that was detected (or null on failure).\n */\n\nfunction detectLineDelimiter(data) {\n for (var i = 0; i < data.length; i++) {\n var code = data.charAt(i);\n if (code === '\\r') {\n // Might actually be \"\\r\\n\".\n if (i + 1 < data.length && data.charAt(i + 1) === '\\n') {\n return '\\r\\n';\n }\n return code;\n }\n if (code === '\\n') {\n // Might actually be \"\\n\\r\".\n if (i + 1 < data.length && data.charAt(i + 1) === '\\r') {\n return '\\n\\r';\n }\n return code;\n }\n }\n\n return null;\n}\n\n;\n\n/**\n * Is one node contained by another?\n * @param {Node} containee The contained node.\n * @param {Node} container The container node.\n * @return {boolean} Whether containee is inside (or equal to) container.\n * @private\n */\n\nfunction isNodeContainedBy(containee, container) {\n if (container === null || containee === null) {\n return false;\n }\n var containeeNode = /** @type {Node} */containee;\n while (containeeNode && containeeNode !== container) {\n containeeNode = containeeNode.parentNode;\n }\n return containeeNode === container;\n}\n\n;\n\n// This masks some numeric issues in older versions of Firefox,\n// where 1.0/Math.pow(10,2) != Math.pow(10,-2).\n/** @type {function(number,number):number} */\n\nfunction pow(base, exp) {\n if (exp < 0) {\n return 1.0 / Math.pow(base, -exp);\n }\n return Math.pow(base, exp);\n}\n\n;\n\nvar RGBA_RE = /^rgba?\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})(?:,\\s*([01](?:\\.\\d+)?))?\\)$/;\n\n/**\n * Helper for toRGB_ which parses strings of the form:\n * rgb(123, 45, 67)\n * rgba(123, 45, 67, 0.5)\n * @return parsed {r,g,b,a?} tuple or null.\n */\nfunction parseRGBA(rgbStr) {\n var bits = RGBA_RE.exec(rgbStr);\n if (!bits) return null;\n var r = parseInt(bits[1], 10),\n g = parseInt(bits[2], 10),\n b = parseInt(bits[3], 10);\n if (bits[4]) {\n return { r: r, g: g, b: b, a: parseFloat(bits[4]) };\n } else {\n return { r: r, g: g, b: b };\n }\n}\n\n/**\n * Converts any valid CSS color (hex, rgb(), named color) to an RGB tuple.\n *\n * @param {!string} colorStr Any valid CSS color string.\n * @return {{r:number,g:number,b:number,a:number?}} Parsed RGB tuple.\n * @private\n */\n\nfunction toRGB_(colorStr) {\n // Strategy: First try to parse colorStr directly. This is fast & avoids DOM\n // manipulation. If that fails (e.g. for named colors like 'red'), then\n // create a hidden DOM element and parse its computed color.\n var rgb = parseRGBA(colorStr);\n if (rgb) return rgb;\n\n var div = document.createElement('div');\n div.style.backgroundColor = colorStr;\n div.style.visibility = 'hidden';\n document.body.appendChild(div);\n var rgbStr = window.getComputedStyle(div, null).backgroundColor;\n document.body.removeChild(div);\n return parseRGBA(rgbStr);\n}\n\n;\n\n/**\n * Checks whether the browser supports the <canvas> tag.\n * @param {HTMLCanvasElement=} opt_canvasElement Pass a canvas element as an\n * optimization if you have one.\n * @return {boolean} Whether the browser supports canvas.\n */\n\nfunction isCanvasSupported(opt_canvasElement) {\n try {\n var canvas = opt_canvasElement || document.createElement(\"canvas\");\n canvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n}\n\n;\n\n/**\n * Parses the value as a floating point number. This is like the parseFloat()\n * built-in, but with a few differences:\n * - the empty string is parsed as null, rather than NaN.\n * - if the string cannot be parsed at all, an error is logged.\n * If the string can't be parsed, this method returns null.\n * @param {string} x The string to be parsed\n * @param {number=} opt_line_no The line number from which the string comes.\n * @param {string=} opt_line The text of the line from which the string comes.\n */\n\nfunction parseFloat_(x, opt_line_no, opt_line) {\n var val = parseFloat(x);\n if (!isNaN(val)) return val;\n\n // Try to figure out what happeend.\n // If the value is the empty string, parse it as null.\n if (/^ *$/.test(x)) return null;\n\n // If it was actually \"NaN\", return it as NaN.\n if (/^ *nan *$/i.test(x)) return NaN;\n\n // Looks like a parsing error.\n var msg = \"Unable to parse '\" + x + \"' as a number\";\n if (opt_line !== undefined && opt_line_no !== undefined) {\n msg += \" on line \" + (1 + (opt_line_no || 0)) + \" ('\" + opt_line + \"') of CSV.\";\n }\n console.error(msg);\n\n return null;\n}\n\n;\n\n// Label constants for the labelsKMB and labelsKMG2 options.\n// (i.e. '100000' -> '100K')\nvar KMB_LABELS = ['K', 'M', 'B', 'T', 'Q'];\nvar KMG2_BIG_LABELS = ['k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\nvar KMG2_SMALL_LABELS = ['m', 'u', 'n', 'p', 'f', 'a', 'z', 'y'];\n\n/**\n * @private\n * Return a string version of a number. This respects the digitsAfterDecimal\n * and maxNumberWidth options.\n * @param {number} x The number to be formatted\n * @param {Dygraph} opts An options view\n */\n\nfunction numberValueFormatter(x, opts) {\n var sigFigs = opts('sigFigs');\n\n if (sigFigs !== null) {\n // User has opted for a fixed number of significant figures.\n return floatFormat(x, sigFigs);\n }\n\n var digits = opts('digitsAfterDecimal');\n var maxNumberWidth = opts('maxNumberWidth');\n\n var kmb = opts('labelsKMB');\n var kmg2 = opts('labelsKMG2');\n\n var label;\n\n // switch to scientific notation if we underflow or overflow fixed display.\n if (x !== 0.0 && (Math.abs(x) >= Math.pow(10, maxNumberWidth) || Math.abs(x) < Math.pow(10, -digits))) {\n label = x.toExponential(digits);\n } else {\n label = '' + round_(x, digits);\n }\n\n if (kmb || kmg2) {\n var k;\n var k_labels = [];\n var m_labels = [];\n if (kmb) {\n k = 1000;\n k_labels = KMB_LABELS;\n }\n if (kmg2) {\n if (kmb) console.warn(\"Setting both labelsKMB and labelsKMG2. Pick one!\");\n k = 1024;\n k_labels = KMG2_BIG_LABELS;\n m_labels = KMG2_SMALL_LABELS;\n }\n\n var absx = Math.abs(x);\n var n = pow(k, k_labels.length);\n for (var j = k_labels.length - 1; j >= 0; j--, n /= k) {\n if (absx >= n) {\n label = round_(x / n, digits) + k_labels[j];\n break;\n }\n }\n if (kmg2) {\n // TODO(danvk): clean up this logic. Why so different than kmb?\n var x_parts = String(x.toExponential()).split('e-');\n if (x_parts.length === 2 && x_parts[1] >= 3 && x_parts[1] <= 24) {\n if (x_parts[1] % 3 > 0) {\n label = round_(x_parts[0] / pow(10, x_parts[1] % 3), digits);\n } else {\n label = Number(x_parts[0]).toFixed(2);\n }\n label += m_labels[Math.floor(x_parts[1] / 3) - 1];\n }\n }\n }\n\n return label;\n}\n\n;\n\n/**\n * variant for use as an axisLabelFormatter.\n * @private\n */\n\nfunction numberAxisLabelFormatter(x, granularity, opts) {\n return numberValueFormatter.call(this, x, opts);\n}\n\n;\n\n/**\n * @type {!Array.}\n * @private\n * @constant\n */\nvar SHORT_MONTH_NAMES_ = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * Convert a JS date to a string appropriate to display on an axis that\n * is displaying values at the stated granularity. This respects the\n * labelsUTC option.\n * @param {Date} date The date to format\n * @param {number} granularity One of the Dygraph granularity constants\n * @param {Dygraph} opts An options view\n * @return {string} The date formatted as local time\n * @private\n */\n\nfunction dateAxisLabelFormatter(date, granularity, opts) {\n var utc = opts('labelsUTC');\n var accessors = utc ? DateAccessorsUTC : DateAccessorsLocal;\n\n var year = accessors.getFullYear(date),\n month = accessors.getMonth(date),\n day = accessors.getDate(date),\n hours = accessors.getHours(date),\n mins = accessors.getMinutes(date),\n secs = accessors.getSeconds(date),\n millis = accessors.getMilliseconds(date);\n\n if (granularity >= DygraphTickers.Granularity.DECADAL) {\n return '' + year;\n } else if (granularity >= DygraphTickers.Granularity.MONTHLY) {\n return SHORT_MONTH_NAMES_[month] + ' ' + year;\n } else {\n var frac = hours * 3600 + mins * 60 + secs + 1e-3 * millis;\n if (frac === 0 || granularity >= DygraphTickers.Granularity.DAILY) {\n // e.g. '21 Jan' (%d%b)\n return zeropad(day) + ' ' + SHORT_MONTH_NAMES_[month];\n } else if (granularity < DygraphTickers.Granularity.SECONDLY) {\n // e.g. 40.310 (meaning 40 seconds and 310 milliseconds)\n var str = \"\" + millis;\n return zeropad(secs) + \".\" + ('000' + str).substring(str.length);\n } else if (granularity > DygraphTickers.Granularity.MINUTELY) {\n return hmsString_(hours, mins, secs, 0);\n } else {\n return hmsString_(hours, mins, secs, millis);\n }\n }\n}\n\n;\n// alias in case anyone is referencing the old method.\n// Dygraph.dateAxisFormatter = Dygraph.dateAxisLabelFormatter;\n\n/**\n * Return a string version of a JS date for a value label. This respects the\n * labelsUTC option.\n * @param {Date} date The date to be formatted\n * @param {Dygraph} opts An options view\n * @private\n */\n\nfunction dateValueFormatter(d, opts) {\n return dateString_(d, opts('labelsUTC'));\n}\n\n;","/**\n * @license\n * Copyright 2006 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/**\n * @fileoverview Creates an interactive, zoomable graph based on a CSV file or\n * string. Dygraph can handle multiple series with or without error bars. The\n * date/value ranges will be automatically set. Dygraph uses the\n * <canvas> tag, so it only works in FF1.5+.\n * @author danvdk@gmail.com (Dan Vanderkam)\n\n Usage:\n
    \n \n\n The CSV file is of the form\n\n Date,SeriesA,SeriesB,SeriesC\n YYYYMMDD,A1,B1,C1\n YYYYMMDD,A2,B2,C2\n\n If the 'errorBars' option is set in the constructor, the input should be of\n the form\n Date,SeriesA,SeriesB,...\n YYYYMMDD,A1,sigmaA1,B1,sigmaB1,...\n YYYYMMDD,A2,sigmaA2,B2,sigmaB2,...\n\n If the 'fractions' option is set, the input should be of the form:\n\n Date,SeriesA,SeriesB,...\n YYYYMMDD,A1/B1,A2/B2,...\n YYYYMMDD,A1/B1,A2/B2,...\n\n And error bars will be calculated automatically using a binomial distribution.\n\n For further documentation and examples, see http://dygraphs.com/\n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _dygraphLayout = require('./dygraph-layout');\n\nvar _dygraphLayout2 = _interopRequireDefault(_dygraphLayout);\n\nvar _dygraphCanvas = require('./dygraph-canvas');\n\nvar _dygraphCanvas2 = _interopRequireDefault(_dygraphCanvas);\n\nvar _dygraphOptions = require('./dygraph-options');\n\nvar _dygraphOptions2 = _interopRequireDefault(_dygraphOptions);\n\nvar _dygraphInteractionModel = require('./dygraph-interaction-model');\n\nvar _dygraphInteractionModel2 = _interopRequireDefault(_dygraphInteractionModel);\n\nvar _dygraphTickers = require('./dygraph-tickers');\n\nvar DygraphTickers = _interopRequireWildcard(_dygraphTickers);\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\nvar _dygraphDefaultAttrs = require('./dygraph-default-attrs');\n\nvar _dygraphDefaultAttrs2 = _interopRequireDefault(_dygraphDefaultAttrs);\n\nvar _dygraphOptionsReference = require('./dygraph-options-reference');\n\nvar _dygraphOptionsReference2 = _interopRequireDefault(_dygraphOptionsReference);\n\nvar _iframeTarp = require('./iframe-tarp');\n\nvar _iframeTarp2 = _interopRequireDefault(_iframeTarp);\n\nvar _datahandlerDefault = require('./datahandler/default');\n\nvar _datahandlerDefault2 = _interopRequireDefault(_datahandlerDefault);\n\nvar _datahandlerBarsError = require('./datahandler/bars-error');\n\nvar _datahandlerBarsError2 = _interopRequireDefault(_datahandlerBarsError);\n\nvar _datahandlerBarsCustom = require('./datahandler/bars-custom');\n\nvar _datahandlerBarsCustom2 = _interopRequireDefault(_datahandlerBarsCustom);\n\nvar _datahandlerDefaultFractions = require('./datahandler/default-fractions');\n\nvar _datahandlerDefaultFractions2 = _interopRequireDefault(_datahandlerDefaultFractions);\n\nvar _datahandlerBarsFractions = require('./datahandler/bars-fractions');\n\nvar _datahandlerBarsFractions2 = _interopRequireDefault(_datahandlerBarsFractions);\n\nvar _datahandlerBars = require('./datahandler/bars');\n\nvar _datahandlerBars2 = _interopRequireDefault(_datahandlerBars);\n\nvar _pluginsAnnotations = require('./plugins/annotations');\n\nvar _pluginsAnnotations2 = _interopRequireDefault(_pluginsAnnotations);\n\nvar _pluginsAxes = require('./plugins/axes');\n\nvar _pluginsAxes2 = _interopRequireDefault(_pluginsAxes);\n\nvar _pluginsChartLabels = require('./plugins/chart-labels');\n\nvar _pluginsChartLabels2 = _interopRequireDefault(_pluginsChartLabels);\n\nvar _pluginsGrid = require('./plugins/grid');\n\nvar _pluginsGrid2 = _interopRequireDefault(_pluginsGrid);\n\nvar _pluginsLegend = require('./plugins/legend');\n\nvar _pluginsLegend2 = _interopRequireDefault(_pluginsLegend);\n\nvar _pluginsRangeSelector = require('./plugins/range-selector');\n\nvar _pluginsRangeSelector2 = _interopRequireDefault(_pluginsRangeSelector);\n\nvar _dygraphGviz = require('./dygraph-gviz');\n\nvar _dygraphGviz2 = _interopRequireDefault(_dygraphGviz);\n\n\"use strict\";\n\n/**\n * Creates an interactive, zoomable chart.\n *\n * @constructor\n * @param {div | String} div A div or the id of a div into which to construct\n * the chart.\n * @param {String | Function} file A file containing CSV data or a function\n * that returns this data. The most basic expected format for each line is\n * \"YYYY/MM/DD,val1,val2,...\". For more information, see\n * http://dygraphs.com/data.html.\n * @param {Object} attrs Various other attributes, e.g. errorBars determines\n * whether the input data contains error ranges. For a complete list of\n * options, see http://dygraphs.com/options.html.\n */\nvar Dygraph = function Dygraph(div, data, opts) {\n this.__init__(div, data, opts);\n};\n\nDygraph.NAME = \"Dygraph\";\nDygraph.VERSION = \"2.0.0\";\n\n// Various default values\nDygraph.DEFAULT_ROLL_PERIOD = 1;\nDygraph.DEFAULT_WIDTH = 480;\nDygraph.DEFAULT_HEIGHT = 320;\n\n// For max 60 Hz. animation:\nDygraph.ANIMATION_STEPS = 12;\nDygraph.ANIMATION_DURATION = 200;\n\n/**\n * Standard plotters. These may be used by clients.\n * Available plotters are:\n * - Dygraph.Plotters.linePlotter: draws central lines (most common)\n * - Dygraph.Plotters.errorPlotter: draws error bars\n * - Dygraph.Plotters.fillPlotter: draws fills under lines (used with fillGraph)\n *\n * By default, the plotter is [fillPlotter, errorPlotter, linePlotter].\n * This causes all the lines to be drawn over all the fills/error bars.\n */\nDygraph.Plotters = _dygraphCanvas2['default']._Plotters;\n\n// Used for initializing annotation CSS rules only once.\nDygraph.addedAnnotationCSS = false;\n\n/**\n * Initializes the Dygraph. This creates a new DIV and constructs the PlotKit\n * and context <canvas> inside of it. See the constructor for details.\n * on the parameters.\n * @param {Element} div the Element to render the graph into.\n * @param {string | Function} file Source data\n * @param {Object} attrs Miscellaneous other options\n * @private\n */\nDygraph.prototype.__init__ = function (div, file, attrs) {\n this.is_initial_draw_ = true;\n this.readyFns_ = [];\n\n // Support two-argument constructor\n if (attrs === null || attrs === undefined) {\n attrs = {};\n }\n\n attrs = Dygraph.copyUserAttrs_(attrs);\n\n if (typeof div == 'string') {\n div = document.getElementById(div);\n }\n\n if (!div) {\n throw new Error('Constructing dygraph with a non-existent div!');\n }\n\n // Copy the important bits into the object\n // TODO(danvk): most of these should just stay in the attrs_ dictionary.\n this.maindiv_ = div;\n this.file_ = file;\n this.rollPeriod_ = attrs.rollPeriod || Dygraph.DEFAULT_ROLL_PERIOD;\n this.previousVerticalX_ = -1;\n this.fractions_ = attrs.fractions || false;\n this.dateWindow_ = attrs.dateWindow || null;\n\n this.annotations_ = [];\n\n // Clear the div. This ensure that, if multiple dygraphs are passed the same\n // div, then only one will be drawn.\n div.innerHTML = \"\";\n\n // For historical reasons, the 'width' and 'height' options trump all CSS\n // rules _except_ for an explicit 'width' or 'height' on the div.\n // As an added convenience, if the div has zero height (like
    does\n // without any styles), then we use a default height/width.\n if (div.style.width === '' && attrs.width) {\n div.style.width = attrs.width + \"px\";\n }\n if (div.style.height === '' && attrs.height) {\n div.style.height = attrs.height + \"px\";\n }\n if (div.style.height === '' && div.clientHeight === 0) {\n div.style.height = Dygraph.DEFAULT_HEIGHT + \"px\";\n if (div.style.width === '') {\n div.style.width = Dygraph.DEFAULT_WIDTH + \"px\";\n }\n }\n // These will be zero if the dygraph's div is hidden. In that case,\n // use the user-specified attributes if present. If not, use zero\n // and assume the user will call resize to fix things later.\n this.width_ = div.clientWidth || attrs.width || 0;\n this.height_ = div.clientHeight || attrs.height || 0;\n\n // TODO(danvk): set fillGraph to be part of attrs_ here, not user_attrs_.\n if (attrs.stackedGraph) {\n attrs.fillGraph = true;\n // TODO(nikhilk): Add any other stackedGraph checks here.\n }\n\n // DEPRECATION WARNING: All option processing should be moved from\n // attrs_ and user_attrs_ to options_, which holds all this information.\n //\n // Dygraphs has many options, some of which interact with one another.\n // To keep track of everything, we maintain two sets of options:\n //\n // this.user_attrs_ only options explicitly set by the user.\n // this.attrs_ defaults, options derived from user_attrs_, data.\n //\n // Options are then accessed this.attr_('attr'), which first looks at\n // user_attrs_ and then computed attrs_. This way Dygraphs can set intelligent\n // defaults without overriding behavior that the user specifically asks for.\n this.user_attrs_ = {};\n utils.update(this.user_attrs_, attrs);\n\n // This sequence ensures that Dygraph.DEFAULT_ATTRS is never modified.\n this.attrs_ = {};\n utils.updateDeep(this.attrs_, _dygraphDefaultAttrs2['default']);\n\n this.boundaryIds_ = [];\n this.setIndexByName_ = {};\n this.datasetIndex_ = [];\n\n this.registeredEvents_ = [];\n this.eventListeners_ = {};\n\n this.attributes_ = new _dygraphOptions2['default'](this);\n\n // Create the containing DIV and other interactive elements\n this.createInterface_();\n\n // Activate plugins.\n this.plugins_ = [];\n var plugins = Dygraph.PLUGINS.concat(this.getOption('plugins'));\n for (var i = 0; i < plugins.length; i++) {\n // the plugins option may contain either plugin classes or instances.\n // Plugin instances contain an activate method.\n var Plugin = plugins[i]; // either a constructor or an instance.\n var pluginInstance;\n if (typeof Plugin.activate !== 'undefined') {\n pluginInstance = Plugin;\n } else {\n pluginInstance = new Plugin();\n }\n\n var pluginDict = {\n plugin: pluginInstance,\n events: {},\n options: {},\n pluginOptions: {}\n };\n\n var handlers = pluginInstance.activate(this);\n for (var eventName in handlers) {\n if (!handlers.hasOwnProperty(eventName)) continue;\n // TODO(danvk): validate eventName.\n pluginDict.events[eventName] = handlers[eventName];\n }\n\n this.plugins_.push(pluginDict);\n }\n\n // At this point, plugins can no longer register event handlers.\n // Construct a map from event -> ordered list of [callback, plugin].\n for (var i = 0; i < this.plugins_.length; i++) {\n var plugin_dict = this.plugins_[i];\n for (var eventName in plugin_dict.events) {\n if (!plugin_dict.events.hasOwnProperty(eventName)) continue;\n var callback = plugin_dict.events[eventName];\n\n var pair = [plugin_dict.plugin, callback];\n if (!(eventName in this.eventListeners_)) {\n this.eventListeners_[eventName] = [pair];\n } else {\n this.eventListeners_[eventName].push(pair);\n }\n }\n }\n\n this.createDragInterface_();\n\n this.start_();\n};\n\n/**\n * Triggers a cascade of events to the various plugins which are interested in them.\n * Returns true if the \"default behavior\" should be prevented, i.e. if one\n * of the event listeners called event.preventDefault().\n * @private\n */\nDygraph.prototype.cascadeEvents_ = function (name, extra_props) {\n if (!(name in this.eventListeners_)) return false;\n\n // QUESTION: can we use objects & prototypes to speed this up?\n var e = {\n dygraph: this,\n cancelable: false,\n defaultPrevented: false,\n preventDefault: function preventDefault() {\n if (!e.cancelable) throw \"Cannot call preventDefault on non-cancelable event.\";\n e.defaultPrevented = true;\n },\n propagationStopped: false,\n stopPropagation: function stopPropagation() {\n e.propagationStopped = true;\n }\n };\n utils.update(e, extra_props);\n\n var callback_plugin_pairs = this.eventListeners_[name];\n if (callback_plugin_pairs) {\n for (var i = callback_plugin_pairs.length - 1; i >= 0; i--) {\n var plugin = callback_plugin_pairs[i][0];\n var callback = callback_plugin_pairs[i][1];\n callback.call(plugin, e);\n if (e.propagationStopped) break;\n }\n }\n return e.defaultPrevented;\n};\n\n/**\n * Fetch a plugin instance of a particular class. Only for testing.\n * @private\n * @param {!Class} type The type of the plugin.\n * @return {Object} Instance of the plugin, or null if there is none.\n */\nDygraph.prototype.getPluginInstance_ = function (type) {\n for (var i = 0; i < this.plugins_.length; i++) {\n var p = this.plugins_[i];\n if (p.plugin instanceof type) {\n return p.plugin;\n }\n }\n return null;\n};\n\n/**\n * Returns the zoomed status of the chart for one or both axes.\n *\n * Axis is an optional parameter. Can be set to 'x' or 'y'.\n *\n * The zoomed status for an axis is set whenever a user zooms using the mouse\n * or when the dateWindow or valueRange are updated. Double-clicking or calling\n * resetZoom() resets the zoom status for the chart.\n */\nDygraph.prototype.isZoomed = function (axis) {\n var isZoomedX = !!this.dateWindow_;\n if (axis === 'x') return isZoomedX;\n\n var isZoomedY = this.axes_.map(function (axis) {\n return !!axis.valueRange;\n }).indexOf(true) >= 0;\n if (axis === null || axis === undefined) {\n return isZoomedX || isZoomedY;\n }\n if (axis === 'y') return isZoomedY;\n\n throw new Error('axis parameter is [' + axis + '] must be null, \\'x\\' or \\'y\\'.');\n};\n\n/**\n * Returns information about the Dygraph object, including its containing ID.\n */\nDygraph.prototype.toString = function () {\n var maindiv = this.maindiv_;\n var id = maindiv && maindiv.id ? maindiv.id : maindiv;\n return \"[Dygraph \" + id + \"]\";\n};\n\n/**\n * @private\n * Returns the value of an option. This may be set by the user (either in the\n * constructor or by calling updateOptions) or by dygraphs, and may be set to a\n * per-series value.\n * @param {string} name The name of the option, e.g. 'rollPeriod'.\n * @param {string} [seriesName] The name of the series to which the option\n * will be applied. If no per-series value of this option is available, then\n * the global value is returned. This is optional.\n * @return { ... } The value of the option.\n */\nDygraph.prototype.attr_ = function (name, seriesName) {\n // For \"production\" code, this gets removed by uglifyjs.\n if (typeof process !== 'undefined') {\n if (process.env.NODE_ENV != 'production') {\n if (typeof _dygraphOptionsReference2['default'] === 'undefined') {\n console.error('Must include options reference JS for testing');\n } else if (!_dygraphOptionsReference2['default'].hasOwnProperty(name)) {\n console.error('Dygraphs is using property ' + name + ', which has no ' + 'entry in the Dygraphs.OPTIONS_REFERENCE listing.');\n // Only log this error once.\n _dygraphOptionsReference2['default'][name] = true;\n }\n }\n }\n return seriesName ? this.attributes_.getForSeries(name, seriesName) : this.attributes_.get(name);\n};\n\n/**\n * Returns the current value for an option, as set in the constructor or via\n * updateOptions. You may pass in an (optional) series name to get per-series\n * values for the option.\n *\n * All values returned by this method should be considered immutable. If you\n * modify them, there is no guarantee that the changes will be honored or that\n * dygraphs will remain in a consistent state. If you want to modify an option,\n * use updateOptions() instead.\n *\n * @param {string} name The name of the option (e.g. 'strokeWidth')\n * @param {string=} opt_seriesName Series name to get per-series values.\n * @return {*} The value of the option.\n */\nDygraph.prototype.getOption = function (name, opt_seriesName) {\n return this.attr_(name, opt_seriesName);\n};\n\n/**\n * Like getOption(), but specifically returns a number.\n * This is a convenience function for working with the Closure Compiler.\n * @param {string} name The name of the option (e.g. 'strokeWidth')\n * @param {string=} opt_seriesName Series name to get per-series values.\n * @return {number} The value of the option.\n * @private\n */\nDygraph.prototype.getNumericOption = function (name, opt_seriesName) {\n return (/** @type{number} */this.getOption(name, opt_seriesName)\n );\n};\n\n/**\n * Like getOption(), but specifically returns a string.\n * This is a convenience function for working with the Closure Compiler.\n * @param {string} name The name of the option (e.g. 'strokeWidth')\n * @param {string=} opt_seriesName Series name to get per-series values.\n * @return {string} The value of the option.\n * @private\n */\nDygraph.prototype.getStringOption = function (name, opt_seriesName) {\n return (/** @type{string} */this.getOption(name, opt_seriesName)\n );\n};\n\n/**\n * Like getOption(), but specifically returns a boolean.\n * This is a convenience function for working with the Closure Compiler.\n * @param {string} name The name of the option (e.g. 'strokeWidth')\n * @param {string=} opt_seriesName Series name to get per-series values.\n * @return {boolean} The value of the option.\n * @private\n */\nDygraph.prototype.getBooleanOption = function (name, opt_seriesName) {\n return (/** @type{boolean} */this.getOption(name, opt_seriesName)\n );\n};\n\n/**\n * Like getOption(), but specifically returns a function.\n * This is a convenience function for working with the Closure Compiler.\n * @param {string} name The name of the option (e.g. 'strokeWidth')\n * @param {string=} opt_seriesName Series name to get per-series values.\n * @return {function(...)} The value of the option.\n * @private\n */\nDygraph.prototype.getFunctionOption = function (name, opt_seriesName) {\n return (/** @type{function(...)} */this.getOption(name, opt_seriesName)\n );\n};\n\nDygraph.prototype.getOptionForAxis = function (name, axis) {\n return this.attributes_.getForAxis(name, axis);\n};\n\n/**\n * @private\n * @param {string} axis The name of the axis (i.e. 'x', 'y' or 'y2')\n * @return { ... } A function mapping string -> option value\n */\nDygraph.prototype.optionsViewForAxis_ = function (axis) {\n var self = this;\n return function (opt) {\n var axis_opts = self.user_attrs_.axes;\n if (axis_opts && axis_opts[axis] && axis_opts[axis].hasOwnProperty(opt)) {\n return axis_opts[axis][opt];\n }\n\n // I don't like that this is in a second spot.\n if (axis === 'x' && opt === 'logscale') {\n // return the default value.\n // TODO(konigsberg): pull the default from a global default.\n return false;\n }\n\n // user-specified attributes always trump defaults, even if they're less\n // specific.\n if (typeof self.user_attrs_[opt] != 'undefined') {\n return self.user_attrs_[opt];\n }\n\n axis_opts = self.attrs_.axes;\n if (axis_opts && axis_opts[axis] && axis_opts[axis].hasOwnProperty(opt)) {\n return axis_opts[axis][opt];\n }\n // check old-style axis options\n // TODO(danvk): add a deprecation warning if either of these match.\n if (axis == 'y' && self.axes_[0].hasOwnProperty(opt)) {\n return self.axes_[0][opt];\n } else if (axis == 'y2' && self.axes_[1].hasOwnProperty(opt)) {\n return self.axes_[1][opt];\n }\n return self.attr_(opt);\n };\n};\n\n/**\n * Returns the current rolling period, as set by the user or an option.\n * @return {number} The number of points in the rolling window\n */\nDygraph.prototype.rollPeriod = function () {\n return this.rollPeriod_;\n};\n\n/**\n * Returns the currently-visible x-range. This can be affected by zooming,\n * panning or a call to updateOptions.\n * Returns a two-element array: [left, right].\n * If the Dygraph has dates on the x-axis, these will be millis since epoch.\n */\nDygraph.prototype.xAxisRange = function () {\n return this.dateWindow_ ? this.dateWindow_ : this.xAxisExtremes();\n};\n\n/**\n * Returns the lower- and upper-bound x-axis values of the data set.\n */\nDygraph.prototype.xAxisExtremes = function () {\n var pad = this.getNumericOption('xRangePad') / this.plotter_.area.w;\n if (this.numRows() === 0) {\n return [0 - pad, 1 + pad];\n }\n var left = this.rawData_[0][0];\n var right = this.rawData_[this.rawData_.length - 1][0];\n if (pad) {\n // Must keep this in sync with dygraph-layout _evaluateLimits()\n var range = right - left;\n left -= range * pad;\n right += range * pad;\n }\n return [left, right];\n};\n\n/**\n * Returns the lower- and upper-bound y-axis values for each axis. These are\n * the ranges you'll get if you double-click to zoom out or call resetZoom().\n * The return value is an array of [low, high] tuples, one for each y-axis.\n */\nDygraph.prototype.yAxisExtremes = function () {\n // TODO(danvk): this is pretty inefficient\n var packed = this.gatherDatasets_(this.rolledSeries_, null);\n var extremes = packed.extremes;\n\n var saveAxes = this.axes_;\n this.computeYAxisRanges_(extremes);\n var newAxes = this.axes_;\n this.axes_ = saveAxes;\n return newAxes.map(function (axis) {\n return axis.extremeRange;\n });\n};\n\n/**\n * Returns the currently-visible y-range for an axis. This can be affected by\n * zooming, panning or a call to updateOptions. Axis indices are zero-based. If\n * called with no arguments, returns the range of the first axis.\n * Returns a two-element array: [bottom, top].\n */\nDygraph.prototype.yAxisRange = function (idx) {\n if (typeof idx == \"undefined\") idx = 0;\n if (idx < 0 || idx >= this.axes_.length) {\n return null;\n }\n var axis = this.axes_[idx];\n return [axis.computedValueRange[0], axis.computedValueRange[1]];\n};\n\n/**\n * Returns the currently-visible y-ranges for each axis. This can be affected by\n * zooming, panning, calls to updateOptions, etc.\n * Returns an array of [bottom, top] pairs, one for each y-axis.\n */\nDygraph.prototype.yAxisRanges = function () {\n var ret = [];\n for (var i = 0; i < this.axes_.length; i++) {\n ret.push(this.yAxisRange(i));\n }\n return ret;\n};\n\n// TODO(danvk): use these functions throughout dygraphs.\n/**\n * Convert from data coordinates to canvas/div X/Y coordinates.\n * If specified, do this conversion for the coordinate system of a particular\n * axis. Uses the first axis by default.\n * Returns a two-element array: [X, Y]\n *\n * Note: use toDomXCoord instead of toDomCoords(x, null) and use toDomYCoord\n * instead of toDomCoords(null, y, axis).\n */\nDygraph.prototype.toDomCoords = function (x, y, axis) {\n return [this.toDomXCoord(x), this.toDomYCoord(y, axis)];\n};\n\n/**\n * Convert from data x coordinates to canvas/div X coordinate.\n * If specified, do this conversion for the coordinate system of a particular\n * axis.\n * Returns a single value or null if x is null.\n */\nDygraph.prototype.toDomXCoord = function (x) {\n if (x === null) {\n return null;\n }\n\n var area = this.plotter_.area;\n var xRange = this.xAxisRange();\n return area.x + (x - xRange[0]) / (xRange[1] - xRange[0]) * area.w;\n};\n\n/**\n * Convert from data x coordinates to canvas/div Y coordinate and optional\n * axis. Uses the first axis by default.\n *\n * returns a single value or null if y is null.\n */\nDygraph.prototype.toDomYCoord = function (y, axis) {\n var pct = this.toPercentYCoord(y, axis);\n\n if (pct === null) {\n return null;\n }\n var area = this.plotter_.area;\n return area.y + pct * area.h;\n};\n\n/**\n * Convert from canvas/div coords to data coordinates.\n * If specified, do this conversion for the coordinate system of a particular\n * axis. Uses the first axis by default.\n * Returns a two-element array: [X, Y].\n *\n * Note: use toDataXCoord instead of toDataCoords(x, null) and use toDataYCoord\n * instead of toDataCoords(null, y, axis).\n */\nDygraph.prototype.toDataCoords = function (x, y, axis) {\n return [this.toDataXCoord(x), this.toDataYCoord(y, axis)];\n};\n\n/**\n * Convert from canvas/div x coordinate to data coordinate.\n *\n * If x is null, this returns null.\n */\nDygraph.prototype.toDataXCoord = function (x) {\n if (x === null) {\n return null;\n }\n\n var area = this.plotter_.area;\n var xRange = this.xAxisRange();\n\n if (!this.attributes_.getForAxis(\"logscale\", 'x')) {\n return xRange[0] + (x - area.x) / area.w * (xRange[1] - xRange[0]);\n } else {\n var pct = (x - area.x) / area.w;\n return utils.logRangeFraction(xRange[0], xRange[1], pct);\n }\n};\n\n/**\n * Convert from canvas/div y coord to value.\n *\n * If y is null, this returns null.\n * if axis is null, this uses the first axis.\n */\nDygraph.prototype.toDataYCoord = function (y, axis) {\n if (y === null) {\n return null;\n }\n\n var area = this.plotter_.area;\n var yRange = this.yAxisRange(axis);\n\n if (typeof axis == \"undefined\") axis = 0;\n if (!this.attributes_.getForAxis(\"logscale\", axis)) {\n return yRange[0] + (area.y + area.h - y) / area.h * (yRange[1] - yRange[0]);\n } else {\n // Computing the inverse of toDomCoord.\n var pct = (y - area.y) / area.h;\n // Note reversed yRange, y1 is on top with pct==0.\n return utils.logRangeFraction(yRange[1], yRange[0], pct);\n }\n};\n\n/**\n * Converts a y for an axis to a percentage from the top to the\n * bottom of the drawing area.\n *\n * If the coordinate represents a value visible on the canvas, then\n * the value will be between 0 and 1, where 0 is the top of the canvas.\n * However, this method will return values outside the range, as\n * values can fall outside the canvas.\n *\n * If y is null, this returns null.\n * if axis is null, this uses the first axis.\n *\n * @param {number} y The data y-coordinate.\n * @param {number} [axis] The axis number on which the data coordinate lives.\n * @return {number} A fraction in [0, 1] where 0 = the top edge.\n */\nDygraph.prototype.toPercentYCoord = function (y, axis) {\n if (y === null) {\n return null;\n }\n if (typeof axis == \"undefined\") axis = 0;\n\n var yRange = this.yAxisRange(axis);\n\n var pct;\n var logscale = this.attributes_.getForAxis(\"logscale\", axis);\n if (logscale) {\n var logr0 = utils.log10(yRange[0]);\n var logr1 = utils.log10(yRange[1]);\n pct = (logr1 - utils.log10(y)) / (logr1 - logr0);\n } else {\n // yRange[1] - y is unit distance from the bottom.\n // yRange[1] - yRange[0] is the scale of the range.\n // (yRange[1] - y) / (yRange[1] - yRange[0]) is the % from the bottom.\n pct = (yRange[1] - y) / (yRange[1] - yRange[0]);\n }\n return pct;\n};\n\n/**\n * Converts an x value to a percentage from the left to the right of\n * the drawing area.\n *\n * If the coordinate represents a value visible on the canvas, then\n * the value will be between 0 and 1, where 0 is the left of the canvas.\n * However, this method will return values outside the range, as\n * values can fall outside the canvas.\n *\n * If x is null, this returns null.\n * @param {number} x The data x-coordinate.\n * @return {number} A fraction in [0, 1] where 0 = the left edge.\n */\nDygraph.prototype.toPercentXCoord = function (x) {\n if (x === null) {\n return null;\n }\n\n var xRange = this.xAxisRange();\n var pct;\n var logscale = this.attributes_.getForAxis(\"logscale\", 'x');\n if (logscale === true) {\n // logscale can be null so we test for true explicitly.\n var logr0 = utils.log10(xRange[0]);\n var logr1 = utils.log10(xRange[1]);\n pct = (utils.log10(x) - logr0) / (logr1 - logr0);\n } else {\n // x - xRange[0] is unit distance from the left.\n // xRange[1] - xRange[0] is the scale of the range.\n // The full expression below is the % from the left.\n pct = (x - xRange[0]) / (xRange[1] - xRange[0]);\n }\n return pct;\n};\n\n/**\n * Returns the number of columns (including the independent variable).\n * @return {number} The number of columns.\n */\nDygraph.prototype.numColumns = function () {\n if (!this.rawData_) return 0;\n return this.rawData_[0] ? this.rawData_[0].length : this.attr_(\"labels\").length;\n};\n\n/**\n * Returns the number of rows (excluding any header/label row).\n * @return {number} The number of rows, less any header.\n */\nDygraph.prototype.numRows = function () {\n if (!this.rawData_) return 0;\n return this.rawData_.length;\n};\n\n/**\n * Returns the value in the given row and column. If the row and column exceed\n * the bounds on the data, returns null. Also returns null if the value is\n * missing.\n * @param {number} row The row number of the data (0-based). Row 0 is the\n * first row of data, not a header row.\n * @param {number} col The column number of the data (0-based)\n * @return {number} The value in the specified cell or null if the row/col\n * were out of range.\n */\nDygraph.prototype.getValue = function (row, col) {\n if (row < 0 || row > this.rawData_.length) return null;\n if (col < 0 || col > this.rawData_[row].length) return null;\n\n return this.rawData_[row][col];\n};\n\n/**\n * Generates interface elements for the Dygraph: a containing div, a div to\n * display the current point, and a textbox to adjust the rolling average\n * period. Also creates the Renderer/Layout elements.\n * @private\n */\nDygraph.prototype.createInterface_ = function () {\n // Create the all-enclosing graph div\n var enclosing = this.maindiv_;\n\n this.graphDiv = document.createElement(\"div\");\n\n // TODO(danvk): any other styles that are useful to set here?\n this.graphDiv.style.textAlign = 'left'; // This is a CSS \"reset\"\n this.graphDiv.style.position = 'relative';\n enclosing.appendChild(this.graphDiv);\n\n // Create the canvas for interactive parts of the chart.\n this.canvas_ = utils.createCanvas();\n this.canvas_.style.position = \"absolute\";\n\n // ... and for static parts of the chart.\n this.hidden_ = this.createPlotKitCanvas_(this.canvas_);\n\n this.canvas_ctx_ = utils.getContext(this.canvas_);\n this.hidden_ctx_ = utils.getContext(this.hidden_);\n\n this.resizeElements_();\n\n // The interactive parts of the graph are drawn on top of the chart.\n this.graphDiv.appendChild(this.hidden_);\n this.graphDiv.appendChild(this.canvas_);\n this.mouseEventElement_ = this.createMouseEventElement_();\n\n // Create the grapher\n this.layout_ = new _dygraphLayout2['default'](this);\n\n var dygraph = this;\n\n this.mouseMoveHandler_ = function (e) {\n dygraph.mouseMove_(e);\n };\n\n this.mouseOutHandler_ = function (e) {\n // The mouse has left the chart if:\n // 1. e.target is inside the chart\n // 2. e.relatedTarget is outside the chart\n var target = e.target || e.fromElement;\n var relatedTarget = e.relatedTarget || e.toElement;\n if (utils.isNodeContainedBy(target, dygraph.graphDiv) && !utils.isNodeContainedBy(relatedTarget, dygraph.graphDiv)) {\n dygraph.mouseOut_(e);\n }\n };\n\n this.addAndTrackEvent(window, 'mouseout', this.mouseOutHandler_);\n this.addAndTrackEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_);\n\n // Don't recreate and register the resize handler on subsequent calls.\n // This happens when the graph is resized.\n if (!this.resizeHandler_) {\n this.resizeHandler_ = function (e) {\n dygraph.resize();\n };\n\n // Update when the window is resized.\n // TODO(danvk): drop frames depending on complexity of the chart.\n this.addAndTrackEvent(window, 'resize', this.resizeHandler_);\n }\n};\n\nDygraph.prototype.resizeElements_ = function () {\n this.graphDiv.style.width = this.width_ + \"px\";\n this.graphDiv.style.height = this.height_ + \"px\";\n\n var pixelRatioOption = this.getNumericOption('pixelRatio');\n\n var canvasScale = pixelRatioOption || utils.getContextPixelRatio(this.canvas_ctx_);\n this.canvas_.width = this.width_ * canvasScale;\n this.canvas_.height = this.height_ * canvasScale;\n this.canvas_.style.width = this.width_ + \"px\"; // for IE\n this.canvas_.style.height = this.height_ + \"px\"; // for IE\n if (canvasScale !== 1) {\n this.canvas_ctx_.scale(canvasScale, canvasScale);\n }\n\n var hiddenScale = pixelRatioOption || utils.getContextPixelRatio(this.hidden_ctx_);\n this.hidden_.width = this.width_ * hiddenScale;\n this.hidden_.height = this.height_ * hiddenScale;\n this.hidden_.style.width = this.width_ + \"px\"; // for IE\n this.hidden_.style.height = this.height_ + \"px\"; // for IE\n if (hiddenScale !== 1) {\n this.hidden_ctx_.scale(hiddenScale, hiddenScale);\n }\n};\n\n/**\n * Detach DOM elements in the dygraph and null out all data references.\n * Calling this when you're done with a dygraph can dramatically reduce memory\n * usage. See, e.g., the tests/perf.html example.\n */\nDygraph.prototype.destroy = function () {\n this.canvas_ctx_.restore();\n this.hidden_ctx_.restore();\n\n // Destroy any plugins, in the reverse order that they were registered.\n for (var i = this.plugins_.length - 1; i >= 0; i--) {\n var p = this.plugins_.pop();\n if (p.plugin.destroy) p.plugin.destroy();\n }\n\n var removeRecursive = function removeRecursive(node) {\n while (node.hasChildNodes()) {\n removeRecursive(node.firstChild);\n node.removeChild(node.firstChild);\n }\n };\n\n this.removeTrackedEvents_();\n\n // remove mouse event handlers (This may not be necessary anymore)\n utils.removeEvent(window, 'mouseout', this.mouseOutHandler_);\n utils.removeEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_);\n\n // remove window handlers\n utils.removeEvent(window, 'resize', this.resizeHandler_);\n this.resizeHandler_ = null;\n\n removeRecursive(this.maindiv_);\n\n var nullOut = function nullOut(obj) {\n for (var n in obj) {\n if (typeof obj[n] === 'object') {\n obj[n] = null;\n }\n }\n };\n // These may not all be necessary, but it can't hurt...\n nullOut(this.layout_);\n nullOut(this.plotter_);\n nullOut(this);\n};\n\n/**\n * Creates the canvas on which the chart will be drawn. Only the Renderer ever\n * draws on this particular canvas. All Dygraph work (i.e. drawing hover dots\n * or the zoom rectangles) is done on this.canvas_.\n * @param {Object} canvas The Dygraph canvas over which to overlay the plot\n * @return {Object} The newly-created canvas\n * @private\n */\nDygraph.prototype.createPlotKitCanvas_ = function (canvas) {\n var h = utils.createCanvas();\n h.style.position = \"absolute\";\n // TODO(danvk): h should be offset from canvas. canvas needs to include\n // some extra area to make it easier to zoom in on the far left and far\n // right. h needs to be precisely the plot area, so that clipping occurs.\n h.style.top = canvas.style.top;\n h.style.left = canvas.style.left;\n h.width = this.width_;\n h.height = this.height_;\n h.style.width = this.width_ + \"px\"; // for IE\n h.style.height = this.height_ + \"px\"; // for IE\n return h;\n};\n\n/**\n * Creates an overlay element used to handle mouse events.\n * @return {Object} The mouse event element.\n * @private\n */\nDygraph.prototype.createMouseEventElement_ = function () {\n return this.canvas_;\n};\n\n/**\n * Generate a set of distinct colors for the data series. This is done with a\n * color wheel. Saturation/Value are customizable, and the hue is\n * equally-spaced around the color wheel. If a custom set of colors is\n * specified, that is used instead.\n * @private\n */\nDygraph.prototype.setColors_ = function () {\n var labels = this.getLabels();\n var num = labels.length - 1;\n this.colors_ = [];\n this.colorsMap_ = {};\n\n // These are used for when no custom colors are specified.\n var sat = this.getNumericOption('colorSaturation') || 1.0;\n var val = this.getNumericOption('colorValue') || 0.5;\n var half = Math.ceil(num / 2);\n\n var colors = this.getOption('colors');\n var visibility = this.visibility();\n for (var i = 0; i < num; i++) {\n if (!visibility[i]) {\n continue;\n }\n var label = labels[i + 1];\n var colorStr = this.attributes_.getForSeries('color', label);\n if (!colorStr) {\n if (colors) {\n colorStr = colors[i % colors.length];\n } else {\n // alternate colors for high contrast.\n var idx = i % 2 ? half + (i + 1) / 2 : Math.ceil((i + 1) / 2);\n var hue = 1.0 * idx / (1 + num);\n colorStr = utils.hsvToRGB(hue, sat, val);\n }\n }\n this.colors_.push(colorStr);\n this.colorsMap_[label] = colorStr;\n }\n};\n\n/**\n * Return the list of colors. This is either the list of colors passed in the\n * attributes or the autogenerated list of rgb(r,g,b) strings.\n * This does not return colors for invisible series.\n * @return {Array.} The list of colors.\n */\nDygraph.prototype.getColors = function () {\n return this.colors_;\n};\n\n/**\n * Returns a few attributes of a series, i.e. its color, its visibility, which\n * axis it's assigned to, and its column in the original data.\n * Returns null if the series does not exist.\n * Otherwise, returns an object with column, visibility, color and axis properties.\n * The \"axis\" property will be set to 1 for y1 and 2 for y2.\n * The \"column\" property can be fed back into getValue(row, column) to get\n * values for this series.\n */\nDygraph.prototype.getPropertiesForSeries = function (series_name) {\n var idx = -1;\n var labels = this.getLabels();\n for (var i = 1; i < labels.length; i++) {\n if (labels[i] == series_name) {\n idx = i;\n break;\n }\n }\n if (idx == -1) return null;\n\n return {\n name: series_name,\n column: idx,\n visible: this.visibility()[idx - 1],\n color: this.colorsMap_[series_name],\n axis: 1 + this.attributes_.axisForSeries(series_name)\n };\n};\n\n/**\n * Create the text box to adjust the averaging period\n * @private\n */\nDygraph.prototype.createRollInterface_ = function () {\n var _this = this;\n\n // Create a roller if one doesn't exist already.\n var roller = this.roller_;\n if (!roller) {\n this.roller_ = roller = document.createElement(\"input\");\n roller.type = \"text\";\n roller.style.display = \"none\";\n roller.className = 'dygraph-roller';\n this.graphDiv.appendChild(roller);\n }\n\n var display = this.getBooleanOption('showRoller') ? 'block' : 'none';\n\n var area = this.getArea();\n var textAttr = {\n \"top\": area.y + area.h - 25 + \"px\",\n \"left\": area.x + 1 + \"px\",\n \"display\": display\n };\n roller.size = \"2\";\n roller.value = this.rollPeriod_;\n utils.update(roller.style, textAttr);\n\n roller.onchange = function () {\n return _this.adjustRoll(roller.value);\n };\n};\n\n/**\n * Set up all the mouse handlers needed to capture dragging behavior for zoom\n * events.\n * @private\n */\nDygraph.prototype.createDragInterface_ = function () {\n var context = {\n // Tracks whether the mouse is down right now\n isZooming: false,\n isPanning: false, // is this drag part of a pan?\n is2DPan: false, // if so, is that pan 1- or 2-dimensional?\n dragStartX: null, // pixel coordinates\n dragStartY: null, // pixel coordinates\n dragEndX: null, // pixel coordinates\n dragEndY: null, // pixel coordinates\n dragDirection: null,\n prevEndX: null, // pixel coordinates\n prevEndY: null, // pixel coordinates\n prevDragDirection: null,\n cancelNextDblclick: false, // see comment in dygraph-interaction-model.js\n\n // The value on the left side of the graph when a pan operation starts.\n initialLeftmostDate: null,\n\n // The number of units each pixel spans. (This won't be valid for log\n // scales)\n xUnitsPerPixel: null,\n\n // TODO(danvk): update this comment\n // The range in second/value units that the viewport encompasses during a\n // panning operation.\n dateRange: null,\n\n // Top-left corner of the canvas, in DOM coords\n // TODO(konigsberg): Rename topLeftCanvasX, topLeftCanvasY.\n px: 0,\n py: 0,\n\n // Values for use with panEdgeFraction, which limit how far outside the\n // graph's data boundaries it can be panned.\n boundedDates: null, // [minDate, maxDate]\n boundedValues: null, // [[minValue, maxValue] ...]\n\n // We cover iframes during mouse interactions. See comments in\n // dygraph-utils.js for more info on why this is a good idea.\n tarp: new _iframeTarp2['default'](),\n\n // contextB is the same thing as this context object but renamed.\n initializeMouseDown: function initializeMouseDown(event, g, contextB) {\n // prevents mouse drags from selecting page text.\n if (event.preventDefault) {\n event.preventDefault(); // Firefox, Chrome, etc.\n } else {\n event.returnValue = false; // IE\n event.cancelBubble = true;\n }\n\n var canvasPos = utils.findPos(g.canvas_);\n contextB.px = canvasPos.x;\n contextB.py = canvasPos.y;\n contextB.dragStartX = utils.dragGetX_(event, contextB);\n contextB.dragStartY = utils.dragGetY_(event, contextB);\n contextB.cancelNextDblclick = false;\n contextB.tarp.cover();\n },\n destroy: function destroy() {\n var context = this;\n if (context.isZooming || context.isPanning) {\n context.isZooming = false;\n context.dragStartX = null;\n context.dragStartY = null;\n }\n\n if (context.isPanning) {\n context.isPanning = false;\n context.draggingDate = null;\n context.dateRange = null;\n for (var i = 0; i < self.axes_.length; i++) {\n delete self.axes_[i].draggingValue;\n delete self.axes_[i].dragValueRange;\n }\n }\n\n context.tarp.uncover();\n }\n };\n\n var interactionModel = this.getOption(\"interactionModel\");\n\n // Self is the graph.\n var self = this;\n\n // Function that binds the graph and context to the handler.\n var bindHandler = function bindHandler(handler) {\n return function (event) {\n handler(event, self, context);\n };\n };\n\n for (var eventName in interactionModel) {\n if (!interactionModel.hasOwnProperty(eventName)) continue;\n this.addAndTrackEvent(this.mouseEventElement_, eventName, bindHandler(interactionModel[eventName]));\n }\n\n // If the user releases the mouse button during a drag, but not over the\n // canvas, then it doesn't count as a zooming action.\n if (!interactionModel.willDestroyContextMyself) {\n var mouseUpHandler = function mouseUpHandler(event) {\n context.destroy();\n };\n\n this.addAndTrackEvent(document, 'mouseup', mouseUpHandler);\n }\n};\n\n/**\n * Draw a gray zoom rectangle over the desired area of the canvas. Also clears\n * up any previous zoom rectangles that were drawn. This could be optimized to\n * avoid extra redrawing, but it's tricky to avoid interactions with the status\n * dots.\n *\n * @param {number} direction the direction of the zoom rectangle. Acceptable\n * values are utils.HORIZONTAL and utils.VERTICAL.\n * @param {number} startX The X position where the drag started, in canvas\n * coordinates.\n * @param {number} endX The current X position of the drag, in canvas coords.\n * @param {number} startY The Y position where the drag started, in canvas\n * coordinates.\n * @param {number} endY The current Y position of the drag, in canvas coords.\n * @param {number} prevDirection the value of direction on the previous call to\n * this function. Used to avoid excess redrawing\n * @param {number} prevEndX The value of endX on the previous call to this\n * function. Used to avoid excess redrawing\n * @param {number} prevEndY The value of endY on the previous call to this\n * function. Used to avoid excess redrawing\n * @private\n */\nDygraph.prototype.drawZoomRect_ = function (direction, startX, endX, startY, endY, prevDirection, prevEndX, prevEndY) {\n var ctx = this.canvas_ctx_;\n\n // Clean up from the previous rect if necessary\n if (prevDirection == utils.HORIZONTAL) {\n ctx.clearRect(Math.min(startX, prevEndX), this.layout_.getPlotArea().y, Math.abs(startX - prevEndX), this.layout_.getPlotArea().h);\n } else if (prevDirection == utils.VERTICAL) {\n ctx.clearRect(this.layout_.getPlotArea().x, Math.min(startY, prevEndY), this.layout_.getPlotArea().w, Math.abs(startY - prevEndY));\n }\n\n // Draw a light-grey rectangle to show the new viewing area\n if (direction == utils.HORIZONTAL) {\n if (endX && startX) {\n ctx.fillStyle = \"rgba(128,128,128,0.33)\";\n ctx.fillRect(Math.min(startX, endX), this.layout_.getPlotArea().y, Math.abs(endX - startX), this.layout_.getPlotArea().h);\n }\n } else if (direction == utils.VERTICAL) {\n if (endY && startY) {\n ctx.fillStyle = \"rgba(128,128,128,0.33)\";\n ctx.fillRect(this.layout_.getPlotArea().x, Math.min(startY, endY), this.layout_.getPlotArea().w, Math.abs(endY - startY));\n }\n }\n};\n\n/**\n * Clear the zoom rectangle (and perform no zoom).\n * @private\n */\nDygraph.prototype.clearZoomRect_ = function () {\n this.currentZoomRectArgs_ = null;\n this.canvas_ctx_.clearRect(0, 0, this.width_, this.height_);\n};\n\n/**\n * Zoom to something containing [lowX, highX]. These are pixel coordinates in\n * the canvas. The exact zoom window may be slightly larger if there are no data\n * points near lowX or highX. Don't confuse this function with doZoomXDates,\n * which accepts dates that match the raw data. This function redraws the graph.\n *\n * @param {number} lowX The leftmost pixel value that should be visible.\n * @param {number} highX The rightmost pixel value that should be visible.\n * @private\n */\nDygraph.prototype.doZoomX_ = function (lowX, highX) {\n this.currentZoomRectArgs_ = null;\n // Find the earliest and latest dates contained in this canvasx range.\n // Convert the call to date ranges of the raw data.\n var minDate = this.toDataXCoord(lowX);\n var maxDate = this.toDataXCoord(highX);\n this.doZoomXDates_(minDate, maxDate);\n};\n\n/**\n * Zoom to something containing [minDate, maxDate] values. Don't confuse this\n * method with doZoomX which accepts pixel coordinates. This function redraws\n * the graph.\n *\n * @param {number} minDate The minimum date that should be visible.\n * @param {number} maxDate The maximum date that should be visible.\n * @private\n */\nDygraph.prototype.doZoomXDates_ = function (minDate, maxDate) {\n var _this2 = this;\n\n // TODO(danvk): when xAxisRange is null (i.e. \"fit to data\", the animation\n // can produce strange effects. Rather than the x-axis transitioning slowly\n // between values, it can jerk around.)\n var old_window = this.xAxisRange();\n var new_window = [minDate, maxDate];\n var zoomCallback = this.getFunctionOption('zoomCallback');\n this.doAnimatedZoom(old_window, new_window, null, null, function () {\n if (zoomCallback) {\n zoomCallback.call(_this2, minDate, maxDate, _this2.yAxisRanges());\n }\n });\n};\n\n/**\n * Zoom to something containing [lowY, highY]. These are pixel coordinates in\n * the canvas. This function redraws the graph.\n *\n * @param {number} lowY The topmost pixel value that should be visible.\n * @param {number} highY The lowest pixel value that should be visible.\n * @private\n */\nDygraph.prototype.doZoomY_ = function (lowY, highY) {\n var _this3 = this;\n\n this.currentZoomRectArgs_ = null;\n // Find the highest and lowest values in pixel range for each axis.\n // Note that lowY (in pixels) corresponds to the max Value (in data coords).\n // This is because pixels increase as you go down on the screen, whereas data\n // coordinates increase as you go up the screen.\n var oldValueRanges = this.yAxisRanges();\n var newValueRanges = [];\n for (var i = 0; i < this.axes_.length; i++) {\n var hi = this.toDataYCoord(lowY, i);\n var low = this.toDataYCoord(highY, i);\n newValueRanges.push([low, hi]);\n }\n\n var zoomCallback = this.getFunctionOption('zoomCallback');\n this.doAnimatedZoom(null, null, oldValueRanges, newValueRanges, function () {\n if (zoomCallback) {\n var _xAxisRange = _this3.xAxisRange();\n\n var _xAxisRange2 = _slicedToArray(_xAxisRange, 2);\n\n var minX = _xAxisRange2[0];\n var maxX = _xAxisRange2[1];\n\n zoomCallback.call(_this3, minX, maxX, _this3.yAxisRanges());\n }\n });\n};\n\n/**\n * Transition function to use in animations. Returns values between 0.0\n * (totally old values) and 1.0 (totally new values) for each frame.\n * @private\n */\nDygraph.zoomAnimationFunction = function (frame, numFrames) {\n var k = 1.5;\n return (1.0 - Math.pow(k, -frame)) / (1.0 - Math.pow(k, -numFrames));\n};\n\n/**\n * Reset the zoom to the original view coordinates. This is the same as\n * double-clicking on the graph.\n */\nDygraph.prototype.resetZoom = function () {\n var _this4 = this;\n\n var dirtyX = this.isZoomed('x');\n var dirtyY = this.isZoomed('y');\n var dirty = dirtyX || dirtyY;\n\n // Clear any selection, since it's likely to be drawn in the wrong place.\n this.clearSelection();\n\n if (!dirty) return;\n\n // Calculate extremes to avoid lack of padding on reset.\n\n var _xAxisExtremes = this.xAxisExtremes();\n\n var _xAxisExtremes2 = _slicedToArray(_xAxisExtremes, 2);\n\n var minDate = _xAxisExtremes2[0];\n var maxDate = _xAxisExtremes2[1];\n\n var animatedZooms = this.getBooleanOption('animatedZooms');\n var zoomCallback = this.getFunctionOption('zoomCallback');\n\n // TODO(danvk): merge this block w/ the code below.\n // TODO(danvk): factor out a generic, public zoomTo method.\n if (!animatedZooms) {\n this.dateWindow_ = null;\n this.axes_.forEach(function (axis) {\n if (axis.valueRange) delete axis.valueRange;\n });\n\n this.drawGraph_();\n if (zoomCallback) {\n zoomCallback.call(this, minDate, maxDate, this.yAxisRanges());\n }\n return;\n }\n\n var oldWindow = null,\n newWindow = null,\n oldValueRanges = null,\n newValueRanges = null;\n if (dirtyX) {\n oldWindow = this.xAxisRange();\n newWindow = [minDate, maxDate];\n }\n\n if (dirtyY) {\n oldValueRanges = this.yAxisRanges();\n newValueRanges = this.yAxisExtremes();\n }\n\n this.doAnimatedZoom(oldWindow, newWindow, oldValueRanges, newValueRanges, function () {\n _this4.dateWindow_ = null;\n _this4.axes_.forEach(function (axis) {\n if (axis.valueRange) delete axis.valueRange;\n });\n if (zoomCallback) {\n zoomCallback.call(_this4, minDate, maxDate, _this4.yAxisRanges());\n }\n });\n};\n\n/**\n * Combined animation logic for all zoom functions.\n * either the x parameters or y parameters may be null.\n * @private\n */\nDygraph.prototype.doAnimatedZoom = function (oldXRange, newXRange, oldYRanges, newYRanges, callback) {\n var _this5 = this;\n\n var steps = this.getBooleanOption(\"animatedZooms\") ? Dygraph.ANIMATION_STEPS : 1;\n\n var windows = [];\n var valueRanges = [];\n var step, frac;\n\n if (oldXRange !== null && newXRange !== null) {\n for (step = 1; step <= steps; step++) {\n frac = Dygraph.zoomAnimationFunction(step, steps);\n windows[step - 1] = [oldXRange[0] * (1 - frac) + frac * newXRange[0], oldXRange[1] * (1 - frac) + frac * newXRange[1]];\n }\n }\n\n if (oldYRanges !== null && newYRanges !== null) {\n for (step = 1; step <= steps; step++) {\n frac = Dygraph.zoomAnimationFunction(step, steps);\n var thisRange = [];\n for (var j = 0; j < this.axes_.length; j++) {\n thisRange.push([oldYRanges[j][0] * (1 - frac) + frac * newYRanges[j][0], oldYRanges[j][1] * (1 - frac) + frac * newYRanges[j][1]]);\n }\n valueRanges[step - 1] = thisRange;\n }\n }\n\n utils.repeatAndCleanup(function (step) {\n if (valueRanges.length) {\n for (var i = 0; i < _this5.axes_.length; i++) {\n var w = valueRanges[step][i];\n _this5.axes_[i].valueRange = [w[0], w[1]];\n }\n }\n if (windows.length) {\n _this5.dateWindow_ = windows[step];\n }\n _this5.drawGraph_();\n }, steps, Dygraph.ANIMATION_DURATION / steps, callback);\n};\n\n/**\n * Get the current graph's area object.\n *\n * Returns: {x, y, w, h}\n */\nDygraph.prototype.getArea = function () {\n return this.plotter_.area;\n};\n\n/**\n * Convert a mouse event to DOM coordinates relative to the graph origin.\n *\n * Returns a two-element array: [X, Y].\n */\nDygraph.prototype.eventToDomCoords = function (event) {\n if (event.offsetX && event.offsetY) {\n return [event.offsetX, event.offsetY];\n } else {\n var eventElementPos = utils.findPos(this.mouseEventElement_);\n var canvasx = utils.pageX(event) - eventElementPos.x;\n var canvasy = utils.pageY(event) - eventElementPos.y;\n return [canvasx, canvasy];\n }\n};\n\n/**\n * Given a canvas X coordinate, find the closest row.\n * @param {number} domX graph-relative DOM X coordinate\n * Returns {number} row number.\n * @private\n */\nDygraph.prototype.findClosestRow = function (domX) {\n var minDistX = Infinity;\n var closestRow = -1;\n var sets = this.layout_.points;\n for (var i = 0; i < sets.length; i++) {\n var points = sets[i];\n var len = points.length;\n for (var j = 0; j < len; j++) {\n var point = points[j];\n if (!utils.isValidPoint(point, true)) continue;\n var dist = Math.abs(point.canvasx - domX);\n if (dist < minDistX) {\n minDistX = dist;\n closestRow = point.idx;\n }\n }\n }\n\n return closestRow;\n};\n\n/**\n * Given canvas X,Y coordinates, find the closest point.\n *\n * This finds the individual data point across all visible series\n * that's closest to the supplied DOM coordinates using the standard\n * Euclidean X,Y distance.\n *\n * @param {number} domX graph-relative DOM X coordinate\n * @param {number} domY graph-relative DOM Y coordinate\n * Returns: {row, seriesName, point}\n * @private\n */\nDygraph.prototype.findClosestPoint = function (domX, domY) {\n var minDist = Infinity;\n var dist, dx, dy, point, closestPoint, closestSeries, closestRow;\n for (var setIdx = this.layout_.points.length - 1; setIdx >= 0; --setIdx) {\n var points = this.layout_.points[setIdx];\n for (var i = 0; i < points.length; ++i) {\n point = points[i];\n if (!utils.isValidPoint(point)) continue;\n dx = point.canvasx - domX;\n dy = point.canvasy - domY;\n dist = dx * dx + dy * dy;\n if (dist < minDist) {\n minDist = dist;\n closestPoint = point;\n closestSeries = setIdx;\n closestRow = point.idx;\n }\n }\n }\n var name = this.layout_.setNames[closestSeries];\n return {\n row: closestRow,\n seriesName: name,\n point: closestPoint\n };\n};\n\n/**\n * Given canvas X,Y coordinates, find the touched area in a stacked graph.\n *\n * This first finds the X data point closest to the supplied DOM X coordinate,\n * then finds the series which puts the Y coordinate on top of its filled area,\n * using linear interpolation between adjacent point pairs.\n *\n * @param {number} domX graph-relative DOM X coordinate\n * @param {number} domY graph-relative DOM Y coordinate\n * Returns: {row, seriesName, point}\n * @private\n */\nDygraph.prototype.findStackedPoint = function (domX, domY) {\n var row = this.findClosestRow(domX);\n var closestPoint, closestSeries;\n for (var setIdx = 0; setIdx < this.layout_.points.length; ++setIdx) {\n var boundary = this.getLeftBoundary_(setIdx);\n var rowIdx = row - boundary;\n var points = this.layout_.points[setIdx];\n if (rowIdx >= points.length) continue;\n var p1 = points[rowIdx];\n if (!utils.isValidPoint(p1)) continue;\n var py = p1.canvasy;\n if (domX > p1.canvasx && rowIdx + 1 < points.length) {\n // interpolate series Y value using next point\n var p2 = points[rowIdx + 1];\n if (utils.isValidPoint(p2)) {\n var dx = p2.canvasx - p1.canvasx;\n if (dx > 0) {\n var r = (domX - p1.canvasx) / dx;\n py += r * (p2.canvasy - p1.canvasy);\n }\n }\n } else if (domX < p1.canvasx && rowIdx > 0) {\n // interpolate series Y value using previous point\n var p0 = points[rowIdx - 1];\n if (utils.isValidPoint(p0)) {\n var dx = p1.canvasx - p0.canvasx;\n if (dx > 0) {\n var r = (p1.canvasx - domX) / dx;\n py += r * (p0.canvasy - p1.canvasy);\n }\n }\n }\n // Stop if the point (domX, py) is above this series' upper edge\n if (setIdx === 0 || py < domY) {\n closestPoint = p1;\n closestSeries = setIdx;\n }\n }\n var name = this.layout_.setNames[closestSeries];\n return {\n row: row,\n seriesName: name,\n point: closestPoint\n };\n};\n\n/**\n * When the mouse moves in the canvas, display information about a nearby data\n * point and draw dots over those points in the data series. This function\n * takes care of cleanup of previously-drawn dots.\n * @param {Object} event The mousemove event from the browser.\n * @private\n */\nDygraph.prototype.mouseMove_ = function (event) {\n // This prevents JS errors when mousing over the canvas before data loads.\n var points = this.layout_.points;\n if (points === undefined || points === null) return;\n\n var canvasCoords = this.eventToDomCoords(event);\n var canvasx = canvasCoords[0];\n var canvasy = canvasCoords[1];\n\n var highlightSeriesOpts = this.getOption(\"highlightSeriesOpts\");\n var selectionChanged = false;\n if (highlightSeriesOpts && !this.isSeriesLocked()) {\n var closest;\n if (this.getBooleanOption(\"stackedGraph\")) {\n closest = this.findStackedPoint(canvasx, canvasy);\n } else {\n closest = this.findClosestPoint(canvasx, canvasy);\n }\n selectionChanged = this.setSelection(closest.row, closest.seriesName);\n } else {\n var idx = this.findClosestRow(canvasx);\n selectionChanged = this.setSelection(idx);\n }\n\n var callback = this.getFunctionOption(\"highlightCallback\");\n if (callback && selectionChanged) {\n callback.call(this, event, this.lastx_, this.selPoints_, this.lastRow_, this.highlightSet_);\n }\n};\n\n/**\n * Fetch left offset from the specified set index or if not passed, the\n * first defined boundaryIds record (see bug #236).\n * @private\n */\nDygraph.prototype.getLeftBoundary_ = function (setIdx) {\n if (this.boundaryIds_[setIdx]) {\n return this.boundaryIds_[setIdx][0];\n } else {\n for (var i = 0; i < this.boundaryIds_.length; i++) {\n if (this.boundaryIds_[i] !== undefined) {\n return this.boundaryIds_[i][0];\n }\n }\n return 0;\n }\n};\n\nDygraph.prototype.animateSelection_ = function (direction) {\n var totalSteps = 10;\n var millis = 30;\n if (this.fadeLevel === undefined) this.fadeLevel = 0;\n if (this.animateId === undefined) this.animateId = 0;\n var start = this.fadeLevel;\n var steps = direction < 0 ? start : totalSteps - start;\n if (steps <= 0) {\n if (this.fadeLevel) {\n this.updateSelection_(1.0);\n }\n return;\n }\n\n var thisId = ++this.animateId;\n var that = this;\n var cleanupIfClearing = function cleanupIfClearing() {\n // if we haven't reached fadeLevel 0 in the max frame time,\n // ensure that the clear happens and just go to 0\n if (that.fadeLevel !== 0 && direction < 0) {\n that.fadeLevel = 0;\n that.clearSelection();\n }\n };\n utils.repeatAndCleanup(function (n) {\n // ignore simultaneous animations\n if (that.animateId != thisId) return;\n\n that.fadeLevel += direction;\n if (that.fadeLevel === 0) {\n that.clearSelection();\n } else {\n that.updateSelection_(that.fadeLevel / totalSteps);\n }\n }, steps, millis, cleanupIfClearing);\n};\n\n/**\n * Draw dots over the selectied points in the data series. This function\n * takes care of cleanup of previously-drawn dots.\n * @private\n */\nDygraph.prototype.updateSelection_ = function (opt_animFraction) {\n /*var defaultPrevented = */\n this.cascadeEvents_('select', {\n selectedRow: this.lastRow_ === -1 ? undefined : this.lastRow_,\n selectedX: this.lastx_ === -1 ? undefined : this.lastx_,\n selectedPoints: this.selPoints_\n });\n // TODO(danvk): use defaultPrevented here?\n\n // Clear the previously drawn vertical, if there is one\n var i;\n var ctx = this.canvas_ctx_;\n if (this.getOption('highlightSeriesOpts')) {\n ctx.clearRect(0, 0, this.width_, this.height_);\n var alpha = 1.0 - this.getNumericOption('highlightSeriesBackgroundAlpha');\n var backgroundColor = utils.toRGB_(this.getOption('highlightSeriesBackgroundColor'));\n\n if (alpha) {\n // Activating background fade includes an animation effect for a gradual\n // fade. TODO(klausw): make this independently configurable if it causes\n // issues? Use a shared preference to control animations?\n var animateBackgroundFade = true;\n if (animateBackgroundFade) {\n if (opt_animFraction === undefined) {\n // start a new animation\n this.animateSelection_(1);\n return;\n }\n alpha *= opt_animFraction;\n }\n ctx.fillStyle = 'rgba(' + backgroundColor.r + ',' + backgroundColor.g + ',' + backgroundColor.b + ',' + alpha + ')';\n ctx.fillRect(0, 0, this.width_, this.height_);\n }\n\n // Redraw only the highlighted series in the interactive canvas (not the\n // static plot canvas, which is where series are usually drawn).\n this.plotter_._renderLineChart(this.highlightSet_, ctx);\n } else if (this.previousVerticalX_ >= 0) {\n // Determine the maximum highlight circle size.\n var maxCircleSize = 0;\n var labels = this.attr_('labels');\n for (i = 1; i < labels.length; i++) {\n var r = this.getNumericOption('highlightCircleSize', labels[i]);\n if (r > maxCircleSize) maxCircleSize = r;\n }\n var px = this.previousVerticalX_;\n ctx.clearRect(px - maxCircleSize - 1, 0, 2 * maxCircleSize + 2, this.height_);\n }\n\n if (this.selPoints_.length > 0) {\n // Draw colored circles over the center of each selected point\n var canvasx = this.selPoints_[0].canvasx;\n ctx.save();\n for (i = 0; i < this.selPoints_.length; i++) {\n var pt = this.selPoints_[i];\n if (isNaN(pt.canvasy)) continue;\n\n var circleSize = this.getNumericOption('highlightCircleSize', pt.name);\n var callback = this.getFunctionOption(\"drawHighlightPointCallback\", pt.name);\n var color = this.plotter_.colors[pt.name];\n if (!callback) {\n callback = utils.Circles.DEFAULT;\n }\n ctx.lineWidth = this.getNumericOption('strokeWidth', pt.name);\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n callback.call(this, this, pt.name, ctx, canvasx, pt.canvasy, color, circleSize, pt.idx);\n }\n ctx.restore();\n\n this.previousVerticalX_ = canvasx;\n }\n};\n\n/**\n * Manually set the selected points and display information about them in the\n * legend. The selection can be cleared using clearSelection() and queried\n * using getSelection().\n *\n * To set a selected series but not a selected point, call setSelection with\n * row=false and the selected series name.\n *\n * @param {number} row Row number that should be highlighted (i.e. appear with\n * hover dots on the chart).\n * @param {seriesName} optional series name to highlight that series with the\n * the highlightSeriesOpts setting.\n * @param { locked } optional If true, keep seriesName selected when mousing\n * over the graph, disabling closest-series highlighting. Call clearSelection()\n * to unlock it.\n */\nDygraph.prototype.setSelection = function (row, opt_seriesName, opt_locked) {\n // Extract the points we've selected\n this.selPoints_ = [];\n\n var changed = false;\n if (row !== false && row >= 0) {\n if (row != this.lastRow_) changed = true;\n this.lastRow_ = row;\n for (var setIdx = 0; setIdx < this.layout_.points.length; ++setIdx) {\n var points = this.layout_.points[setIdx];\n // Check if the point at the appropriate index is the point we're looking\n // for. If it is, just use it, otherwise search the array for a point\n // in the proper place.\n var setRow = row - this.getLeftBoundary_(setIdx);\n if (setRow >= 0 && setRow < points.length && points[setRow].idx == row) {\n var point = points[setRow];\n if (point.yval !== null) this.selPoints_.push(point);\n } else {\n for (var pointIdx = 0; pointIdx < points.length; ++pointIdx) {\n var point = points[pointIdx];\n if (point.idx == row) {\n if (point.yval !== null) {\n this.selPoints_.push(point);\n }\n break;\n }\n }\n }\n }\n } else {\n if (this.lastRow_ >= 0) changed = true;\n this.lastRow_ = -1;\n }\n\n if (this.selPoints_.length) {\n this.lastx_ = this.selPoints_[0].xval;\n } else {\n this.lastx_ = -1;\n }\n\n if (opt_seriesName !== undefined) {\n if (this.highlightSet_ !== opt_seriesName) changed = true;\n this.highlightSet_ = opt_seriesName;\n }\n\n if (opt_locked !== undefined) {\n this.lockedSet_ = opt_locked;\n }\n\n if (changed) {\n this.updateSelection_(undefined);\n }\n return changed;\n};\n\n/**\n * The mouse has left the canvas. Clear out whatever artifacts remain\n * @param {Object} event the mouseout event from the browser.\n * @private\n */\nDygraph.prototype.mouseOut_ = function (event) {\n if (this.getFunctionOption(\"unhighlightCallback\")) {\n this.getFunctionOption(\"unhighlightCallback\").call(this, event);\n }\n\n if (this.getBooleanOption(\"hideOverlayOnMouseOut\") && !this.lockedSet_) {\n this.clearSelection();\n }\n};\n\n/**\n * Clears the current selection (i.e. points that were highlighted by moving\n * the mouse over the chart).\n */\nDygraph.prototype.clearSelection = function () {\n this.cascadeEvents_('deselect', {});\n\n this.lockedSet_ = false;\n // Get rid of the overlay data\n if (this.fadeLevel) {\n this.animateSelection_(-1);\n return;\n }\n this.canvas_ctx_.clearRect(0, 0, this.width_, this.height_);\n this.fadeLevel = 0;\n this.selPoints_ = [];\n this.lastx_ = -1;\n this.lastRow_ = -1;\n this.highlightSet_ = null;\n};\n\n/**\n * Returns the number of the currently selected row. To get data for this row,\n * you can use the getValue method.\n * @return {number} row number, or -1 if nothing is selected\n */\nDygraph.prototype.getSelection = function () {\n if (!this.selPoints_ || this.selPoints_.length < 1) {\n return -1;\n }\n\n for (var setIdx = 0; setIdx < this.layout_.points.length; setIdx++) {\n var points = this.layout_.points[setIdx];\n for (var row = 0; row < points.length; row++) {\n if (points[row].x == this.selPoints_[0].x) {\n return points[row].idx;\n }\n }\n }\n return -1;\n};\n\n/**\n * Returns the name of the currently-highlighted series.\n * Only available when the highlightSeriesOpts option is in use.\n */\nDygraph.prototype.getHighlightSeries = function () {\n return this.highlightSet_;\n};\n\n/**\n * Returns true if the currently-highlighted series was locked\n * via setSelection(..., seriesName, true).\n */\nDygraph.prototype.isSeriesLocked = function () {\n return this.lockedSet_;\n};\n\n/**\n * Fires when there's data available to be graphed.\n * @param {string} data Raw CSV data to be plotted\n * @private\n */\nDygraph.prototype.loadedEvent_ = function (data) {\n this.rawData_ = this.parseCSV_(data);\n this.cascadeDataDidUpdateEvent_();\n this.predraw_();\n};\n\n/**\n * Add ticks on the x-axis representing years, months, quarters, weeks, or days\n * @private\n */\nDygraph.prototype.addXTicks_ = function () {\n // Determine the correct ticks scale on the x-axis: quarterly, monthly, ...\n var range;\n if (this.dateWindow_) {\n range = [this.dateWindow_[0], this.dateWindow_[1]];\n } else {\n range = this.xAxisExtremes();\n }\n\n var xAxisOptionsView = this.optionsViewForAxis_('x');\n var xTicks = xAxisOptionsView('ticker')(range[0], range[1], this.plotter_.area.w, // TODO(danvk): should be area.width\n xAxisOptionsView, this);\n // var msg = 'ticker(' + range[0] + ', ' + range[1] + ', ' + this.width_ + ', ' + this.attr_('pixelsPerXLabel') + ') -> ' + JSON.stringify(xTicks);\n // console.log(msg);\n this.layout_.setXTicks(xTicks);\n};\n\n/**\n * Returns the correct handler class for the currently set options.\n * @private\n */\nDygraph.prototype.getHandlerClass_ = function () {\n var handlerClass;\n if (this.attr_('dataHandler')) {\n handlerClass = this.attr_('dataHandler');\n } else if (this.fractions_) {\n if (this.getBooleanOption('errorBars')) {\n handlerClass = _datahandlerBarsFractions2['default'];\n } else {\n handlerClass = _datahandlerDefaultFractions2['default'];\n }\n } else if (this.getBooleanOption('customBars')) {\n handlerClass = _datahandlerBarsCustom2['default'];\n } else if (this.getBooleanOption('errorBars')) {\n handlerClass = _datahandlerBarsError2['default'];\n } else {\n handlerClass = _datahandlerDefault2['default'];\n }\n return handlerClass;\n};\n\n/**\n * @private\n * This function is called once when the chart's data is changed or the options\n * dictionary is updated. It is _not_ called when the user pans or zooms. The\n * idea is that values derived from the chart's data can be computed here,\n * rather than every time the chart is drawn. This includes things like the\n * number of axes, rolling averages, etc.\n */\nDygraph.prototype.predraw_ = function () {\n var start = new Date();\n\n // Create the correct dataHandler\n this.dataHandler_ = new (this.getHandlerClass_())();\n\n this.layout_.computePlotArea();\n\n // TODO(danvk): move more computations out of drawGraph_ and into here.\n this.computeYAxes_();\n\n if (!this.is_initial_draw_) {\n this.canvas_ctx_.restore();\n this.hidden_ctx_.restore();\n }\n\n this.canvas_ctx_.save();\n this.hidden_ctx_.save();\n\n // Create a new plotter.\n this.plotter_ = new _dygraphCanvas2['default'](this, this.hidden_, this.hidden_ctx_, this.layout_);\n\n // The roller sits in the bottom left corner of the chart. We don't know where\n // this will be until the options are available, so it's positioned here.\n this.createRollInterface_();\n\n this.cascadeEvents_('predraw');\n\n // Convert the raw data (a 2D array) into the internal format and compute\n // rolling averages.\n this.rolledSeries_ = [null]; // x-axis is the first series and it's special\n for (var i = 1; i < this.numColumns(); i++) {\n // var logScale = this.attr_('logscale', i); // TODO(klausw): this looks wrong // konigsberg thinks so too.\n var series = this.dataHandler_.extractSeries(this.rawData_, i, this.attributes_);\n if (this.rollPeriod_ > 1) {\n series = this.dataHandler_.rollingAverage(series, this.rollPeriod_, this.attributes_);\n }\n\n this.rolledSeries_.push(series);\n }\n\n // If the data or options have changed, then we'd better redraw.\n this.drawGraph_();\n\n // This is used to determine whether to do various animations.\n var end = new Date();\n this.drawingTimeMs_ = end - start;\n};\n\n/**\n * Point structure.\n *\n * xval_* and yval_* are the original unscaled data values,\n * while x_* and y_* are scaled to the range (0.0-1.0) for plotting.\n * yval_stacked is the cumulative Y value used for stacking graphs,\n * and bottom/top/minus/plus are used for error bar graphs.\n *\n * @typedef {{\n * idx: number,\n * name: string,\n * x: ?number,\n * xval: ?number,\n * y_bottom: ?number,\n * y: ?number,\n * y_stacked: ?number,\n * y_top: ?number,\n * yval_minus: ?number,\n * yval: ?number,\n * yval_plus: ?number,\n * yval_stacked\n * }}\n */\nDygraph.PointType = undefined;\n\n/**\n * Calculates point stacking for stackedGraph=true.\n *\n * For stacking purposes, interpolate or extend neighboring data across\n * NaN values based on stackedGraphNaNFill settings. This is for display\n * only, the underlying data value as shown in the legend remains NaN.\n *\n * @param {Array.} points Point array for a single series.\n * Updates each Point's yval_stacked property.\n * @param {Array.} cumulativeYval Accumulated top-of-graph stacked Y\n * values for the series seen so far. Index is the row number. Updated\n * based on the current series's values.\n * @param {Array.} seriesExtremes Min and max values, updated\n * to reflect the stacked values.\n * @param {string} fillMethod Interpolation method, one of 'all', 'inside', or\n * 'none'.\n * @private\n */\nDygraph.stackPoints_ = function (points, cumulativeYval, seriesExtremes, fillMethod) {\n var lastXval = null;\n var prevPoint = null;\n var nextPoint = null;\n var nextPointIdx = -1;\n\n // Find the next stackable point starting from the given index.\n var updateNextPoint = function updateNextPoint(idx) {\n // If we've previously found a non-NaN point and haven't gone past it yet,\n // just use that.\n if (nextPointIdx >= idx) return;\n\n // We haven't found a non-NaN point yet or have moved past it,\n // look towards the right to find a non-NaN point.\n for (var j = idx; j < points.length; ++j) {\n // Clear out a previously-found point (if any) since it's no longer\n // valid, we shouldn't use it for interpolation anymore.\n nextPoint = null;\n if (!isNaN(points[j].yval) && points[j].yval !== null) {\n nextPointIdx = j;\n nextPoint = points[j];\n break;\n }\n }\n };\n\n for (var i = 0; i < points.length; ++i) {\n var point = points[i];\n var xval = point.xval;\n if (cumulativeYval[xval] === undefined) {\n cumulativeYval[xval] = 0;\n }\n\n var actualYval = point.yval;\n if (isNaN(actualYval) || actualYval === null) {\n if (fillMethod == 'none') {\n actualYval = 0;\n } else {\n // Interpolate/extend for stacking purposes if possible.\n updateNextPoint(i);\n if (prevPoint && nextPoint && fillMethod != 'none') {\n // Use linear interpolation between prevPoint and nextPoint.\n actualYval = prevPoint.yval + (nextPoint.yval - prevPoint.yval) * ((xval - prevPoint.xval) / (nextPoint.xval - prevPoint.xval));\n } else if (prevPoint && fillMethod == 'all') {\n actualYval = prevPoint.yval;\n } else if (nextPoint && fillMethod == 'all') {\n actualYval = nextPoint.yval;\n } else {\n actualYval = 0;\n }\n }\n } else {\n prevPoint = point;\n }\n\n var stackedYval = cumulativeYval[xval];\n if (lastXval != xval) {\n // If an x-value is repeated, we ignore the duplicates.\n stackedYval += actualYval;\n cumulativeYval[xval] = stackedYval;\n }\n lastXval = xval;\n\n point.yval_stacked = stackedYval;\n\n if (stackedYval > seriesExtremes[1]) {\n seriesExtremes[1] = stackedYval;\n }\n if (stackedYval < seriesExtremes[0]) {\n seriesExtremes[0] = stackedYval;\n }\n }\n};\n\n/**\n * Loop over all fields and create datasets, calculating extreme y-values for\n * each series and extreme x-indices as we go.\n *\n * dateWindow is passed in as an explicit parameter so that we can compute\n * extreme values \"speculatively\", i.e. without actually setting state on the\n * dygraph.\n *\n * @param {Array.)>>} rolledSeries, where\n * rolledSeries[seriesIndex][row] = raw point, where\n * seriesIndex is the column number starting with 1, and\n * rawPoint is [x,y] or [x, [y, err]] or [x, [y, yminus, yplus]].\n * @param {?Array.} dateWindow [xmin, xmax] pair, or null.\n * @return {{\n * points: Array.>,\n * seriesExtremes: Array.>,\n * boundaryIds: Array.}}\n * @private\n */\nDygraph.prototype.gatherDatasets_ = function (rolledSeries, dateWindow) {\n var boundaryIds = [];\n var points = [];\n var cumulativeYval = []; // For stacked series.\n var extremes = {}; // series name -> [low, high]\n var seriesIdx, sampleIdx;\n var firstIdx, lastIdx;\n var axisIdx;\n\n // Loop over the fields (series). Go from the last to the first,\n // because if they're stacked that's how we accumulate the values.\n var num_series = rolledSeries.length - 1;\n var series;\n for (seriesIdx = num_series; seriesIdx >= 1; seriesIdx--) {\n if (!this.visibility()[seriesIdx - 1]) continue;\n\n // Prune down to the desired range, if necessary (for zooming)\n // Because there can be lines going to points outside of the visible area,\n // we actually prune to visible points, plus one on either side.\n if (dateWindow) {\n series = rolledSeries[seriesIdx];\n var low = dateWindow[0];\n var high = dateWindow[1];\n\n // TODO(danvk): do binary search instead of linear search.\n // TODO(danvk): pass firstIdx and lastIdx directly to the renderer.\n firstIdx = null;\n lastIdx = null;\n for (sampleIdx = 0; sampleIdx < series.length; sampleIdx++) {\n if (series[sampleIdx][0] >= low && firstIdx === null) {\n firstIdx = sampleIdx;\n }\n if (series[sampleIdx][0] <= high) {\n lastIdx = sampleIdx;\n }\n }\n\n if (firstIdx === null) firstIdx = 0;\n var correctedFirstIdx = firstIdx;\n var isInvalidValue = true;\n while (isInvalidValue && correctedFirstIdx > 0) {\n correctedFirstIdx--;\n // check if the y value is null.\n isInvalidValue = series[correctedFirstIdx][1] === null;\n }\n\n if (lastIdx === null) lastIdx = series.length - 1;\n var correctedLastIdx = lastIdx;\n isInvalidValue = true;\n while (isInvalidValue && correctedLastIdx < series.length - 1) {\n correctedLastIdx++;\n isInvalidValue = series[correctedLastIdx][1] === null;\n }\n\n if (correctedFirstIdx !== firstIdx) {\n firstIdx = correctedFirstIdx;\n }\n if (correctedLastIdx !== lastIdx) {\n lastIdx = correctedLastIdx;\n }\n\n boundaryIds[seriesIdx - 1] = [firstIdx, lastIdx];\n\n // .slice's end is exclusive, we want to include lastIdx.\n series = series.slice(firstIdx, lastIdx + 1);\n } else {\n series = rolledSeries[seriesIdx];\n boundaryIds[seriesIdx - 1] = [0, series.length - 1];\n }\n\n var seriesName = this.attr_(\"labels\")[seriesIdx];\n var seriesExtremes = this.dataHandler_.getExtremeYValues(series, dateWindow, this.getBooleanOption(\"stepPlot\", seriesName));\n\n var seriesPoints = this.dataHandler_.seriesToPoints(series, seriesName, boundaryIds[seriesIdx - 1][0]);\n\n if (this.getBooleanOption(\"stackedGraph\")) {\n axisIdx = this.attributes_.axisForSeries(seriesName);\n if (cumulativeYval[axisIdx] === undefined) {\n cumulativeYval[axisIdx] = [];\n }\n Dygraph.stackPoints_(seriesPoints, cumulativeYval[axisIdx], seriesExtremes, this.getBooleanOption(\"stackedGraphNaNFill\"));\n }\n\n extremes[seriesName] = seriesExtremes;\n points[seriesIdx] = seriesPoints;\n }\n\n return { points: points, extremes: extremes, boundaryIds: boundaryIds };\n};\n\n/**\n * Update the graph with new data. This method is called when the viewing area\n * has changed. If the underlying data or options have changed, predraw_ will\n * be called before drawGraph_ is called.\n *\n * @private\n */\nDygraph.prototype.drawGraph_ = function () {\n var start = new Date();\n\n // This is used to set the second parameter to drawCallback, below.\n var is_initial_draw = this.is_initial_draw_;\n this.is_initial_draw_ = false;\n\n this.layout_.removeAllDatasets();\n this.setColors_();\n this.attrs_.pointSize = 0.5 * this.getNumericOption('highlightCircleSize');\n\n var packed = this.gatherDatasets_(this.rolledSeries_, this.dateWindow_);\n var points = packed.points;\n var extremes = packed.extremes;\n this.boundaryIds_ = packed.boundaryIds;\n\n this.setIndexByName_ = {};\n var labels = this.attr_(\"labels\");\n var dataIdx = 0;\n for (var i = 1; i < points.length; i++) {\n if (!this.visibility()[i - 1]) continue;\n this.layout_.addDataset(labels[i], points[i]);\n this.datasetIndex_[i] = dataIdx++;\n }\n for (var i = 0; i < labels.length; i++) {\n this.setIndexByName_[labels[i]] = i;\n }\n\n this.computeYAxisRanges_(extremes);\n this.layout_.setYAxes(this.axes_);\n\n this.addXTicks_();\n\n // Tell PlotKit to use this new data and render itself\n this.layout_.evaluate();\n this.renderGraph_(is_initial_draw);\n\n if (this.getStringOption(\"timingName\")) {\n var end = new Date();\n console.log(this.getStringOption(\"timingName\") + \" - drawGraph: \" + (end - start) + \"ms\");\n }\n};\n\n/**\n * This does the work of drawing the chart. It assumes that the layout and axis\n * scales have already been set (e.g. by predraw_).\n *\n * @private\n */\nDygraph.prototype.renderGraph_ = function (is_initial_draw) {\n this.cascadeEvents_('clearChart');\n this.plotter_.clear();\n\n var underlayCallback = this.getFunctionOption('underlayCallback');\n if (underlayCallback) {\n // NOTE: we pass the dygraph object to this callback twice to avoid breaking\n // users who expect a deprecated form of this callback.\n underlayCallback.call(this, this.hidden_ctx_, this.layout_.getPlotArea(), this, this);\n }\n\n var e = {\n canvas: this.hidden_,\n drawingContext: this.hidden_ctx_\n };\n this.cascadeEvents_('willDrawChart', e);\n this.plotter_.render();\n this.cascadeEvents_('didDrawChart', e);\n this.lastRow_ = -1; // because plugins/legend.js clears the legend\n\n // TODO(danvk): is this a performance bottleneck when panning?\n // The interaction canvas should already be empty in that situation.\n this.canvas_.getContext('2d').clearRect(0, 0, this.width_, this.height_);\n\n var drawCallback = this.getFunctionOption(\"drawCallback\");\n if (drawCallback !== null) {\n drawCallback.call(this, this, is_initial_draw);\n }\n if (is_initial_draw) {\n this.readyFired_ = true;\n while (this.readyFns_.length > 0) {\n var fn = this.readyFns_.pop();\n fn(this);\n }\n }\n};\n\n/**\n * @private\n * Determine properties of the y-axes which are independent of the data\n * currently being displayed. This includes things like the number of axes and\n * the style of the axes. It does not include the range of each axis and its\n * tick marks.\n * This fills in this.axes_.\n * axes_ = [ { options } ]\n * indices are into the axes_ array.\n */\nDygraph.prototype.computeYAxes_ = function () {\n var axis, index, opts, v;\n\n // this.axes_ doesn't match this.attributes_.axes_.options. It's used for\n // data computation as well as options storage.\n // Go through once and add all the axes.\n this.axes_ = [];\n\n for (axis = 0; axis < this.attributes_.numAxes(); axis++) {\n // Add a new axis, making a copy of its per-axis options.\n opts = { g: this };\n utils.update(opts, this.attributes_.axisOptions(axis));\n this.axes_[axis] = opts;\n }\n\n for (axis = 0; axis < this.axes_.length; axis++) {\n if (axis === 0) {\n opts = this.optionsViewForAxis_('y' + (axis ? '2' : ''));\n v = opts(\"valueRange\");\n if (v) this.axes_[axis].valueRange = v;\n } else {\n // To keep old behavior\n var axes = this.user_attrs_.axes;\n if (axes && axes.y2) {\n v = axes.y2.valueRange;\n if (v) this.axes_[axis].valueRange = v;\n }\n }\n }\n};\n\n/**\n * Returns the number of y-axes on the chart.\n * @return {number} the number of axes.\n */\nDygraph.prototype.numAxes = function () {\n return this.attributes_.numAxes();\n};\n\n/**\n * @private\n * Returns axis properties for the given series.\n * @param {string} setName The name of the series for which to get axis\n * properties, e.g. 'Y1'.\n * @return {Object} The axis properties.\n */\nDygraph.prototype.axisPropertiesForSeries = function (series) {\n // TODO(danvk): handle errors.\n return this.axes_[this.attributes_.axisForSeries(series)];\n};\n\n/**\n * @private\n * Determine the value range and tick marks for each axis.\n * @param {Object} extremes A mapping from seriesName -> [low, high]\n * This fills in the valueRange and ticks fields in each entry of this.axes_.\n */\nDygraph.prototype.computeYAxisRanges_ = function (extremes) {\n var isNullUndefinedOrNaN = function isNullUndefinedOrNaN(num) {\n return isNaN(parseFloat(num));\n };\n var numAxes = this.attributes_.numAxes();\n var ypadCompat, span, series, ypad;\n\n var p_axis;\n\n // Compute extreme values, a span and tick marks for each axis.\n for (var i = 0; i < numAxes; i++) {\n var axis = this.axes_[i];\n var logscale = this.attributes_.getForAxis(\"logscale\", i);\n var includeZero = this.attributes_.getForAxis(\"includeZero\", i);\n var independentTicks = this.attributes_.getForAxis(\"independentTicks\", i);\n series = this.attributes_.seriesForAxis(i);\n\n // Add some padding. This supports two Y padding operation modes:\n //\n // - backwards compatible (yRangePad not set):\n // 10% padding for automatic Y ranges, but not for user-supplied\n // ranges, and move a close-to-zero edge to zero, since drawing at the edge\n // results in invisible lines. Unfortunately lines drawn at the edge of a\n // user-supplied range will still be invisible. If logscale is\n // set, add a variable amount of padding at the top but\n // none at the bottom.\n //\n // - new-style (yRangePad set by the user):\n // always add the specified Y padding.\n //\n ypadCompat = true;\n ypad = 0.1; // add 10%\n var yRangePad = this.getNumericOption('yRangePad');\n if (yRangePad !== null) {\n ypadCompat = false;\n // Convert pixel padding to ratio\n ypad = yRangePad / this.plotter_.area.h;\n }\n\n if (series.length === 0) {\n // If no series are defined or visible then use a reasonable default\n axis.extremeRange = [0, 1];\n } else {\n // Calculate the extremes of extremes.\n var minY = Infinity; // extremes[series[0]][0];\n var maxY = -Infinity; // extremes[series[0]][1];\n var extremeMinY, extremeMaxY;\n\n for (var j = 0; j < series.length; j++) {\n // this skips invisible series\n if (!extremes.hasOwnProperty(series[j])) continue;\n\n // Only use valid extremes to stop null data series' from corrupting the scale.\n extremeMinY = extremes[series[j]][0];\n if (extremeMinY !== null) {\n minY = Math.min(extremeMinY, minY);\n }\n extremeMaxY = extremes[series[j]][1];\n if (extremeMaxY !== null) {\n maxY = Math.max(extremeMaxY, maxY);\n }\n }\n\n // Include zero if requested by the user.\n if (includeZero && !logscale) {\n if (minY > 0) minY = 0;\n if (maxY < 0) maxY = 0;\n }\n\n // Ensure we have a valid scale, otherwise default to [0, 1] for safety.\n if (minY == Infinity) minY = 0;\n if (maxY == -Infinity) maxY = 1;\n\n span = maxY - minY;\n // special case: if we have no sense of scale, center on the sole value.\n if (span === 0) {\n if (maxY !== 0) {\n span = Math.abs(maxY);\n } else {\n // ... and if the sole value is zero, use range 0-1.\n maxY = 1;\n span = 1;\n }\n }\n\n var maxAxisY = maxY,\n minAxisY = minY;\n if (ypadCompat) {\n if (logscale) {\n maxAxisY = maxY + ypad * span;\n minAxisY = minY;\n } else {\n maxAxisY = maxY + ypad * span;\n minAxisY = minY - ypad * span;\n\n // Backwards-compatible behavior: Move the span to start or end at zero if it's\n // close to zero.\n if (minAxisY < 0 && minY >= 0) minAxisY = 0;\n if (maxAxisY > 0 && maxY <= 0) maxAxisY = 0;\n }\n }\n axis.extremeRange = [minAxisY, maxAxisY];\n }\n if (axis.valueRange) {\n // This is a user-set value range for this axis.\n var y0 = isNullUndefinedOrNaN(axis.valueRange[0]) ? axis.extremeRange[0] : axis.valueRange[0];\n var y1 = isNullUndefinedOrNaN(axis.valueRange[1]) ? axis.extremeRange[1] : axis.valueRange[1];\n axis.computedValueRange = [y0, y1];\n } else {\n axis.computedValueRange = axis.extremeRange;\n }\n if (!ypadCompat) {\n // When using yRangePad, adjust the upper/lower bounds to add\n // padding unless the user has zoomed/panned the Y axis range.\n if (logscale) {\n y0 = axis.computedValueRange[0];\n y1 = axis.computedValueRange[1];\n var y0pct = ypad / (2 * ypad - 1);\n var y1pct = (ypad - 1) / (2 * ypad - 1);\n axis.computedValueRange[0] = utils.logRangeFraction(y0, y1, y0pct);\n axis.computedValueRange[1] = utils.logRangeFraction(y0, y1, y1pct);\n } else {\n y0 = axis.computedValueRange[0];\n y1 = axis.computedValueRange[1];\n span = y1 - y0;\n axis.computedValueRange[0] = y0 - span * ypad;\n axis.computedValueRange[1] = y1 + span * ypad;\n }\n }\n\n if (independentTicks) {\n axis.independentTicks = independentTicks;\n var opts = this.optionsViewForAxis_('y' + (i ? '2' : ''));\n var ticker = opts('ticker');\n axis.ticks = ticker(axis.computedValueRange[0], axis.computedValueRange[1], this.plotter_.area.h, opts, this);\n // Define the first independent axis as primary axis.\n if (!p_axis) p_axis = axis;\n }\n }\n if (p_axis === undefined) {\n throw \"Configuration Error: At least one axis has to have the \\\"independentTicks\\\" option activated.\";\n }\n // Add ticks. By default, all axes inherit the tick positions of the\n // primary axis. However, if an axis is specifically marked as having\n // independent ticks, then that is permissible as well.\n for (var i = 0; i < numAxes; i++) {\n var axis = this.axes_[i];\n\n if (!axis.independentTicks) {\n var opts = this.optionsViewForAxis_('y' + (i ? '2' : ''));\n var ticker = opts('ticker');\n var p_ticks = p_axis.ticks;\n var p_scale = p_axis.computedValueRange[1] - p_axis.computedValueRange[0];\n var scale = axis.computedValueRange[1] - axis.computedValueRange[0];\n var tick_values = [];\n for (var k = 0; k < p_ticks.length; k++) {\n var y_frac = (p_ticks[k].v - p_axis.computedValueRange[0]) / p_scale;\n var y_val = axis.computedValueRange[0] + y_frac * scale;\n tick_values.push(y_val);\n }\n\n axis.ticks = ticker(axis.computedValueRange[0], axis.computedValueRange[1], this.plotter_.area.h, opts, this, tick_values);\n }\n }\n};\n\n/**\n * Detects the type of the str (date or numeric) and sets the various\n * formatting attributes in this.attrs_ based on this type.\n * @param {string} str An x value.\n * @private\n */\nDygraph.prototype.detectTypeFromString_ = function (str) {\n var isDate = false;\n var dashPos = str.indexOf('-'); // could be 2006-01-01 _or_ 1.0e-2\n if (dashPos > 0 && str[dashPos - 1] != 'e' && str[dashPos - 1] != 'E' || str.indexOf('/') >= 0 || isNaN(parseFloat(str))) {\n isDate = true;\n } else if (str.length == 8 && str > '19700101' && str < '20371231') {\n // TODO(danvk): remove support for this format.\n isDate = true;\n }\n\n this.setXAxisOptions_(isDate);\n};\n\nDygraph.prototype.setXAxisOptions_ = function (isDate) {\n if (isDate) {\n this.attrs_.xValueParser = utils.dateParser;\n this.attrs_.axes.x.valueFormatter = utils.dateValueFormatter;\n this.attrs_.axes.x.ticker = DygraphTickers.dateTicker;\n this.attrs_.axes.x.axisLabelFormatter = utils.dateAxisLabelFormatter;\n } else {\n /** @private (shut up, jsdoc!) */\n this.attrs_.xValueParser = function (x) {\n return parseFloat(x);\n };\n // TODO(danvk): use Dygraph.numberValueFormatter here?\n /** @private (shut up, jsdoc!) */\n this.attrs_.axes.x.valueFormatter = function (x) {\n return x;\n };\n this.attrs_.axes.x.ticker = DygraphTickers.numericTicks;\n this.attrs_.axes.x.axisLabelFormatter = this.attrs_.axes.x.valueFormatter;\n }\n};\n\n/**\n * @private\n * Parses a string in a special csv format. We expect a csv file where each\n * line is a date point, and the first field in each line is the date string.\n * We also expect that all remaining fields represent series.\n * if the errorBars attribute is set, then interpret the fields as:\n * date, series1, stddev1, series2, stddev2, ...\n * @param {[Object]} data See above.\n *\n * @return [Object] An array with one entry for each row. These entries\n * are an array of cells in that row. The first entry is the parsed x-value for\n * the row. The second, third, etc. are the y-values. These can take on one of\n * three forms, depending on the CSV and constructor parameters:\n * 1. numeric value\n * 2. [ value, stddev ]\n * 3. [ low value, center value, high value ]\n */\nDygraph.prototype.parseCSV_ = function (data) {\n var ret = [];\n var line_delimiter = utils.detectLineDelimiter(data);\n var lines = data.split(line_delimiter || \"\\n\");\n var vals, j;\n\n // Use the default delimiter or fall back to a tab if that makes sense.\n var delim = this.getStringOption('delimiter');\n if (lines[0].indexOf(delim) == -1 && lines[0].indexOf('\\t') >= 0) {\n delim = '\\t';\n }\n\n var start = 0;\n if (!('labels' in this.user_attrs_)) {\n // User hasn't explicitly set labels, so they're (presumably) in the CSV.\n start = 1;\n this.attrs_.labels = lines[0].split(delim); // NOTE: _not_ user_attrs_.\n this.attributes_.reparseSeries();\n }\n var line_no = 0;\n\n var xParser;\n var defaultParserSet = false; // attempt to auto-detect x value type\n var expectedCols = this.attr_(\"labels\").length;\n var outOfOrder = false;\n for (var i = start; i < lines.length; i++) {\n var line = lines[i];\n line_no = i;\n if (line.length === 0) continue; // skip blank lines\n if (line[0] == '#') continue; // skip comment lines\n var inFields = line.split(delim);\n if (inFields.length < 2) continue;\n\n var fields = [];\n if (!defaultParserSet) {\n this.detectTypeFromString_(inFields[0]);\n xParser = this.getFunctionOption(\"xValueParser\");\n defaultParserSet = true;\n }\n fields[0] = xParser(inFields[0], this);\n\n // If fractions are expected, parse the numbers as \"A/B\"\n if (this.fractions_) {\n for (j = 1; j < inFields.length; j++) {\n // TODO(danvk): figure out an appropriate way to flag parse errors.\n vals = inFields[j].split(\"/\");\n if (vals.length != 2) {\n console.error('Expected fractional \"num/den\" values in CSV data ' + \"but found a value '\" + inFields[j] + \"' on line \" + (1 + i) + \" ('\" + line + \"') which is not of this form.\");\n fields[j] = [0, 0];\n } else {\n fields[j] = [utils.parseFloat_(vals[0], i, line), utils.parseFloat_(vals[1], i, line)];\n }\n }\n } else if (this.getBooleanOption(\"errorBars\")) {\n // If there are error bars, values are (value, stddev) pairs\n if (inFields.length % 2 != 1) {\n console.error('Expected alternating (value, stdev.) pairs in CSV data ' + 'but line ' + (1 + i) + ' has an odd number of values (' + (inFields.length - 1) + \"): '\" + line + \"'\");\n }\n for (j = 1; j < inFields.length; j += 2) {\n fields[(j + 1) / 2] = [utils.parseFloat_(inFields[j], i, line), utils.parseFloat_(inFields[j + 1], i, line)];\n }\n } else if (this.getBooleanOption(\"customBars\")) {\n // Bars are a low;center;high tuple\n for (j = 1; j < inFields.length; j++) {\n var val = inFields[j];\n if (/^ *$/.test(val)) {\n fields[j] = [null, null, null];\n } else {\n vals = val.split(\";\");\n if (vals.length == 3) {\n fields[j] = [utils.parseFloat_(vals[0], i, line), utils.parseFloat_(vals[1], i, line), utils.parseFloat_(vals[2], i, line)];\n } else {\n console.warn('When using customBars, values must be either blank ' + 'or \"low;center;high\" tuples (got \"' + val + '\" on line ' + (1 + i));\n }\n }\n }\n } else {\n // Values are just numbers\n for (j = 1; j < inFields.length; j++) {\n fields[j] = utils.parseFloat_(inFields[j], i, line);\n }\n }\n if (ret.length > 0 && fields[0] < ret[ret.length - 1][0]) {\n outOfOrder = true;\n }\n\n if (fields.length != expectedCols) {\n console.error(\"Number of columns in line \" + i + \" (\" + fields.length + \") does not agree with number of labels (\" + expectedCols + \") \" + line);\n }\n\n // If the user specified the 'labels' option and none of the cells of the\n // first row parsed correctly, then they probably double-specified the\n // labels. We go with the values set in the option, discard this row and\n // log a warning to the JS console.\n if (i === 0 && this.attr_('labels')) {\n var all_null = true;\n for (j = 0; all_null && j < fields.length; j++) {\n if (fields[j]) all_null = false;\n }\n if (all_null) {\n console.warn(\"The dygraphs 'labels' option is set, but the first row \" + \"of CSV data ('\" + line + \"') appears to also contain \" + \"labels. Will drop the CSV labels and use the option \" + \"labels.\");\n continue;\n }\n }\n ret.push(fields);\n }\n\n if (outOfOrder) {\n console.warn(\"CSV is out of order; order it correctly to speed loading.\");\n ret.sort(function (a, b) {\n return a[0] - b[0];\n });\n }\n\n return ret;\n};\n\n// In native format, all values must be dates or numbers.\n// This check isn't perfect but will catch most mistaken uses of strings.\nfunction validateNativeFormat(data) {\n var firstRow = data[0];\n var firstX = firstRow[0];\n if (typeof firstX !== 'number' && !utils.isDateLike(firstX)) {\n throw new Error('Expected number or date but got ' + typeof firstX + ': ' + firstX + '.');\n }\n for (var i = 1; i < firstRow.length; i++) {\n var val = firstRow[i];\n if (val === null || val === undefined) continue;\n if (typeof val === 'number') continue;\n if (utils.isArrayLike(val)) continue; // e.g. error bars or custom bars.\n throw new Error('Expected number or array but got ' + typeof val + ': ' + val + '.');\n }\n}\n\n/**\n * The user has provided their data as a pre-packaged JS array. If the x values\n * are numeric, this is the same as dygraphs' internal format. If the x values\n * are dates, we need to convert them from Date objects to ms since epoch.\n * @param {!Array} data\n * @return {Object} data with numeric x values.\n * @private\n */\nDygraph.prototype.parseArray_ = function (data) {\n // Peek at the first x value to see if it's numeric.\n if (data.length === 0) {\n console.error(\"Can't plot empty data set\");\n return null;\n }\n if (data[0].length === 0) {\n console.error(\"Data set cannot contain an empty row\");\n return null;\n }\n\n validateNativeFormat(data);\n\n var i;\n if (this.attr_(\"labels\") === null) {\n console.warn(\"Using default labels. Set labels explicitly via 'labels' \" + \"in the options parameter\");\n this.attrs_.labels = [\"X\"];\n for (i = 1; i < data[0].length; i++) {\n this.attrs_.labels.push(\"Y\" + i); // Not user_attrs_.\n }\n this.attributes_.reparseSeries();\n } else {\n var num_labels = this.attr_(\"labels\");\n if (num_labels.length != data[0].length) {\n console.error(\"Mismatch between number of labels (\" + num_labels + \")\" + \" and number of columns in array (\" + data[0].length + \")\");\n return null;\n }\n }\n\n if (utils.isDateLike(data[0][0])) {\n // Some intelligent defaults for a date x-axis.\n this.attrs_.axes.x.valueFormatter = utils.dateValueFormatter;\n this.attrs_.axes.x.ticker = DygraphTickers.dateTicker;\n this.attrs_.axes.x.axisLabelFormatter = utils.dateAxisLabelFormatter;\n\n // Assume they're all dates.\n var parsedData = utils.clone(data);\n for (i = 0; i < data.length; i++) {\n if (parsedData[i].length === 0) {\n console.error(\"Row \" + (1 + i) + \" of data is empty\");\n return null;\n }\n if (parsedData[i][0] === null || typeof parsedData[i][0].getTime != 'function' || isNaN(parsedData[i][0].getTime())) {\n console.error(\"x value in row \" + (1 + i) + \" is not a Date\");\n return null;\n }\n parsedData[i][0] = parsedData[i][0].getTime();\n }\n return parsedData;\n } else {\n // Some intelligent defaults for a numeric x-axis.\n /** @private (shut up, jsdoc!) */\n this.attrs_.axes.x.valueFormatter = function (x) {\n return x;\n };\n this.attrs_.axes.x.ticker = DygraphTickers.numericTicks;\n this.attrs_.axes.x.axisLabelFormatter = utils.numberAxisLabelFormatter;\n return data;\n }\n};\n\n/**\n * Parses a DataTable object from gviz.\n * The data is expected to have a first column that is either a date or a\n * number. All subsequent columns must be numbers. If there is a clear mismatch\n * between this.xValueParser_ and the type of the first column, it will be\n * fixed. Fills out rawData_.\n * @param {!google.visualization.DataTable} data See above.\n * @private\n */\nDygraph.prototype.parseDataTable_ = function (data) {\n var shortTextForAnnotationNum = function shortTextForAnnotationNum(num) {\n // converts [0-9]+ [A-Z][a-z]*\n // example: 0=A, 1=B, 25=Z, 26=Aa, 27=Ab\n // and continues like.. Ba Bb .. Za .. Zz..Aaa...Zzz Aaaa Zzzz\n var shortText = String.fromCharCode(65 /* A */ + num % 26);\n num = Math.floor(num / 26);\n while (num > 0) {\n shortText = String.fromCharCode(65 /* A */ + (num - 1) % 26) + shortText.toLowerCase();\n num = Math.floor((num - 1) / 26);\n }\n return shortText;\n };\n\n var cols = data.getNumberOfColumns();\n var rows = data.getNumberOfRows();\n\n var indepType = data.getColumnType(0);\n if (indepType == 'date' || indepType == 'datetime') {\n this.attrs_.xValueParser = utils.dateParser;\n this.attrs_.axes.x.valueFormatter = utils.dateValueFormatter;\n this.attrs_.axes.x.ticker = DygraphTickers.dateTicker;\n this.attrs_.axes.x.axisLabelFormatter = utils.dateAxisLabelFormatter;\n } else if (indepType == 'number') {\n this.attrs_.xValueParser = function (x) {\n return parseFloat(x);\n };\n this.attrs_.axes.x.valueFormatter = function (x) {\n return x;\n };\n this.attrs_.axes.x.ticker = DygraphTickers.numericTicks;\n this.attrs_.axes.x.axisLabelFormatter = this.attrs_.axes.x.valueFormatter;\n } else {\n throw new Error(\"only 'date', 'datetime' and 'number' types are supported \" + \"for column 1 of DataTable input (Got '\" + indepType + \"')\");\n }\n\n // Array of the column indices which contain data (and not annotations).\n var colIdx = [];\n var annotationCols = {}; // data index -> [annotation cols]\n var hasAnnotations = false;\n var i, j;\n for (i = 1; i < cols; i++) {\n var type = data.getColumnType(i);\n if (type == 'number') {\n colIdx.push(i);\n } else if (type == 'string' && this.getBooleanOption('displayAnnotations')) {\n // This is OK -- it's an annotation column.\n var dataIdx = colIdx[colIdx.length - 1];\n if (!annotationCols.hasOwnProperty(dataIdx)) {\n annotationCols[dataIdx] = [i];\n } else {\n annotationCols[dataIdx].push(i);\n }\n hasAnnotations = true;\n } else {\n throw new Error(\"Only 'number' is supported as a dependent type with Gviz.\" + \" 'string' is only supported if displayAnnotations is true\");\n }\n }\n\n // Read column labels\n // TODO(danvk): add support back for errorBars\n var labels = [data.getColumnLabel(0)];\n for (i = 0; i < colIdx.length; i++) {\n labels.push(data.getColumnLabel(colIdx[i]));\n if (this.getBooleanOption(\"errorBars\")) i += 1;\n }\n this.attrs_.labels = labels;\n cols = labels.length;\n\n var ret = [];\n var outOfOrder = false;\n var annotations = [];\n for (i = 0; i < rows; i++) {\n var row = [];\n if (typeof data.getValue(i, 0) === 'undefined' || data.getValue(i, 0) === null) {\n console.warn(\"Ignoring row \" + i + \" of DataTable because of undefined or null first column.\");\n continue;\n }\n\n if (indepType == 'date' || indepType == 'datetime') {\n row.push(data.getValue(i, 0).getTime());\n } else {\n row.push(data.getValue(i, 0));\n }\n if (!this.getBooleanOption(\"errorBars\")) {\n for (j = 0; j < colIdx.length; j++) {\n var col = colIdx[j];\n row.push(data.getValue(i, col));\n if (hasAnnotations && annotationCols.hasOwnProperty(col) && data.getValue(i, annotationCols[col][0]) !== null) {\n var ann = {};\n ann.series = data.getColumnLabel(col);\n ann.xval = row[0];\n ann.shortText = shortTextForAnnotationNum(annotations.length);\n ann.text = '';\n for (var k = 0; k < annotationCols[col].length; k++) {\n if (k) ann.text += \"\\n\";\n ann.text += data.getValue(i, annotationCols[col][k]);\n }\n annotations.push(ann);\n }\n }\n\n // Strip out infinities, which give dygraphs problems later on.\n for (j = 0; j < row.length; j++) {\n if (!isFinite(row[j])) row[j] = null;\n }\n } else {\n for (j = 0; j < cols - 1; j++) {\n row.push([data.getValue(i, 1 + 2 * j), data.getValue(i, 2 + 2 * j)]);\n }\n }\n if (ret.length > 0 && row[0] < ret[ret.length - 1][0]) {\n outOfOrder = true;\n }\n ret.push(row);\n }\n\n if (outOfOrder) {\n console.warn(\"DataTable is out of order; order it correctly to speed loading.\");\n ret.sort(function (a, b) {\n return a[0] - b[0];\n });\n }\n this.rawData_ = ret;\n\n if (annotations.length > 0) {\n this.setAnnotations(annotations, true);\n }\n this.attributes_.reparseSeries();\n};\n\n/**\n * Signals to plugins that the chart data has updated.\n * This happens after the data has updated but before the chart has redrawn.\n * @private\n */\nDygraph.prototype.cascadeDataDidUpdateEvent_ = function () {\n // TODO(danvk): there are some issues checking xAxisRange() and using\n // toDomCoords from handlers of this event. The visible range should be set\n // when the chart is drawn, not derived from the data.\n this.cascadeEvents_('dataDidUpdate', {});\n};\n\n/**\n * Get the CSV data. If it's in a function, call that function. If it's in a\n * file, do an XMLHttpRequest to get it.\n * @private\n */\nDygraph.prototype.start_ = function () {\n var data = this.file_;\n\n // Functions can return references of all other types.\n if (typeof data == 'function') {\n data = data();\n }\n\n if (utils.isArrayLike(data)) {\n this.rawData_ = this.parseArray_(data);\n this.cascadeDataDidUpdateEvent_();\n this.predraw_();\n } else if (typeof data == 'object' && typeof data.getColumnRange == 'function') {\n // must be a DataTable from gviz.\n this.parseDataTable_(data);\n this.cascadeDataDidUpdateEvent_();\n this.predraw_();\n } else if (typeof data == 'string') {\n // Heuristic: a newline means it's CSV data. Otherwise it's an URL.\n var line_delimiter = utils.detectLineDelimiter(data);\n if (line_delimiter) {\n this.loadedEvent_(data);\n } else {\n // REMOVE_FOR_IE\n var req;\n if (window.XMLHttpRequest) {\n // Firefox, Opera, IE7, and other browsers will use the native object\n req = new XMLHttpRequest();\n } else {\n // IE 5 and 6 will use the ActiveX control\n req = new ActiveXObject(\"Microsoft.XMLHTTP\");\n }\n\n var caller = this;\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status === 200 || // Normal http\n req.status === 0) {\n // Chrome w/ --allow-file-access-from-files\n caller.loadedEvent_(req.responseText);\n }\n }\n };\n\n req.open(\"GET\", data, true);\n req.send(null);\n }\n } else {\n console.error(\"Unknown data format: \" + typeof data);\n }\n};\n\n/**\n * Changes various properties of the graph. These can include:\n *
      \n *
    • file: changes the source data for the graph
    • \n *
    • errorBars: changes whether the data contains stddev
    • \n *
    \n *\n * There's a huge variety of options that can be passed to this method. For a\n * full list, see http://dygraphs.com/options.html.\n *\n * @param {Object} input_attrs The new properties and values\n * @param {boolean} block_redraw Usually the chart is redrawn after every\n * call to updateOptions(). If you know better, you can pass true to\n * explicitly block the redraw. This can be useful for chaining\n * updateOptions() calls, avoiding the occasional infinite loop and\n * preventing redraws when it's not necessary (e.g. when updating a\n * callback).\n */\nDygraph.prototype.updateOptions = function (input_attrs, block_redraw) {\n if (typeof block_redraw == 'undefined') block_redraw = false;\n\n // copyUserAttrs_ drops the \"file\" parameter as a convenience to us.\n var file = input_attrs.file;\n var attrs = Dygraph.copyUserAttrs_(input_attrs);\n\n // TODO(danvk): this is a mess. Move these options into attr_.\n if ('rollPeriod' in attrs) {\n this.rollPeriod_ = attrs.rollPeriod;\n }\n if ('dateWindow' in attrs) {\n this.dateWindow_ = attrs.dateWindow;\n }\n\n // TODO(danvk): validate per-series options.\n // Supported:\n // strokeWidth\n // pointSize\n // drawPoints\n // highlightCircleSize\n\n // Check if this set options will require new points.\n var requiresNewPoints = utils.isPixelChangingOptionList(this.attr_(\"labels\"), attrs);\n\n utils.updateDeep(this.user_attrs_, attrs);\n\n this.attributes_.reparseSeries();\n\n if (file) {\n // This event indicates that the data is about to change, but hasn't yet.\n // TODO(danvk): support cancellation of the update via this event.\n this.cascadeEvents_('dataWillUpdate', {});\n\n this.file_ = file;\n if (!block_redraw) this.start_();\n } else {\n if (!block_redraw) {\n if (requiresNewPoints) {\n this.predraw_();\n } else {\n this.renderGraph_(false);\n }\n }\n }\n};\n\n/**\n * Make a copy of input attributes, removing file as a convenience.\n * @private\n */\nDygraph.copyUserAttrs_ = function (attrs) {\n var my_attrs = {};\n for (var k in attrs) {\n if (!attrs.hasOwnProperty(k)) continue;\n if (k == 'file') continue;\n if (attrs.hasOwnProperty(k)) my_attrs[k] = attrs[k];\n }\n return my_attrs;\n};\n\n/**\n * Resizes the dygraph. If no parameters are specified, resizes to fill the\n * containing div (which has presumably changed size since the dygraph was\n * instantiated. If the width/height are specified, the div will be resized.\n *\n * This is far more efficient than destroying and re-instantiating a\n * Dygraph, since it doesn't have to reparse the underlying data.\n *\n * @param {number} width Width (in pixels)\n * @param {number} height Height (in pixels)\n */\nDygraph.prototype.resize = function (width, height) {\n if (this.resize_lock) {\n return;\n }\n this.resize_lock = true;\n\n if (width === null != (height === null)) {\n console.warn(\"Dygraph.resize() should be called with zero parameters or \" + \"two non-NULL parameters. Pretending it was zero.\");\n width = height = null;\n }\n\n var old_width = this.width_;\n var old_height = this.height_;\n\n if (width) {\n this.maindiv_.style.width = width + \"px\";\n this.maindiv_.style.height = height + \"px\";\n this.width_ = width;\n this.height_ = height;\n } else {\n this.width_ = this.maindiv_.clientWidth;\n this.height_ = this.maindiv_.clientHeight;\n }\n\n if (old_width != this.width_ || old_height != this.height_) {\n // Resizing a canvas erases it, even when the size doesn't change, so\n // any resize needs to be followed by a redraw.\n this.resizeElements_();\n this.predraw_();\n }\n\n this.resize_lock = false;\n};\n\n/**\n * Adjusts the number of points in the rolling average. Updates the graph to\n * reflect the new averaging period.\n * @param {number} length Number of points over which to average the data.\n */\nDygraph.prototype.adjustRoll = function (length) {\n this.rollPeriod_ = length;\n this.predraw_();\n};\n\n/**\n * Returns a boolean array of visibility statuses.\n */\nDygraph.prototype.visibility = function () {\n // Do lazy-initialization, so that this happens after we know the number of\n // data series.\n if (!this.getOption(\"visibility\")) {\n this.attrs_.visibility = [];\n }\n // TODO(danvk): it looks like this could go into an infinite loop w/ user_attrs.\n while (this.getOption(\"visibility\").length < this.numColumns() - 1) {\n this.attrs_.visibility.push(true);\n }\n return this.getOption(\"visibility\");\n};\n\n/**\n * Changes the visibility of one or more series.\n *\n * @param {number|number[]|object} num the series index or an array of series indices\n * or a boolean array of visibility states by index\n * or an object mapping series numbers, as keys, to\n * visibility state (boolean values)\n * @param {boolean} value the visibility state expressed as a boolean\n */\nDygraph.prototype.setVisibility = function (num, value) {\n var x = this.visibility();\n var numIsObject = false;\n\n if (!Array.isArray(num)) {\n if (num !== null && typeof num === 'object') {\n numIsObject = true;\n } else {\n num = [num];\n }\n }\n\n if (numIsObject) {\n for (var i in num) {\n if (num.hasOwnProperty(i)) {\n if (i < 0 || i >= x.length) {\n console.warn(\"Invalid series number in setVisibility: \" + i);\n } else {\n x[i] = num[i];\n }\n }\n }\n } else {\n for (var i = 0; i < num.length; i++) {\n if (typeof num[i] === 'boolean') {\n if (i >= x.length) {\n console.warn(\"Invalid series number in setVisibility: \" + i);\n } else {\n x[i] = num[i];\n }\n } else {\n if (num[i] < 0 || num[i] >= x.length) {\n console.warn(\"Invalid series number in setVisibility: \" + num[i]);\n } else {\n x[num[i]] = value;\n }\n }\n }\n }\n\n this.predraw_();\n};\n\n/**\n * How large of an area will the dygraph render itself in?\n * This is used for testing.\n * @return A {width: w, height: h} object.\n * @private\n */\nDygraph.prototype.size = function () {\n return { width: this.width_, height: this.height_ };\n};\n\n/**\n * Update the list of annotations and redraw the chart.\n * See dygraphs.com/annotations.html for more info on how to use annotations.\n * @param ann {Array} An array of annotation objects.\n * @param suppressDraw {Boolean} Set to \"true\" to block chart redraw (optional).\n */\nDygraph.prototype.setAnnotations = function (ann, suppressDraw) {\n // Only add the annotation CSS rule once we know it will be used.\n this.annotations_ = ann;\n if (!this.layout_) {\n console.warn(\"Tried to setAnnotations before dygraph was ready. \" + \"Try setting them in a ready() block. See \" + \"dygraphs.com/tests/annotation.html\");\n return;\n }\n\n this.layout_.setAnnotations(this.annotations_);\n if (!suppressDraw) {\n this.predraw_();\n }\n};\n\n/**\n * Return the list of annotations.\n */\nDygraph.prototype.annotations = function () {\n return this.annotations_;\n};\n\n/**\n * Get the list of label names for this graph. The first column is the\n * x-axis, so the data series names start at index 1.\n *\n * Returns null when labels have not yet been defined.\n */\nDygraph.prototype.getLabels = function () {\n var labels = this.attr_(\"labels\");\n return labels ? labels.slice() : null;\n};\n\n/**\n * Get the index of a series (column) given its name. The first column is the\n * x-axis, so the data series start with index 1.\n */\nDygraph.prototype.indexFromSetName = function (name) {\n return this.setIndexByName_[name];\n};\n\n/**\n * Find the row number corresponding to the given x-value.\n * Returns null if there is no such x-value in the data.\n * If there are multiple rows with the same x-value, this will return the\n * first one.\n * @param {number} xVal The x-value to look for (e.g. millis since epoch).\n * @return {?number} The row number, which you can pass to getValue(), or null.\n */\nDygraph.prototype.getRowForX = function (xVal) {\n var low = 0,\n high = this.numRows() - 1;\n\n while (low <= high) {\n var idx = high + low >> 1;\n var x = this.getValue(idx, 0);\n if (x < xVal) {\n low = idx + 1;\n } else if (x > xVal) {\n high = idx - 1;\n } else if (low != idx) {\n // equal, but there may be an earlier match.\n high = idx;\n } else {\n return idx;\n }\n }\n\n return null;\n};\n\n/**\n * Trigger a callback when the dygraph has drawn itself and is ready to be\n * manipulated. This is primarily useful when dygraphs has to do an XHR for the\n * data (i.e. a URL is passed as the data source) and the chart is drawn\n * asynchronously. If the chart has already drawn, the callback will fire\n * immediately.\n *\n * This is a good place to call setAnnotation().\n *\n * @param {function(!Dygraph)} callback The callback to trigger when the chart\n * is ready.\n */\nDygraph.prototype.ready = function (callback) {\n if (this.is_initial_draw_) {\n this.readyFns_.push(callback);\n } else {\n callback.call(this, this);\n }\n};\n\n/**\n * Add an event handler. This event handler is kept until the graph is\n * destroyed with a call to graph.destroy().\n *\n * @param {!Node} elem The element to add the event to.\n * @param {string} type The type of the event, e.g. 'click' or 'mousemove'.\n * @param {function(Event):(boolean|undefined)} fn The function to call\n * on the event. The function takes one parameter: the event object.\n * @private\n */\nDygraph.prototype.addAndTrackEvent = function (elem, type, fn) {\n utils.addEvent(elem, type, fn);\n this.registeredEvents_.push({ elem: elem, type: type, fn: fn });\n};\n\nDygraph.prototype.removeTrackedEvents_ = function () {\n if (this.registeredEvents_) {\n for (var idx = 0; idx < this.registeredEvents_.length; idx++) {\n var reg = this.registeredEvents_[idx];\n utils.removeEvent(reg.elem, reg.type, reg.fn);\n }\n }\n\n this.registeredEvents_ = [];\n};\n\n// Installed plugins, in order of precedence (most-general to most-specific).\nDygraph.PLUGINS = [_pluginsLegend2['default'], _pluginsAxes2['default'], _pluginsRangeSelector2['default'], // Has to be before ChartLabels so that its callbacks are called after ChartLabels' callbacks.\n_pluginsChartLabels2['default'], _pluginsAnnotations2['default'], _pluginsGrid2['default']];\n\n// There are many symbols which have historically been available through the\n// Dygraph class. These are exported here for backwards compatibility.\nDygraph.GVizChart = _dygraphGviz2['default'];\nDygraph.DASHED_LINE = utils.DASHED_LINE;\nDygraph.DOT_DASH_LINE = utils.DOT_DASH_LINE;\nDygraph.dateAxisLabelFormatter = utils.dateAxisLabelFormatter;\nDygraph.toRGB_ = utils.toRGB_;\nDygraph.findPos = utils.findPos;\nDygraph.pageX = utils.pageX;\nDygraph.pageY = utils.pageY;\nDygraph.dateString_ = utils.dateString_;\nDygraph.defaultInteractionModel = _dygraphInteractionModel2['default'].defaultModel;\nDygraph.nonInteractiveModel = Dygraph.nonInteractiveModel_ = _dygraphInteractionModel2['default'].nonInteractiveModel_;\nDygraph.Circles = utils.Circles;\n\nDygraph.Plugins = {\n Legend: _pluginsLegend2['default'],\n Axes: _pluginsAxes2['default'],\n Annotations: _pluginsAnnotations2['default'],\n ChartLabels: _pluginsChartLabels2['default'],\n Grid: _pluginsGrid2['default'],\n RangeSelector: _pluginsRangeSelector2['default']\n};\n\nDygraph.DataHandlers = {\n DefaultHandler: _datahandlerDefault2['default'],\n BarsHandler: _datahandlerBars2['default'],\n CustomBarsHandler: _datahandlerBarsCustom2['default'],\n DefaultFractionHandler: _datahandlerDefaultFractions2['default'],\n ErrorBarsHandler: _datahandlerBarsError2['default'],\n FractionsBarsHandler: _datahandlerBarsFractions2['default']\n};\n\nDygraph.startPan = _dygraphInteractionModel2['default'].startPan;\nDygraph.startZoom = _dygraphInteractionModel2['default'].startZoom;\nDygraph.movePan = _dygraphInteractionModel2['default'].movePan;\nDygraph.moveZoom = _dygraphInteractionModel2['default'].moveZoom;\nDygraph.endPan = _dygraphInteractionModel2['default'].endPan;\nDygraph.endZoom = _dygraphInteractionModel2['default'].endZoom;\n\nDygraph.numericLinearTicks = DygraphTickers.numericLinearTicks;\nDygraph.numericTicks = DygraphTickers.numericTicks;\nDygraph.dateTicker = DygraphTickers.dateTicker;\nDygraph.Granularity = DygraphTickers.Granularity;\nDygraph.getDateAxis = DygraphTickers.getDateAxis;\nDygraph.floatFormat = utils.floatFormat;\n\nexports['default'] = Dygraph;\nmodule.exports = exports['default'];","/**\n * To create a \"drag\" interaction, you typically register a mousedown event\n * handler on the element where the drag begins. In that handler, you register a\n * mouseup handler on the window to determine when the mouse is released,\n * wherever that release happens. This works well, except when the user releases\n * the mouse over an off-domain iframe. In that case, the mouseup event is\n * handled by the iframe and never bubbles up to the window handler.\n *\n * To deal with this issue, we cover iframes with high z-index divs to make sure\n * they don't capture mouseup.\n *\n * Usage:\n * element.addEventListener('mousedown', function() {\n * var tarper = new IFrameTarp();\n * tarper.cover();\n * var mouseUpHandler = function() {\n * ...\n * window.removeEventListener(mouseUpHandler);\n * tarper.uncover();\n * };\n * window.addEventListener('mouseup', mouseUpHandler);\n * };\n *\n * @constructor\n */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\nvar _dygraphUtils = require('./dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\nfunction IFrameTarp() {\n /** @type {Array.} */\n this.tarps = [];\n};\n\n/**\n * Find all the iframes in the document and cover them with high z-index\n * transparent divs.\n */\nIFrameTarp.prototype.cover = function () {\n var iframes = document.getElementsByTagName(\"iframe\");\n for (var i = 0; i < iframes.length; i++) {\n var iframe = iframes[i];\n var pos = utils.findPos(iframe),\n x = pos.x,\n y = pos.y,\n width = iframe.offsetWidth,\n height = iframe.offsetHeight;\n\n var div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n div.style.left = x + 'px';\n div.style.top = y + 'px';\n div.style.width = width + 'px';\n div.style.height = height + 'px';\n div.style.zIndex = 999;\n document.body.appendChild(div);\n this.tarps.push(div);\n }\n};\n\n/**\n * Remove all the iframe covers. You should call this in a mouseup handler.\n */\nIFrameTarp.prototype.uncover = function () {\n for (var i = 0; i < this.tarps.length; i++) {\n this.tarps[i].parentNode.removeChild(this.tarps[i]);\n }\n this.tarps = [];\n};\n\nexports[\"default\"] = IFrameTarp;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2012 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/*global Dygraph:false */\n\n\"use strict\";\n\n/**\nCurrent bits of jankiness:\n- Uses dygraph.layout_ to get the parsed annotations.\n- Uses dygraph.plotter_.area\n\nIt would be nice if the plugin didn't require so much special support inside\nthe core dygraphs classes, but annotations involve quite a bit of parsing and\nlayout.\n\nTODO(danvk): cache DOM elements.\n*/\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar annotations = function annotations() {\n this.annotations_ = [];\n};\n\nannotations.prototype.toString = function () {\n return \"Annotations Plugin\";\n};\n\nannotations.prototype.activate = function (g) {\n return {\n clearChart: this.clearChart,\n didDrawChart: this.didDrawChart\n };\n};\n\nannotations.prototype.detachLabels = function () {\n for (var i = 0; i < this.annotations_.length; i++) {\n var a = this.annotations_[i];\n if (a.parentNode) a.parentNode.removeChild(a);\n this.annotations_[i] = null;\n }\n this.annotations_ = [];\n};\n\nannotations.prototype.clearChart = function (e) {\n this.detachLabels();\n};\n\nannotations.prototype.didDrawChart = function (e) {\n var g = e.dygraph;\n\n // Early out in the (common) case of zero annotations.\n var points = g.layout_.annotated_points;\n if (!points || points.length === 0) return;\n\n var containerDiv = e.canvas.parentNode;\n\n var bindEvt = function bindEvt(eventName, classEventName, pt) {\n return function (annotation_event) {\n var a = pt.annotation;\n if (a.hasOwnProperty(eventName)) {\n a[eventName](a, pt, g, annotation_event);\n } else if (g.getOption(classEventName)) {\n g.getOption(classEventName)(a, pt, g, annotation_event);\n }\n };\n };\n\n // Add the annotations one-by-one.\n var area = e.dygraph.getArea();\n\n // x-coord to sum of previous annotation's heights (used for stacking).\n var xToUsedHeight = {};\n\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n if (p.canvasx < area.x || p.canvasx > area.x + area.w || p.canvasy < area.y || p.canvasy > area.y + area.h) {\n continue;\n }\n\n var a = p.annotation;\n var tick_height = 6;\n if (a.hasOwnProperty(\"tickHeight\")) {\n tick_height = a.tickHeight;\n }\n\n // TODO: deprecate axisLabelFontSize in favor of CSS\n var div = document.createElement(\"div\");\n div.style['fontSize'] = g.getOption('axisLabelFontSize') + \"px\";\n var className = 'dygraph-annotation';\n if (!a.hasOwnProperty('icon')) {\n // camelCase class names are deprecated.\n className += ' dygraphDefaultAnnotation dygraph-default-annotation';\n }\n if (a.hasOwnProperty('cssClass')) {\n className += \" \" + a.cssClass;\n }\n div.className = className;\n\n var width = a.hasOwnProperty('width') ? a.width : 16;\n var height = a.hasOwnProperty('height') ? a.height : 16;\n if (a.hasOwnProperty('icon')) {\n var img = document.createElement(\"img\");\n img.src = a.icon;\n img.width = width;\n img.height = height;\n div.appendChild(img);\n } else if (p.annotation.hasOwnProperty('shortText')) {\n div.appendChild(document.createTextNode(p.annotation.shortText));\n }\n var left = p.canvasx - width / 2;\n div.style.left = left + \"px\";\n var divTop = 0;\n if (a.attachAtBottom) {\n var y = area.y + area.h - height - tick_height;\n if (xToUsedHeight[left]) {\n y -= xToUsedHeight[left];\n } else {\n xToUsedHeight[left] = 0;\n }\n xToUsedHeight[left] += tick_height + height;\n divTop = y;\n } else {\n divTop = p.canvasy - height - tick_height;\n }\n div.style.top = divTop + \"px\";\n div.style.width = width + \"px\";\n div.style.height = height + \"px\";\n div.title = p.annotation.text;\n div.style.color = g.colorsMap_[p.name];\n div.style.borderColor = g.colorsMap_[p.name];\n a.div = div;\n\n g.addAndTrackEvent(div, 'click', bindEvt('clickHandler', 'annotationClickHandler', p, this));\n g.addAndTrackEvent(div, 'mouseover', bindEvt('mouseOverHandler', 'annotationMouseOverHandler', p, this));\n g.addAndTrackEvent(div, 'mouseout', bindEvt('mouseOutHandler', 'annotationMouseOutHandler', p, this));\n g.addAndTrackEvent(div, 'dblclick', bindEvt('dblClickHandler', 'annotationDblClickHandler', p, this));\n\n containerDiv.appendChild(div);\n this.annotations_.push(div);\n\n var ctx = e.drawingContext;\n ctx.save();\n ctx.strokeStyle = a.hasOwnProperty('tickColor') ? a.tickColor : g.colorsMap_[p.name];\n ctx.lineWidth = a.hasOwnProperty('tickWidth') ? a.tickWidth : g.getOption('strokeWidth');\n ctx.beginPath();\n if (!a.attachAtBottom) {\n ctx.moveTo(p.canvasx, p.canvasy);\n ctx.lineTo(p.canvasx, p.canvasy - 2 - tick_height);\n } else {\n var y = divTop + height;\n ctx.moveTo(p.canvasx, y);\n ctx.lineTo(p.canvasx, y + tick_height);\n }\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n};\n\nannotations.prototype.destroy = function () {\n this.detachLabels();\n};\n\nexports[\"default\"] = annotations;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2012 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n\n/*global Dygraph:false */\n\n'use strict';\n\n/*\nBits of jankiness:\n- Direct layout access\n- Direct area access\n- Should include calculation of ticks, not just the drawing.\n\nOptions left to make axis-friendly.\n ('drawAxesAtZero')\n ('xAxisHeight')\n*/\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('../dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n/**\n * Draws the axes. This includes the labels on the x- and y-axes, as well\n * as the tick marks on the axes.\n * It does _not_ draw the grid lines which span the entire chart.\n */\nvar axes = function axes() {\n this.xlabels_ = [];\n this.ylabels_ = [];\n};\n\naxes.prototype.toString = function () {\n return 'Axes Plugin';\n};\n\naxes.prototype.activate = function (g) {\n return {\n layout: this.layout,\n clearChart: this.clearChart,\n willDrawChart: this.willDrawChart\n };\n};\n\naxes.prototype.layout = function (e) {\n var g = e.dygraph;\n\n if (g.getOptionForAxis('drawAxis', 'y')) {\n var w = g.getOptionForAxis('axisLabelWidth', 'y') + 2 * g.getOptionForAxis('axisTickSize', 'y');\n e.reserveSpaceLeft(w);\n }\n\n if (g.getOptionForAxis('drawAxis', 'x')) {\n var h;\n // NOTE: I think this is probably broken now, since g.getOption() now\n // hits the dictionary. (That is, g.getOption('xAxisHeight') now always\n // has a value.)\n if (g.getOption('xAxisHeight')) {\n h = g.getOption('xAxisHeight');\n } else {\n h = g.getOptionForAxis('axisLabelFontSize', 'x') + 2 * g.getOptionForAxis('axisTickSize', 'x');\n }\n e.reserveSpaceBottom(h);\n }\n\n if (g.numAxes() == 2) {\n if (g.getOptionForAxis('drawAxis', 'y2')) {\n var w = g.getOptionForAxis('axisLabelWidth', 'y2') + 2 * g.getOptionForAxis('axisTickSize', 'y2');\n e.reserveSpaceRight(w);\n }\n } else if (g.numAxes() > 2) {\n g.error('Only two y-axes are supported at this time. (Trying ' + 'to use ' + g.numAxes() + ')');\n }\n};\n\naxes.prototype.detachLabels = function () {\n function removeArray(ary) {\n for (var i = 0; i < ary.length; i++) {\n var el = ary[i];\n if (el.parentNode) el.parentNode.removeChild(el);\n }\n }\n\n removeArray(this.xlabels_);\n removeArray(this.ylabels_);\n this.xlabels_ = [];\n this.ylabels_ = [];\n};\n\naxes.prototype.clearChart = function (e) {\n this.detachLabels();\n};\n\naxes.prototype.willDrawChart = function (e) {\n var _this = this;\n\n var g = e.dygraph;\n\n if (!g.getOptionForAxis('drawAxis', 'x') && !g.getOptionForAxis('drawAxis', 'y') && !g.getOptionForAxis('drawAxis', 'y2')) {\n return;\n }\n\n // Round pixels to half-integer boundaries for crisper drawing.\n function halfUp(x) {\n return Math.round(x) + 0.5;\n }\n function halfDown(y) {\n return Math.round(y) - 0.5;\n }\n\n var context = e.drawingContext;\n var containerDiv = e.canvas.parentNode;\n var canvasWidth = g.width_; // e.canvas.width is affected by pixel ratio.\n var canvasHeight = g.height_;\n\n var label, x, y, tick, i;\n\n var makeLabelStyle = function makeLabelStyle(axis) {\n return {\n position: 'absolute',\n fontSize: g.getOptionForAxis('axisLabelFontSize', axis) + 'px',\n width: g.getOptionForAxis('axisLabelWidth', axis) + 'px'\n };\n };\n\n var labelStyles = {\n x: makeLabelStyle('x'),\n y: makeLabelStyle('y'),\n y2: makeLabelStyle('y2')\n };\n\n var makeDiv = function makeDiv(txt, axis, prec_axis) {\n /*\n * This seems to be called with the following three sets of axis/prec_axis:\n * x: undefined\n * y: y1\n * y: y2\n */\n var div = document.createElement('div');\n var labelStyle = labelStyles[prec_axis == 'y2' ? 'y2' : axis];\n utils.update(div.style, labelStyle);\n // TODO: combine outer & inner divs\n var inner_div = document.createElement('div');\n inner_div.className = 'dygraph-axis-label' + ' dygraph-axis-label-' + axis + (prec_axis ? ' dygraph-axis-label-' + prec_axis : '');\n inner_div.innerHTML = txt;\n div.appendChild(inner_div);\n return div;\n };\n\n // axis lines\n context.save();\n\n var layout = g.layout_;\n var area = e.dygraph.plotter_.area;\n\n // Helper for repeated axis-option accesses.\n var makeOptionGetter = function makeOptionGetter(axis) {\n return function (option) {\n return g.getOptionForAxis(option, axis);\n };\n };\n\n if (g.getOptionForAxis('drawAxis', 'y')) {\n if (layout.yticks && layout.yticks.length > 0) {\n var num_axes = g.numAxes();\n var getOptions = [makeOptionGetter('y'), makeOptionGetter('y2')];\n layout.yticks.forEach(function (tick) {\n if (tick.label === undefined) return; // this tick only has a grid line.\n x = area.x;\n var sgn = 1;\n var prec_axis = 'y1';\n var getAxisOption = getOptions[0];\n if (tick.axis == 1) {\n // right-side y-axis\n x = area.x + area.w;\n sgn = -1;\n prec_axis = 'y2';\n getAxisOption = getOptions[1];\n }\n var fontSize = getAxisOption('axisLabelFontSize');\n y = area.y + tick.pos * area.h;\n\n /* Tick marks are currently clipped, so don't bother drawing them.\n context.beginPath();\n context.moveTo(halfUp(x), halfDown(y));\n context.lineTo(halfUp(x - sgn * this.attr_('axisTickSize')), halfDown(y));\n context.closePath();\n context.stroke();\n */\n\n label = makeDiv(tick.label, 'y', num_axes == 2 ? prec_axis : null);\n var top = y - fontSize / 2;\n if (top < 0) top = 0;\n\n if (top + fontSize + 3 > canvasHeight) {\n label.style.bottom = '0';\n } else {\n label.style.top = top + 'px';\n }\n // TODO: replace these with css classes?\n if (tick.axis === 0) {\n label.style.left = area.x - getAxisOption('axisLabelWidth') - getAxisOption('axisTickSize') + 'px';\n label.style.textAlign = 'right';\n } else if (tick.axis == 1) {\n label.style.left = area.x + area.w + getAxisOption('axisTickSize') + 'px';\n label.style.textAlign = 'left';\n }\n label.style.width = getAxisOption('axisLabelWidth') + 'px';\n containerDiv.appendChild(label);\n _this.ylabels_.push(label);\n });\n\n // The lowest tick on the y-axis often overlaps with the leftmost\n // tick on the x-axis. Shift the bottom tick up a little bit to\n // compensate if necessary.\n var bottomTick = this.ylabels_[0];\n // Interested in the y2 axis also?\n var fontSize = g.getOptionForAxis('axisLabelFontSize', 'y');\n var bottom = parseInt(bottomTick.style.top, 10) + fontSize;\n if (bottom > canvasHeight - fontSize) {\n bottomTick.style.top = parseInt(bottomTick.style.top, 10) - fontSize / 2 + 'px';\n }\n }\n\n // draw a vertical line on the left to separate the chart from the labels.\n var axisX;\n if (g.getOption('drawAxesAtZero')) {\n var r = g.toPercentXCoord(0);\n if (r > 1 || r < 0 || isNaN(r)) r = 0;\n axisX = halfUp(area.x + r * area.w);\n } else {\n axisX = halfUp(area.x);\n }\n\n context.strokeStyle = g.getOptionForAxis('axisLineColor', 'y');\n context.lineWidth = g.getOptionForAxis('axisLineWidth', 'y');\n\n context.beginPath();\n context.moveTo(axisX, halfDown(area.y));\n context.lineTo(axisX, halfDown(area.y + area.h));\n context.closePath();\n context.stroke();\n\n // if there's a secondary y-axis, draw a vertical line for that, too.\n if (g.numAxes() == 2) {\n context.strokeStyle = g.getOptionForAxis('axisLineColor', 'y2');\n context.lineWidth = g.getOptionForAxis('axisLineWidth', 'y2');\n context.beginPath();\n context.moveTo(halfDown(area.x + area.w), halfDown(area.y));\n context.lineTo(halfDown(area.x + area.w), halfDown(area.y + area.h));\n context.closePath();\n context.stroke();\n }\n }\n\n if (g.getOptionForAxis('drawAxis', 'x')) {\n if (layout.xticks) {\n var getAxisOption = makeOptionGetter('x');\n layout.xticks.forEach(function (tick) {\n if (tick.label === undefined) return; // this tick only has a grid line.\n x = area.x + tick.pos * area.w;\n y = area.y + area.h;\n\n /* Tick marks are currently clipped, so don't bother drawing them.\n context.beginPath();\n context.moveTo(halfUp(x), halfDown(y));\n context.lineTo(halfUp(x), halfDown(y + this.attr_('axisTickSize')));\n context.closePath();\n context.stroke();\n */\n\n label = makeDiv(tick.label, 'x');\n label.style.textAlign = 'center';\n label.style.top = y + getAxisOption('axisTickSize') + 'px';\n\n var left = x - getAxisOption('axisLabelWidth') / 2;\n if (left + getAxisOption('axisLabelWidth') > canvasWidth) {\n left = canvasWidth - getAxisOption('axisLabelWidth');\n label.style.textAlign = 'right';\n }\n if (left < 0) {\n left = 0;\n label.style.textAlign = 'left';\n }\n\n label.style.left = left + 'px';\n label.style.width = getAxisOption('axisLabelWidth') + 'px';\n containerDiv.appendChild(label);\n _this.xlabels_.push(label);\n });\n }\n\n context.strokeStyle = g.getOptionForAxis('axisLineColor', 'x');\n context.lineWidth = g.getOptionForAxis('axisLineWidth', 'x');\n context.beginPath();\n var axisY;\n if (g.getOption('drawAxesAtZero')) {\n var r = g.toPercentYCoord(0, 0);\n if (r > 1 || r < 0) r = 1;\n axisY = halfDown(area.y + r * area.h);\n } else {\n axisY = halfDown(area.y + area.h);\n }\n context.moveTo(halfUp(area.x), axisY);\n context.lineTo(halfUp(area.x + area.w), axisY);\n context.closePath();\n context.stroke();\n }\n\n context.restore();\n};\n\nexports['default'] = axes;\nmodule.exports = exports['default'];","/**\n * @license\n * Copyright 2012 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n/*global Dygraph:false */\n\n\"use strict\";\n\n// TODO(danvk): move chart label options out of dygraphs and into the plugin.\n// TODO(danvk): only tear down & rebuild the DIVs when it's necessary.\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar chart_labels = function chart_labels() {\n this.title_div_ = null;\n this.xlabel_div_ = null;\n this.ylabel_div_ = null;\n this.y2label_div_ = null;\n};\n\nchart_labels.prototype.toString = function () {\n return \"ChartLabels Plugin\";\n};\n\nchart_labels.prototype.activate = function (g) {\n return {\n layout: this.layout,\n // clearChart: this.clearChart,\n didDrawChart: this.didDrawChart\n };\n};\n\n// QUESTION: should there be a plugin-utils.js?\nvar createDivInRect = function createDivInRect(r) {\n var div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = r.x + 'px';\n div.style.top = r.y + 'px';\n div.style.width = r.w + 'px';\n div.style.height = r.h + 'px';\n return div;\n};\n\n// Detach and null out any existing nodes.\nchart_labels.prototype.detachLabels_ = function () {\n var els = [this.title_div_, this.xlabel_div_, this.ylabel_div_, this.y2label_div_];\n for (var i = 0; i < els.length; i++) {\n var el = els[i];\n if (!el) continue;\n if (el.parentNode) el.parentNode.removeChild(el);\n }\n\n this.title_div_ = null;\n this.xlabel_div_ = null;\n this.ylabel_div_ = null;\n this.y2label_div_ = null;\n};\n\nvar createRotatedDiv = function createRotatedDiv(g, box, axis, classes, html) {\n // TODO(danvk): is this outer div actually necessary?\n var div = document.createElement(\"div\");\n div.style.position = 'absolute';\n if (axis == 1) {\n // NOTE: this is cheating. Should be positioned relative to the box.\n div.style.left = '0px';\n } else {\n div.style.left = box.x + 'px';\n }\n div.style.top = box.y + 'px';\n div.style.width = box.w + 'px';\n div.style.height = box.h + 'px';\n div.style.fontSize = g.getOption('yLabelWidth') - 2 + 'px';\n\n var inner_div = document.createElement(\"div\");\n inner_div.style.position = 'absolute';\n inner_div.style.width = box.h + 'px';\n inner_div.style.height = box.w + 'px';\n inner_div.style.top = box.h / 2 - box.w / 2 + 'px';\n inner_div.style.left = box.w / 2 - box.h / 2 + 'px';\n // TODO: combine inner_div and class_div.\n inner_div.className = 'dygraph-label-rotate-' + (axis == 1 ? 'right' : 'left');\n\n var class_div = document.createElement(\"div\");\n class_div.className = classes;\n class_div.innerHTML = html;\n\n inner_div.appendChild(class_div);\n div.appendChild(inner_div);\n return div;\n};\n\nchart_labels.prototype.layout = function (e) {\n this.detachLabels_();\n\n var g = e.dygraph;\n var div = e.chart_div;\n if (g.getOption('title')) {\n // QUESTION: should this return an absolutely-positioned div instead?\n var title_rect = e.reserveSpaceTop(g.getOption('titleHeight'));\n this.title_div_ = createDivInRect(title_rect);\n this.title_div_.style.fontSize = g.getOption('titleHeight') - 8 + 'px';\n\n var class_div = document.createElement(\"div\");\n class_div.className = 'dygraph-label dygraph-title';\n class_div.innerHTML = g.getOption('title');\n this.title_div_.appendChild(class_div);\n div.appendChild(this.title_div_);\n }\n\n if (g.getOption('xlabel')) {\n var x_rect = e.reserveSpaceBottom(g.getOption('xLabelHeight'));\n this.xlabel_div_ = createDivInRect(x_rect);\n this.xlabel_div_.style.fontSize = g.getOption('xLabelHeight') - 2 + 'px';\n\n var class_div = document.createElement(\"div\");\n class_div.className = 'dygraph-label dygraph-xlabel';\n class_div.innerHTML = g.getOption('xlabel');\n this.xlabel_div_.appendChild(class_div);\n div.appendChild(this.xlabel_div_);\n }\n\n if (g.getOption('ylabel')) {\n // It would make sense to shift the chart here to make room for the y-axis\n // label, but the default yAxisLabelWidth is large enough that this results\n // in overly-padded charts. The y-axis label should fit fine. If it\n // doesn't, the yAxisLabelWidth option can be increased.\n var y_rect = e.reserveSpaceLeft(0);\n\n this.ylabel_div_ = createRotatedDiv(g, y_rect, 1, // primary (left) y-axis\n 'dygraph-label dygraph-ylabel', g.getOption('ylabel'));\n div.appendChild(this.ylabel_div_);\n }\n\n if (g.getOption('y2label') && g.numAxes() == 2) {\n // same logic applies here as for ylabel.\n var y2_rect = e.reserveSpaceRight(0);\n this.y2label_div_ = createRotatedDiv(g, y2_rect, 2, // secondary (right) y-axis\n 'dygraph-label dygraph-y2label', g.getOption('y2label'));\n div.appendChild(this.y2label_div_);\n }\n};\n\nchart_labels.prototype.didDrawChart = function (e) {\n var g = e.dygraph;\n if (this.title_div_) {\n this.title_div_.children[0].innerHTML = g.getOption('title');\n }\n if (this.xlabel_div_) {\n this.xlabel_div_.children[0].innerHTML = g.getOption('xlabel');\n }\n if (this.ylabel_div_) {\n this.ylabel_div_.children[0].children[0].innerHTML = g.getOption('ylabel');\n }\n if (this.y2label_div_) {\n this.y2label_div_.children[0].children[0].innerHTML = g.getOption('y2label');\n }\n};\n\nchart_labels.prototype.clearChart = function () {};\n\nchart_labels.prototype.destroy = function () {\n this.detachLabels_();\n};\n\nexports[\"default\"] = chart_labels;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2012 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n/*global Dygraph:false */\n\n/*\n\nCurrent bits of jankiness:\n- Direct layout access\n- Direct area access\n\n*/\n\n\"use strict\";\n\n/**\n * Draws the gridlines, i.e. the gray horizontal & vertical lines running the\n * length of the chart.\n *\n * @constructor\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar grid = function grid() {};\n\ngrid.prototype.toString = function () {\n return \"Gridline Plugin\";\n};\n\ngrid.prototype.activate = function (g) {\n return {\n willDrawChart: this.willDrawChart\n };\n};\n\ngrid.prototype.willDrawChart = function (e) {\n // Draw the new X/Y grid. Lines appear crisper when pixels are rounded to\n // half-integers. This prevents them from drawing in two rows/cols.\n var g = e.dygraph;\n var ctx = e.drawingContext;\n var layout = g.layout_;\n var area = e.dygraph.plotter_.area;\n\n function halfUp(x) {\n return Math.round(x) + 0.5;\n }\n function halfDown(y) {\n return Math.round(y) - 0.5;\n }\n\n var x, y, i, ticks;\n if (g.getOptionForAxis('drawGrid', 'y')) {\n var axes = [\"y\", \"y2\"];\n var strokeStyles = [],\n lineWidths = [],\n drawGrid = [],\n stroking = [],\n strokePattern = [];\n for (var i = 0; i < axes.length; i++) {\n drawGrid[i] = g.getOptionForAxis('drawGrid', axes[i]);\n if (drawGrid[i]) {\n strokeStyles[i] = g.getOptionForAxis('gridLineColor', axes[i]);\n lineWidths[i] = g.getOptionForAxis('gridLineWidth', axes[i]);\n strokePattern[i] = g.getOptionForAxis('gridLinePattern', axes[i]);\n stroking[i] = strokePattern[i] && strokePattern[i].length >= 2;\n }\n }\n ticks = layout.yticks;\n ctx.save();\n // draw grids for the different y axes\n ticks.forEach(function (tick) {\n if (!tick.has_tick) return;\n var axis = tick.axis;\n if (drawGrid[axis]) {\n ctx.save();\n if (stroking[axis]) {\n if (ctx.setLineDash) ctx.setLineDash(strokePattern[axis]);\n }\n ctx.strokeStyle = strokeStyles[axis];\n ctx.lineWidth = lineWidths[axis];\n\n x = halfUp(area.x);\n y = halfDown(area.y + tick.pos * area.h);\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + area.w, y);\n ctx.stroke();\n\n ctx.restore();\n }\n });\n ctx.restore();\n }\n\n // draw grid for x axis\n if (g.getOptionForAxis('drawGrid', 'x')) {\n ticks = layout.xticks;\n ctx.save();\n var strokePattern = g.getOptionForAxis('gridLinePattern', 'x');\n var stroking = strokePattern && strokePattern.length >= 2;\n if (stroking) {\n if (ctx.setLineDash) ctx.setLineDash(strokePattern);\n }\n ctx.strokeStyle = g.getOptionForAxis('gridLineColor', 'x');\n ctx.lineWidth = g.getOptionForAxis('gridLineWidth', 'x');\n ticks.forEach(function (tick) {\n if (!tick.has_tick) return;\n x = halfUp(area.x + tick.pos * area.w);\n y = halfDown(area.y + area.h);\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x, area.y);\n ctx.closePath();\n ctx.stroke();\n });\n if (stroking) {\n if (ctx.setLineDash) ctx.setLineDash([]);\n }\n ctx.restore();\n }\n};\n\ngrid.prototype.destroy = function () {};\n\nexports[\"default\"] = grid;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2012 Dan Vanderkam (danvdk@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n/*global Dygraph:false */\n\n/*\nCurrent bits of jankiness:\n- Uses two private APIs:\n 1. Dygraph.optionsViewForAxis_\n 2. dygraph.plotter_.area\n- Registers for a \"predraw\" event, which should be renamed.\n- I call calculateEmWidthInDiv more often than needed.\n*/\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\nvar _dygraphUtils = require('../dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\n/**\n * Creates the legend, which appears when the user hovers over the chart.\n * The legend can be either a user-specified or generated div.\n *\n * @constructor\n */\nvar Legend = function Legend() {\n this.legend_div_ = null;\n this.is_generated_div_ = false; // do we own this div, or was it user-specified?\n};\n\nLegend.prototype.toString = function () {\n return \"Legend Plugin\";\n};\n\n/**\n * This is called during the dygraph constructor, after options have been set\n * but before the data is available.\n *\n * Proper tasks to do here include:\n * - Reading your own options\n * - DOM manipulation\n * - Registering event listeners\n *\n * @param {Dygraph} g Graph instance.\n * @return {object.} Mapping of event names to callbacks.\n */\nLegend.prototype.activate = function (g) {\n var div;\n\n var userLabelsDiv = g.getOption('labelsDiv');\n if (userLabelsDiv && null !== userLabelsDiv) {\n if (typeof userLabelsDiv == \"string\" || userLabelsDiv instanceof String) {\n div = document.getElementById(userLabelsDiv);\n } else {\n div = userLabelsDiv;\n }\n } else {\n div = document.createElement(\"div\");\n div.className = \"dygraph-legend\";\n // TODO(danvk): come up with a cleaner way to expose this.\n g.graphDiv.appendChild(div);\n this.is_generated_div_ = true;\n }\n\n this.legend_div_ = div;\n this.one_em_width_ = 10; // just a guess, will be updated.\n\n return {\n select: this.select,\n deselect: this.deselect,\n // TODO(danvk): rethink the name \"predraw\" before we commit to it in any API.\n predraw: this.predraw,\n didDrawChart: this.didDrawChart\n };\n};\n\n// Needed for dashed lines.\nvar calculateEmWidthInDiv = function calculateEmWidthInDiv(div) {\n var sizeSpan = document.createElement('span');\n sizeSpan.setAttribute('style', 'margin: 0; padding: 0 0 0 1em; border: 0;');\n div.appendChild(sizeSpan);\n var oneEmWidth = sizeSpan.offsetWidth;\n div.removeChild(sizeSpan);\n return oneEmWidth;\n};\n\nvar escapeHTML = function escapeHTML(str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(//g, \">\");\n};\n\nLegend.prototype.select = function (e) {\n var xValue = e.selectedX;\n var points = e.selectedPoints;\n var row = e.selectedRow;\n\n var legendMode = e.dygraph.getOption('legend');\n if (legendMode === 'never') {\n this.legend_div_.style.display = 'none';\n return;\n }\n\n if (legendMode === 'follow') {\n // create floating legend div\n var area = e.dygraph.plotter_.area;\n var labelsDivWidth = this.legend_div_.offsetWidth;\n var yAxisLabelWidth = e.dygraph.getOptionForAxis('axisLabelWidth', 'y');\n // determine floating [left, top] coordinates of the legend div\n // within the plotter_ area\n // offset 50 px to the right and down from the first selection point\n // 50 px is guess based on mouse cursor size\n var leftLegend = points[0].x * area.w + 50;\n var topLegend = points[0].y * area.h - 50;\n\n // if legend floats to end of the chart area, it flips to the other\n // side of the selection point\n if (leftLegend + labelsDivWidth + 1 > area.w) {\n leftLegend = leftLegend - 2 * 50 - labelsDivWidth - (yAxisLabelWidth - area.x);\n }\n\n e.dygraph.graphDiv.appendChild(this.legend_div_);\n this.legend_div_.style.left = yAxisLabelWidth + leftLegend + \"px\";\n this.legend_div_.style.top = topLegend + \"px\";\n }\n\n var html = Legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_, row);\n this.legend_div_.innerHTML = html;\n this.legend_div_.style.display = '';\n};\n\nLegend.prototype.deselect = function (e) {\n var legendMode = e.dygraph.getOption('legend');\n if (legendMode !== 'always') {\n this.legend_div_.style.display = \"none\";\n }\n\n // Have to do this every time, since styles might have changed.\n var oneEmWidth = calculateEmWidthInDiv(this.legend_div_);\n this.one_em_width_ = oneEmWidth;\n\n var html = Legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth, null);\n this.legend_div_.innerHTML = html;\n};\n\nLegend.prototype.didDrawChart = function (e) {\n this.deselect(e);\n};\n\n// Right edge should be flush with the right edge of the charting area (which\n// may not be the same as the right edge of the div, if we have two y-axes.\n// TODO(danvk): is any of this really necessary? Could just set \"right\" in \"activate\".\n/**\n * Position the labels div so that:\n * - its right edge is flush with the right edge of the charting area\n * - its top edge is flush with the top edge of the charting area\n * @private\n */\nLegend.prototype.predraw = function (e) {\n // Don't touch a user-specified labelsDiv.\n if (!this.is_generated_div_) return;\n\n // TODO(danvk): only use real APIs for this.\n e.dygraph.graphDiv.appendChild(this.legend_div_);\n var area = e.dygraph.getArea();\n var labelsDivWidth = this.legend_div_.offsetWidth;\n this.legend_div_.style.left = area.x + area.w - labelsDivWidth - 1 + \"px\";\n this.legend_div_.style.top = area.y + \"px\";\n};\n\n/**\n * Called when dygraph.destroy() is called.\n * You should null out any references and detach any DOM elements.\n */\nLegend.prototype.destroy = function () {\n this.legend_div_ = null;\n};\n\n/**\n * Generates HTML for the legend which is displayed when hovering over the\n * chart. If no selected points are specified, a default legend is returned\n * (this may just be the empty string).\n * @param {number} x The x-value of the selected points.\n * @param {Object} sel_points List of selected points for the given\n * x-value. Should have properties like 'name', 'yval' and 'canvasy'.\n * @param {number} oneEmWidth The pixel width for 1em in the legend. Only\n * relevant when displaying a legend with no selection (i.e. {legend:\n * 'always'}) and with dashed lines.\n * @param {number} row The selected row index.\n * @private\n */\nLegend.generateLegendHTML = function (g, x, sel_points, oneEmWidth, row) {\n // Data about the selection to pass to legendFormatter\n var data = {\n dygraph: g,\n x: x,\n series: []\n };\n\n var labelToSeries = {};\n var labels = g.getLabels();\n if (labels) {\n for (var i = 1; i < labels.length; i++) {\n var series = g.getPropertiesForSeries(labels[i]);\n var strokePattern = g.getOption('strokePattern', labels[i]);\n var seriesData = {\n dashHTML: generateLegendDashHTML(strokePattern, series.color, oneEmWidth),\n label: labels[i],\n labelHTML: escapeHTML(labels[i]),\n isVisible: series.visible,\n color: series.color\n };\n\n data.series.push(seriesData);\n labelToSeries[labels[i]] = seriesData;\n }\n }\n\n if (typeof x !== 'undefined') {\n var xOptView = g.optionsViewForAxis_('x');\n var xvf = xOptView('valueFormatter');\n data.xHTML = xvf.call(g, x, xOptView, labels[0], g, row, 0);\n\n var yOptViews = [];\n var num_axes = g.numAxes();\n for (var i = 0; i < num_axes; i++) {\n // TODO(danvk): remove this use of a private API\n yOptViews[i] = g.optionsViewForAxis_('y' + (i ? 1 + i : ''));\n }\n\n var showZeros = g.getOption('labelsShowZeroValues');\n var highlightSeries = g.getHighlightSeries();\n for (i = 0; i < sel_points.length; i++) {\n var pt = sel_points[i];\n var seriesData = labelToSeries[pt.name];\n seriesData.y = pt.yval;\n\n if (pt.yval === 0 && !showZeros || isNaN(pt.canvasy)) {\n seriesData.isVisible = false;\n continue;\n }\n\n var series = g.getPropertiesForSeries(pt.name);\n var yOptView = yOptViews[series.axis - 1];\n var fmtFunc = yOptView('valueFormatter');\n var yHTML = fmtFunc.call(g, pt.yval, yOptView, pt.name, g, row, labels.indexOf(pt.name));\n\n utils.update(seriesData, { yHTML: yHTML });\n\n if (pt.name == highlightSeries) {\n seriesData.isHighlighted = true;\n }\n }\n }\n\n var formatter = g.getOption('legendFormatter') || Legend.defaultFormatter;\n return formatter.call(g, data);\n};\n\nLegend.defaultFormatter = function (data) {\n var g = data.dygraph;\n\n // TODO(danvk): deprecate this option in place of {legend: 'never'}\n // XXX should this logic be in the formatter?\n if (g.getOption('showLabelsOnHighlight') !== true) return '';\n\n var sepLines = g.getOption('labelsSeparateLines');\n var html;\n\n if (typeof data.x === 'undefined') {\n // TODO: this check is duplicated in generateLegendHTML. Put it in one place.\n if (g.getOption('legend') != 'always') {\n return '';\n }\n\n html = '';\n for (var i = 0; i < data.series.length; i++) {\n var series = data.series[i];\n if (!series.isVisible) continue;\n\n if (html !== '') html += sepLines ? '
    ' : ' ';\n html += \"\" + series.dashHTML + \" \" + series.labelHTML + \"\";\n }\n return html;\n }\n\n html = data.xHTML + ':';\n for (var i = 0; i < data.series.length; i++) {\n var series = data.series[i];\n if (!series.isVisible) continue;\n if (sepLines) html += '
    ';\n var cls = series.isHighlighted ? ' class=\"highlight\"' : '';\n html += \" \" + series.labelHTML + \": \" + series.yHTML + \"\";\n }\n return html;\n};\n\n/**\n * Generates html for the \"dash\" displayed on the legend when using \"legend: always\".\n * In particular, this works for dashed lines with any stroke pattern. It will\n * try to scale the pattern to fit in 1em width. Or if small enough repeat the\n * pattern for 1em width.\n *\n * @param strokePattern The pattern\n * @param color The color of the series.\n * @param oneEmWidth The width in pixels of 1em in the legend.\n * @private\n */\n// TODO(danvk): cache the results of this\nfunction generateLegendDashHTML(strokePattern, color, oneEmWidth) {\n // Easy, common case: a solid line\n if (!strokePattern || strokePattern.length <= 1) {\n return \"
    \";\n }\n\n var i, j, paddingLeft, marginRight;\n var strokePixelLength = 0,\n segmentLoop = 0;\n var normalizedPattern = [];\n var loop;\n\n // Compute the length of the pixels including the first segment twice,\n // since we repeat it.\n for (i = 0; i <= strokePattern.length; i++) {\n strokePixelLength += strokePattern[i % strokePattern.length];\n }\n\n // See if we can loop the pattern by itself at least twice.\n loop = Math.floor(oneEmWidth / (strokePixelLength - strokePattern[0]));\n if (loop > 1) {\n // This pattern fits at least two times, no scaling just convert to em;\n for (i = 0; i < strokePattern.length; i++) {\n normalizedPattern[i] = strokePattern[i] / oneEmWidth;\n }\n // Since we are repeating the pattern, we don't worry about repeating the\n // first segment in one draw.\n segmentLoop = normalizedPattern.length;\n } else {\n // If the pattern doesn't fit in the legend we scale it to fit.\n loop = 1;\n for (i = 0; i < strokePattern.length; i++) {\n normalizedPattern[i] = strokePattern[i] / strokePixelLength;\n }\n // For the scaled patterns we do redraw the first segment.\n segmentLoop = normalizedPattern.length + 1;\n }\n\n // Now make the pattern.\n var dash = \"\";\n for (j = 0; j < loop; j++) {\n for (i = 0; i < segmentLoop; i += 2) {\n // The padding is the drawn segment.\n paddingLeft = normalizedPattern[i % normalizedPattern.length];\n if (i < strokePattern.length) {\n // The margin is the space segment.\n marginRight = normalizedPattern[(i + 1) % normalizedPattern.length];\n } else {\n // The repeated first segment has no right margin.\n marginRight = 0;\n }\n dash += \"
    \";\n }\n }\n return dash;\n};\n\nexports[\"default\"] = Legend;\nmodule.exports = exports[\"default\"];","/**\n * @license\n * Copyright 2011 Paul Felix (paul.eric.felix@gmail.com)\n * MIT-licensed (http://opensource.org/licenses/MIT)\n */\n/*global Dygraph:false,TouchEvent:false */\n\n/**\n * @fileoverview This file contains the RangeSelector plugin used to provide\n * a timeline range selector widget for dygraphs.\n */\n\n/*global Dygraph:false */\n\"use strict\";\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _dygraphUtils = require('../dygraph-utils');\n\nvar utils = _interopRequireWildcard(_dygraphUtils);\n\nvar _dygraphInteractionModel = require('../dygraph-interaction-model');\n\nvar _dygraphInteractionModel2 = _interopRequireDefault(_dygraphInteractionModel);\n\nvar _iframeTarp = require('../iframe-tarp');\n\nvar _iframeTarp2 = _interopRequireDefault(_iframeTarp);\n\nvar rangeSelector = function rangeSelector() {\n this.hasTouchInterface_ = typeof TouchEvent != 'undefined';\n this.isMobileDevice_ = /mobile|android/gi.test(navigator.appVersion);\n this.interfaceCreated_ = false;\n};\n\nrangeSelector.prototype.toString = function () {\n return \"RangeSelector Plugin\";\n};\n\nrangeSelector.prototype.activate = function (dygraph) {\n this.dygraph_ = dygraph;\n if (this.getOption_('showRangeSelector')) {\n this.createInterface_();\n }\n return {\n layout: this.reserveSpace_,\n predraw: this.renderStaticLayer_,\n didDrawChart: this.renderInteractiveLayer_\n };\n};\n\nrangeSelector.prototype.destroy = function () {\n this.bgcanvas_ = null;\n this.fgcanvas_ = null;\n this.leftZoomHandle_ = null;\n this.rightZoomHandle_ = null;\n};\n\n//------------------------------------------------------------------\n// Private methods\n//------------------------------------------------------------------\n\nrangeSelector.prototype.getOption_ = function (name, opt_series) {\n return this.dygraph_.getOption(name, opt_series);\n};\n\nrangeSelector.prototype.setDefaultOption_ = function (name, value) {\n this.dygraph_.attrs_[name] = value;\n};\n\n/**\n * @private\n * Creates the range selector elements and adds them to the graph.\n */\nrangeSelector.prototype.createInterface_ = function () {\n this.createCanvases_();\n this.createZoomHandles_();\n this.initInteraction_();\n\n // Range selector and animatedZooms have a bad interaction. See issue 359.\n if (this.getOption_('animatedZooms')) {\n console.warn('Animated zooms and range selector are not compatible; disabling animatedZooms.');\n this.dygraph_.updateOptions({ animatedZooms: false }, true);\n }\n\n this.interfaceCreated_ = true;\n this.addToGraph_();\n};\n\n/**\n * @private\n * Adds the range selector to the graph.\n */\nrangeSelector.prototype.addToGraph_ = function () {\n var graphDiv = this.graphDiv_ = this.dygraph_.graphDiv;\n graphDiv.appendChild(this.bgcanvas_);\n graphDiv.appendChild(this.fgcanvas_);\n graphDiv.appendChild(this.leftZoomHandle_);\n graphDiv.appendChild(this.rightZoomHandle_);\n};\n\n/**\n * @private\n * Removes the range selector from the graph.\n */\nrangeSelector.prototype.removeFromGraph_ = function () {\n var graphDiv = this.graphDiv_;\n graphDiv.removeChild(this.bgcanvas_);\n graphDiv.removeChild(this.fgcanvas_);\n graphDiv.removeChild(this.leftZoomHandle_);\n graphDiv.removeChild(this.rightZoomHandle_);\n this.graphDiv_ = null;\n};\n\n/**\n * @private\n * Called by Layout to allow range selector to reserve its space.\n */\nrangeSelector.prototype.reserveSpace_ = function (e) {\n if (this.getOption_('showRangeSelector')) {\n e.reserveSpaceBottom(this.getOption_('rangeSelectorHeight') + 4);\n }\n};\n\n/**\n * @private\n * Renders the static portion of the range selector at the predraw stage.\n */\nrangeSelector.prototype.renderStaticLayer_ = function () {\n if (!this.updateVisibility_()) {\n return;\n }\n this.resize_();\n this.drawStaticLayer_();\n};\n\n/**\n * @private\n * Renders the interactive portion of the range selector after the chart has been drawn.\n */\nrangeSelector.prototype.renderInteractiveLayer_ = function () {\n if (!this.updateVisibility_() || this.isChangingRange_) {\n return;\n }\n this.placeZoomHandles_();\n this.drawInteractiveLayer_();\n};\n\n/**\n * @private\n * Check to see if the range selector is enabled/disabled and update visibility accordingly.\n */\nrangeSelector.prototype.updateVisibility_ = function () {\n var enabled = this.getOption_('showRangeSelector');\n if (enabled) {\n if (!this.interfaceCreated_) {\n this.createInterface_();\n } else if (!this.graphDiv_ || !this.graphDiv_.parentNode) {\n this.addToGraph_();\n }\n } else if (this.graphDiv_) {\n this.removeFromGraph_();\n var dygraph = this.dygraph_;\n setTimeout(function () {\n dygraph.width_ = 0;dygraph.resize();\n }, 1);\n }\n return enabled;\n};\n\n/**\n * @private\n * Resizes the range selector.\n */\nrangeSelector.prototype.resize_ = function () {\n function setElementRect(canvas, context, rect, pixelRatioOption) {\n var canvasScale = pixelRatioOption || utils.getContextPixelRatio(context);\n\n canvas.style.top = rect.y + 'px';\n canvas.style.left = rect.x + 'px';\n canvas.width = rect.w * canvasScale;\n canvas.height = rect.h * canvasScale;\n canvas.style.width = rect.w + 'px';\n canvas.style.height = rect.h + 'px';\n\n if (canvasScale != 1) {\n context.scale(canvasScale, canvasScale);\n }\n }\n\n var plotArea = this.dygraph_.layout_.getPlotArea();\n\n var xAxisLabelHeight = 0;\n if (this.dygraph_.getOptionForAxis('drawAxis', 'x')) {\n xAxisLabelHeight = this.getOption_('xAxisHeight') || this.getOption_('axisLabelFontSize') + 2 * this.getOption_('axisTickSize');\n }\n this.canvasRect_ = {\n x: plotArea.x,\n y: plotArea.y + plotArea.h + xAxisLabelHeight + 4,\n w: plotArea.w,\n h: this.getOption_('rangeSelectorHeight')\n };\n\n var pixelRatioOption = this.dygraph_.getNumericOption('pixelRatio');\n setElementRect(this.bgcanvas_, this.bgcanvas_ctx_, this.canvasRect_, pixelRatioOption);\n setElementRect(this.fgcanvas_, this.fgcanvas_ctx_, this.canvasRect_, pixelRatioOption);\n};\n\n/**\n * @private\n * Creates the background and foreground canvases.\n */\nrangeSelector.prototype.createCanvases_ = function () {\n this.bgcanvas_ = utils.createCanvas();\n this.bgcanvas_.className = 'dygraph-rangesel-bgcanvas';\n this.bgcanvas_.style.position = 'absolute';\n this.bgcanvas_.style.zIndex = 9;\n this.bgcanvas_ctx_ = utils.getContext(this.bgcanvas_);\n\n this.fgcanvas_ = utils.createCanvas();\n this.fgcanvas_.className = 'dygraph-rangesel-fgcanvas';\n this.fgcanvas_.style.position = 'absolute';\n this.fgcanvas_.style.zIndex = 9;\n this.fgcanvas_.style.cursor = 'default';\n this.fgcanvas_ctx_ = utils.getContext(this.fgcanvas_);\n};\n\n/**\n * @private\n * Creates the zoom handle elements.\n */\nrangeSelector.prototype.createZoomHandles_ = function () {\n var img = new Image();\n img.className = 'dygraph-rangesel-zoomhandle';\n img.style.position = 'absolute';\n img.style.zIndex = 10;\n img.style.visibility = 'hidden'; // Initially hidden so they don't show up in the wrong place.\n img.style.cursor = 'col-resize';\n // TODO: change image to more options\n img.width = 9;\n img.height = 16;\n img.src = 'data:image/png;base64,' + 'iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAA' + 'zwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENv' + 'bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl' + '6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7s' + 'qSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=';\n\n if (this.isMobileDevice_) {\n img.width *= 2;\n img.height *= 2;\n }\n\n this.leftZoomHandle_ = img;\n this.rightZoomHandle_ = img.cloneNode(false);\n};\n\n/**\n * @private\n * Sets up the interaction for the range selector.\n */\nrangeSelector.prototype.initInteraction_ = function () {\n var self = this;\n var topElem = document;\n var clientXLast = 0;\n var handle = null;\n var isZooming = false;\n var isPanning = false;\n var dynamic = !this.isMobileDevice_;\n\n // We cover iframes during mouse interactions. See comments in\n // dygraph-utils.js for more info on why this is a good idea.\n var tarp = new _iframeTarp2['default']();\n\n // functions, defined below. Defining them this way (rather than with\n // \"function foo() {...}\" makes JSHint happy.\n var toXDataWindow, onZoomStart, onZoom, onZoomEnd, doZoom, isMouseInPanZone, onPanStart, onPan, onPanEnd, doPan, onCanvasHover;\n\n // Touch event functions\n var onZoomHandleTouchEvent, onCanvasTouchEvent, addTouchEvents;\n\n toXDataWindow = function (zoomHandleStatus) {\n var xDataLimits = self.dygraph_.xAxisExtremes();\n var fact = (xDataLimits[1] - xDataLimits[0]) / self.canvasRect_.w;\n var xDataMin = xDataLimits[0] + (zoomHandleStatus.leftHandlePos - self.canvasRect_.x) * fact;\n var xDataMax = xDataLimits[0] + (zoomHandleStatus.rightHandlePos - self.canvasRect_.x) * fact;\n return [xDataMin, xDataMax];\n };\n\n onZoomStart = function (e) {\n utils.cancelEvent(e);\n isZooming = true;\n clientXLast = e.clientX;\n handle = e.target ? e.target : e.srcElement;\n if (e.type === 'mousedown' || e.type === 'dragstart') {\n // These events are removed manually.\n utils.addEvent(topElem, 'mousemove', onZoom);\n utils.addEvent(topElem, 'mouseup', onZoomEnd);\n }\n self.fgcanvas_.style.cursor = 'col-resize';\n tarp.cover();\n return true;\n };\n\n onZoom = function (e) {\n if (!isZooming) {\n return false;\n }\n utils.cancelEvent(e);\n\n var delX = e.clientX - clientXLast;\n if (Math.abs(delX) < 4) {\n return true;\n }\n clientXLast = e.clientX;\n\n // Move handle.\n var zoomHandleStatus = self.getZoomHandleStatus_();\n var newPos;\n if (handle == self.leftZoomHandle_) {\n newPos = zoomHandleStatus.leftHandlePos + delX;\n newPos = Math.min(newPos, zoomHandleStatus.rightHandlePos - handle.width - 3);\n newPos = Math.max(newPos, self.canvasRect_.x);\n } else {\n newPos = zoomHandleStatus.rightHandlePos + delX;\n newPos = Math.min(newPos, self.canvasRect_.x + self.canvasRect_.w);\n newPos = Math.max(newPos, zoomHandleStatus.leftHandlePos + handle.width + 3);\n }\n var halfHandleWidth = handle.width / 2;\n handle.style.left = newPos - halfHandleWidth + 'px';\n self.drawInteractiveLayer_();\n\n // Zoom on the fly.\n if (dynamic) {\n doZoom();\n }\n return true;\n };\n\n onZoomEnd = function (e) {\n if (!isZooming) {\n return false;\n }\n isZooming = false;\n tarp.uncover();\n utils.removeEvent(topElem, 'mousemove', onZoom);\n utils.removeEvent(topElem, 'mouseup', onZoomEnd);\n self.fgcanvas_.style.cursor = 'default';\n\n // If on a slower device, zoom now.\n if (!dynamic) {\n doZoom();\n }\n return true;\n };\n\n doZoom = function () {\n try {\n var zoomHandleStatus = self.getZoomHandleStatus_();\n self.isChangingRange_ = true;\n if (!zoomHandleStatus.isZoomed) {\n self.dygraph_.resetZoom();\n } else {\n var xDataWindow = toXDataWindow(zoomHandleStatus);\n self.dygraph_.doZoomXDates_(xDataWindow[0], xDataWindow[1]);\n }\n } finally {\n self.isChangingRange_ = false;\n }\n };\n\n isMouseInPanZone = function (e) {\n var rect = self.leftZoomHandle_.getBoundingClientRect();\n var leftHandleClientX = rect.left + rect.width / 2;\n rect = self.rightZoomHandle_.getBoundingClientRect();\n var rightHandleClientX = rect.left + rect.width / 2;\n return e.clientX > leftHandleClientX && e.clientX < rightHandleClientX;\n };\n\n onPanStart = function (e) {\n if (!isPanning && isMouseInPanZone(e) && self.getZoomHandleStatus_().isZoomed) {\n utils.cancelEvent(e);\n isPanning = true;\n clientXLast = e.clientX;\n if (e.type === 'mousedown') {\n // These events are removed manually.\n utils.addEvent(topElem, 'mousemove', onPan);\n utils.addEvent(topElem, 'mouseup', onPanEnd);\n }\n return true;\n }\n return false;\n };\n\n onPan = function (e) {\n if (!isPanning) {\n return false;\n }\n utils.cancelEvent(e);\n\n var delX = e.clientX - clientXLast;\n if (Math.abs(delX) < 4) {\n return true;\n }\n clientXLast = e.clientX;\n\n // Move range view\n var zoomHandleStatus = self.getZoomHandleStatus_();\n var leftHandlePos = zoomHandleStatus.leftHandlePos;\n var rightHandlePos = zoomHandleStatus.rightHandlePos;\n var rangeSize = rightHandlePos - leftHandlePos;\n if (leftHandlePos + delX <= self.canvasRect_.x) {\n leftHandlePos = self.canvasRect_.x;\n rightHandlePos = leftHandlePos + rangeSize;\n } else if (rightHandlePos + delX >= self.canvasRect_.x + self.canvasRect_.w) {\n rightHandlePos = self.canvasRect_.x + self.canvasRect_.w;\n leftHandlePos = rightHandlePos - rangeSize;\n } else {\n leftHandlePos += delX;\n rightHandlePos += delX;\n }\n var halfHandleWidth = self.leftZoomHandle_.width / 2;\n self.leftZoomHandle_.style.left = leftHandlePos - halfHandleWidth + 'px';\n self.rightZoomHandle_.style.left = rightHandlePos - halfHandleWidth + 'px';\n self.drawInteractiveLayer_();\n\n // Do pan on the fly.\n if (dynamic) {\n doPan();\n }\n return true;\n };\n\n onPanEnd = function (e) {\n if (!isPanning) {\n return false;\n }\n isPanning = false;\n utils.removeEvent(topElem, 'mousemove', onPan);\n utils.removeEvent(topElem, 'mouseup', onPanEnd);\n // If on a slower device, do pan now.\n if (!dynamic) {\n doPan();\n }\n return true;\n };\n\n doPan = function () {\n try {\n self.isChangingRange_ = true;\n self.dygraph_.dateWindow_ = toXDataWindow(self.getZoomHandleStatus_());\n self.dygraph_.drawGraph_(false);\n } finally {\n self.isChangingRange_ = false;\n }\n };\n\n onCanvasHover = function (e) {\n if (isZooming || isPanning) {\n return;\n }\n var cursor = isMouseInPanZone(e) ? 'move' : 'default';\n if (cursor != self.fgcanvas_.style.cursor) {\n self.fgcanvas_.style.cursor = cursor;\n }\n };\n\n onZoomHandleTouchEvent = function (e) {\n if (e.type == 'touchstart' && e.targetTouches.length == 1) {\n if (onZoomStart(e.targetTouches[0])) {\n utils.cancelEvent(e);\n }\n } else if (e.type == 'touchmove' && e.targetTouches.length == 1) {\n if (onZoom(e.targetTouches[0])) {\n utils.cancelEvent(e);\n }\n } else {\n onZoomEnd(e);\n }\n };\n\n onCanvasTouchEvent = function (e) {\n if (e.type == 'touchstart' && e.targetTouches.length == 1) {\n if (onPanStart(e.targetTouches[0])) {\n utils.cancelEvent(e);\n }\n } else if (e.type == 'touchmove' && e.targetTouches.length == 1) {\n if (onPan(e.targetTouches[0])) {\n utils.cancelEvent(e);\n }\n } else {\n onPanEnd(e);\n }\n };\n\n addTouchEvents = function (elem, fn) {\n var types = ['touchstart', 'touchend', 'touchmove', 'touchcancel'];\n for (var i = 0; i < types.length; i++) {\n self.dygraph_.addAndTrackEvent(elem, types[i], fn);\n }\n };\n\n this.setDefaultOption_('interactionModel', _dygraphInteractionModel2['default'].dragIsPanInteractionModel);\n this.setDefaultOption_('panEdgeFraction', 0.0001);\n\n var dragStartEvent = window.opera ? 'mousedown' : 'dragstart';\n this.dygraph_.addAndTrackEvent(this.leftZoomHandle_, dragStartEvent, onZoomStart);\n this.dygraph_.addAndTrackEvent(this.rightZoomHandle_, dragStartEvent, onZoomStart);\n\n this.dygraph_.addAndTrackEvent(this.fgcanvas_, 'mousedown', onPanStart);\n this.dygraph_.addAndTrackEvent(this.fgcanvas_, 'mousemove', onCanvasHover);\n\n // Touch events\n if (this.hasTouchInterface_) {\n addTouchEvents(this.leftZoomHandle_, onZoomHandleTouchEvent);\n addTouchEvents(this.rightZoomHandle_, onZoomHandleTouchEvent);\n addTouchEvents(this.fgcanvas_, onCanvasTouchEvent);\n }\n};\n\n/**\n * @private\n * Draws the static layer in the background canvas.\n */\nrangeSelector.prototype.drawStaticLayer_ = function () {\n var ctx = this.bgcanvas_ctx_;\n ctx.clearRect(0, 0, this.canvasRect_.w, this.canvasRect_.h);\n try {\n this.drawMiniPlot_();\n } catch (ex) {\n console.warn(ex);\n }\n\n var margin = 0.5;\n this.bgcanvas_ctx_.lineWidth = this.getOption_('rangeSelectorBackgroundLineWidth');\n ctx.strokeStyle = this.getOption_('rangeSelectorBackgroundStrokeColor');\n ctx.beginPath();\n ctx.moveTo(margin, margin);\n ctx.lineTo(margin, this.canvasRect_.h - margin);\n ctx.lineTo(this.canvasRect_.w - margin, this.canvasRect_.h - margin);\n ctx.lineTo(this.canvasRect_.w - margin, margin);\n ctx.stroke();\n};\n\n/**\n * @private\n * Draws the mini plot in the background canvas.\n */\nrangeSelector.prototype.drawMiniPlot_ = function () {\n var fillStyle = this.getOption_('rangeSelectorPlotFillColor');\n var fillGradientStyle = this.getOption_('rangeSelectorPlotFillGradientColor');\n var strokeStyle = this.getOption_('rangeSelectorPlotStrokeColor');\n if (!fillStyle && !strokeStyle) {\n return;\n }\n\n var stepPlot = this.getOption_('stepPlot');\n\n var combinedSeriesData = this.computeCombinedSeriesAndLimits_();\n var yRange = combinedSeriesData.yMax - combinedSeriesData.yMin;\n\n // Draw the mini plot.\n var ctx = this.bgcanvas_ctx_;\n var margin = 0.5;\n\n var xExtremes = this.dygraph_.xAxisExtremes();\n var xRange = Math.max(xExtremes[1] - xExtremes[0], 1.e-30);\n var xFact = (this.canvasRect_.w - margin) / xRange;\n var yFact = (this.canvasRect_.h - margin) / yRange;\n var canvasWidth = this.canvasRect_.w - margin;\n var canvasHeight = this.canvasRect_.h - margin;\n\n var prevX = null,\n prevY = null;\n\n ctx.beginPath();\n ctx.moveTo(margin, canvasHeight);\n for (var i = 0; i < combinedSeriesData.data.length; i++) {\n var dataPoint = combinedSeriesData.data[i];\n var x = dataPoint[0] !== null ? (dataPoint[0] - xExtremes[0]) * xFact : NaN;\n var y = dataPoint[1] !== null ? canvasHeight - (dataPoint[1] - combinedSeriesData.yMin) * yFact : NaN;\n\n // Skip points that don't change the x-value. Overly fine-grained points\n // can cause major slowdowns with the ctx.fill() call below.\n if (!stepPlot && prevX !== null && Math.round(x) == Math.round(prevX)) {\n continue;\n }\n\n if (isFinite(x) && isFinite(y)) {\n if (prevX === null) {\n ctx.lineTo(x, canvasHeight);\n } else if (stepPlot) {\n ctx.lineTo(x, prevY);\n }\n ctx.lineTo(x, y);\n prevX = x;\n prevY = y;\n } else {\n if (prevX !== null) {\n if (stepPlot) {\n ctx.lineTo(x, prevY);\n ctx.lineTo(x, canvasHeight);\n } else {\n ctx.lineTo(prevX, canvasHeight);\n }\n }\n prevX = prevY = null;\n }\n }\n ctx.lineTo(canvasWidth, canvasHeight);\n ctx.closePath();\n\n if (fillStyle) {\n var lingrad = this.bgcanvas_ctx_.createLinearGradient(0, 0, 0, canvasHeight);\n if (fillGradientStyle) {\n lingrad.addColorStop(0, fillGradientStyle);\n }\n lingrad.addColorStop(1, fillStyle);\n this.bgcanvas_ctx_.fillStyle = lingrad;\n ctx.fill();\n }\n\n if (strokeStyle) {\n this.bgcanvas_ctx_.strokeStyle = strokeStyle;\n this.bgcanvas_ctx_.lineWidth = this.getOption_('rangeSelectorPlotLineWidth');\n ctx.stroke();\n }\n};\n\n/**\n * @private\n * Computes and returns the combined series data along with min/max for the mini plot.\n * The combined series consists of averaged values for all series.\n * When series have error bars, the error bars are ignored.\n * @return {Object} An object containing combined series array, ymin, ymax.\n */\nrangeSelector.prototype.computeCombinedSeriesAndLimits_ = function () {\n var g = this.dygraph_;\n var logscale = this.getOption_('logscale');\n var i;\n\n // Select series to combine. By default, all series are combined.\n var numColumns = g.numColumns();\n var labels = g.getLabels();\n var includeSeries = new Array(numColumns);\n var anySet = false;\n var visibility = g.visibility();\n var inclusion = [];\n\n for (i = 1; i < numColumns; i++) {\n var include = this.getOption_('showInRangeSelector', labels[i]);\n inclusion.push(include);\n if (include !== null) anySet = true; // it's set explicitly for this series\n }\n\n if (anySet) {\n for (i = 1; i < numColumns; i++) {\n includeSeries[i] = inclusion[i - 1];\n }\n } else {\n for (i = 1; i < numColumns; i++) {\n includeSeries[i] = visibility[i - 1];\n }\n }\n\n // Create a combined series (average of selected series values).\n // TODO(danvk): short-circuit if there's only one series.\n var rolledSeries = [];\n var dataHandler = g.dataHandler_;\n var options = g.attributes_;\n for (i = 1; i < g.numColumns(); i++) {\n if (!includeSeries[i]) continue;\n var series = dataHandler.extractSeries(g.rawData_, i, options);\n if (g.rollPeriod() > 1) {\n series = dataHandler.rollingAverage(series, g.rollPeriod(), options);\n }\n\n rolledSeries.push(series);\n }\n\n var combinedSeries = [];\n for (i = 0; i < rolledSeries[0].length; i++) {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < rolledSeries.length; j++) {\n var y = rolledSeries[j][i][1];\n if (y === null || isNaN(y)) continue;\n count++;\n sum += y;\n }\n combinedSeries.push([rolledSeries[0][i][0], sum / count]);\n }\n\n // Compute the y range.\n var yMin = Number.MAX_VALUE;\n var yMax = -Number.MAX_VALUE;\n for (i = 0; i < combinedSeries.length; i++) {\n var yVal = combinedSeries[i][1];\n if (yVal !== null && isFinite(yVal) && (!logscale || yVal > 0)) {\n yMin = Math.min(yMin, yVal);\n yMax = Math.max(yMax, yVal);\n }\n }\n\n // Convert Y data to log scale if needed.\n // Also, expand the Y range to compress the mini plot a little.\n var extraPercent = 0.25;\n if (logscale) {\n yMax = utils.log10(yMax);\n yMax += yMax * extraPercent;\n yMin = utils.log10(yMin);\n for (i = 0; i < combinedSeries.length; i++) {\n combinedSeries[i][1] = utils.log10(combinedSeries[i][1]);\n }\n } else {\n var yExtra;\n var yRange = yMax - yMin;\n if (yRange <= Number.MIN_VALUE) {\n yExtra = yMax * extraPercent;\n } else {\n yExtra = yRange * extraPercent;\n }\n yMax += yExtra;\n yMin -= yExtra;\n }\n\n return { data: combinedSeries, yMin: yMin, yMax: yMax };\n};\n\n/**\n * @private\n * Places the zoom handles in the proper position based on the current X data window.\n */\nrangeSelector.prototype.placeZoomHandles_ = function () {\n var xExtremes = this.dygraph_.xAxisExtremes();\n var xWindowLimits = this.dygraph_.xAxisRange();\n var xRange = xExtremes[1] - xExtremes[0];\n var leftPercent = Math.max(0, (xWindowLimits[0] - xExtremes[0]) / xRange);\n var rightPercent = Math.max(0, (xExtremes[1] - xWindowLimits[1]) / xRange);\n var leftCoord = this.canvasRect_.x + this.canvasRect_.w * leftPercent;\n var rightCoord = this.canvasRect_.x + this.canvasRect_.w * (1 - rightPercent);\n var handleTop = Math.max(this.canvasRect_.y, this.canvasRect_.y + (this.canvasRect_.h - this.leftZoomHandle_.height) / 2);\n var halfHandleWidth = this.leftZoomHandle_.width / 2;\n this.leftZoomHandle_.style.left = leftCoord - halfHandleWidth + 'px';\n this.leftZoomHandle_.style.top = handleTop + 'px';\n this.rightZoomHandle_.style.left = rightCoord - halfHandleWidth + 'px';\n this.rightZoomHandle_.style.top = this.leftZoomHandle_.style.top;\n\n this.leftZoomHandle_.style.visibility = 'visible';\n this.rightZoomHandle_.style.visibility = 'visible';\n};\n\n/**\n * @private\n * Draws the interactive layer in the foreground canvas.\n */\nrangeSelector.prototype.drawInteractiveLayer_ = function () {\n var ctx = this.fgcanvas_ctx_;\n ctx.clearRect(0, 0, this.canvasRect_.w, this.canvasRect_.h);\n var margin = 1;\n var width = this.canvasRect_.w - margin;\n var height = this.canvasRect_.h - margin;\n var zoomHandleStatus = this.getZoomHandleStatus_();\n\n ctx.strokeStyle = this.getOption_('rangeSelectorForegroundStrokeColor');\n ctx.lineWidth = this.getOption_('rangeSelectorForegroundLineWidth');\n if (!zoomHandleStatus.isZoomed) {\n ctx.beginPath();\n ctx.moveTo(margin, margin);\n ctx.lineTo(margin, height);\n ctx.lineTo(width, height);\n ctx.lineTo(width, margin);\n ctx.stroke();\n } else {\n var leftHandleCanvasPos = Math.max(margin, zoomHandleStatus.leftHandlePos - this.canvasRect_.x);\n var rightHandleCanvasPos = Math.min(width, zoomHandleStatus.rightHandlePos - this.canvasRect_.x);\n\n ctx.fillStyle = 'rgba(240, 240, 240, ' + this.getOption_('rangeSelectorAlpha').toString() + ')';\n ctx.fillRect(0, 0, leftHandleCanvasPos, this.canvasRect_.h);\n ctx.fillRect(rightHandleCanvasPos, 0, this.canvasRect_.w - rightHandleCanvasPos, this.canvasRect_.h);\n\n ctx.beginPath();\n ctx.moveTo(margin, margin);\n ctx.lineTo(leftHandleCanvasPos, margin);\n ctx.lineTo(leftHandleCanvasPos, height);\n ctx.lineTo(rightHandleCanvasPos, height);\n ctx.lineTo(rightHandleCanvasPos, margin);\n ctx.lineTo(width, margin);\n ctx.stroke();\n }\n};\n\n/**\n * @private\n * Returns the current zoom handle position information.\n * @return {Object} The zoom handle status.\n */\nrangeSelector.prototype.getZoomHandleStatus_ = function () {\n var halfHandleWidth = this.leftZoomHandle_.width / 2;\n var leftHandlePos = parseFloat(this.leftZoomHandle_.style.left) + halfHandleWidth;\n var rightHandlePos = parseFloat(this.rightZoomHandle_.style.left) + halfHandleWidth;\n return {\n leftHandlePos: leftHandlePos,\n rightHandlePos: rightHandlePos,\n isZoomed: leftHandlePos - 1 > this.canvasRect_.x || rightHandlePos + 1 < this.canvasRect_.x + this.canvasRect_.w\n };\n};\n\nexports['default'] = rangeSelector;\nmodule.exports = exports['default'];","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n opts = opts || {};\n\n if (uri && 'object' === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure = null != opts.secure ? opts.secure\n : (global.location && 'https:' === location.protocol);\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? '443' : '80';\n }\n\n this.agent = opts.agent || false;\n this.hostname = opts.hostname ||\n (global.location ? location.hostname : 'localhost');\n this.port = opts.port || (global.location && location.port\n ? location.port\n : (this.secure ? 443 : 80));\n this.query = opts.query || {};\n if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n this.upgrade = false !== opts.upgrade;\n this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n this.forceJSONP = !!opts.forceJSONP;\n this.jsonp = false !== opts.jsonp;\n this.forceBase64 = !!opts.forceBase64;\n this.enablesXDR = !!opts.enablesXDR;\n this.timestampParam = opts.timestampParam || 't';\n this.timestampRequests = opts.timestampRequests;\n this.transports = opts.transports || ['polling', 'websocket'];\n this.transportOptions = opts.transportOptions || {};\n this.readyState = '';\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.policyPort = opts.policyPort || 843;\n this.rememberUpgrade = opts.rememberUpgrade || false;\n this.binaryType = null;\n this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n this.perMessageDeflate.threshold = 1024;\n }\n\n // SSL options for Node.js client\n this.pfx = opts.pfx || null;\n this.key = opts.key || null;\n this.passphrase = opts.passphrase || null;\n this.cert = opts.cert || null;\n this.ca = opts.ca || null;\n this.ciphers = opts.ciphers || null;\n this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n this.forceNode = !!opts.forceNode;\n\n // other options for Node.js client\n var freeGlobal = typeof global === 'object' && global;\n if (freeGlobal.global === freeGlobal) {\n if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n this.extraHeaders = opts.extraHeaders;\n }\n\n if (opts.localAddress) {\n this.localAddress = opts.localAddress;\n }\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingIntervalTimer = null;\n this.pingTimeoutTimer = null;\n\n this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n debug('creating transport \"%s\"', name);\n var query = clone(this.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // per-transport options\n var options = this.transportOptions[name] || {};\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n var transport = new transports[name]({\n query: query,\n socket: this,\n agent: options.agent || this.agent,\n hostname: options.hostname || this.hostname,\n port: options.port || this.port,\n secure: options.secure || this.secure,\n path: options.path || this.path,\n forceJSONP: options.forceJSONP || this.forceJSONP,\n jsonp: options.jsonp || this.jsonp,\n forceBase64: options.forceBase64 || this.forceBase64,\n enablesXDR: options.enablesXDR || this.enablesXDR,\n timestampRequests: options.timestampRequests || this.timestampRequests,\n timestampParam: options.timestampParam || this.timestampParam,\n policyPort: options.policyPort || this.policyPort,\n pfx: options.pfx || this.pfx,\n key: options.key || this.key,\n passphrase: options.passphrase || this.passphrase,\n cert: options.cert || this.cert,\n ca: options.ca || this.ca,\n ciphers: options.ciphers || this.ciphers,\n rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n extraHeaders: options.extraHeaders || this.extraHeaders,\n forceNode: options.forceNode || this.forceNode,\n localAddress: options.localAddress || this.localAddress,\n requestTimeout: options.requestTimeout || this.requestTimeout,\n protocols: options.protocols || void (0)\n });\n\n return transport;\n};\n\nfunction clone (obj) {\n var o = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n var transport;\n if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n transport = 'websocket';\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n var self = this;\n setTimeout(function () {\n self.emit('error', 'No transports available');\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = 'opening';\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n debug('setting transport %s', transport.name);\n var self = this;\n\n if (this.transport) {\n debug('clearing existing transport %s', this.transport.name);\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on('drain', function () {\n self.onDrain();\n })\n .on('packet', function (packet) {\n self.onPacket(packet);\n })\n .on('error', function (e) {\n self.onError(e);\n })\n .on('close', function () {\n self.onClose('transport close');\n });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n debug('probing transport \"%s\"', name);\n var transport = this.createTransport(name, { probe: 1 });\n var failed = false;\n var self = this;\n\n Socket.priorWebsocketSuccess = false;\n\n function onTransportOpen () {\n if (self.onlyBinaryUpgrades) {\n var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n failed = failed || upgradeLosesBinary;\n }\n if (failed) return;\n\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: 'ping', data: 'probe' }]);\n transport.once('packet', function (msg) {\n if (failed) return;\n if ('pong' === msg.type && 'probe' === msg.data) {\n debug('probe transport \"%s\" pong', name);\n self.upgrading = true;\n self.emit('upgrading', transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n debug('pausing current transport \"%s\"', self.transport.name);\n self.transport.pause(function () {\n if (failed) return;\n if ('closed' === self.readyState) return;\n debug('changing transport and sending upgrade packet');\n\n cleanup();\n\n self.setTransport(transport);\n transport.send([{ type: 'upgrade' }]);\n self.emit('upgrade', transport);\n transport = null;\n self.upgrading = false;\n self.flush();\n });\n } else {\n debug('probe transport \"%s\" failed', name);\n var err = new Error('probe error');\n err.transport = transport.name;\n self.emit('upgradeError', err);\n }\n });\n }\n\n function freezeTransport () {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n function onerror (err) {\n var error = new Error('probe error: ' + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n self.emit('upgradeError', error);\n }\n\n function onTransportClose () {\n onerror('transport closed');\n }\n\n // When the socket is closed while we're probing\n function onclose () {\n onerror('socket closed');\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade (to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n function cleanup () {\n transport.removeListener('open', onTransportOpen);\n transport.removeListener('error', onerror);\n transport.removeListener('close', onTransportClose);\n self.removeListener('close', onclose);\n self.removeListener('upgrading', onupgrade);\n }\n\n transport.once('open', onTransportOpen);\n transport.once('error', onerror);\n transport.once('close', onTransportClose);\n\n this.once('close', onclose);\n this.once('upgrading', onupgrade);\n\n transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n debug('socket open');\n this.readyState = 'open';\n Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n this.emit('open');\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n debug('starting upgrade probes');\n for (var i = 0, l = this.upgrades.length; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n if ('opening' === this.readyState || 'open' === this.readyState ||\n 'closing' === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n this.emit('packet', packet);\n\n // Socket is live - any packet counts\n this.emit('heartbeat');\n\n switch (packet.type) {\n case 'open':\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case 'pong':\n this.setPing();\n this.emit('pong');\n break;\n\n case 'error':\n var err = new Error('server error');\n err.code = packet.data;\n this.onError(err);\n break;\n\n case 'message':\n this.emit('data', packet.data);\n this.emit('message', packet.data);\n break;\n }\n } else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n this.emit('handshake', data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if ('closed' === this.readyState) return;\n this.setPing();\n\n // Prolong liveness of socket on heartbeat\n this.removeListener('heartbeat', this.onHeartbeat);\n this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n clearTimeout(this.pingTimeoutTimer);\n var self = this;\n self.pingTimeoutTimer = setTimeout(function () {\n if ('closed' === self.readyState) return;\n self.onClose('ping timeout');\n }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n var self = this;\n clearTimeout(self.pingIntervalTimer);\n self.pingIntervalTimer = setTimeout(function () {\n debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n self.ping();\n self.onHeartbeat(self.pingTimeout);\n }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n var self = this;\n this.sendPacket('ping', function () {\n self.emit('ping');\n });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit('drain');\n } else {\n this.flush();\n }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n if ('closed' !== this.readyState && this.transport.writable &&\n !this.upgrading && this.writeBuffer.length) {\n debug('flushing %d packets in socket', this.writeBuffer.length);\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit('flush');\n }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n this.sendPacket('message', msg, options, fn);\n return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n if ('function' === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if ('function' === typeof options) {\n fn = options;\n options = null;\n }\n\n if ('closing' === this.readyState || 'closed' === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n var packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit('packetCreate', packet);\n this.writeBuffer.push(packet);\n if (fn) this.once('flush', fn);\n this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.readyState = 'closing';\n\n var self = this;\n\n if (this.writeBuffer.length) {\n this.once('drain', function () {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n function close () {\n self.onClose('forced close');\n debug('socket closing - telling transport to close');\n self.transport.close();\n }\n\n function cleanupAndClose () {\n self.removeListener('upgrade', cleanupAndClose);\n self.removeListener('upgradeError', cleanupAndClose);\n close();\n }\n\n function waitForUpgrade () {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n self.once('upgrade', cleanupAndClose);\n self.once('upgradeError', cleanupAndClose);\n }\n\n return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n debug('socket error %j', err);\n Socket.priorWebsocketSuccess = false;\n this.emit('error', err);\n this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n var self = this;\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners('close');\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n // set ready state\n this.readyState = 'closed';\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit('close', reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n self.writeBuffer = [];\n self.prevBufferLen = 0;\n }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n var filteredUpgrades = [];\n for (var i = 0, j = upgrades.length; i < j; i++) {\n if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n};\n","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n this.path = opts.path;\n this.hostname = opts.hostname;\n this.port = opts.port;\n this.secure = opts.secure;\n this.query = opts.query;\n this.timestampParam = opts.timestampParam;\n this.timestampRequests = opts.timestampRequests;\n this.readyState = '';\n this.agent = opts.agent || false;\n this.socket = opts.socket;\n this.enablesXDR = opts.enablesXDR;\n\n // SSL options for Node.js client\n this.pfx = opts.pfx;\n this.key = opts.key;\n this.passphrase = opts.passphrase;\n this.cert = opts.cert;\n this.ca = opts.ca;\n this.ciphers = opts.ciphers;\n this.rejectUnauthorized = opts.rejectUnauthorized;\n this.forceNode = opts.forceNode;\n\n // other options for Node.js client\n this.extraHeaders = opts.extraHeaders;\n this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n var err = new Error(msg);\n err.type = 'TransportError';\n err.description = desc;\n this.emit('error', err);\n return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n if ('closed' === this.readyState || '' === this.readyState) {\n this.readyState = 'opening';\n this.doOpen();\n }\n\n return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n if ('open' === this.readyState) {\n this.write(packets);\n } else {\n throw new Error('Transport not open');\n }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n this.readyState = 'open';\n this.writable = true;\n this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n var packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n this.readyState = 'closed';\n this.emit('close');\n};\n","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n var xhr;\n var xd = false;\n var xs = false;\n var jsonp = false !== opts.jsonp;\n\n if (global.location) {\n var isSSL = 'https:' === location.protocol;\n var port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if ('open' in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error('JSONP disabled');\n return new JSONP(opts);\n }\n}\n","\n/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n Polling.call(this, opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n if (!global.___eio) global.___eio = [];\n callbacks = global.___eio;\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n var self = this;\n callbacks.push(function (msg) {\n self.onData(msg);\n });\n\n // append to query string\n this.query.j = this.index;\n\n // prevent spurious errors from being emitted when the window is unloaded\n if (global.document && global.addEventListener) {\n global.addEventListener('beforeunload', function () {\n if (self.script) self.script.onerror = empty;\n }, false);\n }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n var self = this;\n var script = document.createElement('script');\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = function (e) {\n self.onError('jsonp poll error', e);\n };\n\n var insertAt = document.getElementsByTagName('script')[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function () {\n var iframe = document.createElement('iframe');\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n var self = this;\n\n if (!this.form) {\n var form = document.createElement('form');\n var area = document.createElement('textarea');\n var id = this.iframeId = 'eio_iframe_' + this.index;\n var iframe;\n\n form.className = 'socketio';\n form.style.position = 'absolute';\n form.style.top = '-1000px';\n form.style.left = '-1000px';\n form.target = id;\n form.method = 'POST';\n form.setAttribute('accept-charset', 'utf-8');\n area.name = 'd';\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete () {\n initIframe();\n fn();\n }\n\n function initIframe () {\n if (self.iframe) {\n try {\n self.form.removeChild(self.iframe);\n } catch (e) {\n self.onError('jsonp polling iframe removal error', e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n var html = '