diff --git a/docs/iframe.html b/docs/iframe.html index 8022c291..2e9b0f7b 100644 --- a/docs/iframe.html +++ b/docs/iframe.html @@ -71,4 +71,4 @@ }

No Preview

Sorry, but you either have no stories or none are selected somehow.

If the problem persists, check the browser console, or the terminal you've run Storybook from.

\ No newline at end of file + }

No Preview

Sorry, but you either have no stories or none are selected somehow.

If the problem persists, check the browser console, or the terminal you've run Storybook from.

\ No newline at end of file diff --git a/docs/main.ddccdd56cb4f1dffa0ae.bundle.js b/docs/main.4ecf534cc881402bfb22.bundle.js similarity index 78% rename from docs/main.ddccdd56cb4f1dffa0ae.bundle.js rename to docs/main.4ecf534cc881402bfb22.bundle.js index 0cfeb854..0accf506 100644 --- a/docs/main.ddccdd56cb4f1dffa0ae.bundle.js +++ b/docs/main.4ecf534cc881402bfb22.bundle.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";function compileTemplate(template){var scope=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{template:template,scope:scope}}__webpack_require__.d(__webpack_exports__,"a",(function(){return compileTemplate}))},,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addBooleanParameter})),__webpack_require__.d(__webpack_exports__,"b",(function(){return addDefaultParameter})),__webpack_require__.d(__webpack_exports__,"d",(function(){return hasAttribute})),__webpack_require__.d(__webpack_exports__,"e",(function(){return hasAttributeValue})),__webpack_require__.d(__webpack_exports__,"c",(function(){return getAttribute})),__webpack_require__.d(__webpack_exports__,"f",(function(){return removeHtmlTags}));__webpack_require__(20),__webpack_require__(44),__webpack_require__(69);function addBooleanParameter(controller,parameterName){var ctrl=controller;ctrl.$attrs&&angular.isDefined(ctrl.$attrs[parameterName])&&""===ctrl.$attrs[parameterName]&&(ctrl[parameterName]=!0)}function addDefaultParameter(controller,parameterName,defaultValue){var ctrl=controller;ctrl.$attrs&&(!angular.isDefined(ctrl.$attrs[parameterName])||angular.isDefined(ctrl.$attrs[parameterName])&&""===ctrl.$attrs[parameterName].trim())&&(ctrl[parameterName]=defaultValue)}function hasAttribute(element,attributeName){return null!==element.getAttribute(attributeName)||null!==element.getAttribute("data-".concat(attributeName))}function hasAttributeValue(element,attributeName){var attribute=element.getAttribute(attributeName)||element.getAttribute("data-".concat(attributeName));return attribute&&""!==attribute}function getAttribute(element,attributeName){return element.getAttribute(attributeName)||element.getAttribute("data-".concat(attributeName))}function removeHtmlTags(text){return text&&"string"==typeof text?text.replace(/(<([^>]+)>)/gi,""):text}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";var src=__webpack_require__(143),slicedToArray=(__webpack_require__(33),__webpack_require__(23),__webpack_require__(36),__webpack_require__(16),__webpack_require__(61),__webpack_require__(25),__webpack_require__(72),__webpack_require__(15),__webpack_require__(20),__webpack_require__(30),__webpack_require__(44),__webpack_require__(24),__webpack_require__(88)),slicedToArray_default=__webpack_require__.n(slicedToArray),classCallCheck=__webpack_require__(8),classCallCheck_default=__webpack_require__.n(classCallCheck),createClass=__webpack_require__(9),createClass_default=__webpack_require__.n(createClass),component_utils=__webpack_require__(7),CONTROLS_SELECTORS=["input","select","textarea",".".concat("oui-field__component")],VALIDATION_PARAMETERS={min:["min","ng-min","ngMin"],max:["max","ng-max","ngMax"],minlength:["minlength","ng-minlength","ngMinlength"],maxlength:["maxlength","ng-maxlength","ngMaxlength"],pattern:["pattern","ng-pattern","ngPattern"]},MESSAGES_ORDER=["required","number","email","minlength","maxlength","min","max","pattern"],field_controller_FieldController=function(){function FieldController($element,$scope,$timeout,ouiFieldConfiguration){classCallCheck_default()(this,FieldController),this.$element=$element,this.$scope=$scope,this.$timeout=$timeout,this.ouiFieldConfiguration=ouiFieldConfiguration}return FieldController.$inject=["$element","$scope","$timeout","ouiFieldConfiguration"],createClass_default()(FieldController,[{key:"$onInit",value:function $onInit(){this.controlElements=[],this.controls={},this.currentErrorField=null,this.ids=[],this.validationParameters={},this.invalid=!1,this.blurred=!1,this.size=this.size||"auto"}},{key:"$postLink",value:function $postLink(){var _this=this;this.$timeout((function(){if(_this.controls=_this.getAllControls(),!_this.controlElements.length)throw new Error("oui-field component requires at least one form control.");if(!Object.keys(_this.controls).length)throw new Error("oui-field component requires a form control with a name.");if(1===_this.ids.length&&1===_this.controlElements.length){var ids=slicedToArray_default()(_this.ids,1)[0];_this.for=ids}(_this.$ouiFieldElement=angular.element(_this.$element[0].querySelector(".oui-field")),Object.keys(_this.controls).forEach((function(name){_this.controls[name].forEach((function(control){angular.element(control).hasClass("oui-field__component")||_this.bindDOMEvents(control,name)})),_this.validationParameters[name]=FieldController.getValidationParameters(_this.controls[name][0])})),_this.labelElement=angular.element(_this.$element[0].querySelector(".oui-field__label")),_this.labelElement.on("click",(function(){_this.$scope.$broadcast("oui:focus")})),_this.labelPopover)&&(_this.popoverId="ouiFieldPopover".concat(_this.$scope.$id),_this.for&&angular.element(_this.$element[0].querySelector("#".concat(_this.for))).attr("aria-describedby",_this.popoverId))}))}},{key:"$onDestroy",value:function $onDestroy(){var _this2=this;Object.keys(this.controls).forEach((function(name){_this2.controls[name].forEach((function(control){angular.element(control).off("blur"),angular.element(control).off("focus")}))})),this.labelElement&&this.labelElement.off("click")}},{key:"bindDOMEvents",value:function bindDOMEvents(controlElement,name){var _this3=this;angular.element(controlElement).on("blur",(function(){_this3.$timeout((function(){_this3.checkControlErrors(controlElement,name)}))})),angular.element(controlElement).on("focus",(function(){_this3.$timeout((function(){_this3.form&&_this3.form[name]&&(_this3.form[name].$touched=!1)}))}))}},{key:"checkControlErrors",value:function checkControlErrors(controlElement,name){this.blurred=!0,this.form&&this.form[name]&&this.form[name].$invalid?this.currentErrorField=name:this.currentErrorField=null}},{key:"isErrorVisible",value:function isErrorVisible(){return!!this.form&&(this.checkAllErrors(),this.invalid&&(this.form[this.currentErrorField].$modelValue||this.blurred||this.form.$submitted))}},{key:"checkAllErrors",value:function checkAllErrors(){var _this4=this;this.invalid=Object.keys(this.controls).map((function(name){return!(!_this4.form||!(name in _this4.form))&&(_this4.form[name].$invalid&&!_this4.currentErrorField&&(_this4.currentErrorField=name),_this4.form[name].$invalid)})).reduce((function(fieldInvalid,controlInvalid){return fieldInvalid||controlInvalid}),!1)}},{key:"getFirstError",value:function getFirstError(){for(var names=Object.keys(this.controls),i=0;itempor ante.","isActive":true},{"subject":"Vestibulum malesuada justo ac lectus tincidunt","time":"yesterday, 10:10","level":"info","url":"#/","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fermentum faucibus ante, sed ullamcorper quam pretium ut. Donec et eros at nisi egestas scelerisque quis id erat. Cras suscipit diam id lorem congue aliquam. Integer ornare urna vel turpis blandit, mattis placerat est dictum. Etiam porta venenatis odio tristique condimentum."},{"subject":"Duis placerat lacus at nibh fringil","time":"February 21","level":"success","url":"#/","description":"Duis placerat lacus at nibh fringilla, at ultrices nunc suscipit."},{"subject":"Mauris ipsum","time":"February 22","level":"error","url":"#/","description":"Nunc mattis tellus maximus nisl ullamcorper, nec blandit dolor varius. Morbi ut turpis elit. Fusce nec augue mi."},{"subject":"Mauris ipsum","time":"February 22, 2017","level":"incident","url":"#/","description":"Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis."}],"limitTo":10,"footerTitle":"Maecenas facilisis","footerUrl":"#/"},{"name":"libero","title":"Help","headerTitle":"Help","iconClass":"oui-icon oui-icon-help","subLinks":[{"title":"Donec","url":"#!/oui-angular/navbar","isExternal":true},{"name":"libero.sodales","title":"Sodales","url":"#!/oui-angular/navbar","subLinks":[{"title":"Elementum","url":"#!/oui-angular/navbar"},{"name":"libero.sodales.venenatis","title":"Venenatis","url":"#!/oui-angular/navbar","subLinks":[{"title":"Vitae varius metus","url":"#!/oui-angular/navbar"},{"title":"Orci varius natoque","url":"#!/oui-angular/navbar"}]}]},{"title":"Mauris","url":"#!/oui-angular/navbar"},{"title":"Vulputate","url":"#!/oui-angular/navbar","isExternal":true}]},{"name":"user","title":"Account","iconClass":"oui-icon oui-icon-user","subLinks":[{"name":"user.adipiscing","title":"Adipiscing","url":"#!/oui-angular/navbar","subLinks":[{"title":"Maecenas","url":"#!/oui-angular/navbar"},{"title":"Curabitur","url":"#!/oui-angular/navbar"}]},{"title":"Consectetur","url":"#!/oui-angular/navbar"},{"name":"user.quam","title":"Quam","url":"#!/oui-angular/navbar","subLinks":[{"title":"Efficitur","url":"#!/oui-angular/navbar"},{"title":"Molestie","url":"#!/oui-angular/navbar"}]}],"nichandle":"ab1234-ovh","fullName":"Scelerisque Leo-nec"}],"mainLinks":[{"name":"lorem","label":"Lorem","title":"Lorem","url":"#!/oui-angular/navbar","isPrimary":true},{"name":"ipsum","label":"Ipsum","title":"Ipsum","url":"#!/oui-angular/navbar","isPrimary":true,"subLinks":[{"name":"duis","label":"Duis","title":"Duis","subLinks":[{"label":"Tempus","title":"Tempus","url":"#!/oui-angular/navbar"},{"label":"Vitae","title":"Vitae","url":"#!/oui-angular/navbar"},{"name":"duis.malesuada","label":"Malesuada","title":"Malesuada","url":"#!/oui-angular/navbar","subLinks":[{"name":"malesuada.eu","label":"malesuada.eu","title":"malesuada.eu","url":"#!/oui-angular/navbar"},{"name":"malesuada.fr","label":"malesuada.fr","title":"malesuada.fr","url":"#!/oui-angular/navbar"},{"name":"malesuada.be","label":"malesuada.be","title":"malesuada.be","url":"#!/oui-angular/navbar"}]},{"name":"pharetra","label":"Pharetra","title":"Pharetra","url":"#!/oui-angular/navbar"}]},{"name":"lacinia","label":"Lacinia","title":"Lacinia","subLinks":[{"label":"Tempus","title":"Tempus","url":"#!/oui-angular/navbar"},{"label":"Vitae","title":"Vitae","url":"#!/oui-angular/navbar"},{"name":"lacinia.malesuada","label":"Malesuada","title":"Malesuada","url":"#!/oui-angular/navbar","subLinks":[{"name":"malesuada.eu","label":"malesuada.eu","title":"malesuada.eu","url":"#!/oui-angular/navbar"},{"name":"malesuada.fr","label":"malesuada.fr","title":"malesuada.fr","url":"#!/oui-angular/navbar"},{"name":"malesuada.be","label":"malesuada.be","title":"malesuada.be","url":"#!/oui-angular/navbar"}]},{"name":"pharetra","label":"Pharetra","title":"Pharetra","url":"#!/oui-angular/navbar"}]},{"name":"magna","label":"Magna","title":"Magna","subLinks":[{"label":"Tempus","title":"Tempus","url":"#!/oui-angular/navbar"},{"label":"Vitae","title":"Vitae","url":"#!/oui-angular/navbar"},{"name":"magna.malesuada","label":"Malesuada","title":"Malesuada","url":"#!/oui-angular/navbar","subLinks":[{"name":"malesuada.eu","label":"malesuada.eu","title":"malesuada.eu","url":"#!/oui-angular/navbar"},{"name":"malesuada.fr","label":"malesuada.fr","title":"malesuada.fr","url":"#!/oui-angular/navbar"},{"name":"malesuada.be","label":"malesuada.be","title":"malesuada.be","url":"#!/oui-angular/navbar"}]},{"name":"pharetra","label":"Pharetra","title":"Pharetra","url":"#!/oui-angular/navbar"}]},{"name":"pellentesque","label":"Pellentesque","title":"Pellentesque","subLinks":[{"label":"Tempus","title":"Tempus","url":"#!/oui-angular/navbar"},{"label":"Vitae","title":"Vitae","url":"#!/oui-angular/navbar"},{"name":"pellentesque.malesuada","label":"Malesuada","title":"Malesuada","url":"#!/oui-angular/navbar","subLinks":[{"name":"malesuada.eu","label":"malesuada.eu","title":"malesuada.eu","url":"#!/oui-angular/navbar"},{"name":"malesuada.fr","label":"malesuada.fr","title":"malesuada.fr","url":"#!/oui-angular/navbar"},{"name":"malesuada.be","label":"malesuada.be","title":"malesuada.be","url":"#!/oui-angular/navbar"}]},{"name":"pharetra","label":"Pharetra","title":"Pharetra","url":"#!/oui-angular/navbar"}]},{"name":"empty","label":"Not visible","title":"Empty","subLinks":[]}]},{"name":"dolor","label":"Dolor","title":"Dolor","url":"#!/oui-angular/navbar","isPrimary":true},{"name":"sit","label":"Sit","title":"Sit","url":"#!/oui-angular/navbar","isPrimary":false},{"name":"amet","label":"Amet","title":"Amet","url":"#!/oui-angular/navbar","isPrimary":false}],"placeholderNotification":[{"name":"notifications","class":"navbar-notification__list","title":"Notifications","iconClass":"oui-icon oui-icon-bell","subLinks":null,"limitTo":10}]}')},,,,,,,,,,,,,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__(68),__webpack_require__(16),__webpack_require__(71);var classCallCheck=__webpack_require__(8),classCallCheck_default=__webpack_require__.n(classCallCheck),createClass=__webpack_require__(9),createClass_default=__webpack_require__.n(createClass),component_utils=__webpack_require__(7),popper=__webpack_require__(135),dropdown_component={controller:function(){function _default($attrs,$document,$element,$scope,$timeout){classCallCheck_default()(this,_default),this.$attrs=$attrs,this.$document=$document,this.$element=$element,this.$scope=$scope,this.$timeout=$timeout}return _default.$inject=["$attrs","$document","$element","$scope","$timeout"],createClass_default()(_default,[{key:"$onInit",value:function $onInit(){var _this=this;this.isDropdownOpen=!1,this.currentFocusedElement=null,Object(component_utils.a)(this,"arrow"),Object(component_utils.a)(this,"persistent"),Object(component_utils.b)(this,"placement","bottom-start"),this.id="ouiDropdown".concat(this.$scope.$id),this.documentClickHandler=function(evt){(!evt||"click"!==evt.type||evt.target&&evt.target.getAttribute&&"submit"===evt.target.getAttribute("type")||!(_this.triggerElement.contains(evt.target)||_this.persistent&&_this.popperElement.contains(evt.target)))&&_this.$scope.$apply((function(){return _this.closeDropdown()}))},this.triggerKeyHandler=function(evt){evt&&"keydown"===evt.type&&27===evt.which&&_this.$scope.$apply((function(){_this.closeDropdown()}))},this.triggerBlurHandler=function(evt){_this.persistent||(evt.relatedTarget&&!_this.$element[0].contains(evt.relatedTarget)&&_this.$timeout((function(){return _this.closeDropdown()})),_this.currentFocusedElement&&angular.element(_this.currentFocusedElement).off("blur",_this.triggerBlurHandler),angular.element(evt.relatedTarget).on("blur",_this.triggerBlurHandler),_this.currentFocusedElement=evt.relatedTarget)}}},{key:"$postLink",value:function $postLink(){var _this2=this;this.$timeout((function(){return _this2.$element.addClass("oui-dropdown")}))}},{key:"$onDestroy",value:function $onDestroy(){this.destroyPopper()}},{key:"setDropdownTrigger",value:function setDropdownTrigger(trigger,ctrl){this.triggerElement=trigger,this.triggerCtrl=ctrl}},{key:"setDropdownMenu",value:function setDropdownMenu(menu,arrow){this.popperElement=menu,this.arrowElement=arrow}},{key:"onTriggerClick",value:function onTriggerClick(){this.toggle()}},{key:"toggle",value:function toggle(){this.isDropdownOpen?this.closeDropdown():this.openDropdown()}},{key:"openDropdown",value:function openDropdown(){var _this3=this;this.isDropdownOpen=!0,this.updatePopper(),this.$document.on("click",this.documentClickHandler),this.$document.on("keydown",(function(evt){return _this3.triggerKeyHandler(evt)})),this.triggerCtrl.afterOpen&&this.triggerCtrl.afterOpen()}},{key:"closeDropdown",value:function closeDropdown(){this.isDropdownOpen=!1,this.destroyPopper(),this.$document.off("click",this.documentClickHandler),this.triggerCtrl.afterClose&&this.triggerCtrl.afterClose()}},{key:"createPopper",value:function createPopper(){var placement=this.placement,center="center"===placement||!placement.includes("start")&&!placement.includes("end");["start","end"].indexOf(this.placement)>=0&&(placement="bottom-".concat(this.placement)),["center"].indexOf(this.placement)>=0&&(placement="bottom"),this.arrowElement&¢er&&this.arrowElement.setAttribute("x-arrow",""),this.popperElement.style.minWidth="".concat(this.getTriggerWidth(),"px"),this.popper=new popper.a(this.triggerElement,this.popperElement,{placement:placement,modifiers:{flip:{enabled:!1},keepTogether:{enabled:!0},preventOverflow:{boundariesElement:"viewport",escapeWithReference:!1}}})}},{key:"updatePopper",value:function updatePopper(){this.popper||this.createPopper(),this.popper.scheduleUpdate()}},{key:"destroyPopper",value:function destroyPopper(){this.popper&&(this.popper.destroy(),this.popper=null)}},{key:"getTriggerWidth",value:function getTriggerWidth(){return Math.max(this.triggerElement.offsetWidth,140)}}]),_default}(),bindings:{placement:"@?",arrow:"'))),ctrl.setDropdownMenu(element[0],element[0].querySelector(".".concat("oui-dropdown-menu__arrow")))}}})).component("ouiDropdownDivider",dropdown_divider_component.a).component("ouiDropdownGroup",dropdown_group_component.a).component("ouiDropdownItem",dropdown_item_component.a).directive("ouiDropdownTrigger",(function(){return{restrict:"AE",require:{dropdown:"^ouiDropdown"},controller:dropdown_trigger_controller_default,controllerAs:"$dropdownTriggerCtrl",bindToController:{text:"@",ariaLabel:"@?",disabled:"\n\n```\n\n### Transclude slots\n\n| Attribute | Description\n| ---- | ----\n| `` | definition label slot\n| `` | definition description slot, override attribute `description`\n| `` | definition footer slot\n\n```html\n\n Label\n Description\n Footer\n\n```\n\n## Component `oui-radio-group`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | Object | =? | no | n/a | n/a | current value of the radio\n| `name` | string | @? | yes | n/a | n/a | name attribute of the radio\n| `on-change` | function | & | no | n/a | n/a | handler triggered when model has changed\n\n### Attribute `on-change`\n\nModel will not be refreshed until the `on-change` callback hasn\'t returned. If you want to access the new model inside the `on-change` callback you need to use the `modelValue` variable as below.\n\n```html\n\n First\n Second\n Third\n\n```\n\n## Component `oui-radio-toggle-group`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | Object | =? | no | n/a | n/a | current value of the radio\n| `direction` | string | @? | no | `row`, `column` | `row` | flex direction of the radio\n| `name` | string | @? | yes | n/a | n/a | name attribute of the radio\n| `on-change` | function | & | no | n/a | n/a | handler triggered when model has changed\n\n### Attribute `on-change`\n\nModel will not be refreshed until the `on-change` callback hasn\'t returned. If you want to access the new model inside the `on-change` callback you need to use the `modelValue` variable as below.\n\n```html\n\n First\n Second\n Third\n\n```\n'},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__(11),__webpack_require__(22),__webpack_require__(12),__webpack_require__(69);var classCallCheck=__webpack_require__(8),classCallCheck_default=__webpack_require__.n(classCallCheck),createClass=__webpack_require__(9),createClass_default=__webpack_require__.n(createClass),component_utils=__webpack_require__(7),radio_controller_default=function(){function _default($scope,$element,$attrs,$timeout,$transclude){classCallCheck_default()(this,_default),this.$scope=$scope,this.$element=$element,this.$attrs=$attrs,this.$timeout=$timeout,this.$transclude=$transclude}return _default.$inject=["$scope","$element","$attrs","$timeout","$transclude"],createClass_default()(_default,[{key:"hasDescription",value:function hasDescription(){return this.$transclude.isSlotFilled("descriptionSlot")||this.description}},{key:"hasFooter",value:function hasFooter(){return!!this.thumbnail&&(this.$transclude.isSlotFilled("footerSlot")||this.footer)}},{key:"hasLabel",value:function hasLabel(){var isEmpty=!angular.element(this.$element[0].querySelector(".oui-radio__text")).text().trim().length;return this.$transclude.isSlotFilled("labelSlot")||!isEmpty}},{key:"$onInit",value:function $onInit(){var _this=this;Object(component_utils.a)(this,"disabled"),Object(component_utils.a)(this,"inline"),Object(component_utils.a)(this,"thumbnail"),Object(component_utils.a)(this,"required"),Object(component_utils.b)(this,"id","ouiRadio".concat(this.$scope.$id)),this.group=this.radioGroup||this.radioToggleGroup,this.group?(this.name=this.group.name,this.$scope.$watch("$ctrl.group.model",(function(value){_this.model=value}))):Object(component_utils.b)(this,"name",this.id)}},{key:"$postLink",value:function $postLink(){var _this2=this;this.$timeout((function(){_this2.$element.removeAttr("id").removeAttr("name").addClass(_this2.radioToggleGroup?"oui-radio-toggle":"oui-radio"),_this2.inline&&_this2.$element.addClass("oui-radio_inline"),_this2.thumbnail&&!_this2.radioToggleGroup&&_this2.$element.addClass("oui-radio_thumbnail")}))}},{key:"onRadioModelChange",value:function onRadioModelChange(event){var _this3=this;this.group&&this.group.setModelValue(event.modelValue),this.onChange&&this.$timeout((function(){return _this3.onChange(event)}))}}]),_default}(),js_radio=__webpack_require__(737),radio_component={require:{radioGroup:"?^ouiRadioGroup",radioToggleGroup:"?^ouiRadioToggleGroup"},template:__webpack_require__.n(js_radio).a,controller:radio_controller_default,bindings:{model:"=?",id:"@?",name:"@?",description:"@?",footer:"@?",value:"<",inline:"",controller:radio_group_controller_default,bindings:{name:"@?",model:"=?",onChange:"&"},transclude:!0},radio_toggle_group_component={template:"\n ",controller:radio_group_controller_default,bindings:{name:"@?",direction:"@?",dense:"@?",model:"=?",onChange:"&"},transclude:!0};angular.module("oui.radio",[]).component("ouiRadio",radio_component).component("ouiRadioGroup",radio_group_component).component("ouiRadioToggleGroup",radio_toggle_group_component);__webpack_exports__.a="oui.radio"},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__(1815),__webpack_require__(1817);var src=__webpack_require__(50),toConsumableArray=(__webpack_require__(60),__webpack_require__(69),__webpack_require__(11),__webpack_require__(13),__webpack_require__(33),__webpack_require__(23),__webpack_require__(12),__webpack_require__(122),__webpack_require__(214),__webpack_require__(14),__webpack_require__(92),__webpack_require__(93),__webpack_require__(15),__webpack_require__(17),__webpack_require__(65),__webpack_require__(111),__webpack_require__(20),__webpack_require__(121),__webpack_require__(24),__webpack_require__(329)),toConsumableArray_default=__webpack_require__.n(toConsumableArray),defineProperty=__webpack_require__(48),defineProperty_default=__webpack_require__.n(defineProperty),classCallCheck=__webpack_require__(8),classCallCheck_default=__webpack_require__.n(classCallCheck),createClass=__webpack_require__(9),createClass_default=__webpack_require__.n(createClass),component_utils=__webpack_require__(7),get=__webpack_require__(40),get_default=__webpack_require__.n(get);function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i=0?loadOptions.timeout:3e4,headers:_objectSpread(_objectSpread(_objectSpread({},null==loadOptions?void 0:loadOptions.headers),loadCursor&&defineProperty_default()({},paginationHeaders.cursor,loadCursor)),Number.isInteger(null==loadOptions?void 0:loadOptions.size)?loadOptions.size>0?defineProperty_default()({},paginationHeaders.size,loadOptions.size):null:defineProperty_default()({},paginationHeaders.size,25))});return this.onBeforeLoad&&(request=this.onBeforeLoad({request:request})),this.loading=!0,this.$http(request).then((function(response){if(response.config.url===_this5.load){var data=response.data,next=(0,response.headers)(paginationHeaders.nextCursor);response.nextCursor=next,_this5.loadCursor=next,_this5.items=loadCursor?[].concat(toConsumableArray_default()(_this5.items.filter((function(_ref4){return!_ref4.isSpinner}))),toConsumableArray_default()(data)):data||[],_this5.onLoad&&_this5.onLoad({request:request,response:response}),next&&(_this5.items=[].concat(toConsumableArray_default()(_this5.items),[{isSpinner:!0,isInView:!1}]))}})).catch((function(error){_this5.onError&&_this5.onError({request:request,error:error})})).finally((function(){_this5.loading=!1}))}},{key:"onSpinnerInView",value:function onSpinnerInView(spinner){spinner.isInView||(Object.assign(spinner,{isInView:!0}),this.loadItems())}}]),_default}(),js_select=__webpack_require__(702),select_default=__webpack_require__.n(js_select),merge=__webpack_require__(21),merge_default=__webpack_require__.n(merge),select_provider_default=function(){function _default(){classCallCheck_default()(this,_default),this.paginationHeaders={cursor:"X-Pagination-Cursor",nextCursor:"X-Pagination-Cursor-Next",size:"X-Pagination-Size"}}return createClass_default()(_default,[{key:"setPaginationHeaders",value:function setPaginationHeaders(paginationHeaders){return this.paginationHeaders=merge_default()(this.paginationHeaders,paginationHeaders),this}},{key:"$get",value:function $get(){return angular.copy({paginationHeaders:this.paginationHeaders})}}]),_default}(),choicesTpl=__webpack_require__(1821),headerTpl=__webpack_require__(1822),footerTpl=__webpack_require__(1823),matchTpl=__webpack_require__(1824),matchMultipleTpl=__webpack_require__(1825),noChoiceTpl=__webpack_require__(1826),selectTpl=__webpack_require__(1827),selectMultipleTpl=__webpack_require__(1828);angular.module("oui.select",["ngSanitize","ui.select","angular-inview",src.a]).run(["$templateCache",function($templateCache){$templateCache.put("oui-ui-select/choices.tpl.html",choicesTpl),$templateCache.put("oui-ui-select/footer.tpl.html",footerTpl),$templateCache.put("oui-ui-select/header.tpl.html",headerTpl),$templateCache.put("oui-ui-select/match.tpl.html",matchTpl),$templateCache.put("oui-ui-select/match-multiple.tpl.html",matchMultipleTpl),$templateCache.put("oui-ui-select/no-choice.tpl.html",noChoiceTpl),$templateCache.put("oui-ui-select/select.tpl.html",selectTpl),$templateCache.put("oui-ui-select/select-multiple.tpl.html",selectMultipleTpl)}]).provider("ouiSelectConfiguration",select_provider_default).directive("ouiSelect",(function(){return{require:{fieldCtrl:"?^^ouiField",selectCtrl:"ouiSelect"},controller:select_controller_default,controllerAs:"$ctrl",bindToController:!0,scope:{disabled:"MAX_THRESHOLD_MODE_button&&this.pageCount<=MAX_THRESHOLD_MODE_select?"select":"input"}},{key:"getPaginationTranslations",value:function getPaginationTranslations(){var translations=_objectSpread(_objectSpread({},this.config.translations),{},{splittedPageOfPageCount:this.config.translations.currentPageOfPageCount});return translations.ofNResults=translations.ofNResults.replace("{{totalItems}}",this.totalItems),translations.splittedPageOfPageCount=translations.splittedPageOfPageCount.replace("{{pageCount}}",this.pageCount).split("{{currentPage}}"),translations.currentPageOfPageCount=translations.currentPageOfPageCount.replace("{{currentPage}}",this.currentPage).replace("{{pageCount}}",this.pageCount),translations}},{key:"onPageChange",value:function onPageChange(page){this.currentPage=Number.isInteger(page)?page:this.getCurrentPage(),this.currentOffset=this.getCurrentOffset(this.currentPage),this.onChange({$event:{offset:this.currentOffset,pageSize:this.currentPageSize}})}},{key:"onPageSizeChange",value:function onPageSizeChange(pageSize){this.updatePaginationSelectors(pageSize),this.onChange({$event:{offset:this.currentOffset,pageSize:this.currentPageSize}})}},{key:"updatePaginationSelectors",value:function updatePaginationSelectors(pageSize){pageSize&&this.currentOffset&&this.totalItems&&(this.currentPageSize=pageSize||this.pageSize,this.pageSizeList=this.getPageSizeList(),this.currentPage=this.getCurrentPage(),this.pageCount=this.getPageCount(),this.pageRange=this.getPageRange(),this.mode=this.getPaginationMode(),this.translations=this.getPaginationTranslations())}},{key:"$onInit",value:function $onInit(){Object(component_utils.b)(this,"pageSize",this.config.pageSize),this.updatePaginationSelectors(this.pageSize)}},{key:"$postLink",value:function $postLink(){var _this2=this;this.$timeout((function(){return _this2.$element.addClass("oui-pagination")}))}},{key:"$onChanges",value:function $onChanges(_ref){var pageSize=_ref.pageSize;this.updatePaginationSelectors(pageSize?pageSize.currentValue:this.pageSize)}},{key:"isArrowsMode",get:function get(){return"arrows"===this.mode}}]),_default}(),pagination=__webpack_require__(708),pagination_component={template:__webpack_require__.n(pagination).a,bindings:{mode:"@?",currentOffset:"<",pageSize:"\n\n```\n\n### Transclude slots\n\n| Attribute | Description\n| ---- | ----\n| `` | definition label slot\n| `` | definition description slot, override attribute `description`\n| `` | definition footer slot\n\n```html\n\n Label\n Description\n Footer\n\n```\n"},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a="# Installation\n\n```js\nangular.module('myModule', ['oui.chips']);\n```\n\n# API\n\n## Component `oui-chips`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `items` | object | = | no | n/a | n/a | items bound to component\n| `closable` | boolean | \n\n```\n"},,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a='# Installation\n\n```js\nangular.module(\'myModule\', [\'oui.datagrid\']);\n```\n\n# Configuration\n\nThe datagrid can be globally configured with a provider.\n\n```js\nangular.module(\'myModule\', [\'oui.datagrid\'])\n config(ouiDatagridConfigurationProvider => {\n // default page size (when page-size attribute is not set)\n ouiDatagridConfigurationProvider.setPageSize(25);\n\n // default translations\n ouiDatagridConfigurationProvider.setTranslations({\n emptyPlaceholder: \'No data available\'\n });\n});\n```\n\n# API\n\n## Component `oui-datagrid`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `id` | string | @? | no | n/a | n/a | id of the datagrid\n| `page-size` | number | @? | no | n/a | `25` | maximum number of rows to show on each pages\n `page-size-max` | number | @? | no | n/a | n/a | max page size of the page sizes list\n| `page` | number | @? | no | n/a | `1` | page to display\n| `rows` | array | \n \n
You have selected {{ $selectedRows.length }} row(s).
\n
\n \n {{$rowIndex}}\n \n \n {{$row.firstName}} {{$row.lastName}}\n \n \n {{$value}}\n \n \n {{$value | date:shortDate}}\n \n \n Some action\n \n\n```\n\n### Actions\n\nThis will create a sticky column at the end of your datagrid.\nRows action menu will be automatically set to `compact` with a placement to `end`.\n\n```html\n\n \n \n \n {{$row.parents.mother.lastName}}, {{$row.parents.mother.firstName}}\n \n \n {{$row.parents.father.lastName}}, {{$row.parents.father.firstName}}\n \n \n {{$ctrl.label}}: {{$value}}\n \n \n \n {{$value|date:short}}\n \n \n \n \n \n \n \n \n\n```\n\n### Row detail template\n\nAdd an element `oui-datagrid-row-detail` to add row detail\nThe template inside the element will be placed at the bottom of each row, making it expandable.\n\n```html\n\n \n \n \n \n \n \n \n {{$row.email}}\n \n\n```\n\nAs many row details can be added as needed\n\n```html\n\n \n \n \n \n \n \n \n {{$row.email}}\n \n \n \n \n\n```\n\n### Attribute `on-row-select`\n\nWhen `selectable-rows` is provided, you can listen to checkboxes changes with the `on-row-select` event. It provides `$row` as the triggered row and `$rows` as the complete list of rows selected so far.\n\n```html\n\n [...]\n\n```\n\n## Attributes for async/remote data for `oui-datagrid`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `rows-loader` | function | &? | yes | n/a | n/a | async rows to load in the datagrid (returns a promise with all rows)\n| `row-loader` | function | &? | yes | n/a | n/a | async row details (returns a promise with details)\n\n### Remote data\n\nUse `rows-loader` to load remote data. The config of the datagrid is accessible with `$config` argument.\n\n```html\n\n \n \n \n \n \n\n```\n\n```js\nclass YourController {\n loadData ({ offset, pageSize, sort }) {\n\n // make what you want here\n\n return fetch(\'/path/to/your/api\', {\n method: \'POST\',\n body: { offset, pageSize, sort }\n }).then(response => response.json());\n }\n}\n```\n\nYour method must:\n\n * return a promise or a compatible object\n * this promise must resolve a value of this shape:\n\n```js\n{\n \'data\': page, // your data (an array)\n \'meta\': {\n totalCount // total number of items\n }\n}\n```\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `data` | array | \n \n \n \n \n \n\n```\n\n## Attributes for dynamic columns customization for `oui-datagrid`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `columns` | array | \n\n```\n\n## Attribute `columns-parameters`\n\n`columns-parameters` is an array describing all basic parameters of each column.\n\n```js\nconst columnsParameters = [{\n name: "column1"\n}, {\n name: "column2",\n hidden: true\n}];\n```\n\nThis example shows columns parameters where "column1" column has no particular parameter and "column2" column is hidden.\n\nThese parameters override properties defined in `oui-datagrid-column` or `columns` attribute.\n\n**Only `hidden` is supported for now.**\n\n### Attribute `on-columns-parameters-change`\n\n`on-columns-parameters-change` takes 2 parameters:\n\n- `id`: the id of the table\n- `columns`: the overrided parameters of each column. This value can be saved and then set in `columns-parameters`\n\n```html\n\n\n \x3c!-- A column can be tagged with "prevent-customization". --\x3e\n \n \n \n {{$row.parents.mother.lastName}}, {{$row.parents.mother.firstName}}\n \n \n {{$row.parents.father.lastName}}, {{$row.parents.father.firstName}}\n \n \n {{$value}}\n \n\n \x3c!-- To be customizable, a column without property (needed to be sortable, filterable, ...),\n must have a name. --\x3e\n \n Birth: {{$row.birth}}\n \n\n \x3c!-- A column without property nor name is not customizable. --\x3e\n \n Phone: {{$row.phone}}\n \n\n```\n\n## Component `oui-datagrid-column`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `title` | string | n/a | yes | n/a | n/a | column header\n| `footer` | string | n/a | yes | n/a | n/a | column footer\n| `type` | string | n/a | no | See below | `string` | define a column type\n| `property` | string | n/a | yes | n/a | `null` | property path used to get value from value\n| `sortable` | string | n/a | yes | `asc`, `desc` | `asc` | makes a column sortable and gives the order\n| `helper` | string | n/a | yes | n/a | null | adds a helper text next to column title\n| `filterable` | n/a | n/a | no | n/a | n/a | define a filterable column\n| `searchable` | n/a | n/a | no | n/a | n/a | define a searchable column\n| `type-options` | object | n/a | no | See below | `{}` | define options related to column type (see below)\n| `hidden` | boolean | n/a | no | `true`, `false` | `false` | if the column is hidden by default\n| `prevent-customization` | n/a | n/a | no | n/a | n/a | prevent a column to be customizable\n\n### Attribute `type-options`\n\n`type-options` is used to give options to feed criteria values. Example:\n\n```js\nconst typeOptions = {\n trueValue: \'Running\', // displayed value for true value when type = boolean\n falseValue: \'Down\', // displayed value for false value when type = boolean\n values: { // displayed values when type = options)\n nw: \'Network\',\n db: \'Database\',\n other: \'Other\'\n },\n operators: [ // constraint operators list for this field\n \'is\'\n ]\n};\n```\n\n### Types\n\nTypes are associated to operators. Here\'s the list of all availables types and operators:\n\n```js\n{\n \'boolean\': [\'is\', \'isNot\'],\n \'date\': [\'is\', \'isAfter\', \'isBefore\'],\n \'number\': [\'is\', \'smaller\', \'bigger\'],\n \'options\': [\'is\', \'isNot\'],\n \'string\': [\'contains\', \'containsNot\', \'startsWith\', \'endsWith\', \'is\', \'isNot\']\n}\n```\n\n## Service `ouiDatagridService`\n\n### refresh()\n\nDatagrid with local data can be refreshed by simply mutate `rows` value.\n\nTo refresh asynchronous data, you need to define an id for the datagrid and use `ouiDatagridService` to refresh it.\n\n```html\n\n Refresh datagrid with spinner\n\n\n\n [...]\n\n```\n\n```js\nclass YourController {\n constructor(ouiDatagridService) {\n this.ouiDatagridService = ouiDatagridService;\n }\n\n refreshDatagrid (datagridId, showSpinner) {\n this.ouiDatagridService.refresh(datagridId, showSpinner);\n }\n}\n```\n\n| Argument | Type | Default | Description\n| ---- | ---- | ---- | ----\n| `datagridId` | string | (mandatory) | the `id` of the datagrid\n| `showSpinner` | boolean | `false` | if you want to show the spinner while `rows-loader` is executed (like a first load)\n'},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__(91);var classCallCheck=__webpack_require__(8),classCallCheck_default=__webpack_require__.n(classCallCheck),createClass=__webpack_require__(9),createClass_default=__webpack_require__.n(createClass),component_utils=__webpack_require__(7),chips_controller_default=function(){function _default($attrs,$element,$timeout){classCallCheck_default()(this,_default),this.$attrs=$attrs,this.$element=$element,this.$timeout=$timeout}return _default.$inject=["$attrs","$element","$timeout"],createClass_default()(_default,[{key:"$onInit",value:function $onInit(){Object(component_utils.a)(this,"closable"),Object(component_utils.a)(this,"stacked"),Object(component_utils.b)(this,"item",[])}},{key:"$postLink",value:function $postLink(){var _this=this;this.$timeout((function(){return _this.$element.addClass("oui-chip__container")}))}},{key:"removeItem",value:function removeItem(index){var removed=angular.copy(this.items.splice(index,1)[0]),items=angular.copy(this.items);this.onRemove({items:items,removed:removed})}}]),_default}(),chips=__webpack_require__(694),chips_component={template:__webpack_require__.n(chips).a,controller:chips_controller_default,bindings:{items:"=",closable:" {\n // default translations\n ouiBackButtonConfigurationProvider.setTranslations({\n backTo: 'Back to',\n backToPreviousPage: 'Back to Previous page',\n });\n });\n```\n\n# API\n\n## Component `oui-back-button`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `id` | string | @? | yes | n/a | n/a | id attribute of the button/link\n| `name` | string | @? | yes | n/a | n/a | name attribute of the button/link\n| `aria-label` | string | @? | yes | n/a | n/a | accessibility label of the button/link\n| `href` | string | @? | yes | n/a | n/a | url of the return link\n| `state` | string | @? | yes | n/a | n/a | state of the return link\n| `state-params` | object | {\n const locale = 'fr';\n\n // default locale\n ouiCalendarConfigurationProvider.setLocale(locale);\n\n // default options\n ouiCalendarConfigurationProvider.setOptions({\n altInputClass: 'oui-calendar__control oui-calendar__control_alt',\n allowInput: true,\n dateFormat: 'Y-m-d',\n disableMobile: true,\n maxDate: null,\n minDate: null,\n mode: 'single',\n nextArrow: '',\n prevArrow: '',\n showMonths: 1\n });\n });\n```\n\n**Note**: See [Flatpickr Options](https://flatpickr.js.org/options/) for more information about the configuration and [Flatpickr Localization](https://flatpickr.js.org/localization/) for more information about the setup of your locale.\n\n# API\n\n## Component `oui-calendar`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | object | = | no | See [Supplying Dates](https://flatpickr.js.org/examples/#supplying-dates-for-flatpickr) | n/a | model bound to component\n| `id` | string | @? | yes | n/a | n/a | id attribute of the field\n| `name` | string | @? | yes | n/a | n/a | name attribute of the field\n| `placeholder` | string | @? | yes | n/a | n/a | placeholder text\n| `mode` | string | @? | yes | `single`, `multiple`, `range` | `single` | set a different selection mode for the calendar\n| `format` | string | @? | yes | See [Formatting Tokens](https://flatpickr.js.org/formatting/) | `Y-m-d` | format the date of the model\n| `alt-format` | string | @? | yes | See [Formatting Tokens](https://flatpickr.js.org/formatting/) | `Y-m-d` | format the date of the field. `format` is used if undefined\n| `append-to-body` | boolean | \n\n```\n"},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a="# Installation\n\n```js\nangular.module('myModule', ['oui.clipboard']);\n```\n\n# Configuration\n\nThe clipboard can be globally configured with a provider.\n\n```js\nangular.module('myModule', ['oui.clipboard'])\n .config(ouiClipboardConfigurationProvider => {\n // default translations\n ouiClipboardConfigurationProvider.setTranslations({\n copyToClipboardLabel: 'Copy to clipboard',\n copiedLabel: 'Copied',\n notSupported: 'Copy to clipboard not supported. Please copy the text manually'\n });\n });\n```\n\n# API\n\n## Component `oui-clipboard`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | object | = | no | n/a | n/a | model bound to component\n| `id` | string | @? | yes | n/a | n/a | id attribute of the input\n| `name` | string | @? | yes | n/a | n/a | name attribute of the input\n"},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a='# Installation\n\n```js\nangular.module(\'myModule\', [\'oui.collapsible\']);\n```\n\n# API\n\n## Component `oui-collapsible`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `heading` | string | @ | no | n/a | n/a | text of the heading\n| `group` | string | @ | no | n/a | n/a | group name for the accordion mode\n| `aria-label` | string | @? | yes | n/a | n/a | accessibility label\n| `expanded` | boolean | \n [...]\n\n\n [...]\n\n```\n\n### Attribute `on-toggle`\n\nIf you want to access the parameters inside `on-toggle` callback, you need to use `expanded` variable as below. It will return the corresponding value of the expanded state.\n\n```html\n\n [...]\n\n```\n'},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a="# Installation\n\n```js\nangular.module('myModule', ['oui.criteria']);\n```\n\n# Configuration\n\nThe pagination can be globally configured with a provider.\n\n```js\nangular.module('myModule', ['oui.criteria'])\n .config(ouiCriteriaAdderConfigurationProvider => {\n // default operators by type\n ouiCriteriaAdderConfigurationProvider.setOperatorsByType({\n 'boolean': ['is', 'isNot'],\n 'date': ['is', 'isAfter', 'isBefore'],\n 'number': ['is', 'smaller', 'bigger'],\n 'options': ['is', 'isNot'],\n 'string': ['contains', 'containsNot', 'startsWith', 'endsWith', 'is', 'isNot']\n });\n\n // default translations\n ouiCriteriaAdderConfigurationProvider.setTranslations({\n filter_label: 'Filter',\n column_label: 'Column',\n operator_label: 'Operator',\n\n operator_boolean_is: 'is',\n operator_boolean_isNot: 'is not',\n\n operator_string_contains: 'contains',\n operator_string_containsNot: 'does not contain',\n operator_string_startsWith: 'starts with',\n operator_string_endsWith: 'ends with',\n operator_string_is: 'is',\n operator_string_isNot: 'is not',\n\n operator_number_is: 'is',\n operator_number_smaller: 'is smaller than',\n operator_number_bigger: 'is bigger than',\n\n operator_date_is: 'is',\n operator_date_isBefore: 'is before',\n operator_date_isAfter: 'is after',\n\n operator_options_is: 'is',\n operator_options_isNot: 'is not',\n\n true_label: 'Yes',\n false_label: 'No',\n\n value_label: 'Value',\n submit_label: 'Add'\n });\n });\n```\n\n# API\n\n## Component `oui-criteria`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | object | = | no | n/a | n/a | model bound to component\n| `properties` | array | \n \n \n [...]\n \n\n```\n\n## Component `oui-dropdown-content`\n\n**Note**: It can be used as a `component` or an `attribute`.\n\n```html\n\n \n
\n [...]\n
\n
\n```\n\n## Component `oui-dropdown-group`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `label` | string | @ | yes | n/a | n/a | dropdown group label\n\n## Component `oui-dropdown-item`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `aria-label` | string | @? | yes | n/a | n/a | accessibility label\n| `href` | string | @? | no | n/a | n/a | href of the item\n| `state` | string | @? | yes | n/a | n/a | state of the item\n| `state-params` | object | {\n // default translations\n ouiDualListConfigurationProvider.setTranslations({\n source: {\n heading: 'Items to select',\n placeholder: 'No item to select',\n move: 'Add',\n moveAll: 'Add all',\n search: 'Search in source content'\n },\n target: {\n heading: 'Selected items',\n placeholder: 'No selected item',\n move: 'Remove',\n moveAll: 'Remove all',\n search: 'Search in target content'\n }\n });\n });\n```\n\n# API\n\n## Component `oui-dual-list`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `source` | array | = | no | n/a | n/a | source model bound to component\n| `target` | array | = | no | n/a | n/a | target model bound to component\n| `property` | string | @? | no | n/a | n/a | property path used to get value from item\n| `on-add` | function | & | no | n/a | n/a | handler triggered when an item is added\n| `on-remove` | function | & | no | n/a | n/a | handler triggered when an item is removed\n| `on-change` | function | & | no | n/a | n/a | handler triggered when items have changed\n\n**Note**: If `source` or `target` attribute are undefined, the loading will be automatically active.\n\n## Component `oui-dual-list-source`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `heading` | string | @? | yes | n/a | n/a | heading text\n| `placeholder` | string | @? | yes | n/a | n/a | placeholder text\n| `loading` | boolean | {\n // default translations\n ouiFieldConfigurationProvider.setTranslations({\n errors: {\n required: 'Mandatory.',\n number: 'Invalid number.',\n email: 'Invalid email.',\n min: 'Too low ({{min}} min).',\n max: 'Too high ({{max}} max).',\n minlength: 'Too short ({{minlength}} characters min).',\n maxlength: 'Too high ({{maxlength}} characters max).',\n pattern: 'Invalid format.'\n }\n });\n });\n```\n\n# API\n\n## Component `oui-field`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n|-----------------------|---------| ---- | ---- |-----------------------------------| ---- | ----\n| `label` | string | @? | no | n/a | n/a | field label\n| `label-popover` | string | @? | no | n/a | n/a | text to describe the field or give more information\n| `help-text` | string | @? | no | n/a | n/a | text to help fill the form field\n| `size` | string | @? | yes | `xs`, `s`, `m`, `l`, `xl`, `auto` | `auto` | field size\n| `force-error-display` | boolean | {\n // default translations\n ouiFileConfigurationProvider.setTranslations({\n attachmentsHeading: 'Attachment(s)',\n dropArea: 'Attach document(s) by drap and drop or',\n dropAreaSelector: 'select a file',\n filePlaceholder: 'Select a file...',\n fileSelector: 'Select file',\n filesSelector: 'Select file(s)...',\n maxsizeError: 'This file exceeds the size limit',\n removeFile: 'Remove file from selector'\n });\n\n // default units\n ouiFileConfigurationProvider.setUnits([\n { size: 1000000000, suffix: 'GB' },\n { size: 1000000, suffix: 'MB' },\n { size: 1000, suffix: 'KB' },\n { size: 1, suffix: 'B' }\n ]);\n });\n```\n\n# API\n\n## Component `oui-file`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `model` | array<file> | = | no | n/a | n/a | model bound to component\n| `id` | string | @? | yes | n/a | n/a | id attribute of form input\n| `name` | string | @? | yes | n/a | n/a | name attribute of form input\n| `placeholder` | string | @? | yes | n/a | n/a | placeholder text\n| `accept` | string | @? | yes | n/a | n/a | accept attribute of file input\n| `maxsize` | number | {\n // default translations\n ouiFormActionsConfigurationProvider.setTranslations({\n submit: 'Submit',\n cancel: 'Cancel'\n });\n});\n```\n\n# API\n\n## Component `oui-form-actions`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `submit-text` | string | @? | yes | n/a | `Submit` | submit button text\n| `cancel-text` | string | @? | yes | n/a | `Cancel` | cancel button text\n| `href` | string | @? | yes | n/a | n/a | link url on cancel\n| `disabled` | boolean | {\n // default translations\n ouiInlineAdderConfigurationProvider.setTranslations({\n ariaAddItem: 'Add Item',\n ariaRemoveItem: 'Remove Item'\n });\n});\n```\n\n# API\n\n## Component `oui-inline-adder`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `on-add` | function | & | no | n/a | n/a | handler triggered when a row is added\n| `on-remove` | function | & | no | n/a | n/a | handler triggered when a row is removed\n| `on-change` | function | & | no | n/a | n/a | handler triggered when rows have changed\n| `tooltip-add` | string | @? | yes | n/a | n/a | tooltip to display for the add button\n| `tooltip-delete` | string | @? | yes | n/a | n/a | tooltip to display for the delete button\n| `rows-limit` | integer | \n \n \n [...]\n \n \n\n```\n\n## Component `oui-inline-adder-field`\n\n| Attribute | Type | Binding | One-time binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `adaptive` | boolean | {\n // default translations\n ouiNavbarConfigurationProvider.setTranslations({\n notification: {\n errorInNotification: \'Oups, there’s an error!\',\n errorInNotificationDescription: \'We can’t initialize the menu.\',\n markRead: \'Mark as read\',\n markUnread: \'Mark as unread\',\n noNotification: \'You are all caught up!\',\n noNotificationDescription: \'You don’t have any notification.\'\n }\n });\n });\n```\n\n# API\n\n## Component `oui-navbar`\n\n| Attribute | Type | Binding | One-time Binding | Values | Default | Description\n| ---- | ---- | ---- | ---- | ---- | ---- | ----\n| `brand` | object | `.\n\n```json\n{\n "label": String,\n "title": String,\n "url": String,\n "iconClass": String\n}\n```\n\n#### Set a brand icon with an image\n\n- `iconAlt` **(optional)**: define `alt` of the brand icon.\n- `iconClass` **(optional)**: define `class` of the brand icon.\n- `iconSrc`: define `src` of the brand icon.\n\nThe brand icon will be set as a ``.\n\n```json\n{\n "label": String,\n "title": String,\n "url": String,\n "iconAlt": String,\n "iconClass": String,\n "iconSrc": String\n}\n```\n\n### Attributes `*-links`\n\n- `name`: define the navigation name of a menu.\n- `class` **(optional)**: define `class` of the menu item (only used for root links).\n- `label` **(optional)**: define `aria-label` of the menu item.\n- `title`: define the menu item text.\n- `headerTitle` **(optional)**: define the title of the menu header (default text is `title`).\n- `headerBreadcrumb` **(optional)**: define the breadcrumb of the menu header.\n- `headerTemplate` **(optional)**: define the HTML template of the menu header.\n- `isActive` **(optional)**: define if the menu item has active variant `.oui-navbar-menu__item_active`.\n- `acknowledged` **(optional)**: define if the menu item is acknowledged.\n\nIf `headerTemplate` is defined, `headerBreadcrumb` and `headerTitle` are not used.\n\n#### Set a menu item as a link\n\n- `url`: define `href` of the menu item.\n\nThe menu item will be set as a ``.\n\n```json\n{\n "name": String,\n "class": String,\n "label": String,\n "title": String,\n "url": String\n}\n```\n\n#### Set a menu item as a link for @uirouter/angularjs\n\n- `state`: define `ui-sref` of the menu item. The menu item will be set as a ``, `click` and `url` will be ignored.\n- `stateParams` **(optional)**: define parameters for `state`.\n\nThe menu item will be set as a ``.\n\n```json\n{\n "name": String,\n "class": String,\n "label": String,\n "title": String,\n "state": String,\n "stateParams": Object\n}\n```\n\n#### Set a menu item as a button with a click function\n\n- `click`: define `ng-click` of the menu item.\n\nThe menu item will be set as a `\n\n