boundless / ArrowKeyNavigation
\ No newline at end of file
+boundless / ArrowKeyNavigation
\ No newline at end of file
diff --git a/docs/Async/index.html b/docs/Async/index.html
index 1bb2a051..bc027fbf 100644
--- a/docs/Async/index.html
+++ b/docs/Async/index.html
@@ -1 +1 @@
-boundless / Async
\ No newline at end of file
+boundless / Async
\ No newline at end of file
diff --git a/docs/Button/index.html b/docs/Button/index.html
index 211b2631..f9dc4a26 100644
--- a/docs/Button/index.html
+++ b/docs/Button/index.html
@@ -1 +1 @@
-boundless / Button
\ No newline at end of file
+boundless / Button
\ No newline at end of file
diff --git a/docs/Checkbox/index.html b/docs/Checkbox/index.html
index 21289595..2f0a1711 100644
--- a/docs/Checkbox/index.html
+++ b/docs/Checkbox/index.html
@@ -1 +1 @@
-boundless / Checkbox
\ No newline at end of file
+boundless / Checkbox
\ No newline at end of file
diff --git a/docs/CheckboxGroup/index.html b/docs/CheckboxGroup/index.html
index 149c6d16..e67789a0 100644
--- a/docs/CheckboxGroup/index.html
+++ b/docs/CheckboxGroup/index.html
@@ -1 +1 @@
-boundless / CheckboxGroup
\ No newline at end of file
+boundless / CheckboxGroup
\ No newline at end of file
diff --git a/docs/Dialog/index.html b/docs/Dialog/index.html
index 5624fc0e..ad5a9836 100644
--- a/docs/Dialog/index.html
+++ b/docs/Dialog/index.html
@@ -1 +1 @@
-boundless / Dialog
\ No newline at end of file
+boundless / Dialog
\ No newline at end of file
diff --git a/docs/FittedText/index.html b/docs/FittedText/index.html
index 80815ecf..ef98aa42 100644
--- a/docs/FittedText/index.html
+++ b/docs/FittedText/index.html
@@ -1 +1 @@
-boundless / FittedText
\ No newline at end of file
+boundless / FittedText
\ No newline at end of file
diff --git a/docs/Image/index.html b/docs/Image/index.html
index 14418b3e..88d81417 100644
--- a/docs/Image/index.html
+++ b/docs/Image/index.html
@@ -1 +1 @@
-boundless / Image
\ No newline at end of file
+boundless / Image
\ No newline at end of file
diff --git a/docs/Input/index.html b/docs/Input/index.html
index 42280e37..cd93ed5e 100644
--- a/docs/Input/index.html
+++ b/docs/Input/index.html
@@ -1 +1 @@
-boundless / Input
\ No newline at end of file
+boundless / Input
\ No newline at end of file
diff --git a/docs/Modal/index.html b/docs/Modal/index.html
index 947c3b20..a5b5e4d4 100644
--- a/docs/Modal/index.html
+++ b/docs/Modal/index.html
@@ -1 +1 @@
-boundless / Modal
\ No newline at end of file
+boundless / Modal
\ No newline at end of file
diff --git a/docs/Pagination/index.html b/docs/Pagination/index.html
index e4680375..61ebab5d 100644
--- a/docs/Pagination/index.html
+++ b/docs/Pagination/index.html
@@ -1 +1 @@
-boundless / Pagination
\ No newline at end of file
+boundless / Pagination
\ No newline at end of file
diff --git a/docs/Popover/index.html b/docs/Popover/index.html
index 2518bb4e..7bcdf1a4 100644
--- a/docs/Popover/index.html
+++ b/docs/Popover/index.html
@@ -1 +1 @@
-boundless / Popover
\ No newline at end of file
+boundless / Popover
\ No newline at end of file
diff --git a/docs/Portal/index.html b/docs/Portal/index.html
index 4ee8de63..cffc9790 100644
--- a/docs/Portal/index.html
+++ b/docs/Portal/index.html
@@ -1 +1 @@
-boundless / Portal
\ No newline at end of file
+boundless / Portal
\ No newline at end of file
diff --git a/docs/Progress/index.html b/docs/Progress/index.html
index 2b3c21ae..1a0a5176 100644
--- a/docs/Progress/index.html
+++ b/docs/Progress/index.html
@@ -1 +1 @@
-boundless / Progress
\ No newline at end of file
+boundless / Progress
\ No newline at end of file
diff --git a/docs/ProgressiveDisclosure/index.html b/docs/ProgressiveDisclosure/index.html
index fa6ce8ea..d64f8e42 100644
--- a/docs/ProgressiveDisclosure/index.html
+++ b/docs/ProgressiveDisclosure/index.html
@@ -1 +1 @@
-boundless / ProgressiveDisclosure
\ No newline at end of file
+boundless / ProgressiveDisclosure
\ No newline at end of file
diff --git a/docs/Radio/index.html b/docs/Radio/index.html
index 9cd54eef..ab31ef64 100644
--- a/docs/Radio/index.html
+++ b/docs/Radio/index.html
@@ -1 +1 @@
-boundless / Radio
\ No newline at end of file
+boundless / Radio
\ No newline at end of file
diff --git a/docs/SegmentedControl/index.html b/docs/SegmentedControl/index.html
index 09879909..b792cd7c 100644
--- a/docs/SegmentedControl/index.html
+++ b/docs/SegmentedControl/index.html
@@ -1 +1 @@
-boundless / SegmentedControl
\ No newline at end of file
+boundless / SegmentedControl
\ No newline at end of file
diff --git a/docs/TokenizedInput/index.html b/docs/TokenizedInput/index.html
index 4c3192f6..5e615814 100644
--- a/docs/TokenizedInput/index.html
+++ b/docs/TokenizedInput/index.html
@@ -1 +1 @@
-boundless / TokenizedInput
\ No newline at end of file
+boundless / TokenizedInput
\ No newline at end of file
diff --git a/docs/Typeahead/index.html b/docs/Typeahead/index.html
index e275928c..e559d62c 100644
--- a/docs/Typeahead/index.html
+++ b/docs/Typeahead/index.html
@@ -1 +1 @@
-boundless / Typeahead
\ No newline at end of file
+boundless / Typeahead
\ No newline at end of file
diff --git a/docs/appcache/manifest.appcache b/docs/appcache/manifest.appcache
index 4b1a24dc..2f9c3f29 100644
--- a/docs/appcache/manifest.appcache
+++ b/docs/appcache/manifest.appcache
@@ -1,5 +1,5 @@
CACHE MANIFEST
-#ver:3/8/2017, 3:36:14 AM
+#ver:3/13/2017, 3:04:39 PM
#plugin:4.6.1
CACHE:
@@ -32,8 +32,8 @@ CACHE:
../assets/26.70bda4b72c8e28c75c5f.js
../assets/27.507e25d23ea91170484a.js
../assets/vendor.eaa5703bc4c8ecc71b26.js
-../assets/main.1a65917ad879a750618f.js
-../assets/manifest.faaea68a50bc019d6dd0.js
+../assets/main.aa3116661a52724706a7.js
+../assets/manifest.fbd36bb555c9a7522488.js
../assets/style.580f721b705a53ec0655b3f5995bbc10.css
../sparkles.png
../
diff --git a/docs/assets/main.1a65917ad879a750618f.js b/docs/assets/main.aa3116661a52724706a7.js
similarity index 79%
rename from docs/assets/main.1a65917ad879a750618f.js
rename to docs/assets/main.aa3116661a52724706a7.js
index 116229bb..ca7d9cbc 100644
--- a/docs/assets/main.1a65917ad879a750618f.js
+++ b/docs/assets/main.aa3116661a52724706a7.js
@@ -1,6 +1,6 @@
webpackJsonp([29,30],{0:function(e,t){e.exports=React},100:function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),s=n.n(i),l=n(419),u=n.n(l),c=n(37),p=n(33),d=n(51),h=n(2),m=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:o.props.numItemsPerPage;return Math.ceil((e+1)/t)},o.totalPages=function(){return Math.ceil(o.props.totalItems/o.props.numItemsPerPage)},o.firstVisibleItemIndex=function(){return(o.currentPage()-1)*o.props.numItemsPerPage},o.jumpToIndex=function(e){if(e<0||e>=o.props.totalItems)throw Error("Cannot page to invalid index "+e+".");o.setState({currentPage:o.getPageForIndex(e),targetIndex:e})},o.handlePageSelected=function(e){var n=void 0;switch(e[t.CONTROL_DATA_ATTRIBUTE]){case void 0:return;case t.control.FIRST:n=0;break;case t.control.PREVIOUS:n=o.firstVisibleItemIndex()-o.props.numItemsPerPage;break;case t.control.NEXT:n=o.firstVisibleItemIndex()+o.props.numItemsPerPage;break;case t.control.LAST:n=o.props.totalItems-1;break;default:n=parseInt(e[t.CONTROL_DATA_ATTRIBUTE],10)*o.props.numItemsPerPage-1}o.setState({currentPage:o.getPageForIndex(n),targetIndex:n})},o.handleItemPromiseFulfillment=function(e){if(o.mounted)return o.props.itemToJSXConverter(e)},i=n,a(o,i)}return i(t,e),v(t,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"componentDidUpdate",value:function(e,t){t.currentPage!==this.currentPage()&&n.i(c.findDOMNode)(this.refs.item_0).focus()}},{key:"componentWillReceiveProps",value:function(){var e=this,t=this.props;this.setState(function(n,o){return o.identifier!==t.identifier?{currentPage:1,targetIndex:0}:{currentPage:e.getPageForIndex(n.targetIndex,o.numItemsPerPage),targetIndex:n.targetIndex}})}},{key:"generateControls",value:function(){var e=[],n=this.currentPage(),r=this.totalPages(),a=n-(n-1)%this.props.numPageToggles,i=Math.min(a+this.props.numPageToggles-1,r);if(this.props.showPaginationState&&e.push({children:w(this.props.showPaginationState)?this.props.showPaginationState(n,r):n+" / "+r,className:"b-pagination-control b-pagination-control-state",disabled:!0}),this.props.showJumpToFirstPageControl){var s;e.push((s={},o(s,t.CONTROL_DATA_ATTRIBUTE,t.control.FIRST),o(s,"children",this.props.jumpToFirstPageControlContent),o(s,"className","b-pagination-control b-pagination-control-first"),o(s,"disabled",1===n),s))}if(this.props.showJumpToPreviousPageControl){var l;e.push((l={},o(l,t.CONTROL_DATA_ATTRIBUTE,t.control.PREVIOUS),o(l,"children",this.props.jumpToPreviousPageControlContent),o(l,"className","b-pagination-control b-pagination-control-previous"),o(l,"disabled",1===n),l))}for(var u=a;u<=i;u++){var c;e.push((c={},o(c,t.CONTROL_DATA_ATTRIBUTE,u),o(c,"children",u),o(c,"className","b-pagination-control"),o(c,"pressed",n===u),c))}if(this.props.showJumpToNextPageControl){var p;e.push((p={},o(p,t.CONTROL_DATA_ATTRIBUTE,t.control.NEXT),o(p,"children",this.props.jumpToNextPageControlContent),o(p,"className","b-pagination-control b-pagination-control-next"),o(p,"disabled",n===r),p))}if(this.props.showJumpToLastPageControl){var d;e.push((d={},o(d,t.CONTROL_DATA_ATTRIBUTE,t.control.LAST),o(d,"children",this.props.jumpToLastPageControlContent),o(d,"className","b-pagination-control b-pagination-control-last"),o(d,"disabled",n===r),d))}return this.props.customControlContent&&e.push({children:this.props.customControlContent,className:"b-pagination-control b-pagination-control-custom",disabled:!0}),e}},{key:"generateItems",value:function(){for(var e=[],t=this.firstVisibleItemIndex(),n=Math.min(this.props.totalItems,t+this.props.numItemsPerPage)-1,o=t;o<=n;o+=1)e.push(this.props.getItem(o));return e}},{key:"renderItems",value:function(){var e=this,t=this.props.itemWrapperProps;return u.a.createElement(f.default,y({},t,{className:d()("b-pagination-items",t.className)}),this.generateItems().map(function(t,n){return u.a.createElement(h.default,{ref:0===n?"item_0":null,key:n,className:d()("b-pagination-item",{"b-pagination-item-even":n%2===0,"b-pagination-item-odd":n%2!==0}),"data-pagination-index":e.props.numItemsPerPage*(e.currentPage()-1)+n,pendingContent:e.props.itemLoadingContent},t instanceof Promise?t.then(e.handleItemPromiseFulfillment,e.handleItemPromiseFulfillment):e.props.itemToJSXConverter(t))}))}},{key:"renderControls",value:function(e){var n;if(!(this.props.hidePagerIfNotNeeded&&this.props.totalItems<=this.props.numItemsPerPage))return u.a.createElement(m.default,y({},this.props.controlWrapperProps,{className:d()("b-pagination-controls",this.props.controlWrapperProps.className,(n={},o(n,"b-pagination-controls-above",e===t.position.ABOVE),o(n,"b-pagination-controls-below",e===t.position.BELOW),n)),options:this.generateControls(),onOptionSelected:this.handlePageSelected}))}},{key:"renderView",value:function(){var e=this.props.position,n=t.position;return u.a.createElement("div",{className:"b-pagination"},e===n.ABOVE||e===n.BOTH?this.renderControls(n.ABOVE):null,this.props.before,this.renderItems(),this.props.after,e===n.BELOW||e===n.BOTH?this.renderControls(n.BELOW):null)}},{key:"render",value:function(){return u.a.createElement("div",y({},n.i(b.default)(this.props,t.internalKeys),{className:d()("b-pagination-wrapper",this.props.className)}),this.renderView())}}]),t}(u.a.PureComponent);x.control={CUSTOM:n.i(g.default)(),FIRST:n.i(g.default)(),LAST:n.i(g.default)(),NEXT:n.i(g.default)(),PREVIOUS:n.i(g.default)()},x.position={ABOVE:n.i(g.default)(),BELOW:n.i(g.default)(),BOTH:n.i(g.default)()},x.CONTROL_DATA_ATTRIBUTE="data-page-control",x.defaultProps={after:null,before:null,controlWrapperProps:{},customControlContent:null,getItem:P,hidePagerIfNotNeeded:!1,identifier:n.i(g.default)(),initialPage:1,itemLoadingContent:void 0,itemToJSXConverter:k,itemWrapperProps:{},jumpToFirstPageControlContent:"⇤",jumpToLastPageControlContent:"⇥",jumpToNextPageControlContent:"→",jumpToPreviousPageControlContent:"←",numItemsPerPage:10,numPageToggles:5,position:x.position.ABOVE,showJumpToFirstPageControl:!0,showJumpToLastPageControl:!0,showJumpToNextPageControl:!0,showJumpToPreviousPageControl:!0,showPaginationState:!0,totalItems:null},x.internalKeys=Object.keys(x.defaultProps),t.default=x,x.__docgenInfo={description:"Pagination is implemented as an encapsulated view system, accepting an array of items as input.\n\n## Component Instance Methods\n\nWhen using `Pagination` in your project, you may call the following methods on a rendered\ninstance of the component. Use [`refs`](https:// * facebook.github.io/react/docs/refs-and-the-dom.html)\nto get the instance.\n\n- __`currentPage()`__ returns the ___one___-indexed page number currently in view\n\n- __`jumpToIndex(index: number)`__ renders the page that contains the ___zero___-indexed item",props:{"*":{type:{name:"any"},required:!1,description:"any [React-supported attribute](https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)"},after:{type:{name:"node"},required:!1,description:"arbitrary content to be rendered after the items in the DOM",defaultValue:{value:"null",computed:!1}},before:{type:{name:"node"},required:!1,description:"arbitrary content to be rendered before the items in the DOM",defaultValue:{value:"null",computed:!1}},controlWrapperProps:{type:{name:"shape",value:{"*":{name:"any",description:"any [React-supported attribute](https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)",required:!1}}},required:!1,description:"",defaultValue:{value:"{}",computed:!1}},customControlContent:{type:{name:"node"},required:!1,description:"allows for arbitrary content to be rendered into the control area",defaultValue:{value:"null",computed:!1}},getItem:{type:{name:"func"},required:!0,description:"called with a desired item index when that item comes into view;\naccepts a `Promise` if you need to fetch the row asynchronously",defaultValue:{value:"() => {}",computed:!1}},hidePagerIfNotNeeded:{type:{name:"bool"},required:!1,description:"does not render the paging controls if the number of items supplied\nto the view is less-than-or-equal-to the number of items to show\nper page via `props.numItemsPerPage`",defaultValue:{value:"false",computed:!1}},identifier:{type:{name:"string"},required:!0,description:"a unique name for the data source being consumed; pass a\ndifferent name to cause the view to fully reset and pull fresh data",defaultValue:{value:"uuid()",computed:!0}},initialPage:{type:{name:"custom",raw:"function validateInitialPage(props) {\n if (isInteger(props.initialPage) === false) {\n return new Error('`initialPage` must be an integer.');\n }\n\n const numberOfPages = Math.ceil(props.totalItems / props.numItemsPerPage);\n\n if (props.initialPage < 1 || props.initialPage > numberOfPages) {\n return new Error('`initialPage` must be between 1 and ' + numberOfPages + '.');\n }\n}"},required:!1,description:"the (__one-indexed__) number of the page that should be initially\ndisplayed; must be a positive integer less than or equal to\nthe total number of pages",defaultValue:{value:"1",computed:!1}},itemLoadingContent:{type:{name:"node"},required:!1,description:"allows for arbitrary content to be rendered into pagination items\nas they're loading if the backing data is a `Promise`",defaultValue:{value:"undefined",computed:!0}},itemToJSXConverter:{type:{name:"func"},required:!1,description:"an function to specify how an item should be converted\nto JSX, if it is not already renderable by React\n\n```jsx\n\nconst getItem = () => ({id: 1234, text: 'foo'});\nconst objToJSX = ({id, text}) =>
{text}
;\n\n\n```",defaultValue:{value:"(x) => x",computed:!1}},itemWrapperProps:{type:{name:"shape",value:{"*":{name:"any",description:"any [React-supported attribute](https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)",required:!1}}},required:!1,description:"",defaultValue:{value:"{}",computed:!1}},jumpToFirstPageControlContent:{type:{name:"node"},required:!1,description:'content to be displayed inside of the "First page" control button',defaultValue:{value:"'⇤'",computed:!1}},jumpToLastPageControlContent:{type:{name:"node"},required:!1,description:'content to be displayed inside of the "Last page" control button',defaultValue:{value:"'⇥'",computed:!1}},jumpToNextPageControlContent:{type:{name:"node"},required:!1,description:'content to be displayed inside of the "Next page" control button',defaultValue:{value:"'→'",computed:!1}},jumpToPreviousPageControlContent:{type:{name:"node"},required:!1,description:'content to be displayed inside of the "Previous page" control button',defaultValue:{value:"'←'",computed:!1}},numItemsPerPage:{type:{name:"custom",raw:"function validateNumItemsPerPage(props) {\n if (isInteger(props.numItemsPerPage) === false) {\n return new Error('`numItemsPerPage` must be an integer.');\n } else if (props.numItemsPerPage < 1) {\n return new Error('`numItemsPerPage` must be greater than zero.');\n }\n}"},required:!1,description:"the maximum number of items to be displayed on each page; must be\ngreater than zero",defaultValue:{value:"10",computed:!1}},numPageToggles:{type:{name:"number"},required:!1,description:"the maximum number of pages to be displayed in the control bar at\none time",defaultValue:{value:"5",computed:!1}},position:{type:{name:"enum",value:[{value:"Pagination.position.ABOVE",computed:!0},{value:"Pagination.position.BELOW",computed:!0},{value:"Pagination.position.BOTH",computed:!0}]},required:!1,description:"determines whether the pagination controls are displayed above,\nbelow, or both above and below the content",defaultValue:{value:"Pagination.position.ABOVE",computed:!0}},showJumpToFirstPageControl:{type:{name:"bool"},required:!1,description:'whether the "first page" control button should be displayed',defaultValue:{value:"true",computed:!1}},showJumpToLastPageControl:{type:{name:"bool"},required:!1,description:'whether the "last page" control button should be displayed',defaultValue:{value:"true",computed:!1}},showJumpToNextPageControl:{type:{name:"bool"},required:!1,description:'whether the "next page" control button should be displayed',defaultValue:{value:"true",computed:!1}},showJumpToPreviousPageControl:{type:{name:"bool"},required:!1,description:'whether the "previous page" control button should be displayed',defaultValue:{value:"true",computed:!1}},showPaginationState:{type:{name:"union",value:[{name:"bool"},{name:"func"}]},required:!1,description:"renders an element called `.b-pagination-control-state` that\ncontains the current state of the pagination like \"1 of 10\";\nalternatively, this prop also accepts a function that it will\ncall with the currentPage and totalPages for you to format:\n\n```jsx\nshowPaginatedState={\n (currentPage, totalPages) => (\n
\n You're on page {currentPage} of {totalPages} pages!\n
\n )\n}\n```",defaultValue:{value:"true",computed:!1}},totalItems:{type:{name:"number"},required:!0,description:"the total number of items to be displayed in the view",defaultValue:{value:"null",computed:!1}}}}},102:function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){switch(e[0]){case"N":return"S";case"S":return"N";case"E":return"W"}return"E"}function s(e,t){return e.filter(function(e){return t.indexOf(e)===-1})}Object.defineProperty(t,"__esModule",{value:!0});var l=n(0),u=n.n(l),c=n(15),p=(n.n(c),n(433)),d=n.n(p),h=n(37),m=n(33),f=n(2),b=n(169),g=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:this.$caret,a=0;return"N"===t[0]||"S"===t[0]?(a=this.caretAnchorRect.left-this.anchorRect.left+this.caretAnchorRect.width/2,n===P?a+=(this.dialog.$wrapper.clientWidth-this.anchorRect.width)/2:n===x&&(a+=this.dialog.$wrapper.clientWidth-this.anchorRect.width)):(a=this.caretAnchorRect.top-this.anchorRect.top+this.caretAnchorRect.height/2,o===P?a+=(this.dialog.$wrapper.clientHeight-this.anchorRect.height)/2:o===x&&(a+=this.dialog.$wrapper.clientHeight-this.anchorRect.height)),a-=r.clientWidth/2}},{key:"getNextDialogXPosition",value:function(e){var t=e.ax,n=e.dx,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.dialog.$wrapper,r=this.anchorRect.left+this.bodyLeft;switch(t){case P:r+=this.anchorRect.width/2;break;case x:r+=this.anchorRect.width}switch(n){case P:r-=o.clientWidth/2;break;case x:r-=o.clientWidth}return r}},{key:"getNextDialogYPosition",value:function(e){var t=e.ay,n=e.dy,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.dialog.$wrapper,r=this.anchorRect.top+this.bodyTop;switch(t){case P:r+=this.anchorRect.height/2;break;case x:r+=this.anchorRect.height}switch(n){case P:r-=o.clientHeight/2;break;case x:r-=o.clientHeight}return r}},{key:"isPositionValid",value:function(e,t,n){var o=e.name,r=e.ax,a=e.ay,i=(e.dx,e.dy,o[0]);return"N"===i||"S"===i?!("N"===i&&this.anchorRect.top-t<0)&&(!("S"===i&&this.anchorRect.bottom+t>window.innerHeight)&&(r===w?!(this.anchorRect.left+n>window.innerWidth||this.anchorRect.left<0):r===P?!(this.anchorRect.left-n/2<0||this.anchorRect.left+n/2>window.innerWidth):!(this.anchorRect.left-n<0||this.anchorRect.right>window.innerWidth))):"W"!==i&&"E"!==i||!("W"===i&&this.anchorRect.left-n<0)&&(!("E"===i&&this.anchorRect.right+n>window.innerWidth)&&(a===w?!(this.anchorRect.top+t>window.innerHeight||this.anchorRect.top<0):a===P?!(this.anchorRect.top+this.anchorRect.height/2-t/2<0||this.anchorRect.top+this.anchorRect.height/2+t/2>window.innerHeight):!(this.anchorRect.top-t<0||this.anchorRect.bottom>window.innerHeight)))}},{key:"getValidAlignmentPreset",value:function(){var e=this,t=this.dialog.$wrapper.clientWidth,n=this.dialog.$wrapper.clientHeight,o=O.filter(function(o){return e.isPositionValid(o,n,t)});if(o.indexOf(this.props.preset)!==-1||!this.props.autoReposition||!o.length)return this.props.preset;var r=o.filter(function(t){var n=t.name;return n[0]===e.props.preset.name[0]});if(r.length)return r[0];var a=i(this.props.preset.name),s=o.filter(function(e){var t=e.name;return t[0]===a});return s.length?s[0]:o[0]}},{key:"componentDidMount",value:function(){this.align(),window.addEventListener("resize",this.align,!0)}},{key:"componentDidUpdate",value:function(){this.align()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.align,!0)}},{key:"render",value:function(){var e=this,o=this.props;return u.a.createElement(m.default,o.portalProps,u.a.createElement(h.default,g({},n.i(f.default)(o,t.internalKeys),{ref:function(t){return e.dialog=t},before:u.a.cloneElement(o.caretComponent,{ref:function(t){return e.$caret=t},className:d()("b-popover-caret",o.caretComponent.props.className)}),className:d()("b-popover",o.className)})))}}],[{key:"getAlignmentClassFragment",value:function(e){switch(e){case w:return"start";case P:return"middle";case x:return"end"}}}]),t}(u.a.PureComponent);E.preset=O.reduce(function(e,t){return e[t.name]=t,e},{}),E.defaultProps=g({},h.default.defaultProps,{anchor:void 0,autoReposition:!0,captureFocus:!1,caretAnchor:void 0,caretComponent:k,closeOnEscKey:!0,closeOnOutsideClick:!0,closeOnOutsideScroll:!0,portalProps:{},preset:E.preset.S}),E.internalKeys=s(Object.keys(E.defaultProps),h.default.internalKeys),t.default=E,E.__docgenInfo={description:"A popover is a type of [Dialog](https://github.com/enigma-io/boundless/tree/master/packages/boundless-dialog) that is meant to provide additional context to content (an \"anchor\") currently on-screen. Typically, a popover is spawned by interacting with the content it enriches and is dismissed by clicking or shifting focus to an alternate location.\n\nAlignment options for the popover are designed to mirror compass directions:\n\n```\n → ←\n NNW N NNE\n↓ WNW ENE ↓\n W ANCHOR E\n↑ WSW ESE ↑\n SSW S SSE\n → ←\n```\n\nThe arrows indicate which way the popover will extend, e.g. → means the popover is aligned to the left edge and extends in that direction. Diagonal corners (NW, NE, SE, SW) are currently not supported.\n\n```jsx\n\n My popover content!\n\n```",props:{anchor:{type:{name:"union",value:[{name:"instanceOf",value:"HTMLElement"},{name:"shape",value:{props:{name:"object",required:!1}}}]},required:!0,description:"a DOM element or React reference (ref) to one for positioning purposes",defaultValue:{value:"undefined",computed:!0}},autoReposition:{type:{name:"bool"},required:!1,description:"if the given alignment settings would take the popover out of bounds, change the alignment as necessary to remain in the viewport",defaultValue:{value:"true",computed:!1}},caretAnchor:{type:{name:"union",value:[{name:"instanceOf",value:"HTMLElement"},{name:"shape",value:{props:{name:"object",required:!1}}}]},required:!1,description:"a DOM element or React reference (ref) to one for positioning purposes, the caret component will\nbe automatically positioned to center on this provided anchor; by default it will center\non `props.anchor`",defaultValue:{value:"undefined",computed:!0}},caretComponent:{type:{name:"element"},required:!1,description:"the JSX that is rendered and used to point at the middle of the anchor element and indicate the context of the popover",defaultValue:{value:"",computed:!1}},portalProps:{type:{name:"shape",value:"Portal.PropTypes",computed:!0},required:!1,description:"",defaultValue:{value:"{}",computed:!1}},preset:{type:{name:"enum",value:[{value:"Popover.preset.NNW",computed:!0},{value:"Popover.preset.N",computed:!0},{value:"Popover.preset.NNE",computed:!0},{value:"Popover.preset.ENE",computed:!0},{value:"Popover.preset.E",computed:!0},{value:"Popover.preset.ESE",computed:!0},{value:"Popover.preset.SSE",computed:!0},{value:"Popover.preset.S",computed:!0},{value:"Popover.preset.SSW",computed:!0},{value:"Popover.preset.WSW",computed:!0},{value:"Popover.preset.W",computed:!0},{value:"Popover.preset.WNW",computed:!0}]},required:!1,description:"Example:\n```jsx\n\n My popover content!\n\n```",defaultValue:{value:"Popover.preset.S",computed:!0}},captureFocus:{defaultValue:{value:"false",computed:!1}},closeOnEscKey:{defaultValue:{value:"true",computed:!1}},closeOnOutsideClick:{defaultValue:{value:"true",computed:!1}},closeOnOutsideScroll:{defaultValue:{value:"true",computed:!1}}},composes:["boundless-dialog"]}},103:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(0),l=n.n(s),u=n(434),c=n.n(u),p=n(34),d=n(2),h=Object.assign||function(e){for(var t=1;t {}",computed:!1}},selected:{type:{name:"bool"},required:!1,description:'determines the activation state of the radio control, see React ["controlled inputs"](https://facebook.github.io/react/docs/forms.html#controlled-components))',defaultValue:{value:"false",computed:!1}},value:{type:{name:"string"},required:!0,description:"passthrough to the HTML `value` attribute on the `.b-radio` node",defaultValue:{value:"''",computed:!1}}}}},105:function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),s=n.n(i),l=n(438),u=n.n(l),c=n(54),p=n(51),d=n(2),h=Object.assign||function(e){for(var t=1;te.tokens.length&&this.setValue(""),this._suppressNextTokenSelection)return void(this._suppressNextTokenSelection=!1);if(t!==n&&0!==n.length){if(1===n.length||n[0]!==t[0])return this.refs["token_"+n[0]].focus();if(b(n)!==b(t))return this.refs["token_"+b(n)].focus();this.refs["token_"+n[0]].focus()}}},{key:"remove",value:function(e){var t=this,n=(Array.isArray(e)?e:[e]).filter(function(e){return t.props.tokens.indexOf(e)!==-1});n.length&&this.props.handleRemoveTokens(n)}},{key:"selectToken",value:function(e){this.props.handleNewSelection([e])}},{key:"selectTokens",value:function(e){this.props.handleNewSelection(e)}},{key:"selectPreviousToken",value:function(e){var t=this.props.tokensSelected,n=this.props.tokens;if(1!==t.length||f(t)!==f(n))if(0===t.length)this.selectToken(b(n));else{var o=n[n.indexOf(f(t))-1];this.selectTokens(e?[o].concat(t):[o])}}},{key:"selectNextToken",value:function(e){var t=this.props.tokensSelected,n=this.props.tokens;if(0!==t.length)if(b(t)===b(n))this.clearSelection(),this.focus();else{var o=n[n.indexOf(b(t))+1];this.selectTokens(e?t.concat(o):[o])}}},{key:"clearSelection",value:function(){this.props.handleNewSelection([])}},{key:"handleTokenCloseClick",value:function(e,t){t.stopPropagation(),this.remove(e),this.focus(),this.props.tokenCloseComponent.props.onClick&&this.props.tokenCloseComponent.props.onClick(t)}},{key:"renderTokenClose",value:function(e){if(this.props.tokenCloseVisible)return s.a.cloneElement(this.props.tokenCloseComponent,{className:u()("b-tokenfield-token-close",this.props.tokenCloseComponent.props.className),onClick:this.handleTokenCloseClick.bind(this,e)})}},{key:"handleTokenKeyDown",value:function(e,t){switch(t.which){case 13:case 32:this.selectToken(e),t.preventDefault();break;case 8:this.remove(e),this.focus(),t.preventDefault()}}},{key:"renderTokens",value:function(){var e=this;return s.a.createElement("div",{className:"b-tokenfield-tokens",role:"listbox"},this.props.tokens.map(function(t){return s.a.createElement("div",{ref:"token_"+t,key:t,className:u()("b-tokenfield-token",{"b-tokenfield-token-selected":e.props.tokensSelected.indexOf(t)!==-1}),onClick:e.selectToken.bind(e,t),onKeyDown:e.handleTokenKeyDown.bind(e,t),role:"option",tabIndex:"0"},e.props.entities[t].text,e.renderTokenClose(t))}))}},{key:"render",value:function(){return s.a.createElement("div",h({},n.i(d.default)(this.props,t.internalKeys),{ref:"wrapper",className:u()("b-tokenfield-wrapper",this.props.className),onKeyDown:this.handleKeyDown}),this.renderTokens(),s.a.createElement(c.default,h({},n.i(p.default)(this.props,c.default.defaultProps),{ref:"typeahead",className:"b-tokenfield",clearOnSelection:!0,inputProps:h({},this.props.inputProps,{onClick:this.handleInputClick,onFocus:this.handleInputFocus}),onEntitySelected:this.add})))}}]),t}(s.a.PureComponent);y.defaultProps=h({},c.default.defaultProps,{handleAddToken:function(){},handleRemoveTokens:function(){},handleNewSelection:function(){},tokenCloseComponent:s.a.createElement("div",null,"X"),tokenCloseVisible:!0,tokens:[],tokensSelected:[]}),y.internalKeys=Object.keys(y.defaultProps),t.default=y,y.__docgenInfo={description:'Basic usage of this component is identical to that of [Typeahead](https://github.com/enigma-io/boundless/master/packages/boundless-typeahead). Additional props are available to take advantage of the tokenization functionality.\n\n## Component Instance Methods\n\nWhen using `TokenizedInput` in your project, you may call the following methods on a rendered instance of the component. Use [`refs`](https://facebook.github.io/react/docs/refs-and-the-dom.html) to get the instance.\n\n- __`add(index: number)`__\n programmatically creates a token for `props.entities[index]`; `props.handleAddToken` will be called as a hint to persist the change in your controller view or other application state\n\n- __`focus()`__\n focuses the browser oon the underlying textual input for immediate text entry\n\n- __`getInputNode()`__\n returns the raw underlying textual input DOM node\n\n- __`getSelectedEntityText()`__\n returns the `text` property of the currently highlighted entity (from `props.entities`), or returns an empty string\n\n- __`getValue()`__\n retrieves the current value of the underlying textual input\n\n- __`remove(index: number)`__\n programmatically removes the token for `props.entities[index]`; `props.handleRemoveTokens` will be called as a hint to persist the change in your controller view or other application state\n\n- __`select()`__\n programmatically creates a full selection on the underlying textual input such that a press of the Backspace key would fully clear the input\n\n- __`setValue(value: string)`__\n sets the underlying textual input to the specified text and updates internal state; do not use this method when using `Typeahead` as a "controlled input"',props:{handleAddToken:{type:{name:"func"},required:!1,description:"function handler that is called when an entity is selected by the user and a token should be created",defaultValue:{value:"() => {}",computed:!1}},handleRemoveTokens:{type:{name:"func"},required:!1,description:'function handler that is called when one or more tokens are removed by the user via clicking the "close" button or pressing the `Backspace` key while tokens are selected',defaultValue:{value:"() => {}",computed:!1}},handleNewSelection:{type:{name:"func"},required:!1,description:"function handler that is called when one or more tokens are selected by the user via click or keyboard actions; called with what the new selection should be",defaultValue:{value:"() => {}",computed:!1}},tokenCloseComponent:{type:{name:"element"},required:!1,description:"the JSX used for the close button itself",defaultValue:{value:"
X
",computed:!1}},tokenCloseVisible:{type:{name:"bool"},required:!1,description:"determines if the `.b-tokenfield-token-close` element should be rendered for each token",defaultValue:{value:"true",computed:!1}},tokens:{type:{name:"arrayOf",value:{name:"number"}},required:!1,description:'the indexes of entities that should be rendered as "tokens" in the component UI',defaultValue:{value:"[]",computed:!1}},tokensSelected:{type:{name:"arrayOf",value:{name:"number"}},required:!1,description:"the indexes of tokenized entities that are part of an active selection; the user can press `Backspace` to trigger `handleRemoveTokens`",defaultValue:{value:"[]",computed:!1}}},composes:["boundless-typeahead"]}},15:function(e,t){e.exports=ReactDOM},169:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){for(var e=["transform","WebkitTransform","MozTransform","OTransform","msTransform","webkit-transform"],t=0,n=e.length;t=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}var r=n(143),a=n.n(r),i=n(0),s=n.n(i),l=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:[];return Object.keys(e).reduce(function(n,o){return t.indexOf(o)===-1&&(n[o]=e[o]),n},{})}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o},33:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(0),l=n.n(s),u=n(15),c=n.n(u),p=n(2),d=n(8),h=Object.assign||function(e){for(var t=1;t` tag, avoiding style leakage and parent layout contexts. Only accepts a single top-level child; naked text, etc will be wrapped in a `
`.",props:{"*":{type:{name:"any"},required:!1,description:"any [React-supported attribute](https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)"},children:{type:{name:"node"},required:!1,description:'any normal React child, but must be singular; multiple sibling children must have a common wrapper, such as a "layout" `
`\n\n✅ OK:\n\n```jsx\n\n foo\n\n\n\n
foo
\n\n\n\n
\n
foo
\n
bar
\n
\n\n```\n\n⛔️ Not OK:\n\n```jsx\n\n
foo
\n
bar
\n\n```',defaultValue:{value:"null",computed:!1}},destination:{type:{name:"instanceOf",value:"HTMLElement"},required:!1,description:"the location to append the generated portal and child elements",defaultValue:{value:"document.body",computed:!0}},portalId:{type:{name:"string"},required:!1,description:"the ID used to link the portal origin to the destination; added to generated `
` appended to the destination HTML node",defaultValue:{value:"null",computed:!1}}}}},34:function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),s=n.n(i),l=n(412),u=n.n(l),c=n(2),p=Object.assign||function(e){for(var t=1;t`)\n ```jsx\n \n ```\n\n > Note that instead of `onClick`, Button uses `onPressed`. This is because the component also listens for keyboard Enter events, so `onClick` only tells half the story. You can still bind to that particular React event though if there\'s a need to tell the difference between clicks and Enter presses.\n\n2. stateful (like a toggle, e.g. bold-mode in a rich text editor)\n\n "stateful" mode is triggered by passing a boolean to `props.pressed`. This enables the button to act like a controlled component. The `onUnpressed` event callback will also now be fired when appropriate.\n\n ```jsx\n \n ```',props:{"*":{type:{name:"any"},required:!1,description:"any [React-supported attribute](https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)"},component:{type:{name:"union",value:[{name:"string"},{name:"func"}]},required:!1,description:"Any valid HTML tag name or a ReactComponent, anything that can be passed as the\nfirst argument to `React.createElement`; note that this component sets the `role` and `aria-checked`\nattributes so non-`