{"version":3,"sources":["webpack:///./config/modern-polyfills.js","webpack:///./app/scripts/embeds/frames.js","webpack:///./node_modules/d3-jetpack/src/translate-selection.js","webpack:///./node_modules/d3-jetpack/src/parseAttributes.js","webpack:///./node_modules/d3-jetpack/src/insert.js","webpack:///./node_modules/d3-jetpack/src/at.js","webpack:///./node_modules/d3-jetpack/src/st.js","webpack:///./node_modules/d3-jetpack/src/wordwrap.js","webpack:///./node_modules/d3-jetpack/index.js","webpack:///./node_modules/d3-jetpack/src/append.js","webpack:///./node_modules/d3-jetpack/src/parent.js","webpack:///./node_modules/d3-jetpack/src/selectAppend.js","webpack:///./node_modules/d3-jetpack/src/tspans.js","webpack:///./node_modules/d3-jetpack/src/appendMany.js","webpack:///./app/scripts/packs/graphic-map-clinics.js","webpack:///./app/scripts/utils/d3-base.js","webpack:///./app/scripts/packs/swoopy-drag.js","webpack:///./app/scripts/packs/main-map-clinics.js"],"names":["require","frameLoader","fn","initFrame","window","addEventListener","xy","dim","node","this","getBBox","attr","d","i","p","call","style","name","parts","split","shift","id","tag","constantNull","camelCaseAttrs","value","key","test","replace","toLowerCase","arguments","length","addStyle","sel","indexOf","wrapPx","addPx","match","val","apply","CHAR_W","A","a","B","b","C","c","D","E","e","F","f","G","g","H","h","I","J","j","K","k","L","l","M","m","N","n","O","o","P","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z","line","maxCharactersPerLine","minCharactersPerLine","monospace","w1","maxChars","minChars","maxLineW","minLineW","lines","words","forEach","w2","lw","push","Math","max","min","map","sort","round","ww","sum","char_w","join","filter","selection","prototype","translate","translateSelection","transition","append","create","parseAttributes","creator","select","appendChild","insert","before","selector","insertBefore","parent","parents","parentNode","selectAppend","tspans","lh","selectAll","data","enter","text","appendMany","console","warn","temp","at","st","prop","property","container","d3","renderGraphic","html","frameWidth","offsetWidth","abortionData","listOfStates","state_code","triggerStates","trigger_ban","boundariesData","features","includes","width","height","margin","svg","usaProjection","fitExtent","pathGenerator","projection","diagonalStripePattern","urbanData","providersData","geometry","coordinates","centroid","number","find","number_clinics","properties","swoopyDrag","annotationSel","annotations","draggable","dispatch","textDrag","on","textOffset","subject","circleDrag","pos","parentSel","path","points","type","dist","angle","acos","sin","laf","PI","saf","calcCirclePath","datum","rv","textSel","ƒ","pathNode","getTotalLength","getPointAtLength","commas","curChar","slice","_x","sqrt","pow","str"],"mappings":"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","file":"main-map-clinics.74d78b591e.mjs","sourcesContent":["'use strict';\n\n// We depend on intersection-observer enough that it should just be assumed as necessary\nrequire('intersection-observer');\n","// packages\nimport { initFrame } from '@newswire/frames';\nimport _ from 'lodash';\n\n/**\n * Sets up an instance of a frame and executes a function, i.e. a function to render the graphic.\n *\n * @param {Function} [fn] An optional function to be called on load and resize\n */\nexport function frameLoader(fn) {\n  // initialize frame no matter what\n  // sends height to parent container\n  initFrame();\n\n  if (fn) {\n    // resize listener\n    window.addEventListener('resize', fn);\n    fn();\n  }\n}\n","export default function(xy, dim) {\n  var node = this.node()\n  return !node ? this : node.getBBox ?\n    this.attr('transform', function(d,i) {\n      var p = typeof xy == 'function' ? xy.call(this, d,i) : xy;\n      if (dim === 0) p = [p, 0]; else if (dim === 1) p = [0, p];\n      return 'translate(' + p[0] +','+ p[1]+')';\n    }) :\n    this.style('transform', function(d,i) {\n      var p = typeof xy == 'function' ? xy.call(this, d,i) : xy;\n      if (dim === 0) p = [p, 0]; else if (dim === 1) p = [0, p];\n      return 'translate(' + p[0] +'px,'+ p[1]+'px)';\n    });\n}\n","export default function(name) {\n  if (typeof name === \"string\") {\n    var attr = {},\n      parts = name.split(/([\\.#])/g), p;\n      name = parts.shift();\n    while ((p = parts.shift())) {\n      if (p == '.') attr['class'] = attr['class'] ? attr['class'] + ' ' + parts.shift() : parts.shift();\n      else if (p == '#') attr.id = parts.shift();\n    }\n    return {tag: name, attr: attr};\n  }\n  return name;\n}\n","import {creator, selector} from \"d3-selection\";\nimport parseAttributes from \"./parseAttributes.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var n = parseAttributes(name),\n      create = creator(n.tag),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n\n  var s = this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n\n\n  //attrs not provided by default in v4\n  for (var key in n.attr) { s.attr(key, n.attr[key]); }\n  return s;\n}","const camelCaseAttrs = /^(allowReorder|attributeName|attributeType|autoReverse|baseFrequency|baseProfile|calcMode|clipPathUnits|contentScriptType|contentStyleType|diffuseConstant|edgeMode|externalResourcesRequired|filterRes|filterUnits|glyphRef|gradientTransform|gradientUnits|kernelMatrix|kernelUnitLength|keyPoints|keySplines|keyTimes|lengthAdjust|limitingConeAngle|markerHeight|markerUnits|markerWidth|maskContentUnits|maskUnits|numOctaves|pathLength|patternContentUnits|patternTransform|patternUnits|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|referrerPolicy|refX|refY|repeatCount|repeatDur|requiredExtensions|requiredFeatures|specularConstant|specularExponent|spreadMethod|startOffset|stdDeviation|stitchTiles|surfaceScale|systemLanguage|tableValues|targetX|targetY|textLength|viewBox|viewTarget|xChannelSelector|yChannelSelector|zoomAndPan)$/;\n\nexport default function(name, value) {\n  if (typeof(name) == 'object'){\n    for (var key in name){\n      this.attr(camelCaseAttrs.test(key) ? key : key.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase(), name[key]);\n    }\n    return this;\n  } else{\n    return arguments.length == 1 ? this.attr(name) : this.attr(name, value);\n  }\n}\n","import ƒ from \"./f.js\";\n\nexport default function(name, value) {\n  if (typeof(name) == 'object'){\n    for (var key in name){\n      addStyle(this, key, name[key]);\n    }\n    return this;\n  } else {\n    return arguments.length == 1 ? this.style(name) : addStyle(this, name, value);\n  }\n\n\n  function addStyle(sel, style, value){\n    style = style.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\n\n    var pxStyles = 'top left bottom right padding-top padding-left padding-bottom padding-right border-top b-width border-left-width border-botto-width m border-right-width margin-top margin-left margin-bottom margin-right font-size width stroke-width line-height margin padding border border-radius max-width min-width max-height min-height';\n\n    if (~pxStyles.indexOf(style) ){\n      sel.style(style, typeof value == 'function' ? wrapPx(value) : addPx(value));\n    } else{\n      sel.style(style, value);\n    }\n\n    return sel;\n  }\n\n  function addPx(d){ return d.match ? d : d + 'px'; }\n  function wrapPx(fn){\n    return function(){\n      var val = fn.apply(this, arguments)\n      return addPx(val)\n    }\n\n  }\n}\n","import {sum} from 'd3-array';\n\n// while this might not be reprentative for all fonts, it is\n// still better than assuming every character has the same width\n// (set monospace=true if you want to bypass this)\nvar CHAR_W = {\n    A:7,a:7,B:8,b:7,C:8,c:6,D:9,d:7,E:7,e:7,F:7,f:4,G:9,g:7,H:9,h:7,I:3,i:3,J:5,j:3,K:8,k:6,L:7,l:3,M:11,\n    m:11,N:9,n:7,O:9,o:7,P:8,p:7,Q:9,q:7,R:8,r:4,S:8,s:6,T:7,t:4,U:9,u:7,V:7,v:6,W:11,w:9,X:7,x:6,Y:7,y:6,Z:7,z:5,\n    '.':2,',':2,':':2,';':2\n};\n\nexport default function(line, maxCharactersPerLine, minCharactersPerLine, monospace) {\n    var l, lines = [], w = [], words = [], w1, maxChars, minChars, maxLineW, minLineW;\n    w1 = line.split(' ');\n    w1.forEach(function(s, i) {\n        var w2 = s.split('-');\n        var lw = (i < w1.length - 1 ? ' ' : '');\n        if (w2.length > 1) {\n            w2.forEach(function(t, j) {\n                w.push(t + (j < w2.length - 1 ? '-' : lw));\n            });\n        } else {\n            w.push(s + lw);\n        }\n    });\n    maxChars = maxCharactersPerLine || 40;\n    minChars = minCharactersPerLine || Math.max(3, Math.min(maxChars * 0.5, 0.75 * w.map(word_len).sort(num_asc)[Math.round(w.length / 2)]));\n    maxLineW = maxChars * CHAR_W.a;\n    minLineW = minChars * CHAR_W.a;\n    l = 0;\n    w.forEach(function(d) {\n        var ww = sum(d.split('').map(char_w));\n        if (l + ww > maxLineW && l > minLineW) {\n            lines.push(words.join(''));\n            words.length = 0;\n            l = 0;\n        }\n        l += ww;\n        return words.push(d);\n    });\n    if (words.length) {\n        lines.push(words.join(''));\n    }\n    return lines.filter(function(d) {\n        return d !== '';\n    });\n    function char_w(c) { return !monospace && CHAR_W[c] || CHAR_W.a; }\n    function word_len(d) { return d.length; }\n    function num_asc(a, b) { return a - b; }\n}\n\n","import {selection} from \"d3-selection\";\nimport {transition} from \"d3-transition\";\n\nimport translateSelection from \"./src/translate-selection.js\";\nimport append from \"./src/append.js\";\nimport insert from \"./src/insert.js\";\nimport parent from \"./src/parent.js\";\nimport selectAppend from \"./src/selectAppend.js\";\nimport tspans from \"./src/tspans.js\";\nimport appendMany from \"./src/appendMany.js\";\nimport at from \"./src/at.js\";\nimport st from \"./src/st.js\";\n\nselection.prototype.translate = translateSelection;\ntransition.prototype.translate = translateSelection;\nselection.prototype.append = append;\nselection.prototype.insert = insert;\nselection.prototype.parent = parent;\nselection.prototype.selectAppend = selectAppend;\nselection.prototype.tspans = tspans;\nselection.prototype.appendMany = appendMany;\nselection.prototype.at = at;\nselection.prototype.st = st;\ntransition.prototype.at = at;\ntransition.prototype.st = st;\nselection.prototype.prop = selection.prototype.property;\n\nexport {default as wordwrap} from \"./src/wordwrap.js\";\nexport {default as parseAttributes} from \"./src/parseAttributes.js\";\nexport {default as f} from \"./src/f.js\";\nexport {default as ascendingKey} from \"./src/ascendingKey.js\";\nexport {default as descendingKey} from \"./src/descendingKey.js\";\nexport {default as conventions} from \"./src/conventions.js\";\nexport {default as drawAxis} from \"./src/drawAxis.js\";\nexport {default as attachTooltip} from \"./src/attachTooltip.js\";\nexport {default as loadData} from \"./src/loadData.js\";\nexport {default as nestBy} from \"./src/nestBy.js\";\nexport {default as round} from \"./src/round.js\";\nexport {default as clamp} from \"./src/clamp.js\";\nexport {default as polygonClip} from \"./src/polygonClip.js\";\nexport {default as timer} from \"./src/timer.js\";\nexport {default as interval} from \"./src/interval.js\";\nexport {default as timeout} from \"./src/timeout.js\";\n","import {creator} from \"d3-selection\";\nimport parseAttributes from \"./parseAttributes.js\";\n\nexport default function(name) {\n  var create, n;\n\n  if (typeof name === \"function\"){\n    create = name;\n  } else {\n    n = parseAttributes(name)\n    create = creator(n.tag);\n  }\n  var sel = this.select(function(){\n    return this.appendChild(create.apply(this, arguments));\n  });\n\n  if (n) for (var key in n.attr) { sel.attr(key, n.attr[key]); }\n  return sel;\n}\n\n","import {creator} from \"d3-selection\";\n\nexport default function() {\n  var parents = [];\n  return this.filter(function() {\n    if (parents.indexOf(this.parentNode) > -1) return false;\n    parents.push(this.parentNode);\n    return true;\n  }).select(function() {\n    return this.parentNode;\n  });\n}\n","import {selector} from \"d3-selection\";\nimport {creator} from \"d3-selection\";\nimport parseAttributes from \"./parseAttributes.js\";\n\nexport default function(name) {\n  var select = selector(name),\n     n = parseAttributes(name), s;\n\n  name = creator(n.tag);\n\n  s = this.select(function() {\n    return select.apply(this, arguments) ||\n        this.appendChild(name.apply(this, arguments));\n  });\n\n  //attrs not provided by default in v4\n  for (var key in n.attr) { s.attr(key, n.attr[key]); }\n  return s;\n}\n","export default function(lines, lh) {\n  return this.selectAll('tspan')\n      .data(function(d, i) {\n        return (typeof(lines) === 'function' ? lines.call(this, d, i) : lines)\n          .map(function(l) {\n            return { line: l, parent: d };\n          });\n      })\n      .enter()\n    .append('tspan')\n      .text(function(d) { return d.line; })\n      .attr('x', 0)\n      .attr('dy', function(d, i) { return i ? (typeof(lh) === 'function' ? lh.call(this, d.parent, d.line, i) : lh) || 15 : 0; });\n}\n","export default function(name, data){\n  if (typeof(data) == 'string'){\n    console.warn(\"DEPRECATED: jetpack's appendMany order of arguments has changed. It's appendMany('div', data) from now on\")\n    var temp = data\n    data = name\n    name = temp\n  }\n\n  return this.selectAll(null).data(data).enter().append(name);\n}\n","/* eslint-disable no-unused-vars */\nimport * as d3 from 'd3';\nimport * as topojson from 'topojson-client';\nimport createBase from '../utils/d3-base';\nimport boundariesData from '../../assets/geo/us.json';\n// source: https://hub.arcgis.com/datasets/esri::usa-major-cities/explore?location=33.316003%2C-95.689388%2C4.51\nimport citiesData from '../../assets/geo/cities.json';\nimport providersData from '../../assets/geo/abortion_providers.json';\nimport urbanData from '../../assets/geo/urban_areas.json';\nimport data from '../../../data/data.json';\nimport { swoopyDrag } from './swoopy-drag';\nimport { wordwrap } from 'd3-jetpack';\n\n// a reference to the default graphic container, change if needed\nconst container = d3.select('#graphic');\n\n// a helper function to clear the container of its contents\nconst clearContainer = () => container.html('');\n\n// a helper function to grab the container's width\nconst getFrameWidth = () => container.node().offsetWidth;\n\n// import data by getting the window variable, OR by importing the filepath\n// let data = window.DATA;\n// import data from '../../../data/data.json';\n// import data from 'Data/data.json';\n\n/**\n * This function is called to render a graphic, using d3 or a library of your choice.\n *\n * @return {void}\n */\nexport default function renderGraphic() {\n  // pass the recalculated frameWidth to parts of your chart (like an axis) that change with resize!\n  clearContainer();\n  const frameWidth = getFrameWidth();\n\n  // data variables\n  let abortionData = data['abortions restrictions by state chart'];\n  let listOfStates = abortionData.map(d => d.state_code);\n  let triggerStates = abortionData\n    .filter(d => d.trigger_ban == true)\n    .map(d => d.state_code);\n\n  // just get the states we want\n  boundariesData.features = boundariesData.features.filter(d =>\n    listOfStates.includes(d.id)\n  );\n  let boundariesDataTrigger = {\n    type: 'FeatureCollection',\n    features: boundariesData.features.filter(d => triggerStates.includes(d.id)),\n  };\n\n  // source: https://makeshiftinsights.com/blog/basic-maps-with-d3/\n  // Setting up the svg element for D3 to draw in\n  let breakPoint = 479,\n    width = frameWidth,\n    height = frameWidth > breakPoint ? 450 : 300;\n  let margin = {\n    top: 5,\n    bottom: 5,\n    right: 20,\n    left: 20,\n  };\n\n  let svg = container\n    .append('svg')\n    .attr('width', width)\n    .attr('height', height);\n\n  // A projection tells D3 how to orient the GeoJSON features\n  let usaProjection = d3.geoAlbersUsa().fitExtent(\n    [\n      [50, 10],\n      [width - margin.right - margin.left, height - margin.top - margin.bottom],\n    ],\n    boundariesData\n  );\n\n  // The path generator uses the projection to convert the GeoJSON\n  // geometry to a set of coordinates that D3 can understand\n  let pathGenerator = d3.geoPath().projection(usaProjection);\n\n  let diagonalStripePattern = svg\n    .append('defs')\n    .append('pattern')\n    .attr('id', 'diagonal-stripe')\n    .attr('patternUnits', 'userSpaceOnUse')\n    .attr('patternTransform', 'rotate(45 0 0)')\n    .attr('width', 4)\n    .attr('height', 4);\n\n  diagonalStripePattern\n    .append('rect')\n    .attr('fill', 'none')\n    .attr('width', 20)\n    .attr('height', 20);\n\n  diagonalStripePattern\n    .append('rect')\n    .attr('width', 1.5)\n    .attr('height', 6)\n    .attr('transform', 'translate(0,0)')\n    .attr('fill', 'rgba(255, 255, 255, 0.35)');\n\n  // Tell D3 to render a path for each GeoJSON feature\n  svg\n    .append('clipPath') // define a clip path\n    .attr('id', 'map-clip')\n    .selectAll('path')\n    .data(boundariesData.features)\n    .enter()\n    .append('path')\n    .attr('d', pathGenerator); // This is where the magic happens\n\n  let paths = svg\n    .selectAll('.states')\n    .data(boundariesData.features)\n    .enter()\n    .append('path')\n    .attr('d', pathGenerator) // This is where the magic happens\n    .attr('stroke', d => {\n      return '#d0d0d0';\n    }) // Color of the lines themselves\n    .attr('stroke-width', d => {\n      return 1;\n    }) // Color of the lines themselves\n    .attr('fill', '#f3f3f3')\n    .attr('class', 'states');\n\n  let pathsUrban = svg\n    .selectAll('.urban')\n    .data(urbanData.features)\n    .enter()\n    .append('path')\n    .attr('d', pathGenerator) // This is where the magic happens\n    .attr('class', 'urban')\n    .attr('fill', '#c6c6c6')\n    .attr('opacity', 0.75)\n    .attr('stroke', '#c6c6c6')\n    .attr('stroke-width', '0.75px')\n    .style('stroke-linejoin', 'round')\n    .style('stroke-miterlimit', 2)\n    .style('stroke-linecap', 'round');\n\n  pathsUrban.attr('clip-path', 'url(#map-clip)');\n\n  let providerPoints = svg\n    .selectAll('.providers-point')\n    .data(providersData.features)\n    .enter()\n    .append('circle')\n    .attr('class', 'providers-point')\n    .attr('transform', function(d) {\n      if (d.geometry != null) {\n        return 'translate(' + usaProjection(d.geometry.coordinates) + ')';\n      }\n    })\n    .attr('r', 3)\n    .attr('fill', 'none')\n    .attr('stroke', '#c66390')\n    .attr('stroke-width', 1.5);\n\n  // set up the clinic labels\n  let text = svg\n    .selectAll('.number-clinic-label')\n    .data(boundariesData.features)\n    .enter()\n    .append('text')\n    .attr('d', pathGenerator)\n    .attr('transform', function(d) {\n      return 'translate(' + pathGenerator.centroid(d) + ')';\n    })\n    .text(function(d) {\n      let number = abortionData.find(a => a.state_code == d.id).number_clinics;\n      return `${number} clinic${number > 1 ? 's' : ''}`;\n    })\n    .attr('dy', function(d) {\n      if ([''].includes(d.properties.name))\n        return frameWidth > breakPoint ? '2.5em' : '1.5em';\n\n      if (['Arkansas'].includes(d.properties.name)) return '-0.5em';\n      if (['Texas'].includes(d.properties.name)) return '1em';\n    })\n    .attr('dx', function(d) {\n      return (\n        -(\n          d3\n            .select(this)\n            .node()\n            .getBBox().width / 2\n        ) +\n        5 +\n        (d.properties.name == 'Louisiana' ? -15 : 0)\n      );\n    })\n    .attr('font-style', 'italic')\n    .attr('font-size', '12px')\n    .attr('font-weight', 500)\n    .attr('fill', '#222')\n    .attr('stroke', '#ffffff')\n    .attr('stroke-width', 2)\n    .attr('paint-order', 'stroke fill')\n    .attr('class', 'number-clinic-label');\n  // rest of your code goes here\n  // use createBase() to create the base of an d3 chart\n}\n","import { axisBottom, axisLeft } from 'd3-axis';\nimport { scaleLinear } from 'd3-scale';\n\nexport default function createBase({\n  margin,\n  container,\n  width,\n  height,\n  x,\n  y,\n  xAxis = axisBottom(),\n  yAxis = axisLeft(),\n  xAxisGap = 5,\n} = {}) {\n  margin = Object.assign({ top: 20, right: 20, bottom: 20, left: 20 }, margin);\n\n  margin.bottom += xAxisGap;\n\n  const parent = container.node();\n\n  const containerWidth = width || parent.offsetWidth;\n  const containerHeight = height || parent.offsetHeight;\n\n  const innerWidth = containerWidth - margin.left - margin.right;\n  const innerHeight = containerHeight - margin.top - margin.bottom;\n\n  const svg = container\n    .append('svg')\n    .attr('width', containerWidth)\n    .attr('height', containerHeight);\n\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(${margin.left},${margin.top})`);\n\n  const xScale = x || scaleLinear().range([0, innerWidth]);\n  const yScale = y || scaleLinear().range([innerHeight, 0]);\n\n  xAxis.scale(xScale);\n  yAxis.scale(yScale);\n\n  const drawAxis = () => {\n    g.append('g')\n      .attr('class', 'axis axis--x')\n      .attr('transform', `translate(0,${innerHeight + xAxisGap})`)\n      .call(xAxis);\n\n    g.append('g')\n      .attr('class', 'axis axis--y')\n      .call(yAxis);\n  };\n\n  return {\n    margin,\n    container,\n    containerWidth,\n    containerHeight,\n    width: innerWidth,\n    height: innerHeight,\n    svg,\n    g,\n    x: xScale,\n    y: yScale,\n    xAxis,\n    yAxis,\n    drawAxis,\n  };\n}\n","import * as d3 from 'd3';\n\nexport function swoopyDrag() {\n  var x = function(d) {\n    return d;\n  };\n  var y = function(d) {\n    return d;\n  };\n\n  var annotations = [];\n  var annotationSel;\n\n  var draggable = false;\n\n  var dispatch = d3.dispatch('drag');\n\n  var textDrag = d3\n    .drag()\n    .on('drag', function(d) {\n      var x = d3.event.x;\n      var y = d3.event.y;\n      d.textOffset = [x, y].map(Math.round);\n\n      d3.select(this).call(translate, d.textOffset);\n\n      dispatch.call('drag');\n    })\n    .subject(function(d) {\n      return { x: d.textOffset[0], y: d.textOffset[1] };\n    });\n\n  var circleDrag = d3\n    .drag()\n    .on('drag', function(d) {\n      var x = d3.event.x;\n      var y = d3.event.y;\n      d.pos = [x, y].map(Math.round);\n\n      var parentSel = d3.select(this.parentNode);\n\n      var path = '';\n      var points = parentSel.selectAll('circle').data();\n      if (points[0].type == 'A') {\n        path = calcCirclePath(points);\n      } else {\n        points.forEach(function(d) {\n          path = path + d.type + d.pos;\n        });\n      }\n\n      parentSel\n        .select('path')\n        .attr('d', path)\n        .datum().path = path;\n      d3.select(this).call(translate, d.pos);\n\n      dispatch.call('drag');\n    })\n    .subject(function(d) {\n      return { x: d.pos[0], y: d.pos[1] };\n    });\n\n  var rv = function(sel) {\n    annotationSel = sel\n      .html('')\n      .selectAll('g')\n      .data(annotations)\n      .enter()\n      .append('g')\n      .call(translate, function(d) {\n        return [x(d), y(d)];\n      });\n\n    var textSel = annotationSel\n      .append('text')\n      .call(translate, ƒ('textOffset'))\n      .text(ƒ('text'));\n\n    annotationSel.append('path').attr('d', ƒ('path'));\n\n    if (!draggable) return;\n\n    annotationSel.style('cursor', 'pointer');\n    textSel.call(textDrag);\n\n    annotationSel\n      .selectAll('circle')\n      .data(function(d) {\n        var points = [];\n\n        if (~d.path.indexOf('A')) {\n          //handle arc paths seperatly -- only one circle supported\n          var pathNode = d3\n            .select(this)\n            .select('path')\n            .node();\n          var l = pathNode.getTotalLength();\n\n          points = [0, 0.5, 1].map(function(d) {\n            var p = pathNode.getPointAtLength(d * l);\n            return { pos: [p.x, p.y], type: 'A' };\n          });\n        } else {\n          var i = 1;\n          var type = 'M';\n          var commas = 0;\n\n          for (var j = 1; j < d.path.length; j++) {\n            var curChar = d.path[j];\n            if (curChar == ',') commas++;\n            if (curChar == 'L' || curChar == 'C' || commas == 2) {\n              points.push({ pos: d.path.slice(i, j).split(','), type: type });\n              type = curChar;\n              i = j + 1;\n              commas = 0;\n            }\n          }\n\n          points.push({ pos: d.path.slice(i, j).split(','), type: type });\n        }\n\n        return points;\n      })\n      .enter()\n      .append('circle')\n      .attr('r', 8)\n      .attr('fill', 'rgba(0,0,0,0)')\n      .attr('stroke', '#333')\n      .attr('stroke-dasharray', '2 2')\n      .call(translate, ƒ('pos'))\n      .call(circleDrag);\n\n    dispatch.call('drag');\n  };\n\n  rv.annotations = function(_x) {\n    if (typeof _x == 'undefined') return annotations;\n    annotations = _x;\n    return rv;\n  };\n  rv.x = function(_x) {\n    if (typeof _x == 'undefined') return x;\n    x = _x;\n    return rv;\n  };\n  rv.y = function(_x) {\n    if (typeof _x == 'undefined') return y;\n    y = _x;\n    return rv;\n  };\n  rv.draggable = function(_x) {\n    if (typeof _x == 'undefined') return draggable;\n    draggable = _x;\n    return rv;\n  };\n  rv.on = function() {\n    var value = dispatch.on.apply(dispatch, arguments);\n    return value === dispatch ? rv : value;\n  };\n\n  return rv;\n\n  //convert 3 points to an Arc Path\n  function calcCirclePath(points) {\n    var a = points[0].pos;\n    var b = points[2].pos;\n    var c = points[1].pos;\n\n    var A = dist(b, c);\n    var B = dist(c, a);\n    var C = dist(a, b);\n\n    var angle = Math.acos((A * A + B * B - C * C) / (2 * A * B));\n\n    //calc radius of circle\n    var K = 0.5 * A * B * Math.sin(angle);\n    var r = (A * B * C) / 4 / K;\n    r = Math.round(r * 1000) / 1000;\n\n    //large arc flag\n    var laf = +(Math.PI / 2 > angle);\n\n    //sweep flag\n    var saf = +(\n      (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]) <\n      0\n    );\n\n    return ['M', a, 'A', r, r, 0, laf, saf, b].join(' ');\n  }\n\n  function dist(a, b) {\n    return Math.sqrt(Math.pow(a[0] - b[0], 2) + Math.pow(a[1] - b[1], 2));\n  }\n\n  //no jetpack dependency\n  function translate(sel, pos) {\n    sel.attr('transform', function(d) {\n      var posStr = typeof pos == 'function' ? pos(d) : pos;\n      return 'translate(' + posStr + ')';\n    });\n  }\n\n  function ƒ(str) {\n    return function(d) {\n      return d[str];\n    };\n  }\n}\n","import { frameLoader } from '../embeds/frames';\nimport renderGraphic from './graphic-map-clinics';\n\n// included in index.html by default\n// initiates frame so your graphic is wrapped in an AMP-compatible iframe\n// renderGraphic() renders a coded graphic on load and on resize\nframeLoader(renderGraphic);\n"],"sourceRoot":""}