UNPKG

164 kBSource Map (JSON)View Raw
1{"version":3,"file":"d3-view.min.js","sources":["../src/require.js","../src/utils/providers.js","../src/utils/http.js","../src/utils/select.js","../src/utils/warn.js","../src/utils/template.js","../src/core/base.js","../src/core/transition.js","../src/forms/bootstrap/submit.js","../src/forms/bootstrap/plugin.js","../src/forms/bootstrap/error.js","../src/forms/bootstrap/label.js","../src/forms/bootstrap/form-group.js","../src/forms/bootstrap/input-group.js","../src/forms/bootstrap/check.js","../src/forms/bootstrap/help.js","../src/forms/actions.js","../src/utils/htmlprops.js","../src/forms/utils.js","../src/forms/field.js","../src/utils/map.js","../src/forms/validators.js","../src/forms/validate.js","../src/forms/field-input.js","../src/forms/field-select.js","../src/forms/field-set.js","../src/forms/field-submit.js","../src/forms/field-textarea.js","../src/forms/responses.js","../src/forms/form.js","../src/forms/plugin.js","../src/core/clean.js","../src/utils/uid.js","../src/utils/debounce.js","../src/model/dispatch.js","../src/model/as.js","../src/utils/slice.js","../src/model/data.js","../src/model/off.js","../src/utils/object.js","../src/model/set.js","../src/model/string.js","../src/model/main.js","../src/model/on.js","../src/model/change.js","../src/model/connect.js","../src/model/emit.js","../src/model/update.js","../src/model/isreactive.js","../src/model/owner.js","../src/model/array.js","../src/utils/dashify.js","../src/utils/data.js","../src/utils/maybeJson.js","../src/utils/sel.js","../src/core/cache.js","../src/parser/jsep.js","../src/parser/eval.js","../src/parser/expression.js","../src/core/directive.js","../src/core/getdirs.js","../src/core/selection.js","../src/core/component.js","../src/directives/attr.js","../src/directives/for.js","../src/directives/html.js","../src/directives/if.js","../src/directives/on.js","../src/directives/types/type.js","../src/directives/types/checkbox.js","../src/directives/types/input.js","../src/directives/types/index.js","../src/directives/types/select.js","../src/directives/index.js","../src/directives/value.js","../src/main.js","../src/utils/dom.js","../src/utils/slugify.js"],"sourcesContent":["const isAbsolute = new RegExp(\"^([a-z]+://|//)\"),\n isRelative = new RegExp(\"^[.]{0,2}/\"),\n hasOwnProperty = Array.prototype.hasOwnProperty;\n\nexport const viewLibs = new Map();\nexport const isAbsoluteUrl = url => isAbsolute.test(url);\n\nexport const viewResolve = (name, options) => {\n var dist = viewLibs.get(name),\n main = name,\n path = null,\n base = typeof location !== \"undefined\" ? location : \"\";\n\n if (options) {\n if (typeof options.base === \"string\") base = options.base;\n path = removeFrontSlash(options.path);\n }\n\n if (dist) {\n path = path || dist.main;\n main = removeBackSlash(dist.origin || main);\n if (dist.version) main = `${name}@${dist.version}`;\n if (path) main = `${main}/${path}`;\n } else if (path) {\n if (isAbsolute.test(main)) main = new URL(main, base).origin;\n else if (isRelative.test(main)) main = \"\";\n main = `${main}/${path}`;\n }\n\n if (isAbsolute.test(main)) {\n return main;\n } else if (isRelative.test(main)) {\n return new URL(main, base).href;\n } else {\n if (!main.length || /^[\\s._]/.test(main) || /\\s$/.test(main))\n throw new Error(\"illegal name\");\n return \"https://unpkg.com/\" + main;\n }\n};\n\nexport const viewRequireFrom = (resolver, root) => {\n const modules = new Map(),\n queue = [],\n map = queue.map,\n some = queue.some,\n getRoot = () => {\n return !root && typeof window !== \"undefined\" ? window : root;\n },\n requireRelative = base => {\n return name => {\n var url = resolver(name + \"\", base),\n module = modules.get(url);\n if (!module)\n modules.set(\n url,\n (module = new Promise((resolve, reject) => {\n root = getRoot();\n const script = root.document.createElement(\"script\");\n script.onload = function() {\n try {\n resolve(queue.pop()(requireRelative(url)));\n } catch (error) {\n reject(new Error(\"invalid module\"));\n }\n script.remove();\n };\n script.onerror = function() {\n reject(new Error(\"unable to load module\"));\n script.remove();\n };\n script.async = true;\n script.src = url;\n root.define = define;\n root.document.head.appendChild(script);\n }))\n );\n return module;\n };\n },\n requireOne = requireRelative(null);\n\n function require(name) {\n return arguments.length > 1\n ? Promise.all(map.call(arguments, requireOne)).then(merge)\n : requireOne(name);\n }\n\n require.root = getRoot;\n\n define.amd = {};\n\n return require;\n\n function define(name, dependencies, factory) {\n if (arguments.length < 3) (factory = dependencies), (dependencies = name);\n if (arguments.length < 2) (factory = dependencies), (dependencies = []);\n queue.push(\n some.call(dependencies, isexports)\n ? function(require) {\n var exports = {};\n return Promise.all(\n map.call(dependencies, function(name) {\n return isexports((name += \"\")) ? exports : require(name);\n })\n ).then(function(dependencies) {\n factory.apply(null, dependencies);\n return exports;\n });\n }\n : function(require) {\n return Promise.all(map.call(dependencies, require)).then(function(\n dependencies\n ) {\n return typeof factory === \"function\"\n ? factory.apply(null, dependencies)\n : factory;\n });\n }\n );\n }\n};\n\nexport const viewRequire = viewRequireFrom(viewResolve);\n\n// INTERNALS\n\nconst isexports = name => name + \"\" === \"exports\";\n\nconst removeFrontSlash = path => {\n if (typeof path === \"string\" && path.substring(0, 1) === \"/\")\n path = path.substring(1);\n return path;\n};\n\nconst removeBackSlash = path => {\n if (typeof path === \"string\" && path.substring(path.length - 1) === \"/\")\n path = path.substring(0, path.substring);\n return path;\n};\n\nconst merge = modules => {\n var o = {},\n i = -1,\n n = modules.length,\n m,\n k;\n while (++i < n) {\n for (k in (m = modules[i])) {\n if (hasOwnProperty.call(m, k)) {\n if (m[k] == null) Object.defineProperty(o, k, { get: getter(m, k) });\n else o[k] = m[k];\n }\n }\n }\n return o;\n};\n\nconst getter = (object, name) => {\n return () => object[name];\n};\n","import { inBrowser, isFunction, logger } from \"d3-let\";\nimport { viewRequire, viewResolve } from \"../require\";\n\nlogger.debug = null;\n\nexport default {\n //\n require: viewRequire,\n //\n resolve: viewResolve,\n //\n // log messages\n logger: logger,\n //\n // callbacks when page is loaded in browser\n readyCallbacks: [],\n // Set/unset debug\n setDebug(active) {\n if (!arguments.length || active)\n this.logger.debug = isFunction(active) ? active : defaultDebug;\n else this.logger.debug = null;\n },\n fetch: inBrowser ? window.fetch : null\n};\n\nfunction defaultDebug(msg) {\n this.info(msg);\n}\n","export function HttpResponse(response, data) {\n this.response = response;\n this.data = data;\n this.status = response.status;\n this.headers = response.headers;\n this.description = response.statusText;\n}\n\nexport function HttpError(response, data, description) {\n this.response = response;\n this.data = data;\n this.status = response.status;\n this.headers = response.headers;\n this.description = description || response.statusText;\n}\n\nexport function jsonResponse(response) {\n var ct = (response.headers.get(\"content-type\") || \"\").split(\";\")[0];\n if (ct === \"application/json\")\n return response.json().then(data => new HttpResponse(response, data));\n else {\n var msg =\n response.status < 300\n ? `Expected \"application/json\" content type, got \"${ct}\"`\n : null;\n throw new HttpError(response, null, msg);\n }\n}\n\nexport function textResponse(response) {\n if (response.status < 300)\n return response.text().then(data => new HttpResponse(response, data));\n else {\n throw new HttpError(response);\n }\n}\n\nHttpError.prototype = Error.prototype;\n","import { isFunction } from \"d3-let\";\nimport { select } from \"d3-selection\";\n\nexport default el => (!el || !isFunction(el.size) ? select(el) : el);\n","import providers from \"./providers\";\n\nconst prefix = \"[d3-view]\";\n\nexport default msg => providers.logger.warn(`${prefix} ${msg}`);\n","import { isString } from \"d3-let\";\nimport { select } from \"d3-selection\";\nimport providers from \"./providers\";\nimport warn from \"./warn\";\n\nexport const template = (source, context) => {\n if (isString(source)) {\n if (context) {\n var s = compile(source);\n if (!s) return source;\n source = s;\n } else return source;\n }\n return source(context);\n};\n\nexport const htmlElement = (source, context, ownerDocument) => {\n ownerDocument = ownerDocument || document;\n var el = select(ownerDocument.createElement(\"div\"));\n el.html(template(source, context));\n var children = el.node().children;\n if (children.length !== 1)\n warn(\n `viewElement function should return one root element only, got ${\n children.length\n }`\n );\n return children[0];\n};\n\nconst compile = text => {\n var compile = providers.compileTemplate;\n if (compile) return compile(text);\n warn(\n \"No compileTemplate function available in viewProviders, cannot render template\"\n );\n};\n","import { event, select, selectAll } from \"d3-selection\";\nimport \"d3-transition\";\nimport { viewRequireFrom, viewResolve } from \"../require\";\nimport { jsonResponse, textResponse } from \"../utils/http\";\nimport providers from \"../utils/providers\";\nimport asSelect from \"../utils/select\";\nimport { htmlElement, template } from \"../utils/template\";\n\n//\n// Base d3-view Object\n// =====================\n//\nexport default {\n // available once mounted\n // this is the browser window.document unless we are mounting on jsdom\n ownerDocument: null,\n //\n // d3-view object\n isd3: true,\n //\n providers: providers,\n //\n // Create a view element from a template and optional context\n viewElement(source, context, ownerDocument) {\n return htmlElement(source, context, ownerDocument || this.ownerDocument);\n },\n //\n select(selector) {\n if (typeof selector === \"string\")\n return select(this.ownerDocument || document).select(selector);\n return select(selector);\n },\n //\n selectAll(selector) {\n if (typeof selector === \"string\")\n return select(this.ownerDocument || document).selectAll(selector);\n return selectAll(selector);\n },\n //\n // Shortcut for fetch function in providers\n fetch(url, options) {\n var fetch = providers.fetch;\n return arguments.length == 1 ? fetch(url) : fetch(url, options);\n },\n //\n fetchText(url, ...x) {\n return this.fetch(url, ...x).then(textResponse);\n },\n //\n json(url, ...x) {\n return this.fetch(url, ...x).then(jsonResponse);\n },\n //\n // render a template from a url\n renderFromUrl(url, context, asElement = true) {\n var cache = this.cache;\n if (cache.has(url))\n return Promise.resolve(render(cache.get(url), context, asElement));\n return this.fetchText(url).then(response => {\n cache.set(url, response.data);\n return render(response.data, context, asElement);\n });\n },\n //\n // render from a distribution name. Use d3-require resolve method to find the url\n renderFromDist(dist, path, context, asElement = true) {\n var resolve = providers.resolve;\n return this.renderFromUrl(\n resolve(dist, { path: path }),\n context,\n asElement\n );\n },\n //\n on(el, name, callback) {\n el = asSelect(el);\n if (callback === null) return el.on(name, null);\n else el.on(name, () => callback(event));\n },\n //\n selectChildren(el) {\n if (!arguments.length) el = this.el;\n return this.selectAll(Array.prototype.slice.call(el.children));\n },\n //\n domEvent() {\n return event;\n },\n //\n logError(err) {\n if (err.stack) providers.logger.error(err);\n else providers.logger.error(`[${this.name}] ${err}`);\n return this;\n },\n //\n logWarn(msg) {\n providers.logger.warn(`[${this.name}] ${msg}`);\n return this;\n },\n //\n logInfo(msg) {\n providers.logger.info(`[${this.name}] ${msg}`);\n return this;\n },\n //\n logDebug(msg) {\n if (providers.logger.debug) providers.logger.debug(`[${this.name}] ${msg}`);\n return this;\n },\n\n require() {\n const root = this.ownerDocument.defaultView;\n if (!root.d3) root.d3 = {};\n let require = root.d3.require;\n if (!require) {\n if (this.providers.require.root() === root)\n require = this.providers.require;\n else require = viewRequireFrom(viewResolve, root);\n root.d3.require = require;\n }\n return require.apply(undefined, arguments);\n }\n};\n\nconst render = (text, context, asElement) =>\n asElement ? htmlElement(text, context) : template(text, context);\n","import providers from \"../utils/providers\";\nimport base from \"./base\";\n\nproviders.transition = {\n duration: 0\n};\n\nexport default Object.assign(base, {\n //\n // return a transition object if possible\n transition(sel) {\n if (!arguments.length) sel = this.sel;\n var duration = this.transitionDuration(sel);\n if (duration > 0) return sel.transition(this.uid).duration(duration);\n },\n\n transitionDuration(sel) {\n if (!arguments.length) sel = this.sel;\n if (sel && sel.size()) {\n var duration = sel.attr(\"data-transition-duration\");\n return +(duration || providers.transition.duration);\n }\n return 0;\n }\n});\n","const groupTpl = `<div class=\"form-group\">\n<slot></slot>\n</div>`;\n\nexport default function(field, wrappedEl, fieldEl) {\n var data = field.props,\n theme = data.theme || \"primary\";\n fieldEl.classed(\"btn\", true).classed(`btn-${theme}`, true);\n return field.wrapTemplate(wrappedEl, groupTpl);\n}\n","import formCheck from \"./check\";\nimport error from \"./error\";\nimport formGroup from \"./form-group\";\nimport help from \"./help\";\nimport inputGroup from \"./input-group\";\nimport label from \"./label\";\nimport submit from \"./submit\";\n\nconst bootstrap = {\n input: [\"error\", \"inputGroup\", \"label\", \"help\", \"formGroup\"],\n checkbox: [\"error\", \"formCheck\", \"help\", \"formGroup\"],\n textarea: [\"error\", \"label\", \"help\", \"formGroup\"],\n select: [\"error\", \"label\", \"help\", \"formGroup\"],\n submit: [\"submit\"],\n wrappers: {\n error,\n label,\n formGroup,\n inputGroup,\n formCheck,\n submit,\n help\n }\n};\n\n//\n// Bootstrap plugin\n// ===================\n//\n// Simply add a new form extension to wrap form fields\n//\nexport default {\n install(vm) {\n if (!vm.$formExtensions)\n return vm.logWarn(\n \"form bootstrap requires the form plugin installed first!\"\n );\n vm.$formExtensions.push(wrapBootstrap);\n }\n};\n\nfunction wrapBootstrap(field, wrappedEl, fieldEl) {\n var wrappers =\n bootstrap[fieldEl.attr(\"type\")] ||\n bootstrap[fieldEl.node().tagName.toLowerCase()];\n if (!wrappers) return wrappedEl;\n let wrap;\n\n wrappers.forEach(wrapper => {\n wrap = bootstrap.wrappers[wrapper];\n if (wrap) wrappedEl = wrap(field, wrappedEl, fieldEl);\n else field.logWarn(`Could not find form field wrapper ${wrapper}`);\n });\n\n return wrappedEl;\n}\n","export default (field, wrappedEl) => {\n return field.wrapTemplate(\n wrappedEl,\n `<slot></slot><div class=\"invalid-feedback\" d3-html=\"error\"></div>`\n );\n};\n","export default function(field, wrappedEl) {\n var data = field.props;\n return field.wrapTemplate(wrappedEl, labelTpl(data));\n}\n\nfunction labelTpl(data) {\n var label = data.label || data.name;\n\n return `<label for=${\n data.id\n } class=\"control-label\" d3-class=\"[srOnly ? 'sr-only' : null]\">${label}</label>\n<slot></slot>`;\n}\n","export default (field, wrappedEl, fieldEl) => {\n var data = field.props,\n size = data.size !== undefined ? data.size : data.form.props.size,\n fc = size ? `form-control form-control-${size}` : \"form-control\";\n fieldEl\n .classed(fc, true)\n .attr(\n \"d3-class\",\n `[${data.required ||\n false} ? \"form-control-required\" : null, showError ? \"is-invalid\" : null]`\n );\n return field.wrapTemplate(\n wrappedEl,\n `<div class=\"form-group\"><slot></slot></div>`\n );\n};\n","export default function(field, wrappedEl, fieldEl) {\n var data = field.props,\n ig = data.group;\n if (!ig) return wrappedEl;\n var gid = `g${fieldEl.attr(\"id\")}`;\n fieldEl.attr(\"aria-describedby\", gid);\n return field.wrapTemplate(wrappedEl, groupTpl(gid, ig));\n}\n\nfunction groupTpl(gid, group) {\n return `\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text\" id=\"${gid}\">${group}</span>\n </div>\n <slot></slot>\n </div>\n `;\n}\n","export default function(field, wrappedEl, fieldEl) {\n var data = field.props;\n fieldEl.classed(\"custom-control-input\", true);\n return field.wrapTemplate(wrappedEl, groupTpl(data));\n}\n\nfunction groupTpl(data) {\n return `\n <div class=\"custom-control custom-checkbox\">\n <slot></slot>\n <label class=\"custom-control-label\" for=\"${data.id}\">${\n data.label\n }</label>\n </div>\n `;\n}\n","export default function(field, wrappedEl, fieldEl) {\n var data = field.props;\n if (data.help) {\n fieldEl.attr(\"aria-describedby\", `help-${data.id}`);\n return field.wrapTemplate(wrappedEl, helpTpl(data));\n } else return wrappedEl;\n}\n\nfunction helpTpl(data) {\n return `<slot></slot><small id=\"help-${\n data.id\n }\" class=\"form-text text-muted\">${data.help}</small>`;\n}\n","import { assign } from \"d3-let\";\n\n//\n// Form Actions\nexport default {\n submit: submit\n};\n\nconst messages = {\n default: \"<strong>Error!</strong> Could not submit form\"\n};\n\nconst endpointDefaults = {\n contentType: \"application/json\",\n method: \"POST\"\n};\n\n//\n// Submit action\nfunction submit(e) {\n var submit = this,\n view = submit.$$view,\n form = view.props.form,\n endpoint = assign({}, endpointDefaults, submit.props.endpoint);\n\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n var data = form.$inputData(),\n options = {};\n\n if (!endpoint.url) {\n view.logError(\"No url, cannot submit form\");\n return;\n }\n\n if (endpoint.contentType === \"application/json\") {\n options.headers = {\n \"Content-Type\": endpoint.contentType\n };\n options.body = JSON.stringify(data);\n } else {\n options.body = new FormData();\n for (var key in data) options.body.append(key, data[key]);\n }\n\n // Flag the form as submitted\n if (!form.$setSubmit()) {\n // form not valid, don't bother with request\n form.$setSubmitDone();\n } else {\n options.method = endpoint.method;\n view.json(endpoint.url, options).then(done, done);\n }\n\n function done(response) {\n form.$setSubmitDone();\n if (response.status && response.headers) form.$response(response);\n else\n form.$emit(\"formMessage\", {\n level: \"error\",\n message: messages[response.message] || messages.default\n });\n }\n}\n","export default new Map([\n [\"disabled\", \"disabled\"],\n [\"readonly\", \"readOnly\"],\n [\"required\", \"required\"]\n]);\n","import { isObject } from \"d3-let\";\n\nconst componentsFromType = {\n text: \"input\",\n email: \"input\",\n password: \"input\",\n checkbox: \"input\",\n number: \"input\",\n date: \"input\",\n url: \"input\",\n \"datetime-local\": \"input\"\n};\n\nexport const formComponent = child => {\n var type = child.type || \"text\";\n return componentsFromType[type] || type;\n};\n\nexport const addAttributes = (el, attributes) => {\n var expr, attr;\n\n if (!isObject(attributes)) return;\n\n for (attr in attributes) {\n expr = attributes[attr];\n if (isObject(expr)) expr = JSON.stringify(expr);\n el.attr(attr, expr || \"\");\n }\n};\n\nexport function formChild(child) {\n var component = formComponent(child);\n return document.createElement(`d3-form-${component}`);\n}\n","import { assign, isArray, isString } from \"d3-let\";\nimport properties from \"../utils/htmlprops\";\nimport { addAttributes, formChild } from \"./utils\";\n\n//\n// Mixin for all form elements\nexport const formElement = {\n props: [\"form\"],\n\n addChildren(sel, form) {\n var children = this.props.children;\n if (children) {\n if (!isArray(children)) {\n this.logError(\n `children should be an array of fields, got ${typeof children}`\n );\n return sel;\n }\n if (form)\n children.forEach(c => {\n c.form = form;\n });\n sel\n .selectAll(\".d3form\")\n .data(children)\n .enter()\n .append(formChild)\n .attr(\"form\", \"form\")\n .classed(\"d3form\", true);\n }\n return sel;\n },\n\n init(el) {\n addAttributes(el, this.props.attributes);\n properties.forEach((prop, key) => {\n var value = this.props[key];\n if (value) {\n if (isString(value)) el.attr(`d3-attr-${key}`, value);\n else el.property(prop, true);\n }\n });\n return el;\n },\n\n // wrap the form element with extensions\n wrap(fieldEl) {\n var wrappedEl = fieldEl;\n\n this.root.$formExtensions.forEach(extension => {\n wrappedEl = extension(this, wrappedEl, fieldEl) || wrappedEl;\n });\n\n return wrappedEl;\n },\n\n wrapTemplate(sel, template) {\n var outer = this.createElement(\"div\").html(template),\n slot = outer.select(\"slot\");\n\n if (!slot.size()) {\n this.logWarn(\"template does not provide a slot element\");\n return sel;\n }\n var target = this.select(slot.node().parentNode);\n sel.nodes().forEach(function(node) {\n target.insert(() => {\n return node;\n }, \"slot\");\n });\n slot.remove();\n return this.selectAll(outer.node().children);\n }\n};\n\n// A mixin for all form field components\nexport default assign({}, formElement, {\n model: {\n value: null,\n error: \"\",\n isDirty: null,\n changed: false,\n srOnly: false,\n placeholder: \"\",\n showError: {\n reactOn: [\"error\", \"isDirty\"],\n get() {\n if (this.error) return this.isDirty;\n return false;\n }\n },\n // default validate function does nothing, IMPORTANT!\n $validate() {}\n },\n\n init(el) {\n // call parent method\n formElement.init.call(this, el);\n const props = this.props,\n model = this.model;\n\n if (!props.name) {\n this.logError(\"Input field without a name\");\n return el;\n }\n\n el.attr(\"name\", props.name);\n if (!props.placeholder) props.placeholder = props.label || props.name;\n //\n // give name to model (for debugging info messages)\n model.name = props.name;\n //\n // bind to the value property (two-way binding when used with d3-value)\n model.$on(\"value\", () => {\n // set isDirty to false if first time here, otherwise true\n if (model.isDirty === null) {\n model.isDirty = false;\n } else {\n model.isDirty = true;\n model.changed = true;\n }\n // trigger a change event in the form\n // required for form method such as $isValid\n props.form.$change();\n model.$emit(\"formFieldChange\", model);\n });\n return el;\n },\n\n mounted() {\n // add this model to the form inputs object\n this.props.form.inputs[this.props.name] = this.model;\n }\n});\n","export default obj => {\n if (obj && obj.constructor === Object) obj = Object.entries(obj);\n return new Map(obj);\n};\n","import map from \"../utils/map\";\n\nconst required = {\n set(el, data) {\n if (data.required) el.property(\"required\", true);\n },\n\n validate(el, value) {\n if (el.property(\"required\"))\n if (!value) return \"required\";\n else if (value === \"\") {\n // this is valid, no need to continue with the remaining validators\n return true;\n }\n }\n};\n\nconst minLength = {\n set(el, data) {\n var value = +data.minLength;\n if (value === value) el.attr(\"minlength\", value);\n },\n\n validate(el, value) {\n var l = +el.attr(\"minlength\");\n if (l === l && l > 0 && value.length < l)\n return `too short - ${l} characters or more expected`;\n }\n};\n\nconst maxLength = {\n set(el, data) {\n var value = +data.maxLength;\n if (value === value) el.attr(\"maxlength\", value);\n },\n\n validate(el, value) {\n var l = +el.attr(\"maxlength\");\n if (l === l && l > 0 && value && value.length > l)\n return `too long - ${l} characters or less expected`;\n }\n};\n\nconst minimum = {\n set(el, data) {\n var value = +data.minimum;\n if (value === value) el.attr(\"min\", value);\n },\n\n validate(el, value) {\n var r = range(el);\n if (r && +value < r[0]) return `must be greater or equal ${r[0]}`;\n }\n};\n\nconst maximum = {\n set(el, data) {\n var value = +data.maximum;\n if (value === value) el.attr(\"max\", value);\n },\n\n validate(el, value) {\n var r = range(el);\n if (r && +value > r[1]) return `must be less or equal ${r[1]}`;\n }\n};\n\nexport default map({\n required,\n minLength,\n maxLength,\n minimum,\n maximum\n});\n\nconst range = el => {\n var l0 = el.attr(\"min\"),\n l1 = el.attr(\"max\");\n l0 = l0 === null ? -Infinity : +l0;\n l1 = l1 === null ? Infinity : +l1;\n return [l0, l1];\n};\n","import validators from \"./validators\";\n\n// validator singleton\nexport default (vm, el) => {\n validators.forEach(validator => {\n if (validator.set) validator.set(el, vm.props);\n });\n vm.model.$on(\"value.validate\", validate);\n vm.model.$validate = validate;\n};\n\nfunction validate() {\n var vm = this.$$view,\n value = this.value,\n el =\n vm.sel.attr(\"id\") === this.props.id\n ? vm.sel\n : vm.sel.select(`#${this.props.id}`),\n msg;\n\n for (let validator of validators.values()) {\n msg = validator.validate(el, value);\n if (msg) {\n if (msg === true) msg = \"\";\n break;\n }\n }\n\n this.error = msg || \"\";\n}\n","import { assign } from \"d3-let\";\nimport field from \"./field\";\nimport validators from \"./validate\";\n\nconst checks = [\"checkbox\", \"radio\"];\n\n//\n// Input element\nexport default assign({}, field, {\n render() {\n const el = this.init(this.createElement(\"input\", true));\n\n el.attr(\"type\", this.props.type || \"text\").attr(\"d3-value\", \"value\");\n\n if (checks.indexOf(el.attr(\"type\")) === -1 && this.props.placeholder)\n el.attr(\"placeholder\", this.props.placeholder);\n\n validators(this, el);\n return this.wrap(el);\n }\n});\n","import { assign, isArray, isString } from \"d3-let\";\nimport field from \"./field\";\nimport validators from \"./validate\";\n\n//\n// Select element\nexport default assign({}, field, {\n model: assign(\n {\n options: []\n },\n field.model\n ),\n\n render() {\n const el = this.init(this.createElement(\"select\", true));\n this.model.options = asOptions(this.model.options);\n el.attr(\"d3-value\", \"value\")\n .attr(\"placeholder\", this.props.placeholder)\n .append(\"option\")\n .attr(\"d3-for\", \"option in options\")\n .attr(\"d3-html\", \"option.label\")\n .attr(\"d3-attr-value\", \"option.value\");\n\n validators(this, el);\n return this.wrap(el);\n }\n});\n\nconst asOptions = options => {\n if (!isArray(options)) options = [];\n options.forEach((opt, idx) => {\n if (isArray(opt))\n opt = {\n value: opt[0],\n label: opt[1] || opt[0]\n };\n else if (isString(opt))\n opt = {\n value: opt,\n label: opt\n };\n options[idx] = opt;\n });\n return options;\n};\n","import { assign } from \"d3-let\";\nimport { formElement } from \"./field\";\n\n//\n// Fieldset element\nexport default assign({}, formElement, {\n render() {\n const tag = this.props.tag || \"fieldset\",\n el = this.init(this.createElement(tag, true));\n return this.addChildren(el);\n }\n});\n","import { assign } from \"d3-let\";\nimport { formElement } from \"./field\";\n\n//\n// Submit element\nexport default assign({}, formElement, {\n model: {\n $submit() {\n if (this.$event && this.$event.defaultPrevented) return;\n this.props.form.actions.submit.call(this, this.$event);\n }\n },\n\n render() {\n const tag = this.props.tag || \"button\",\n el = this.init(this.createElement(tag, true));\n\n el.attr(\"type\", this.props.type || \"submit\")\n .attr(\"name\", this.props.name || \"_submit_\")\n .attr(\"d3-on-click\", \"$submit()\")\n .html(this.props.label || \"submit\");\n\n return this.wrap(el);\n }\n});\n","import { assign } from \"d3-let\";\nimport field from \"./field\";\nimport validators from \"./validate\";\n\n//\n// Textarea element\nexport default assign({}, field, {\n render() {\n var el = this.init(this.createElement(\"textarea\", true));\n el.attr(\"placeholder\", this.props.placeholder).attr(\"d3-value\", \"value\");\n\n validators(this, el);\n return this.wrap(el);\n }\n});\n","//\n// Form Responses\n// ====================\n//\n// To add/override responses:\n//\n// import viewForms from 'd3-view'\n//\n// viewForms.responses.myresponse = function (data, status, headers) {\n// ...\n// }\nexport default {\n default: defaultResponse,\n redirect\n};\n\n// The default response emit a formMessage to event to parent models\nfunction defaultResponse(response) {\n var level =\n response.status < 300\n ? \"info\"\n : response.status < 500\n ? \"warning\"\n : \"error\";\n this.$emit(\"formMessage\", {\n level: level,\n data: response.data,\n response: response\n });\n}\n\nfunction redirect(response) {\n var location = this.$$view.providers.location;\n location.href = response.data.redirectTo || \"/\";\n}\n","import { assign, isString } from \"d3-let\";\nimport actions from \"./actions\";\nimport { formElement } from \"./field\";\nimport input from \"./field-input\";\nimport select from \"./field-select\";\nimport fieldset from \"./field-set\";\nimport submit from \"./field-submit\";\nimport textarea from \"./field-textarea\";\nimport responses from \"./responses\";\n\n// Main form component\nexport default assign({}, formElement, {\n // Allow to specify and initial values\n props: [\"url\", \"values\", \"form\"],\n\n components: {\n \"d3-form-fieldset\": fieldset,\n \"d3-form-input\": input,\n \"d3-form-textarea\": textarea,\n \"d3-form-select\": select,\n \"d3-form-submit\": submit\n },\n\n model: {\n form: null, // parent form\n formSubmitted: false,\n formPending: false,\n $isValid(submitting) {\n let inp,\n valid = true;\n for (var key in this.inputs) {\n inp = this.inputs[key];\n if (submitting) inp.isDirty = true;\n inp.$validate();\n if (inp.error) valid = false;\n }\n return valid;\n },\n $setSubmit() {\n this.formSubmitted = true;\n this.formPending = true;\n return this.$isValid(true);\n },\n $setSubmitDone() {\n this.formPending = false;\n },\n $inputData() {\n var inputs = this.inputs,\n data = {},\n value;\n for (var key in inputs) {\n value = inputs[key].value;\n if (value || input.changed) data[key] = value;\n }\n return data;\n },\n //\n // response from a server submit\n $response(response) {\n if (response.data) {\n if (this.props.resultHandler) {\n var handler = responses[this.props.resultHandler];\n if (!handler)\n this.$$view.logError(\n `Could not find ${this.props.resultHandler} result handler`\n );\n else handler.call(this, response);\n } else {\n responses.default.call(this, response);\n }\n } else this.$responseError(response);\n },\n //\n // bad response from server submit\n $responseError(response) {\n this.$emit(\"formMessage\", {\n level: \"error\",\n data: response.data,\n response: response\n });\n }\n },\n\n render() {\n if (this.props.url)\n return this.json(this.props.url).then(response =>\n this.build(response.data)\n );\n else return this.build();\n },\n\n childrenMounted() {\n var model = this.model,\n values = this.props.values;\n\n if (values)\n Object.keys(values).forEach(key => {\n var inp = model.inputs[key];\n if (inp) inp.value = values[key];\n });\n },\n\n build(props) {\n if (props) this.props = assign(this.props, props);\n const form = this.init(\n this.createElement(\"form\", true).attr(\"novalidate\", \"\")\n ),\n model = this.model;\n //\n model.$formExtensions = this.root.$formExtensions || [];\n model.inputs = {};\n model.actions = {};\n //\n // Form actions\n for (var key in actions) {\n var action = this.props[key];\n if (isString(action)) action = this.model.$get(action);\n model.actions[key] = action || actions[key];\n }\n return this.addChildren(form, model);\n }\n});\n","import actions from \"./actions\";\nimport form from \"./form\";\nimport responses from \"./responses\";\nimport validators from \"./validators\";\n\n// Forms plugin\nexport default {\n install(vm) {\n vm.addComponent(\"d3form\", form);\n // list of form Extensions\n vm.$formExtensions = [];\n },\n actions,\n responses,\n validators\n};\n","import { inBrowser } from \"d3-let\";\nimport { select } from \"d3-selection\";\n\nif (inBrowser && window.MutationObserver) {\n // DOM observer\n // Check for changes in the DOM that leads to visual actions\n const observer = new window.MutationObserver(Manager);\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true\n });\n}\n\n//\n// Clears element going out of scope\nfunction Manager(records) {\n let sel, nodes, node, vm;\n\n records.forEach(record => {\n nodes = record.removedNodes;\n if (!nodes || !nodes.length) return;\n vm = record.target ? select(record.target).view() : null;\n\n for (let i = 0; i < nodes.length; ++i) {\n node = nodes[i];\n if (!node.querySelectorAll || node.__d3_component__) continue;\n sel = select(node);\n if (vm || sel.view()) {\n sel.selectAll(\"*\").each(destroy);\n destroy.call(nodes[i]);\n }\n }\n });\n}\n\nfunction destroy() {\n var dirs = this.__d3_directives__,\n view = this.__d3_view__;\n if (dirs) {\n dirs.all.forEach(d => d.destroy());\n delete this.__d3_directives__;\n }\n if (view) {\n view.destroy();\n delete this.__d3_view__;\n }\n}\n","let UID = 0;\nconst prefix = \"d3v\";\n\n// Add a unique identifier to an object\nexport default function(o) {\n var uid = prefix + ++UID;\n\n if (arguments.length) {\n Object.defineProperty(o, \"uid\", {\n get: function() {\n return uid;\n }\n });\n\n return o;\n } else return uid;\n}\n","import { timeout } from \"d3-timer\";\n\n//\n// Evaluate a callback (optional) with given delay (optional)\n//\n// if delay is not given or 0, the callback is evaluated at the next tick\n// of the event loop.\n// Calling this method multiple times in the same event loop tick produces\n// always the initial promise\nexport default (callback, delay) => {\n let promise = null,\n self,\n args;\n\n function debounce(...rest) {\n self = this;\n args = rest;\n if (promise !== null) return promise;\n\n promise = new Promise((resolve, reject) => {\n timeout(() => {\n promise = null;\n try {\n resolve(callback ? callback.apply(self, args) : undefined);\n } catch (err) {\n reject(err);\n }\n }, delay);\n });\n\n return promise;\n }\n\n debounce.promise = () => promise;\n\n return debounce;\n};\n","import { dispatch } from \"d3-dispatch\";\nimport debounce from \"../utils/debounce\";\n\nexport default () => {\n let triggered = 0;\n\n const events = dispatch(\"change\");\n\n function change() {\n events.apply(\"change\", this, arguments);\n triggered += 1;\n }\n\n return {\n change,\n on(typename, callback) {\n if (arguments.length < 2) return events.on(typename);\n events.on(typename, callback);\n return this;\n },\n trigger: debounce(change),\n triggered() {\n return triggered;\n }\n };\n};\n","import uid from \"../utils/uid\";\nimport ddispatch from \"./dispatch\";\n\n//\n// Initialise a model\nexport default function asModel(model, initials, parent, isolated) {\n var events = new Map(),\n Child = null;\n\n // event handler for any change in the model\n events.set(\"\", ddispatch());\n\n Object.defineProperties(uid(model), {\n $events: {\n get() {\n return events;\n }\n },\n parent: {\n get() {\n return parent;\n }\n },\n isolated: {\n get() {\n return isolated;\n }\n }\n });\n model.$child = $child;\n model.$update(initials);\n\n function $child(o) {\n if (Child === null) Child = createChildConstructor(model);\n return new Child(o);\n }\n}\n\nfunction createChildConstructor(model) {\n function Child(initials) {\n asModel(this, initials, model, false);\n }\n\n Child.prototype = model;\n return Child;\n}\n","export default (obj, idx = 0) => Array.prototype.slice.call(obj, idx);\n","const serialTypes = new Set([Boolean, String, Number]);\n\nexport default function() {\n var model = this,\n data = {},\n keys = Array.from(this.$events.keys()).concat(Object.keys(this)),\n value;\n\n keys.forEach(key => {\n if (key && key.substring(0, 1) !== \"$\") {\n value = getValue(model[key]);\n if (value !== undefined) data[key] = value;\n }\n });\n return data;\n}\n\nfunction getValue(value) {\n if (!value) return value;\n else if (value.constructor === Array) return value.map(getValue);\n else if (typeof value.$data === \"function\") return value.$data();\n else if (serialTypes.has(value.constructor)) return value;\n}\n","// remove event handlers\nexport default function(attr) {\n if (attr === undefined) this.$events.forEach(event => removeEvent(event));\n else {\n var bits = attr.split(\".\"),\n type = bits.splice(0, 1)[0],\n event = this.$events.get(type);\n if (event) removeEvent(event, bits.join(\".\"));\n }\n}\n\nfunction removeEvent(event, name) {\n if (name) event.on(`change.${name}`, null);\n else event.on(\"change\", null);\n}\n","// Check if a value is a vanilla javascript object\nexport default value => value && value.constructor === Object;\n","import { isArray, isFunction, isObject } from \"d3-let\";\nimport isVanillaObject from \"../utils/object\";\nimport providers from \"../utils/providers\";\nimport ddispatch from \"./dispatch\";\n\n// $set a reactive attribute for a Model\n//\n// Set the value of an attribute in the model\n// If the attribute is not already reactive make it as such.\n//\nexport default function(key, value) {\n // property not reactive - make it as such\n if (key.substring(0, 1) === \"$\") {\n if (this.constructor.prototype[key])\n this.$logWarn(`Cannot set attribute method ${key}, it is protected`);\n else this[key] = value;\n } else if (!this.$events.get(key)) reactive(this, key, value);\n else this[key] = value;\n}\n\nconst isModel = value =>\n isObject(value) && value.toString() === \"[object d3Model]\";\n\nconst reactive = (model, key, value) => {\n var lazy;\n\n model.$events.set(key, ddispatch());\n\n Object.defineProperty(model, key, property());\n\n // Create a new model if value is an object\n value = typeValue(value);\n // Trigger the callback once for initialization\n model.$change(key);\n\n function update(newValue) {\n if (lazy) newValue = lazy.get.call(model);\n if (newValue === value) return;\n // trigger lazy callbacks\n //\n // Fire model events\n if (providers.logger.debug) {\n var modelName = model.$$name || \"model\";\n providers.logger.debug(`[d3-model] updating ${modelName}.${key}`);\n }\n model.$change(key, value).$change();\n value = typeValue(newValue, value);\n }\n\n function property() {\n var prop = {\n get: function() {\n return value;\n }\n };\n\n if (isFunction(value)) value = { get: value };\n\n // calculated attribute\n if (isVanillaObject(value) && isFunction(value.get)) {\n lazy = value;\n value = lazy.get.call(model);\n\n if (lazy.reactOn)\n lazy.reactOn.forEach(name => {\n model.$on(`${name}.${key}`, update);\n });\n else\n model.$logWarn(\n `reactive lazy property ${key} does not specify 'reactOn' list or properties`\n );\n\n if (isFunction(lazy.set)) prop.set = lazy.set;\n } else prop.set = update;\n\n return prop;\n }\n\n function typeValue(newValue, oldValue) {\n if (newValue === oldValue) return oldValue;\n else if (isArray(newValue)) return arrayValue(newValue, oldValue);\n else if (isModel(oldValue)) return modelValue(newValue, oldValue);\n else return isVanillaObject(newValue) ? model.$new(newValue) : newValue;\n }\n\n function arrayValue(newValue, oldValue) {\n if (isModel(oldValue)) oldValue.$off();\n if (!isArray(oldValue)) oldValue = [];\n for (let i = 0; i < newValue.length; ++i)\n newValue[i] = typeValue(newValue[i], oldValue[i]);\n return newValue;\n }\n\n function modelValue(newValue, oldValue) {\n if (isVanillaObject(newValue)) {\n oldValue.$update(newValue);\n return oldValue;\n } else {\n oldValue.$off();\n return typeValue(newValue);\n }\n }\n};\n","const modelStr = \"[object d3Model]\";\n\nexport default function() {\n return modelStr;\n}\n","import warn from \"../utils/warn\";\nimport { $push, $splice } from \"./array\";\nimport asModel from \"./as\";\nimport $change from \"./change\";\nimport $connect from \"./connect\";\nimport $data from \"./data\";\nimport $emit from \"./emit\";\nimport $isReactive from \"./isreactive\";\nimport $off from \"./off\";\nimport $on from \"./on\";\nimport $owner from \"./owner\";\nimport $set from \"./set\";\nimport toString from \"./string\";\nimport $update from \"./update\";\n\n//\n// Model class\n//\n// The model is at the core of d3-view reactive data component\nfunction Model(initials, parent) {\n asModel(this, initials, parent, true);\n}\n\nexport default function model(initials) {\n return new Model(initials);\n}\n\nmodel.prototype = Model.prototype = {\n constructor: Model,\n // Public API methods\n toString,\n $on,\n $change,\n $connect,\n $emit,\n $update,\n $set,\n $new,\n $off,\n $isReactive,\n $owner,\n $data,\n $push,\n $splice,\n $logWarn(msg) {\n if (this.$$view) this.$$view.logWarn(msg);\n else warn(msg);\n }\n};\n\nObject.defineProperties(Model.prototype, {\n root: {\n get() {\n return this.parent ? this.parent.root : this;\n }\n },\n isolatedRoot: {\n get() {\n return !this.isolated && this.parent ? this.parent.isolatedRoot : this;\n }\n }\n});\n\nfunction $new(initials) {\n return new Model(initials, this);\n}\n","import { isFunction } from \"d3-let\";\nimport warn from \"../utils/warn\";\n\n// Add change callback to a model reactive attribute\nexport default function(name, callback) {\n // When no name is provided, wait for changes on this model - no its parents\n if (arguments.length === 1 && isFunction(name)) {\n callback = name;\n name = \"\";\n }\n\n var bits = name.split(\".\"),\n key = bits[0],\n event = getEvent(this, key);\n\n if (!event)\n return warn(`Cannot bind to \"${key}\" - no such reactive property`);\n\n // event from a parent model, add model uid to distinguish it from other child callbacks\n if (!this.$events.get(key)) bits.push(this.uid);\n\n bits[0] = \"change\";\n return event.on(bits.join(\".\"), callback);\n}\n\nfunction getEvent(model, name) {\n var event = model.$events.get(name);\n if (!event && model.parent) return getEvent(model.parent, name);\n return event;\n}\n","import slice from \"../utils/slice\";\nimport warn from \"../utils/warn\";\n\n// trigger change event on a model reactive attribute\nexport default function(attribute) {\n var name = arguments.length ? attribute : \"\",\n event = this.$events.get(name),\n args = slice(arguments, 1);\n if (event) event.trigger.apply(this, args);\n else if (!this.isolated) this.parent.$change(name);\n else warn(`attribute '${name}' is not a reactive property this model`);\n return this;\n}\n","import ddispatch from \"./dispatch\";\n//\n// Connect a model attribute with another model attribute\n// The attribute is read-only on the model an it reacts on parent changes\nexport default function(attr, parentAttr, owner) {\n if (this.$events.has(attr))\n return this.$logWarn(\n `cannot connect ${attr} attribute, it is already reactive`\n );\n\n parentAttr = parentAttr || attr;\n owner = (owner || this).$owner(parentAttr);\n if (!owner)\n return this.$logWarn(`cannot find model with attribute ${parentAttr}`);\n //\n const dd = ddispatch();\n this.$events.set(attr, dd);\n Object.defineProperty(this, attr, {\n get() {\n return owner[parentAttr];\n },\n set() {\n this.$logWarn(\n `Cannot set \"${attr}\" value because it is owned by a parent model`\n );\n }\n });\n owner.$events.get(parentAttr).on(`change.${this.uid}`, () => {\n dd.change.apply(this, arguments);\n if (owner != this) this.$events.get(\"\").change.apply(this);\n });\n}\n","import { isFunction } from \"d3-let\";\n\n//\n// Emit a custom event Name up the chain of parent models\nexport default function(eventName, data) {\n var name = \"$\" + eventName;\n propagate(this, name, data, this);\n return this;\n}\n\nfunction propagate(model, name, data, originModel) {\n if (!model) return;\n if (model.hasOwnProperty(name) && isFunction(model[name])) {\n if (model[name](data, originModel) === false) return;\n }\n propagate(model.parent, name, data, originModel);\n}\n","// Update a model with reactive model data\nexport default function(data, replace) {\n if (data) {\n replace = arguments.length === 2 ? replace : true;\n for (var key in data) {\n if (replace || this[key] === undefined) this.$set(key, data[key]);\n }\n }\n return this;\n}\n","//\n//check if an attribute is a reactive attribute for the model (or its prototypical parent)\nexport default function(attr) {\n if (!this.$events.has(attr)) {\n if (!this.parent || this.isolated) return false;\n return this.parent.$isReactive(attr);\n }\n return true;\n}\n","//\n// Return the model owning the reactive attribute attr\nexport default function(attr) {\n if (!this.$events.has(attr))\n return this.parent ? this.parent.$owner(attr) : undefined;\n return this;\n}\n","export function $push(attr, value) {\n var array = this[attr].slice();\n array.push(value);\n this[attr] = array;\n return this;\n}\n\nexport function $splice(attr, idx, count) {\n var array = this[attr].slice();\n if (arguments.length == 2) array.splice(idx);\n else if (arguments.length == 3) array.splice(idx, count);\n this[attr] = array;\n return this;\n}\n","export default (str, options) => {\n if (typeof str !== \"string\") {\n throw new TypeError(\"expected a string\");\n }\n\n return str\n .trim()\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/\\W/g, m => (/[À-ž]/.test(m) ? m : \"-\"))\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, m => (options && options.condense ? \"-\" : m))\n .toLowerCase();\n};\n","const DATAPREFIX = \"data\";\n\nexport default attrs => {\n let p, bits;\n return Object.keys(attrs).reduce((o, key) => {\n bits = key.split(\"-\");\n if (bits.length > 1 && bits[0] === DATAPREFIX) bits = bits.splice(1);\n p = bits.reduce((s, key, idx) => {\n s += idx ? key.substring(0, 1).toUpperCase() + key.substring(1) : key;\n return s;\n }, \"\");\n o[p] = attrs[key];\n return o;\n }, {});\n};\n","import { isString } from \"d3-let\";\n\nexport default value => {\n if (isString(value)) {\n try {\n return JSON.parse(value);\n } catch (msg) {\n return value;\n }\n }\n return value;\n};\n","import { select } from \"d3-selection\";\nimport \"d3-transition\";\n\nexport default function(o) {\n Object.defineProperty(o, \"sel\", {\n get() {\n return select(this.el);\n }\n });\n\n return o;\n}\n","export default function Cache() {\n this.active = true;\n this.data = new Map();\n}\n\nCache.prototype = {\n constructor: Cache,\n set(key, value) {\n if (this.active) this.data.set(key, value);\n },\n get(key) {\n if (this.active) return this.data.get(key);\n },\n has(key) {\n if (this.active) return this.data.has(key);\n return false;\n },\n clear() {\n return this.data.clear();\n },\n delete(key) {\n return this.data.delete(key);\n }\n};\n","// Code originally from https://github.com/soney/jsep\n// Copyright (c) 2013 Stephen Oney, http://jsep.from.so/\n// Code modified and adapted to work with d3-view\n\n// This is the full set of types that any JSEP node can be.\n// Store them here to save space when minified\nexport const code = {\n COMPOUND: \"Compound\",\n IDENTIFIER: \"Identifier\",\n MEMBER_EXP: \"MemberExpression\",\n LITERAL: \"Literal\",\n THIS_EXP: \"ThisExpression\",\n CALL_EXP: \"CallExpression\",\n UNARY_EXP: \"UnaryExpression\",\n BINARY_EXP: \"BinaryExpression\",\n LOGICAL_EXP: \"LogicalExpression\",\n CONDITIONAL_EXP: \"ConditionalExpression\",\n ARRAY_EXP: \"ArrayExpression\"\n};\n\nvar PERIOD_CODE = 46, // '.'\n COMMA_CODE = 44, // ','\n SQUOTE_CODE = 39, // single quote\n DQUOTE_CODE = 34, // double quotes\n OPAREN_CODE = 40, // (\n CPAREN_CODE = 41, // )\n OBRACK_CODE = 91, // [\n CBRACK_CODE = 93, // ]\n QUMARK_CODE = 63, // ?\n SEMCOL_CODE = 59, // ;\n COLON_CODE = 58, // :\n throwError = function(message, index) {\n var error = new Error(message + \" at character \" + index);\n error.index = index;\n error.description = message;\n throw error;\n },\n // Operations\n // ----------\n\n // Set `t` to `true` to save space (when minified, not gzipped)\n t = true,\n // Use a quickly-accessible map to store all of the unary operators\n // Values are set to `true` (it really doesn't matter)\n unary_ops = { \"-\": t, \"!\": t, \"~\": t, \"+\": t },\n // Also use a map for the binary operations but set their values to their\n // binary precedence for quick reference:\n // see [Order of operations](http://en.wikipedia.org/wiki/Order_of_operations#Programming_language)\n binary_ops = {\n \"||\": 1,\n \"&&\": 2,\n \"|\": 3,\n \"^\": 4,\n \"&\": 5,\n \"==\": 6,\n \"!=\": 6,\n \"===\": 6,\n \"!==\": 6,\n \"<\": 7,\n \">\": 7,\n \"<=\": 7,\n \">=\": 7,\n \"<<\": 8,\n \">>\": 8,\n \">>>\": 8,\n \"+\": 9,\n \"-\": 9,\n \"*\": 10,\n \"/\": 10,\n \"%\": 10\n },\n // Get return the longest key length of any object\n getMaxKeyLen = function(obj) {\n var max_len = 0,\n len;\n for (var key in obj) {\n if ((len = key.length) > max_len && obj.hasOwnProperty(key)) {\n max_len = len;\n }\n }\n return max_len;\n },\n max_unop_len = getMaxKeyLen(unary_ops),\n max_binop_len = getMaxKeyLen(binary_ops),\n // Literals\n // ----------\n // Store the values to return for the various literals we may encounter\n literals = {\n true: true,\n false: false,\n null: null\n },\n // Except for `this`, which is special. This could be changed to something like `'self'` as well\n this_str = \"this\",\n // Returns the precedence of a binary operator or `0` if it isn't a binary operator\n binaryPrecedence = function(op_val) {\n return binary_ops[op_val] || 0;\n },\n // Utility function (gets called from multiple places)\n // Also note that `a && b` and `a || b` are *logical* expressions, not binary expressions\n createBinaryExpression = function(operator, left, right) {\n var type =\n operator === \"||\" || operator === \"&&\"\n ? code.LOGICAL_EXP\n : code.BINARY_EXP;\n return {\n type: type,\n operator: operator,\n left: left,\n right: right\n };\n },\n // `ch` is a character code in the next three functions\n isDecimalDigit = function(ch) {\n return ch >= 48 && ch <= 57; // 0...9\n },\n isIdentifierStart = function(ch) {\n return (\n ch === 36 ||\n ch === 95 || // `$` and `_`\n (ch >= 65 && ch <= 90) || // A...Z\n (ch >= 97 && ch <= 122) || // a...z\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)])\n ); // any non-ASCII that is not an operator\n },\n isIdentifierPart = function(ch) {\n return (\n ch === 36 ||\n ch === 95 || // `$` and `_`\n (ch >= 65 && ch <= 90) || // A...Z\n (ch >= 97 && ch <= 122) || // a...z\n (ch >= 48 && ch <= 57) || // 0...9\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)])\n ); // any non-ASCII that is not an operator\n },\n // Parsing\n // -------\n // `expr` is a string with the passed in expression\n jsep = function(expr) {\n // `index` stores the character number we are currently at while `length` is a constant\n // All of the gobbles below will modify `index` as we move along\n var index = 0,\n charAtFunc = expr.charAt,\n charCodeAtFunc = expr.charCodeAt,\n exprI = function(i) {\n return charAtFunc.call(expr, i);\n },\n exprICode = function(i) {\n return charCodeAtFunc.call(expr, i);\n },\n length = expr.length,\n // Push `index` up to the next non-space character\n gobbleSpaces = function() {\n var ch = exprICode(index);\n // space or tab\n while (ch === 32 || ch === 9) {\n ch = exprICode(++index);\n }\n },\n // The main parsing function. Much of this code is dedicated to ternary expressions\n gobbleExpression = function() {\n var test = gobbleBinaryExpression(),\n consequent,\n alternate;\n gobbleSpaces();\n if (exprICode(index) === QUMARK_CODE) {\n // Ternary expression: test ? consequent : alternate\n index++;\n consequent = gobbleExpression();\n if (!consequent) {\n throwError(\"Expected expression\", index);\n }\n gobbleSpaces();\n if (exprICode(index) === COLON_CODE) {\n index++;\n alternate = gobbleExpression();\n if (!alternate) {\n throwError(\"Expected expression\", index);\n }\n return {\n type: code.CONDITIONAL_EXP,\n test: test,\n consequent: consequent,\n alternate: alternate\n };\n } else {\n throwError(\"Expected :\", index);\n }\n } else {\n return test;\n }\n },\n // Search for the operation portion of the string (e.g. `+`, `===`)\n // Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n // and move down from 3 to 2 to 1 character until a matching binary operation is found\n // then, return that binary operation\n gobbleBinaryOp = function() {\n gobbleSpaces();\n var to_check = expr.substr(index, max_binop_len),\n tc_len = to_check.length;\n while (tc_len > 0) {\n if (binary_ops.hasOwnProperty(to_check)) {\n index += tc_len;\n return to_check;\n }\n to_check = to_check.substr(0, --tc_len);\n }\n return false;\n },\n // This function is responsible for gobbling an individual expression,\n // e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n gobbleBinaryExpression = function() {\n var node, biop, prec, stack, biop_info, left, right, i;\n\n // First, try to get the leftmost thing\n // Then, check to see if there's a binary operator operating on that leftmost thing\n left = gobbleToken();\n biop = gobbleBinaryOp();\n\n // If there wasn't a binary operator, just return the leftmost node\n if (!biop) {\n return left;\n }\n\n // Otherwise, we need to start a stack to properly place the binary operations in their\n // precedence structure\n biop_info = { value: biop, prec: binaryPrecedence(biop) };\n\n right = gobbleToken();\n if (!right) {\n throwError(\"Expected expression after \" + biop, index);\n }\n stack = [left, biop_info, right];\n\n // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n while ((biop = gobbleBinaryOp())) {\n prec = binaryPrecedence(biop);\n\n if (prec === 0) {\n break;\n }\n biop_info = { value: biop, prec: prec };\n\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n biop = stack.pop().value;\n left = stack.pop();\n node = createBinaryExpression(biop, left, right);\n stack.push(node);\n }\n\n node = gobbleToken();\n if (!node) {\n throwError(\"Expected expression after \" + biop, index);\n }\n stack.push(biop_info, node);\n }\n\n i = stack.length - 1;\n node = stack[i];\n while (i > 1) {\n node = createBinaryExpression(stack[i - 1].value, stack[i - 2], node);\n i -= 2;\n }\n return node;\n },\n // An individual part of a binary expression:\n // e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n gobbleToken = function() {\n var ch, to_check, tc_len;\n\n gobbleSpaces();\n ch = exprICode(index);\n\n if (isDecimalDigit(ch) || ch === PERIOD_CODE) {\n // Char code 46 is a dot `.` which can start off a numeric literal\n return gobbleNumericLiteral();\n } else if (ch === SQUOTE_CODE || ch === DQUOTE_CODE) {\n // Single or double quotes\n return gobbleStringLiteral();\n } else if (isIdentifierStart(ch) || ch === OPAREN_CODE) {\n // open parenthesis\n // `foo`, `bar.baz`\n return gobbleVariable();\n } else if (ch === OBRACK_CODE) {\n return gobbleArray();\n } else {\n to_check = expr.substr(index, max_unop_len);\n tc_len = to_check.length;\n while (tc_len > 0) {\n if (unary_ops.hasOwnProperty(to_check)) {\n index += tc_len;\n return {\n type: code.UNARY_EXP,\n operator: to_check,\n argument: gobbleToken(),\n prefix: true\n };\n }\n to_check = to_check.substr(0, --tc_len);\n }\n\n return false;\n }\n },\n // Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n // keep track of everything in the numeric literal and then calling `parseFloat` on that string\n gobbleNumericLiteral = function() {\n var number = \"\",\n ch,\n chCode;\n while (isDecimalDigit(exprICode(index))) {\n number += exprI(index++);\n }\n\n if (exprICode(index) === PERIOD_CODE) {\n // can start with a decimal marker\n number += exprI(index++);\n\n while (isDecimalDigit(exprICode(index))) {\n number += exprI(index++);\n }\n }\n\n ch = exprI(index);\n if (ch === \"e\" || ch === \"E\") {\n // exponent marker\n number += exprI(index++);\n ch = exprI(index);\n if (ch === \"+\" || ch === \"-\") {\n // exponent sign\n number += exprI(index++);\n }\n while (isDecimalDigit(exprICode(index))) {\n //exponent itself\n number += exprI(index++);\n }\n if (!isDecimalDigit(exprICode(index - 1))) {\n throwError(\n \"Expected exponent (\" + number + exprI(index) + \")\",\n index\n );\n }\n }\n\n chCode = exprICode(index);\n // Check to make sure this isn't a variable name that start with a number (123abc)\n if (isIdentifierStart(chCode)) {\n throwError(\n \"Variable names cannot start with a number (\" +\n number +\n exprI(index) +\n \")\",\n index\n );\n } else if (chCode === PERIOD_CODE) {\n throwError(\"Unexpected period\", index);\n }\n\n return {\n type: code.LITERAL,\n value: parseFloat(number),\n raw: number\n };\n },\n // Parses a string literal, staring with single or double quotes with basic support for escape codes\n // e.g. `\"hello world\"`, `'this is\\nJSEP'`\n gobbleStringLiteral = function() {\n var str = \"\",\n quote = exprI(index++),\n closed = false,\n ch;\n\n while (index < length) {\n ch = exprI(index++);\n if (ch === quote) {\n closed = true;\n break;\n } else if (ch === \"\\\\\") {\n // Check for all of the common escape codes\n ch = exprI(index++);\n switch (ch) {\n case \"n\":\n str += \"\\n\";\n break;\n case \"r\":\n str += \"\\r\";\n break;\n case \"t\":\n str += \"\\t\";\n break;\n case \"b\":\n str += \"\\b\";\n break;\n case \"f\":\n str += \"\\f\";\n break;\n case \"v\":\n str += \"\\x0B\";\n break;\n default:\n str += \"\\\\\" + ch;\n }\n } else {\n str += ch;\n }\n }\n\n if (!closed) {\n throwError('Unclosed quote after \"' + str + '\"', index);\n }\n\n return {\n type: code.LITERAL,\n value: str,\n raw: quote + str + quote\n };\n },\n // Gobbles only identifiers\n // e.g.: `foo`, `_value`, `$x1`\n // Also, this function checks if that identifier is a literal:\n // (e.g. `true`, `false`, `null`) or `this`\n gobbleIdentifier = function() {\n var ch = exprICode(index),\n start = index,\n identifier;\n\n if (isIdentifierStart(ch)) {\n index++;\n } else {\n throwError(\"Unexpected \" + exprI(index), index);\n }\n\n while (index < length) {\n ch = exprICode(index);\n if (isIdentifierPart(ch)) {\n index++;\n } else {\n break;\n }\n }\n identifier = expr.slice(start, index);\n\n if (literals.hasOwnProperty(identifier)) {\n return {\n type: code.LITERAL,\n value: literals[identifier],\n raw: identifier\n };\n } else if (identifier === this_str) {\n return { type: code.THIS_EXP };\n } else {\n return {\n type: code.IDENTIFIER,\n name: identifier\n };\n }\n },\n // Gobbles a list of arguments within the context of a function call\n // or array literal. This function also assumes that the opening character\n // `(` or `[` has already been gobbled, and gobbles expressions and commas\n // until the terminator character `)` or `]` is encountered.\n // e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n gobbleArguments = function(termination) {\n var ch_i,\n args = [],\n node,\n closed = false;\n while (index < length) {\n gobbleSpaces();\n ch_i = exprICode(index);\n if (ch_i === termination) {\n // done parsing\n closed = true;\n index++;\n break;\n } else if (ch_i === COMMA_CODE) {\n // between expressions\n index++;\n } else {\n node = gobbleExpression();\n if (!node || node.type === code.COMPOUND) {\n throwError(\"Expected comma\", index);\n }\n args.push(node);\n }\n }\n if (!closed) {\n throwError(\"Expected \" + String.fromCharCode(termination), index);\n }\n return args;\n },\n // Gobble a non-literal variable name. This variable name may include properties\n // e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n // It also gobbles function calls:\n // e.g. `Math.acos(obj.angle)`\n gobbleVariable = function() {\n var ch_i, node;\n ch_i = exprICode(index);\n\n if (ch_i === OPAREN_CODE) {\n node = gobbleGroup();\n } else {\n node = gobbleIdentifier();\n }\n gobbleSpaces();\n ch_i = exprICode(index);\n while (\n ch_i === PERIOD_CODE ||\n ch_i === OBRACK_CODE ||\n ch_i === OPAREN_CODE\n ) {\n index++;\n if (ch_i === PERIOD_CODE) {\n gobbleSpaces();\n node = {\n type: code.MEMBER_EXP,\n computed: false,\n object: node,\n property: gobbleIdentifier()\n };\n } else if (ch_i === OBRACK_CODE) {\n node = {\n type: code.MEMBER_EXP,\n computed: true,\n object: node,\n property: gobbleExpression()\n };\n gobbleSpaces();\n ch_i = exprICode(index);\n if (ch_i !== CBRACK_CODE) {\n throwError(\"Unclosed [\", index);\n }\n index++;\n } else if (ch_i === OPAREN_CODE) {\n // A function call is being made; gobble all the arguments\n node = {\n type: code.CALL_EXP,\n arguments: gobbleArguments(CPAREN_CODE),\n callee: node\n };\n }\n gobbleSpaces();\n ch_i = exprICode(index);\n }\n return node;\n },\n // Responsible for parsing a group of things within parentheses `()`\n // This function assumes that it needs to gobble the opening parenthesis\n // and then tries to gobble everything within that parenthesis, assuming\n // that the next thing it should see is the close parenthesis. If not,\n // then the expression probably doesn't have a `)`\n gobbleGroup = function() {\n index++;\n var node = gobbleExpression();\n gobbleSpaces();\n if (exprICode(index) === CPAREN_CODE) {\n index++;\n return node;\n } else {\n throwError(\"Unclosed (\", index);\n }\n },\n // Responsible for parsing Array literals `[1, 2, 3]`\n // This function assumes that it needs to gobble the opening bracket\n // and then tries to gobble the expressions as arguments.\n gobbleArray = function() {\n index++;\n return {\n type: code.ARRAY_EXP,\n elements: gobbleArguments(CBRACK_CODE)\n };\n },\n nodes = [],\n ch_i,\n node;\n\n while (index < length) {\n ch_i = exprICode(index);\n\n // Expressions can be separated by semicolons, commas, or just inferred without any\n // separators\n if (ch_i === SEMCOL_CODE || ch_i === COMMA_CODE) {\n index++; // ignore separators\n } else {\n // Try to gobble each expression individually\n if ((node = gobbleExpression())) {\n nodes.push(node);\n // If we weren't able to find a binary expression and are out of room, then\n // the expression passed in probably has too much\n } else if (index < length) {\n throwError('Unexpected \"' + exprI(index) + '\"', index);\n }\n }\n }\n\n // If there's only one expression just try returning the expression\n if (nodes.length === 1) {\n return nodes[0];\n } else {\n return {\n type: code.COMPOUND,\n body: nodes\n };\n }\n };\n\n/**\n * @method jsep.addUnaryOp\n * @param {string} op_name The name of the unary op to add\n * @return jsep\n */\njsep.addUnaryOp = function(op_name) {\n max_unop_len = Math.max(op_name.length, max_unop_len);\n unary_ops[op_name] = t;\n return this;\n};\n\n/**\n * @method jsep.addBinaryOp\n * @param {string} op_name The name of the binary op to add\n * @param {number} precedence The precedence of the binary op (can be a float)\n * @return jsep\n */\njsep.addBinaryOp = function(op_name, precedence) {\n max_binop_len = Math.max(op_name.length, max_binop_len);\n binary_ops[op_name] = precedence;\n return this;\n};\n\n/**\n * @method jsep.addLiteral\n * @param {string} literal_name The name of the literal to add\n * @param {*} literal_value The value of the literal\n * @return jsep\n */\njsep.addLiteral = function(literal_name, literal_value) {\n literals[literal_name] = literal_value;\n return this;\n};\n\n/**\n * @method jsep.removeUnaryOp\n * @param {string} op_name The name of the unary op to remove\n * @return jsep\n */\njsep.removeUnaryOp = function(op_name) {\n delete unary_ops[op_name];\n if (op_name.length === max_unop_len) {\n max_unop_len = getMaxKeyLen(unary_ops);\n }\n return this;\n};\n\n/**\n * @method jsep.removeBinaryOp\n * @param {string} op_name The name of the binary op to remove\n * @return jsep\n */\njsep.removeBinaryOp = function(op_name) {\n delete binary_ops[op_name];\n if (op_name.length === max_binop_len) {\n max_binop_len = getMaxKeyLen(binary_ops);\n }\n return this;\n};\n\n/**\n * @method jsep.removeLiteral\n * @param {string} literal_name The name of the literal to remove\n * @return jsep\n */\njsep.removeLiteral = function(literal_name) {\n delete literals[literal_name];\n return this;\n};\n\nexport default jsep;\n","import { code } from \"./jsep\";\n\nexport function evaluate(self, expr, nested) {\n switch (expr.type) {\n case code.IDENTIFIER:\n return self[expr.name];\n case code.LITERAL:\n return nested ? self[expr.value] : expr.value;\n case code.ARRAY_EXP:\n return expr.elements.map(elem => {\n return evaluate(self, elem);\n });\n case code.LOGICAL_EXP:\n case code.BINARY_EXP:\n return binaryExp(\n expr.operator,\n evaluate(self, expr.left),\n evaluate(self, expr.right)\n );\n case code.CALL_EXP:\n return callExpression(self, expr.callee, expr.arguments);\n case code.MEMBER_EXP:\n return evaluate(evaluate(self, expr.object), expr.property, true);\n case code.CONDITIONAL_EXP:\n return evaluate(self, expr.test)\n ? evaluate(self, expr.consequent)\n : evaluate(self, expr.alternate);\n case code.UNARY_EXP:\n return unaryExp(expr.operator, evaluate(self, expr.argument));\n }\n}\n\n// extract identifiers\nexport function identifiers(expr, all) {\n if (arguments.length === 1) all = new Set();\n switch (expr.type) {\n case code.IDENTIFIER:\n all.add(expr.name);\n break;\n case code.ARRAY_EXP:\n expr.elements.forEach(elem => identifiers(elem, all));\n break;\n case code.LOGICAL_EXP:\n case code.BINARY_EXP:\n identifiers(expr.left, all);\n identifiers(expr.right, all);\n break;\n case code.CALL_EXP:\n identifiers(expr.callee, all);\n expr.arguments.forEach(elem => identifiers(elem, all));\n break;\n case code.MEMBER_EXP:\n all.add(fullName(expr));\n break;\n case code.CONDITIONAL_EXP:\n identifiers(expr.test, all);\n identifiers(expr.consequent, all);\n evaluate(expr.alternate, all);\n break;\n case code.UNARY_EXP:\n identifiers(expr.argument, all);\n break;\n }\n return all;\n}\n\nfunction callExpression(self, callee, args) {\n var func;\n\n args = args.map(arg => {\n return evaluate(self, arg);\n });\n\n if (callee.type !== code.IDENTIFIER) {\n self = evaluate(self, callee.object);\n callee = callee.property;\n }\n\n func = self[callee.name];\n if (!func)\n throw new EvalError(`callable \"${callee.name}\" not found in context`);\n return func.apply(self, args);\n}\n\nfunction unaryExp(op, arg) {\n if (!unaryFunctions[op])\n unaryFunctions[op] = new Function(\"arg\", `return ${op} arg`);\n return unaryFunctions[op](arg);\n}\n\nfunction binaryExp(op, a, b) {\n if (!binaryFunctions[op])\n binaryFunctions[op] = new Function(\"a\", \"b\", `return a ${op} b`);\n return binaryFunctions[op](a, b);\n}\n\nfunction fullName(expr) {\n if (expr.type === code.IDENTIFIER) return expr.name;\n else return `${fullName(expr.object)}.${expr.property.name}`;\n}\n\nconst unaryFunctions = {};\nconst binaryFunctions = {};\n","// tiny javascript expression parser\nimport warn from \"../utils/warn\";\nimport { evaluate, identifiers } from \"./eval\";\nimport jsep, { code } from \"./jsep\";\n\nconst proto = {\n eval(model) {\n return evaluate(model, this.parsed);\n },\n\n safeEval(model) {\n try {\n return evaluate(model, this.parsed);\n } catch (msg) {\n warn(`Could not evaluate <<${this.expr}>> expression: ${msg}`);\n }\n },\n\n // evaluate identifiers from a model\n identifiers() {\n return identifiers(this.parsed);\n }\n};\n\nfunction Expression(expr) {\n this.codes = code;\n this.expr = expr;\n this.parsed = jsep(expr);\n}\n\nExpression.prototype = proto;\n\nexport default function(expr) {\n return new Expression(expr);\n}\n","import { isFunction, isObject } from \"d3-let\";\nimport viewModel from \"../model/main\";\nimport viewExpression from \"../parser/expression\";\nimport sel from \"../utils/sel\";\nimport uid from \"../utils/uid\";\nimport base from \"./transition\";\n\n//\n// Directive Prototype\n//\n// Directives are special attributes with the d3- prefix.\n// Directive attribute values are expected to be binding expressions.\n// A directive’s job is to reactively apply special behavior to the DOM\n// when the value of its expression changes.\n//\n// A directive can implement one or more of the directive methods:\n//\n// * create\n// * mount\n// * refresh\n// * destroy\n//\nconst prototype = {\n // hooks\n create(expression) {\n return expression;\n },\n\n // pre mount\n preMount() {},\n\n mount(model) {\n return model;\n },\n\n refresh() {},\n\n destroy() {},\n\n removeAttribute() {\n this.el.removeAttribute(this.name);\n },\n\n // Execute directive\n execute(model) {\n if (!this.active) return;\n this.removeAttribute();\n this.identifiers = [];\n model = this.mount(model);\n // If model returned, bind the element to its properties\n if (model) this.bindModel(model);\n },\n\n bindModel(model) {\n var dir = this,\n error = false,\n events = model.$$view.events,\n refresh = function() {\n let value = dir.expression ? dir.expression.eval(model) : dir.data;\n dir.refresh(model, value);\n dir.passes++;\n events.call(\"directive-refresh\", undefined, dir, model, value);\n };\n //\n // get the cache instance\n dir.cache = model.$$view.cache;\n\n // Bind expression identifiers with model\n let bits, target, attr, i;\n if (dir.data) {\n dir.data = model.$new(dir.data);\n dir.identifiers.push({\n model: dir.data,\n attr: \"\"\n });\n } else if (!this.expression) {\n dir.identifiers.push({\n model: model,\n attr: \"\"\n });\n } else {\n var modelEvents = new Map();\n this.expression.identifiers().forEach(identifier => {\n bits = identifier.split(\".\");\n target = model;\n attr = null;\n\n for (i = 0; i < bits.length - 1; ++i) {\n target = target[bits[i]];\n if (!isObject(target)) {\n attr = bits.slice(0, i + 1).join(\".\");\n dir.logError(\n `\"${attr}\" is not an object, cannot bind to \"${identifier}\" identifier`\n );\n error = true;\n break;\n }\n }\n\n // process attribute\n if (attr === null) {\n if (!(target instanceof viewModel)) {\n dir.logError(\n `${identifier} is not a reactive model. Cannot bind to it`\n );\n error = true;\n } else addTarget(modelEvents, target, bits[bits.length - 1]);\n }\n });\n\n // register with model reactive properties\n modelEvents.forEach(target => {\n // if we are listening to all event simply bind to the model changes\n if (target.events.has(\"\"))\n dir.identifiers.push({\n model: target.model,\n attr: \"\"\n });\n else\n target.events.forEach(attr => {\n dir.identifiers.push({\n model: target.model,\n attr: attr\n });\n });\n });\n }\n\n if (error) return;\n\n this.identifiers.forEach(identifier => {\n var event = `${identifier.attr}.${dir.uid}`;\n identifier.model.$on(event, refresh);\n });\n\n this.bindDestroy(model);\n\n refresh();\n },\n\n bindDestroy(model) {\n var dir = this,\n destroy = this.destroy;\n // bind destroy to the model\n dir.destroy = function() {\n dir.identifiers.forEach(identifier => {\n identifier.model.$off(`${identifier.attr}.${dir.uid}`);\n });\n if (dir.data) dir.data.$off();\n try {\n destroy.call(dir, model);\n } finally {\n model.$emit(\"destroyDirective\", dir);\n }\n };\n }\n};\n\n// Directive constructor\nexport default function(obj) {\n function Directive(el, attr, arg) {\n this.el = el;\n this.ownerDocument = el.ownerDocument;\n this.name = attr.name;\n this.arg = arg;\n this.passes = 0;\n var expr = sel(uid(this)).create(attr.value);\n if (expr) {\n try {\n this.expression = viewExpression(expr);\n } catch (e) {\n try {\n this.data = JSON.parse(expr);\n } catch (m) {\n this.logError(e);\n }\n }\n }\n if (!this.active)\n this.active = Boolean(!attr.value || this.expression || this.data);\n }\n\n Directive.prototype = { ...base, ...prototype, ...obj };\n\n function directive(el, attr, arg) {\n return new Directive(el, attr, arg);\n }\n\n directive.prototype = Directive.prototype;\n return directive;\n}\n\nfunction addTarget(modelEvents, model, attr) {\n var value = arguments.length === 3 ? model[attr] : undefined;\n //\n // a method of the model, event is at model level\n if (isFunction(value) || arguments.length === 2)\n getTarget(modelEvents, model).events.add(\"\");\n // value is another model, events at both target model level and value model level\n else if (value instanceof viewModel) {\n addTarget(modelEvents, value);\n model = model.$owner(attr);\n if (model) getTarget(modelEvents, model).events.add(\"\");\n } else {\n // make sure attr is a reactive property of model\n model = model.$owner(attr) || model;\n if (!model.$isReactive(attr)) model.$set(attr, value);\n getTarget(modelEvents, model).events.add(attr);\n }\n}\n\nfunction getTarget(modelEvents, model) {\n var target = modelEvents.get(model.uid);\n if (!target) {\n target = {\n model: model,\n events: new Set()\n };\n modelEvents.set(model.uid, target);\n }\n return target;\n}\n","// No value, it has its own directive\nconst attributes = [\n \"name\",\n \"class\",\n \"disabled\",\n \"readonly\",\n \"required\",\n \"href\"\n];\n\nexport default (element, vm) => {\n const dirs = new Directives();\n\n for (let i = 0; i < element.attributes.length; ++i) {\n let attr = element.attributes[i],\n bits = attr.name.split(\"-\"),\n dirName = bits[0] === \"d3\" ? bits[1] : null,\n arg;\n\n if (dirName) {\n if (vm) {\n arg = bits.slice(2).join(\"-\");\n if (!arg && attributes.indexOf(dirName) > -1) {\n arg = dirName;\n dirName = \"attr\";\n }\n var directive = vm.directives.get(dirName);\n if (directive) dirs.add(directive(element, attr, arg));\n else\n vm.logWarn(\n `${\n element.tagName\n } cannot find directive \"${dirName}\". Did you forget to register it?`\n );\n }\n } else dirs.attrs[attr.name] = attr.value;\n }\n\n return dirs;\n};\n\n// Directives container\nfunction Directives() {\n this.attrs = {};\n this.all = [];\n}\n\nDirectives.prototype = {\n size() {\n return this.all.length;\n },\n\n pop: function(dir) {\n var index = this.all.indexOf(dir);\n if (index > -1) {\n dir.removeAttribute();\n this.all.splice(index, 1);\n }\n return dir;\n },\n\n add(dir) {\n this.all.push(dir);\n },\n\n forEach(callback) {\n this.all.forEach(callback);\n },\n\n preMount() {\n let dir;\n for (let i = 0; i < this.all.length; ++i) {\n dir = this.all[i];\n if (dir.preMount()) return this.pop(dir);\n }\n },\n\n execute(model) {\n if (!this.size()) return;\n return Promise.all(this.all.map(d => d.execute(model)));\n }\n};\n","import { select, selection } from \"d3-selection\";\nimport slice from \"../utils/slice\";\nimport warn from \"../utils/warn\";\nimport getdirs from \"./getdirs\";\n\n// Extend selection prototype with new methods\nselection.prototype.mount = mount;\nselection.prototype.view = view;\nselection.prototype.model = model;\nselection.prototype.directives = directives;\n\nfunction directives(vm) {\n const node = this.node();\n let dirs = node.__d3_directives__;\n if (dirs === undefined) {\n dirs = getdirs(node, vm);\n // no point in storing the directive object if there are no directives or the node is not a component\n node.__d3_directives__ =\n dirs.size() || getComponent(node, vm) ? dirs : null;\n }\n return dirs ? dirs : getdirs(node);\n}\n\nfunction model() {\n var vm = this.view();\n return vm ? vm.model : null;\n}\n\nfunction view(value) {\n if (arguments.length) {\n return this.property(\"__d3_view__\", value);\n } else {\n var element = this.node(),\n view = element ? element.__d3_view__ : null,\n parent = element ? element.parentNode : null;\n\n while (parent && !view) {\n view = parent.__d3_view__;\n parent = parent.parentNode;\n }\n return view;\n }\n}\n\n//\n// mount function on a d3 selection\n// Use this function to mount the selection\n// This method returns nothing or a promise\nfunction mount(data) {\n var promises = [];\n this.each(function() {\n var view = select(this).view();\n if (view) promises.push(mountElement(this, view, data));\n else warn(\"Cannot mount, no view object available to mount to\");\n });\n return Promise.all(promises);\n}\n\n// INTERNALS\n\n// mount an element into a given model\nconst mountElement = (element, vm, data) => {\n if (!element || !element.tagName) return;\n\n var component = getComponent(element, vm),\n directives = select(element).directives(vm),\n preMount = directives.preMount();\n\n if (preMount) return preMount.execute(vm.model);\n else {\n if (component) {\n return component({ parent: vm })\n .mount(element, data)\n .then(cm => {\n directives.execute(cm.model);\n return cm;\n });\n } else {\n directives.execute(vm.model);\n return Promise.all(\n slice(element.children).map(c => mountElement(c, vm, data))\n );\n }\n }\n};\n\nconst getComponent = (element, vm) => {\n return vm.components.get(element.tagName.toLowerCase());\n};\n","import { dispatch } from \"d3-dispatch\";\nimport { assign, isArray, isFunction, isObject, isString, pop } from \"d3-let\";\nimport viewModel from \"../model/main\";\nimport dashify from \"../utils/dashify\";\nimport dataAttributes from \"../utils/data\";\nimport map from \"../utils/map\";\nimport maybeJson from \"../utils/maybeJson\";\nimport sel from \"../utils/sel\";\nimport asSelect from \"../utils/select\";\nimport Cache from \"./cache\";\nimport createDirective from \"./directive\";\nimport \"./selection\";\nimport base from \"./transition\";\n\nexport const protoView = {\n doMount(el) {\n return asView(this, el);\n }\n};\n\n// prototype for both views and components\nconst protoComponent = {\n //\n // hooks\n render() {},\n childrenMounted() {},\n mounted() {},\n destroy() {},\n //\n // Mount the component into an element\n // If this component is already mounted, or it is mounting, it does nothing\n mount(el, data) {\n if (mounted(this)) return;\n const sel = asSelect(el);\n el = sel.node();\n if (!el) {\n this.logWarn(\n `element not defined, pass an identifier or an HTMLElement object`\n );\n return Promise.resolve(this);\n }\n // set the owner document\n this.ownerDocument = el.ownerDocument;\n //\n const directives = sel.directives(this);\n\n let props = assign(dataAttributes(directives.attrs), sel.datum(), data),\n extra = maybeJson(pop(props, \"props\")),\n value,\n model,\n parentModel;\n\n if (isObject(extra)) props = assign(extra, props);\n else if (this.parent && this.parent.props[extra])\n props = assign({}, this.parent.props[extra], props);\n\n // fire mount event\n this.events.call(\"mount\", undefined, this, el, props);\n\n // pick parent model & props\n if (this.parent) {\n //\n parentModel = this.parent.model;\n model = pop(props, \"model\");\n if (model && !model.$child) model = parentModel[model];\n if (!model) model = parentModel.$new();\n else model = model.$child();\n //\n // Get props from parent view\n Object.keys(this.props).forEach(key => {\n value = this.parent.props[props[key]];\n if (value === undefined) {\n value = maybeJson(props[key]);\n if (value !== undefined) props[key] = value;\n // default value if available\n else if (this.props[key] !== undefined) props[key] = this.props[key];\n } else props[key] = value;\n });\n //\n // get props object from parent if props is defined\n if (isString(extra)) props = assign({}, this.parent.props[extra], props);\n } else {\n props = assign(this.props, props);\n model = viewModel();\n }\n\n // add reactive model properties\n Object.keys(this.model).forEach(key => {\n value = pop(props, key);\n if (value !== undefined) {\n if (isString(value) && parentModel && parentModel.$isReactive(value))\n model.$connect(key, value, parentModel);\n else model.$set(key, maybeJson(value));\n } else if (model[key] === undefined) model.$set(key, this.model[key]);\n });\n this.model = bindView(this, model);\n //\n // create the new element from the render function\n if (!props.id) props.id = model.uid;\n this.props = props;\n //\n return this.doMount(el);\n },\n\n createElement(tag, props) {\n const doc = this.ownerDocument || document;\n const sel = this.select(doc.createElement(tag));\n if (props) {\n sel.attr(\"id\", this.props.id);\n if (this.props.class) sel.classed(this.props.class, true);\n }\n return sel;\n },\n\n doMount(el) {\n let newEl;\n try {\n newEl = this.render(el);\n } catch (error) {\n newEl = Promise.reject(error);\n }\n if (!newEl || !newEl.then) newEl = Promise.resolve(newEl);\n return newEl\n .then(element => compile(this, el, element))\n .catch(exc => error(this, el, exc));\n },\n\n use(plugin) {\n if (isObject(plugin)) plugin.install(this);\n else plugin(this);\n return this;\n },\n\n addComponent(name, obj) {\n name = dashify(name);\n var component = createComponent(name, obj);\n this.components.set(name, component);\n return component;\n },\n\n addDirective(name, obj) {\n name = dashify(name);\n var directive = createDirective(obj);\n this.directives.set(name, directive);\n return directive;\n }\n};\n\n// factory of View and Component constructors\nexport const createComponent = (name, o, coreDirectives, coreComponents) => {\n if (isFunction(o)) o = { render: o };\n\n var obj = assign({}, o),\n classComponents = extendComponents(new Map(), pop(obj, \"components\")),\n classDirectives = extendDirectives(new Map(), pop(obj, \"directives\")),\n model = pop(obj, \"model\"),\n props = pop(obj, \"props\");\n\n function Component(options) {\n var parent = pop(options, \"parent\"),\n components = map(parent ? parent.components : coreComponents),\n directives = map(parent ? parent.directives : coreDirectives),\n events = parent\n ? parent.events\n : dispatch(\n \"message\",\n \"created\",\n \"mount\",\n \"mounted\",\n \"error\",\n \"directive-refresh\"\n ),\n cache = parent ? parent.cache : new Cache();\n\n classComponents.forEach((comp, key) => {\n components.set(key, comp);\n });\n classDirectives.forEach((comp, key) => {\n directives.set(key, comp);\n });\n extendComponents(components, pop(options, \"components\"));\n extendDirectives(directives, pop(options, \"directives\"));\n\n Object.defineProperties(this, {\n name: {\n get() {\n return name;\n }\n },\n components: {\n get() {\n return components;\n }\n },\n directives: {\n get() {\n return directives;\n }\n },\n parent: {\n get() {\n return parent;\n }\n },\n root: {\n get() {\n return parent ? parent.root : this;\n }\n },\n cache: {\n get() {\n return cache;\n }\n },\n uid: {\n get() {\n return this.model.uid;\n }\n },\n events: {\n get() {\n return events;\n }\n }\n });\n this.props = asObject(props, pop(options, \"props\"));\n this.model = asObject(model, pop(options, \"model\"));\n this.events.call(\"created\", undefined, this);\n }\n\n Component.prototype = assign({}, base, protoComponent, obj);\n\n function component(options) {\n return new Component(options);\n }\n\n component.prototype = Component.prototype;\n\n return component;\n};\n\n// Used by both Component and view\n\nexport const extendComponents = (container, components) => {\n map(components).forEach((obj, key) => {\n key = dashify(key);\n container.set(key, createComponent(key, obj, protoComponent));\n });\n return container;\n};\n\nexport const extendDirectives = (container, directives) => {\n map(directives).forEach((obj, key) => {\n key = dashify(key);\n container.set(key, createDirective(obj));\n });\n return container;\n};\n\n//\n// Finalise the binding between the view and the model\n// inject the model into the view element\n// call the mounted hook and can return a Promise\nexport const asView = (vm, element) => {\n Object.defineProperty(sel(vm), \"el\", {\n get: function() {\n return element;\n }\n });\n // Apply model to element and mount\n return vm\n .select(element)\n .view(vm)\n .mount()\n .then(() => vmMounted(vm));\n};\n\nexport const mounted = vm => {\n if (vm.isMounted === undefined) {\n vm.isMounted = false;\n return false;\n } else if (vm.isMounted) {\n vm.logWarn(`component already mounted`);\n } else {\n vm.isMounted = true;\n // invoke mounted component hook\n vm.mounted();\n // invoke the view mounted events\n vm.events.call(\"mounted\", undefined, vm);\n }\n return true;\n};\n\n// Internals\n\n//\n// Component/View mounted\n// =========================\n//\n// This function is called when a component/view has all its children added\nconst vmMounted = vm => {\n var parent = vm.parent;\n vm.childrenMounted();\n if (parent && !parent.isMounted) {\n const event = `mounted.${vm.uid}`;\n vm.events.on(event, cm => {\n if (cm === parent) {\n vm.events.on(event, null);\n mounted(vm);\n }\n });\n } else mounted(vm);\n return vm;\n};\n\n// Compile a component model\n// This function is called once a component has rendered the component element\nconst compile = (cm, origEl, element) => {\n if (isString(element)) {\n const props = Object.keys(cm.props).length ? cm.props : null;\n element = cm.viewElement(element, props, origEl.ownerDocument);\n }\n element = asSelect(element);\n const size = element.size();\n if (!size)\n throw new Error(\n \"render() must return a single HTML node. It returned nothing!\"\n );\n else if (size !== 1) cm.logWarn(\"render() must return a single HTML node\");\n element = element.node();\n //\n // mark the original element as component\n origEl.__d3_component__ = true;\n // Insert before the component element\n if (origEl.parentNode) origEl.parentNode.insertBefore(element, origEl);\n // remove the component element\n cm.select(origEl).remove();\n //\n return asView(cm, element);\n};\n\n// Invoked when a component cm has failed to render\nconst error = (cm, origEl, exc) => {\n cm.logWarn(`failed to render due to the unhandled exception reported below`);\n cm.logError(exc);\n cm.events.call(\"error\", undefined, cm, origEl, exc);\n return cm;\n};\n\nconst asObject = (value, opts) => {\n if (isFunction(value)) value = value();\n if (isArray(value))\n value = value.reduce((o, key) => {\n o[key] = undefined;\n return o;\n }, {});\n return assign({}, value, opts);\n};\n\nconst bindView = (view, model) => {\n Object.defineProperties(model, {\n $$view: {\n get() {\n return view;\n }\n },\n $$name: {\n get() {\n return view.name;\n }\n },\n props: {\n get() {\n return view.props;\n }\n }\n });\n return model;\n};\n","import { isArray } from \"d3-let\";\nimport properties from \"../utils/htmlprops\";\n\n//\n// d3-attr-<attr> directive\n// ==============================\n//\n// Create a one-way binding between a model and a HTML element attribute\n//\nexport default {\n create(expression) {\n if (!this.arg)\n return this.logWarn(\n \"Cannot bind to empty attribute. Specify :<attr-name>\"\n );\n return expression;\n },\n\n refresh(model, value) {\n if (this.arg === \"class\") return this.refreshClass(value);\n if (isArray(value))\n return this.logWarn(`Cannot apply array to attribute ${this.arg}`);\n var prop = properties.get(this.arg);\n if (prop) this.sel.property(prop, value || false);\n else this.sel.attr(this.arg, value || null);\n },\n\n refreshClass(value) {\n var sel = this.sel;\n\n if (!isArray(value)) value = [value];\n\n if (this.oldValue)\n this.oldValue.forEach(entry => {\n if (entry) sel.classed(entry, false);\n });\n\n this.oldValue = value.map(entry => {\n var exist = true;\n if (isArray(entry)) {\n exist = entry[1];\n entry = entry[0];\n }\n if (entry) sel.classed(entry, exist);\n return entry;\n });\n }\n};\n","import { isArray } from \"d3-let\";\nimport { select } from \"d3-selection\";\nimport { createComponent, protoView } from \"../core/component\";\n\n//\n// d3-for directive\n// ======================\n//\n// Repeat a element over an array of items and establish\n// a one way binding between the array and the Dom\nexport default {\n create(expression) {\n var bits = [];\n expression\n .trim()\n .split(\" \")\n .forEach(v => {\n v ? bits.push(v) : null;\n });\n if (bits.length !== 3 || bits[1] != \"in\")\n return this.logWarn(\n `directive requires \"item in expression\" template, got \"${expression}\"`\n );\n this.itemName = bits[0];\n this.itemClass = `for${this.uid}`;\n return bits[2];\n },\n\n preMount() {\n return true;\n },\n\n mount(model) {\n this.creator = this.el;\n this.el = this.creator.parentNode;\n // remove the creator from the DOM\n select(this.creator).remove();\n if (this.el) return model;\n },\n\n refresh(model, items) {\n if (!isArray(items)) return;\n let d;\n\n var creator = this.creator,\n itemClass = this.itemClass,\n selector = `.${itemClass}`,\n itemName = this.itemName,\n sel = this.sel,\n allItems = sel.selectAll(selector),\n entries = allItems\n .filter(function() {\n d = this.__d3_view__.model[itemName];\n return items.indexOf(d) > -1;\n })\n .data(items),\n exits = allItems\n .filter(function() {\n d = this.__d3_view__.model[itemName];\n return items.indexOf(d) === -1;\n })\n .classed(itemClass, false),\n vm = sel.view();\n\n let forComponent = vm.components.get(creator.tagName.toLowerCase());\n if (!forComponent) forComponent = createComponent(\"forView\", protoView);\n\n let x, el, fel, tr;\n\n (this.transition(exits) || exits).style(\"opacity\", 0).remove();\n\n // Add all missing entries\n entries\n .enter()\n .append(() => {\n el = creator.cloneNode(true);\n fel = vm.select(el);\n if (vm.transitionDuration(fel) > 0) fel.style(\"opacity\", 0);\n return el;\n })\n .each(function(d, index) {\n x = { index: index };\n x[itemName] = d;\n forComponent({\n model: x,\n parent: vm\n })\n .mount(this, { model: vm.model })\n .then(fv => {\n fv.sel.classed(itemClass, true);\n // replace the item with a property from the model\n // This allow for reactivity when d is an object\n items[index] = fv.model[itemName];\n tr = fv.transition();\n if (tr) tr.style(\"opacity\", 1);\n });\n });\n\n sel.selectAll(selector).each(function(d) {\n // update model itemName property\n this.__d3_view__.model[itemName] = d;\n });\n }\n};\n","import { isNumber, isString } from \"d3-let\";\n//\n// d3-html\n// =============\n// attach html or text to the innerHtml property and mount components if required\n//\n// Usage:\n// <div id=\"foo\" d3-html=\"output\"></div>\nexport default {\n refresh(model, html) {\n if (isNumber(html)) html = \"\" + html;\n if (isString(html)) {\n var dir = this,\n sel = this.sel,\n transition = this.passes ? this.transition(sel) : null;\n if (transition) {\n transition.style(\"opacity\", 0).on(\"end\", () => {\n sel.html(html);\n dir.selectChildren().mount();\n dir.transition(sel).style(\"opacity\", 1);\n });\n } else {\n sel.html(html);\n this.selectChildren().mount();\n }\n }\n }\n};\n","//\n// d3-if\n// =============\n//\n// Show or hide an element\n//\nexport default {\n mount(model) {\n var sel = this.sel;\n this.display = sel.style(\"display\");\n this.opacity = +sel.style(\"opacity\") || 1;\n if (!this.display || this.display === \"none\") this.display = \"block\";\n return model;\n },\n\n refresh(model, value) {\n var sel = this.sel,\n transition = this.passes ? this.transition(sel) : null;\n\n if (value) sel.style(\"display\", this.display);\n else if (!transition) sel.style(\"display\", \"none\");\n\n if (transition) {\n if (value) transition.style(\"opacity\", 1);\n else\n transition\n .style(\"opacity\", 0)\n .on(\"end\", () => sel.style(\"display\", \"none\"));\n } else sel.style(\"opacity\", value ? this.opacity : 0);\n }\n};\n","//\n// d3-on directive\n//\n// A one-way data binding from dom events to model properties/methods\n// Event listeners are on the DOM, not on the model\nexport default {\n mount(model) {\n var eventName = this.arg || \"click\",\n expr = this.expression;\n\n // DOM event => model binding\n this.on(this.sel, `${eventName}.${this.uid}`, event => {\n var md = model.$child();\n md.$event = event;\n expr.eval(md);\n });\n\n this.bindDestroy(model);\n // Does not return the model so that model data binding is not performed\n },\n\n destroy() {\n var eventName = this.arg || \"click\";\n this.on(this.sel, `${eventName}.${this.uid}`, null);\n }\n};\n","import { assign } from \"d3-let\";\nimport debounce from \"../../utils/debounce\";\nimport sel from \"../../utils/sel\";\n\nconst base = {\n on(model, attrName) {\n var refresh = refreshFunction(this, model, attrName),\n uid = model.uid;\n\n // DOM => model binding\n this.sel.on(`input.${uid}`, refresh).on(`change.${uid}`, refresh);\n },\n\n off(model) {\n var uid = model.uid;\n this.sel.on(`input.${uid}`, null).on(`change.${uid}`, null);\n },\n\n value(value) {\n if (arguments.length) this.sel.property(\"value\", value);\n else return this.sel.property(\"value\");\n }\n};\n\nexport function createValueType(proto) {\n function ValueType(el) {\n sel(this).el = el;\n }\n\n ValueType.prototype = assign({}, base, proto);\n\n return ValueType;\n}\n\nexport function refreshFunction(vType, model, attrName) {\n return debounce(() => {\n model.$set(attrName, vType.value());\n });\n}\n","import { createValueType } from \"./type\";\n\nexport default createValueType({\n value(value) {\n if (arguments.length) this.sel.property(\"checked\", value);\n else return this.sel.property(\"checked\");\n }\n});\n","import { createValueType } from \"./type\";\n\nexport default createValueType();\n","import checkbox from \"./checkbox\";\nimport input from \"./input\";\nimport select from \"./select\";\n\nexport default {\n input,\n textarea: input,\n select,\n checkbox\n};\n","import { isArray } from \"d3-let\";\nimport { select } from \"d3-selection\";\nimport { createValueType } from \"./type\";\n\nexport default createValueType({\n value(value) {\n var sel = this.sel,\n options = sel.selectAll(\"option\"),\n values = value,\n opt;\n\n if (arguments.length) {\n if (!isArray(values)) values = [value || \"\"];\n options.each(function() {\n opt = select(this);\n value = opt.attr(\"value\") || \"\";\n opt.property(\"selected\", values.indexOf(value) > -1);\n });\n } else {\n values = [];\n options.each(function() {\n opt = select(this);\n if (opt.property(\"selected\")) values.push(opt.attr(\"value\") || \"\");\n });\n if (sel.property(\"multiple\")) return values;\n else return values[0] || \"\";\n }\n }\n});\n","import attr from \"./attr\";\nimport d3For from \"./for\";\nimport html from \"./html\";\nimport d3If from \"./if\";\nimport on from \"./on\";\nimport value from \"./value\";\n\nexport default {\n attr,\n html,\n value,\n on,\n for: d3For,\n if: d3If\n};\n","import types from \"./types/index\";\n\n//\n// d3-value directive\n// ===================\n//\n// Two-way data binding for HTML elements supporting the value property\nexport default {\n create(expression) {\n var type = this.sel.attr(\"type\"),\n tag = this.el.tagName.toLowerCase(),\n ValueType = types[type] || types[tag];\n\n if (!ValueType) {\n this.logWarn(`Cannot apply d3-value directive to ${tag}`);\n return;\n }\n this.tag = new ValueType(this.el);\n return expression;\n },\n\n mount(model) {\n var expr = this.expression;\n // TODO: relax this constraint\n if (expr.parsed.type !== expr.codes.IDENTIFIER) {\n this.logWarn(\n `support identifiers only, got \"${expr.parsed.type}\": ${\n this.expression\n }`\n );\n return;\n }\n var attrName = this.expression.expr;\n //\n // Create the model reactive attribute\n model.$set(attrName, this.tag.value());\n // register dom event\n this.tag.on(model, attrName);\n return model;\n },\n\n refresh(model, value) {\n this.tag.value(value);\n },\n\n destroy(model) {\n this.tag.off(model);\n }\n};\n","import \"./core/clean\";\nimport { createComponent, extendDirectives, protoView } from \"./core/component\";\nimport directives from \"./directives/index\";\n\n// Core Directives\nconst coreDirectives = extendDirectives(new Map(), directives);\n\n// the root view constructor\nexport default config =>\n createComponent(\"view\", protoView, coreDirectives)(config);\n","import { timeout } from \"d3-timer\";\nimport providers from \"./providers\";\n\n// Add callback to execute when the DOM is ready\nexport default callback => {\n providers.readyCallbacks.push(callback);\n /* istanbul ignore next */\n if (document.readyState !== \"complete\") {\n document.addEventListener(\"DOMContentLoaded\", _completed);\n // A fallback to window.onload, that will always work\n window.addEventListener(\"load\", _completed);\n } else domReady();\n};\n\n/* istanbul ignore next */\nconst _completed = () => {\n document.removeEventListener(\"DOMContentLoaded\", _completed);\n window.removeEventListener(\"load\", _completed);\n domReady();\n};\n\nconst domReady = () => {\n let callback;\n while (providers.readyCallbacks.length) {\n callback = providers.readyCallbacks.shift();\n timeout(callback);\n }\n};\n","export default str => {\n str = str.replace(/^\\s+|\\s+$/g, \"\"); // trim\n str = str.toLowerCase();\n\n // remove accents, swap ñ for n, etc\n var from = \"àáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\n var to = \"aaaaeeeeiiiioooouuuunc------\";\n for (var i = 0, l = from.length; i < l; i++) {\n str = str.replace(new RegExp(from.charAt(i), \"g\"), to.charAt(i));\n }\n\n str = str\n .replace(/[^a-z0-9 -]/g, \"\") // remove invalid chars\n .replace(/\\s+/g, \"-\") // collapse whitespace and replace by -\n .replace(/-+/g, \"-\"); // collapse dashes\n\n return str;\n};\n"],"names":["isAbsolute","RegExp","isRelative","hasOwnProperty","Array","prototype","viewLibs","Map","viewResolve","name","options","dist","get","main","path","base","location","removeFrontSlash","removeBackSlash","origin","version","test","URL","href","length","Error","viewRequireFrom","resolver","root","modules","queue","map","some","getRoot","window","requireRelative","url","module","set","Promise","resolve","reject","script","document","createElement","onload","pop","error","remove","onerror","async","src","define","head","appendChild","requireOne","require","arguments","all","call","then","merge","amd","dependencies","factory","push","isexports","exports","apply","viewRequire","substring","m","k","o","i","n","Object","defineProperty","getter","object","logger","debug","readyCallbacks","[object Object]","active","this","isFunction","defaultDebug","fetch","inBrowser","msg","info","HttpResponse","response","data","status","headers","description","statusText","HttpError","jsonResponse","ct","split","json","textResponse","text","el","size","select","providers","warn","template","source","context","isString","s","compile","htmlElement","ownerDocument","html","children","node","compileTemplate","isd3","selector","selectAll","x","asElement","cache","has","render","fetchText","renderFromUrl","callback","asSelect","on","event","slice","domEvent","err","stack","defaultView","d3","undefined","transition","duration","assign","sel","transitionDuration","uid","attr","groupTpl","bootstrap","input","checkbox","textarea","submit","wrappers","field","wrappedEl","wrapTemplate","label","props","id","labelTpl","formGroup","fieldEl","form","fc","classed","required","inputGroup","ig","group","gid","formCheck","theme","help","helpTpl","vm","$formExtensions","logWarn","wrapBootstrap","tagName","toLowerCase","wrap","forEach","wrapper","e","view","$$view","endpoint","endpointDefaults","preventDefault","stopPropagation","$inputData","logError","contentType","Content-Type","body","JSON","stringify","key","FormData","append","$setSubmit","method","done","$setSubmitDone","$response","$emit","level","message","messages","default","componentsFromType","email","password","number","date","datetime-local","formComponent","child","type","formChild","component","formElement","isArray","c","enter","attributes","expr","isObject","addAttributes","properties","prop","value","property","extension","outer","slot","target","parentNode","nodes","insert","model","isDirty","changed","srOnly","placeholder","showError","reactOn","init","$on","$change","inputs","obj","constructor","entries","minLength","l","maxLength","minimum","r","range","maximum","l0","l1","Infinity","validators","validator","validate","$validate","values","checks","indexOf","asOptions","opt","idx","tag","addChildren","$event","defaultPrevented","actions","redirect","redirectTo","components","d3-form-fieldset","fieldset","d3-form-input","d3-form-textarea","d3-form-select","d3-form-submit","formSubmitted","formPending","submitting","inp","valid","$isValid","resultHandler","handler","responses","$responseError","build","keys","action","$get","addComponent","MutationObserver","records","record","removedNodes","querySelectorAll","__d3_component__","each","destroy","observe","documentElement","childList","subtree","dirs","__d3_directives__","__d3_view__","d","UID","prefix","delay","self","args","promise","debounce","rest","timeout","triggered","events","dispatch","change","typename","trigger","asModel","initials","parent","isolated","Child","ddispatch","defineProperties","$events","$child","createChildConstructor","$update","serialTypes","Set","Boolean","String","Number","getValue","$data","removeEvent","isModel","toString","reactive","lazy","update","newValue","modelName","$$name","typeValue","oldValue","$off","arrayValue","isVanillaObject","modelValue","$new","$logWarn","modelStr","Model","bits","getEvent","join","attribute","$connect","parentAttr","owner","$owner","dd","eventName","propagate","originModel","replace","$set","splice","$isReactive","from","concat","$push","array","$splice","count","isolatedRoot","str","TypeError","trim","condense","parse","Cache","clear","delete","code","COMPOUND","IDENTIFIER","MEMBER_EXP","LITERAL","THIS_EXP","CALL_EXP","UNARY_EXP","BINARY_EXP","LOGICAL_EXP","CONDITIONAL_EXP","ARRAY_EXP","throwError","index","unary_ops","-","!","~","+","binary_ops","||","&&","|","^","&","==","!=","===","!==","<",">","<=",">=","<<",">>",">>>","*","/","%","getMaxKeyLen","len","max_len","max_unop_len","max_binop_len","literals","true","false","null","binaryPrecedence","op_val","createBinaryExpression","operator","left","right","isDecimalDigit","ch","isIdentifierStart","fromCharCode","isIdentifierPart","jsep","ch_i","charAtFunc","charAt","charCodeAtFunc","charCodeAt","exprI","exprICode","gobbleSpaces","gobbleExpression","consequent","alternate","gobbleBinaryExpression","gobbleBinaryOp","to_check","substr","tc_len","biop","prec","biop_info","gobbleToken","gobbleNumericLiteral","gobbleStringLiteral","gobbleVariable","gobbleArray","argument","chCode","parseFloat","raw","quote","closed","gobbleIdentifier","identifier","start","gobbleArguments","termination","gobbleGroup","computed","callee","elements","evaluate","nested","elem","op","a","b","binaryFunctions","Function","binaryExp","func","arg","EvalError","callExpression","unaryFunctions","unaryExp","identifiers","add","fullName","addUnaryOp","op_name","Math","max","addBinaryOp","precedence","addLiteral","literal_name","literal_value","removeUnaryOp","removeBinaryOp","removeLiteral","proto","parsed","Expression","codes","create","expression","mount","removeAttribute","bindModel","dir","refresh","eval","passes","modelEvents","viewModel","addTarget","getTarget","bindDestroy","Directive","viewExpression","directive","element","Directives","dirName","directives","attrs","preMount","execute","selection","promises","mountElement","getdirs","getComponent","cm","protoView","asView","protoComponent","mounted","parentModel","p","reduce","toUpperCase","dataAttributes","datum","extra","maybeJson","bindView","doMount","doc","class","newEl","catch","exc","plugin","install","dashify","createComponent","createDirective","coreDirectives","coreComponents","classComponents","extendComponents","classDirectives","extendDirectives","Component","comp","asObject","container","vmMounted","isMounted","childrenMounted","origEl","viewElement","insertBefore","opts","refreshClass","entry","exist","v","itemName","itemClass","creator","items","allItems","filter","exits","fel","tr","forComponent","style","cloneNode","fv","isNumber","selectChildren","display","opacity","md","attrName","vType","refreshFunction","createValueType","ValueType","types","off","for","d3For","if","d3If","_completed","removeEventListener","domReady","shift","config","readyState","addEventListener"],"mappings":"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"}
\No newline at end of file